PageRenderTime 369ms CodeModel.GetById 56ms RepoModel.GetById 1ms app.codeStats 0ms

/IZWebFileManager/FileView.cs

http://izwebfilemanager.googlecode.com/
C# | 982 lines | 790 code | 139 blank | 53 comment | 101 complexity | b79a648b9ad9c0468360df7086868be2 MD5 | raw file
  1. // Copyright (C) 2006 Igor Zelmanovich <izwebfilemanager@gmail.com>
  2. //
  3. // This program is free software; you can redistribute it and/or modify
  4. // it under the terms of the GNU General Public License as published by
  5. // the Free Software Foundation; either version 2 of the License, or
  6. // (at your option) any later version.
  7. //
  8. // This program is distributed in the hope that it will be useful,
  9. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. // GNU General Public License for more details.
  12. //
  13. // You should have received a copy of the GNU General Public License
  14. // along with this program; if not, write to the Free Software
  15. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  16. using System;
  17. using System.Collections.Generic;
  18. using System.ComponentModel;
  19. using System.Text;
  20. using System.Web;
  21. using System.Web.UI;
  22. using System.Web.UI.WebControls;
  23. using IZ.WebFileManager.Components;
  24. using System.IO;
  25. using System.Text.RegularExpressions;
  26. using System.Collections;
  27. using System.Drawing;
  28. using System.Globalization;
  29. using System.Collections.Specialized;
  30. namespace IZ.WebFileManager
  31. {
  32. [DefaultProperty ("Text")]
  33. [ToolboxData ("<{0}:FileView runat=\"server\" width=\"400\" height=\"300\"></{0}:FileView>")]
  34. public sealed class FileView : FileManagerControlBase
  35. {
  36. #region Constructors
  37. public FileView () : base () { InitializeDefaults (); }
  38. public FileView (FileManagerController controller) : base (controller) { InitializeDefaults (); }
  39. #endregion
  40. #region Fields
  41. BorderedPanelStyle _detailsColumnHeaderStyle;
  42. Style _editTextBoxStyle;
  43. Style _itemStyle;
  44. Style _selectedItemStyle;
  45. Style _detailsSortedColumnStyle;
  46. StringBuilder _initScript = new StringBuilder ();
  47. ContextMenu _contextMenu;
  48. ContextMenu _selectedItemsContextMenu;
  49. // control state fields
  50. FileViewRenderMode _view = FileViewRenderMode.Icons;
  51. SortMode _sort = SortMode.Name;
  52. SortDirection _sortDirection;
  53. bool _showInGroups;
  54. string _directory;
  55. FileManagerItemInfo _currentDirectory;
  56. #endregion
  57. #region Properties
  58. [PersistenceMode (PersistenceMode.InnerProperty)]
  59. [Category ("Appearance")]
  60. public BorderedPanelStyle DetailsColumnHeaderStyle {
  61. get {
  62. if (_detailsColumnHeaderStyle == null) {
  63. _detailsColumnHeaderStyle = new BorderedPanelStyle ();
  64. _detailsColumnHeaderStyle.Height = Unit.Pixel (17);
  65. _detailsColumnHeaderStyle.BackColor = Color.FromArgb (0xebeadb);
  66. _detailsColumnHeaderStyle.BackImageUrl = Page.ClientScript.GetWebResourceUrl (GetType (), "IZ.WebFileManager.resources.detailscolumnheader_RB.gif");
  67. _detailsColumnHeaderStyle.OuterBorderLeftImageUrl = Page.ClientScript.GetWebResourceUrl (GetType (), "IZ.WebFileManager.resources.detailscolumnheader_R.gif");
  68. _detailsColumnHeaderStyle.Font.Bold = false;
  69. _detailsColumnHeaderStyle.PaddingLeft = Unit.Pixel (4);
  70. _detailsColumnHeaderStyle.PaddingRight = Unit.Pixel (4);
  71. _detailsColumnHeaderStyle.PaddingTop = Unit.Pixel (3);
  72. _detailsColumnHeaderStyle.OuterBorderStyle = OuterBorderStyle.Left;
  73. _detailsColumnHeaderStyle.OuterBorderLeftWidth = Unit.Pixel (2);
  74. if (IsTrackingViewState)
  75. ((IStateManager) _detailsColumnHeaderStyle).TrackViewState ();
  76. }
  77. return _detailsColumnHeaderStyle;
  78. }
  79. }
  80. [PersistenceMode (PersistenceMode.InnerProperty)]
  81. [Category ("Appearance")]
  82. public Style DetailsSortedColumnStyle {
  83. get {
  84. if (_detailsSortedColumnStyle == null) {
  85. _detailsSortedColumnStyle = new Style ();
  86. _detailsSortedColumnStyle.BackColor = Color.FromArgb (0xF7F7F7);
  87. if (IsTrackingViewState)
  88. ((IStateManager) _detailsSortedColumnStyle).TrackViewState ();
  89. }
  90. return _detailsSortedColumnStyle;
  91. }
  92. }
  93. [PersistenceMode (PersistenceMode.InnerProperty)]
  94. [Category ("Appearance")]
  95. public Style SelectedItemStyle {
  96. get {
  97. if (_selectedItemStyle == null) {
  98. _selectedItemStyle = new Style ();
  99. _selectedItemStyle.ForeColor = Color.White;
  100. _selectedItemStyle.BackColor = Color.FromArgb (0x316AC5);
  101. if (IsTrackingViewState)
  102. ((IStateManager) _selectedItemStyle).TrackViewState ();
  103. }
  104. return _selectedItemStyle;
  105. }
  106. }
  107. [PersistenceMode (PersistenceMode.InnerProperty)]
  108. [Category ("Appearance")]
  109. public Style ItemStyle {
  110. get {
  111. if (_itemStyle == null) {
  112. _itemStyle = new Style ();
  113. if (IsTrackingViewState)
  114. ((IStateManager) _itemStyle).TrackViewState ();
  115. }
  116. return _itemStyle;
  117. }
  118. }
  119. [PersistenceMode (PersistenceMode.InnerProperty)]
  120. [Category ("Appearance")]
  121. public Style EditTextBoxStyle {
  122. get {
  123. if (_editTextBoxStyle == null) {
  124. _editTextBoxStyle = new Style ();
  125. _editTextBoxStyle.BorderStyle = BorderStyle.Solid;
  126. _editTextBoxStyle.BorderWidth = Unit.Pixel (1);
  127. _editTextBoxStyle.BorderColor = Color.Black;
  128. _editTextBoxStyle.Font.Names = new string [] { "Tahoma", "Verdana", "Geneva", "Arial", "Helvetica", "sans-serif" };
  129. _editTextBoxStyle.Font.Size = FontUnit.Parse ("11px", null);
  130. if (IsTrackingViewState)
  131. ((IStateManager) _editTextBoxStyle).TrackViewState ();
  132. }
  133. return _editTextBoxStyle;
  134. }
  135. }
  136. [Bindable (true)]
  137. [Category ("Data")]
  138. [DefaultValue ("[0]/")]
  139. [Localizable (false)]
  140. [Themeable (false)]
  141. public string Directory {
  142. get { return _directory == null ? "[0]/" : _directory; }
  143. internal set {
  144. _directory = value;
  145. _currentDirectory = null;
  146. }
  147. }
  148. string [] selectedItemsStr;
  149. FileManagerItemInfo [] selectedItems;
  150. public override FileManagerItemInfo [] SelectedItems {
  151. get {
  152. if (selectedItems == null) {
  153. if (selectedItemsStr == null || selectedItemsStr.Length == 0)
  154. selectedItems = new FileManagerItemInfo [0];
  155. else {
  156. ArrayList selectedItemsArray = new ArrayList ();
  157. FileManagerItemInfo dir = GetCurrentDirectory ();
  158. foreach (string name in selectedItemsStr) {
  159. FileManagerItemInfo itemInfo = ResolveFileManagerItemInfo (name);
  160. selectedItemsArray.Add (itemInfo);
  161. }
  162. selectedItems = (FileManagerItemInfo []) selectedItemsArray.ToArray (typeof (FileManagerItemInfo));
  163. }
  164. }
  165. return selectedItems;
  166. }
  167. }
  168. public override FileManagerItemInfo CurrentDirectory {
  169. get {
  170. if (_currentDirectory == null)
  171. _currentDirectory = Controller.ResolveFileManagerItemInfo (Directory);
  172. return _currentDirectory;
  173. }
  174. }
  175. [Bindable (true)]
  176. [Category ("Appearance")]
  177. [DefaultValue (false)]
  178. [Localizable (false)]
  179. private bool ShowInGroups {
  180. get { return _showInGroups; }
  181. set { _showInGroups = value; }
  182. }
  183. [Bindable (true)]
  184. [Category ("Appearance")]
  185. [DefaultValue (FileViewRenderMode.Icons)]
  186. [Localizable (false)]
  187. public FileViewRenderMode View {
  188. get { return _view; }
  189. set { _view = value; }
  190. }
  191. [Bindable (true)]
  192. [Category ("Appearance")]
  193. [DefaultValue (SortMode.Name)]
  194. [Localizable (false)]
  195. public SortMode Sort {
  196. get { return _sort; }
  197. set { _sort = value; }
  198. }
  199. [Bindable (true)]
  200. [Category ("Appearance")]
  201. [DefaultValue (SortDirection.Ascending)]
  202. [Localizable (false)]
  203. public SortDirection SortDirection {
  204. get { return _sortDirection; }
  205. set { _sortDirection = value; }
  206. }
  207. [Bindable (true)]
  208. [Category ("Behavior")]
  209. [DefaultValue (false)]
  210. [Localizable (false)]
  211. public bool UseLinkToOpenItem {
  212. get { return (bool) (ViewState ["UseLinkToOpenItem"] ?? false); }
  213. set { ViewState ["UseLinkToOpenItem"] = value; }
  214. }
  215. [Bindable (true)]
  216. [Category ("Behavior")]
  217. [DefaultValue ("_blank")]
  218. [Localizable (false)]
  219. public string LinkToOpenItemTarget {
  220. get { return (string) (ViewState ["LinkToOpenItemTarget"] ?? "_blank"); }
  221. set { ViewState ["LinkToOpenItemTarget"] = value; }
  222. }
  223. internal string LinkToOpenItemClass {
  224. get { return "linkToOpenItem" + ClientID; }
  225. }
  226. #endregion
  227. #region Methods
  228. private void InitializeDefaults () {
  229. LinkToOpenItemTarget = "_blank";
  230. }
  231. protected internal override string RenderContents () {
  232. StringBuilder sb = new StringBuilder ();
  233. HtmlTextWriter writer = new HtmlTextWriter (new StringWriter (sb, null));
  234. RenderContents (writer);
  235. return sb.ToString ();
  236. }
  237. protected override void RenderContents (HtmlTextWriter writer) {
  238. if (DesignMode)
  239. return;
  240. DirectoryInfo directoryInfo = GetCurrentDirectory ().Directory;
  241. FileViewRender render = FileViewRender.GetRender (this);
  242. DirectoryProvider provider = new DirectoryProvider (directoryInfo, Sort, SortDirection);
  243. render.RenderBeginList (writer);
  244. //FileViewItem upDirectory = new FileViewUpDirectoryItem(directoryInfo.Parent, this);
  245. //render.RenderItem(output, upDirectory);
  246. //if (ShowInGroups) {
  247. // GroupInfo [] groups = provider.GetGroups ();
  248. // foreach (GroupInfo group in groups) {
  249. // render.RenderBeginGroup (writer, group);
  250. // foreach (FileSystemInfo fsi in provider.GetFileSystemInfos (group)) {
  251. // FileViewItem item = new FileViewItem (fsi, this);
  252. // render.RenderItem (writer, item);
  253. // }
  254. // render.RenderEndGroup (writer, group);
  255. // }
  256. //}
  257. //else {
  258. foreach (FileSystemInfo fsi in provider.GetFileSystemInfos ()) {
  259. FileViewItem item = new FileViewItem (fsi, this);
  260. if (!ShowHiddenFilesAndFolders && item.Hidden)
  261. continue;
  262. render.RenderItem (writer, item);
  263. }
  264. //}
  265. render.RenderEndList (writer);
  266. RenderInitScript (writer);
  267. }
  268. private void RenderInitScript (HtmlTextWriter output) {
  269. output.AddAttribute (HtmlTextWriterAttribute.Id, ClientID + "_InitScript");
  270. output.AddStyleAttribute (HtmlTextWriterStyle.Display, "none");
  271. output.AddStyleAttribute (HtmlTextWriterStyle.Visibility, "hidden");
  272. output.AddStyleAttribute (HtmlTextWriterStyle.Position, "absolute");
  273. output.RenderBeginTag (HtmlTextWriterTag.Div);
  274. output.Write (_initScript.ToString ());
  275. output.Write (FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".Items = new Array(" + String.Join (",", (string []) itemIds.ToArray (typeof (string))) + ");\r\n");
  276. output.Write (FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".ClearSelectedItems();\r\n");
  277. output.RenderEndTag ();
  278. }
  279. internal override FileManagerItemInfo GetCurrentDirectory () {
  280. return Controller.ResolveFileManagerItemInfo (Directory);
  281. }
  282. int _itemIndex;
  283. ArrayList itemIds = new ArrayList ();
  284. internal void RenderItemBeginTag (HtmlTextWriter output, FileViewItem item) {
  285. string id = ClientID + "_Item_" + _itemIndex;
  286. item.ClientID = id;
  287. int fileType = -2; //is Directory
  288. if (item.FileSystemInfo is FileInfo) {
  289. FileInfo file = (FileInfo) item.FileSystemInfo;
  290. FileType ft = Controller.GetFileType (file);
  291. if (ft != null)
  292. fileType = Controller.FileTypes.IndexOf (ft);
  293. else
  294. fileType = -1;
  295. }
  296. itemIds.Add (id);
  297. output.AddAttribute (HtmlTextWriterAttribute.Id, id);
  298. output.RenderBeginTag (HtmlTextWriterTag.Div);
  299. // trace init script
  300. _initScript.AppendLine ("var " + id + " = document.getElementById('" + id + "');");
  301. _initScript.AppendLine (FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".InitItem(" + id + ",'" + FileManagerController.EncodeURIComponent (item.Name) + "'," + (item.IsDirectory ? "true" : "false") + "," + (item.CanBeRenamed ? "true" : "false") + "," + "false" + "," + fileType + ");");
  302. _itemIndex++;
  303. }
  304. [System.Diagnostics.CodeAnalysis.SuppressMessage ("Microsoft.Performance", "CA1822:MarkMembersAsStatic")]
  305. internal void RenderItemEndTag (HtmlTextWriter output) {
  306. output.RenderEndTag ();
  307. }
  308. public override void RenderBeginTag (HtmlTextWriter writer) {
  309. if (writer == null)
  310. throw new ArgumentNullException ("writer");
  311. writer.AddStyleAttribute (HtmlTextWriterStyle.Position, "absolute");
  312. writer.AddStyleAttribute (HtmlTextWriterStyle.ZIndex, "100");
  313. writer.AddStyleAttribute (HtmlTextWriterStyle.Visibility, "hidden");
  314. writer.AddAttribute (HtmlTextWriterAttribute.Id, ClientID + "_ContextMenu");
  315. writer.RenderBeginTag (HtmlTextWriterTag.Div);
  316. _contextMenu.RenderControl (writer);
  317. writer.RenderEndTag ();
  318. writer.AddStyleAttribute (HtmlTextWriterStyle.Position, "absolute");
  319. writer.AddStyleAttribute (HtmlTextWriterStyle.ZIndex, "100");
  320. writer.AddStyleAttribute (HtmlTextWriterStyle.Visibility, "hidden");
  321. writer.AddAttribute (HtmlTextWriterAttribute.Id, ClientID + "_SelectedItemsContextMenu");
  322. writer.RenderBeginTag (HtmlTextWriterTag.Div);
  323. _selectedItemsContextMenu.RenderControl (writer);
  324. writer.RenderEndTag ();
  325. RenderFocusTextBox (writer);
  326. RenderEditTextBox (writer);
  327. base.RenderBeginTag (writer);
  328. }
  329. void RenderEditTextBox (HtmlTextWriter writer) {
  330. writer.AddStyleAttribute (HtmlTextWriterStyle.Position, "absolute");
  331. writer.AddStyleAttribute (HtmlTextWriterStyle.ZIndex, "100");
  332. writer.AddStyleAttribute (HtmlTextWriterStyle.Visibility, "hidden");
  333. writer.AddStyleAttribute (HtmlTextWriterStyle.Display, "none");
  334. writer.AddAttribute (HtmlTextWriterAttribute.Id, Controller.ClientID + "_TextBox");
  335. writer.RenderBeginTag (HtmlTextWriterTag.Input);
  336. writer.RenderEndTag ();
  337. }
  338. private void RenderFocusTextBox (HtmlTextWriter writer) {
  339. writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0px");
  340. writer.AddStyleAttribute (HtmlTextWriterStyle.Width, "1px");
  341. writer.AddStyleAttribute (HtmlTextWriterStyle.BackgroundColor, "transparent");
  342. writer.AddStyleAttribute (HtmlTextWriterStyle.Position, "absolute");
  343. writer.AddAttribute (HtmlTextWriterAttribute.Type, "text");
  344. writer.AddAttribute (HtmlTextWriterAttribute.Id, ClientID + "_Focus");
  345. writer.RenderBeginTag (HtmlTextWriterTag.Input);
  346. writer.RenderEndTag ();
  347. }
  348. internal override FileManagerItemInfo ResolveFileManagerItemInfo (string path) {
  349. string fileManagerPath;
  350. if (String.IsNullOrEmpty (path))
  351. fileManagerPath = Directory;
  352. else if (path [0] == '[' || path [0] == '/')
  353. fileManagerPath = path;
  354. else
  355. fileManagerPath = VirtualPathUtility.AppendTrailingSlash (Directory) + path;
  356. return Controller.ResolveFileManagerItemInfo (fileManagerPath);
  357. }
  358. protected override object SaveViewState () {
  359. object [] states = new object [6];
  360. states [0] = base.SaveViewState ();
  361. if (_detailsColumnHeaderStyle != null)
  362. states [1] = ((IStateManager) _detailsColumnHeaderStyle).SaveViewState ();
  363. if (_detailsSortedColumnStyle != null)
  364. states [2] = ((IStateManager) _detailsSortedColumnStyle).SaveViewState ();
  365. if (_editTextBoxStyle != null)
  366. states [3] = ((IStateManager) _editTextBoxStyle).SaveViewState ();
  367. if (_itemStyle != null)
  368. states [4] = ((IStateManager) _itemStyle).SaveViewState ();
  369. if (_selectedItemStyle != null)
  370. states [5] = ((IStateManager) _selectedItemStyle).SaveViewState ();
  371. for (int i = 0; i < states.Length; i++) {
  372. if (states [i] != null)
  373. return states;
  374. }
  375. return null;
  376. }
  377. protected override void LoadViewState (object savedState) {
  378. if (savedState == null)
  379. return;
  380. object [] states = (object []) savedState;
  381. base.LoadViewState (states [0]);
  382. if (states [1] != null)
  383. ((IStateManager) DetailsColumnHeaderStyle).LoadViewState (states [1]);
  384. if (states [2] != null)
  385. ((IStateManager) DetailsSortedColumnStyle).LoadViewState (states [2]);
  386. if (states [3] != null)
  387. ((IStateManager) EditTextBoxStyle).LoadViewState (states [3]);
  388. if (states [4] != null)
  389. ((IStateManager) ItemStyle).LoadViewState (states [4]);
  390. if (states [5] != null)
  391. ((IStateManager) SelectedItemStyle).LoadViewState (states [5]);
  392. }
  393. protected override void TrackViewState () {
  394. base.TrackViewState ();
  395. if (_detailsColumnHeaderStyle != null)
  396. ((IStateManager) _detailsColumnHeaderStyle).TrackViewState ();
  397. if (_detailsSortedColumnStyle != null)
  398. ((IStateManager) _detailsSortedColumnStyle).TrackViewState ();
  399. if (_editTextBoxStyle != null)
  400. ((IStateManager) _editTextBoxStyle).TrackViewState ();
  401. if (_itemStyle != null)
  402. ((IStateManager) _itemStyle).TrackViewState ();
  403. if (_selectedItemStyle != null)
  404. ((IStateManager) _selectedItemStyle).TrackViewState ();
  405. }
  406. protected override object SaveControlState () {
  407. RegisterHiddenField ("View", View.ToString ());
  408. RegisterHiddenField ("Sort", Sort.ToString ());
  409. RegisterHiddenField ("SortDirection", SortDirection.ToString ());
  410. RegisterHiddenField ("ShowInGroups", ShowInGroups ? "true" : "false");
  411. RegisterHiddenField ("Directory", FileManagerController.EncodeURIComponent (CurrentDirectory.FileManagerPath));
  412. RegisterHiddenField ("SelectedItems", "");
  413. return new object [] { base.SaveControlState () };
  414. }
  415. protected override void LoadControlState (object savedState) {
  416. base.LoadControlState (((object []) savedState) [0]);
  417. View = (FileViewRenderMode) Enum.Parse (typeof (FileViewRenderMode), GetValueFromHiddenField ("View"));
  418. Sort = (SortMode) Enum.Parse (typeof (SortMode), GetValueFromHiddenField ("Sort"));
  419. SortDirection = (SortDirection) Enum.Parse (typeof (SortDirection), GetValueFromHiddenField ("SortDirection"));
  420. ShowInGroups = bool.Parse (GetValueFromHiddenField ("ShowInGroups"));
  421. Directory = HttpUtility.UrlDecode (GetValueFromHiddenField ("Directory"));
  422. string [] selectedItemsEncoded = GetValueFromHiddenField ("SelectedItems").Split (new char [] { ':' }, StringSplitOptions.RemoveEmptyEntries);
  423. ArrayList selectedItemsArray = new ArrayList ();
  424. foreach (string pathEncoded in selectedItemsEncoded) {
  425. string path = HttpUtility.UrlDecode (pathEncoded);
  426. selectedItemsArray.Add (path);
  427. }
  428. selectedItemsStr = (string []) selectedItemsArray.ToArray (typeof (string));
  429. }
  430. string GetInitInstanceScript () {
  431. StringBuilder sb = new StringBuilder ();
  432. string fileView = FileManagerController.ClientScriptObjectNamePrefix + ClientID;
  433. sb.AppendLine ("var " + fileView + "=new FileView('" + ClientID + "','" + Controller.ClientID + "','" + ItemStyle.RegisteredCssClass + "','" + SelectedItemStyle.RegisteredCssClass + "','" + EditTextBoxStyle.RegisteredCssClass + "');");
  434. sb.AppendLine (fileView + ".Initialize();");
  435. return sb.ToString ();
  436. }
  437. protected override void OnInit (EventArgs e) {
  438. base.OnInit (e);
  439. Page.RegisterRequiresControlState (this);
  440. }
  441. protected override void OnPreRender (EventArgs e) {
  442. base.OnPreRender (e);
  443. Page.Header.StyleSheet.RegisterStyle (ItemStyle, this);
  444. Page.Header.StyleSheet.RegisterStyle (SelectedItemStyle, this);
  445. Page.Header.StyleSheet.RegisterStyle (EditTextBoxStyle, this);
  446. if (UseLinkToOpenItem) {
  447. Style linkStyle = new Style ();
  448. linkStyle.Font.Underline = false;
  449. Page.Header.StyleSheet.CreateStyleRule (linkStyle, this, "a." + LinkToOpenItemClass);
  450. Style hoverLinkStyle = new Style ();
  451. hoverLinkStyle.Font.Underline = true;
  452. Page.Header.StyleSheet.CreateStyleRule (hoverLinkStyle, this, "a." + LinkToOpenItemClass + ":hover");
  453. Style itemLinkStyle = new Style ();
  454. itemLinkStyle.ForeColor = ItemStyle.ForeColor;
  455. if (itemLinkStyle.ForeColor == Color.Empty)
  456. itemLinkStyle.ForeColor = ForeColor;
  457. Page.Header.StyleSheet.CreateStyleRule (itemLinkStyle, this, "." + ItemStyle.RegisteredCssClass + " a." + LinkToOpenItemClass);
  458. Style selectedItemLinkStyle = new Style ();
  459. selectedItemLinkStyle.ForeColor = SelectedItemStyle.ForeColor;
  460. if (selectedItemLinkStyle.ForeColor == Color.Empty)
  461. selectedItemLinkStyle.ForeColor = ForeColor;
  462. Page.Header.StyleSheet.CreateStyleRule (selectedItemLinkStyle, this, "." + SelectedItemStyle.RegisteredCssClass + " a." + LinkToOpenItemClass);
  463. }
  464. Page.ClientScript.RegisterClientScriptResource (typeof (FileView), "IZ.WebFileManager.resources.FileView.js");
  465. Page.ClientScript.RegisterStartupScript (typeof (FileView), ClientID, GetInitInstanceScript (), true);
  466. CreateContextMenu ();
  467. CreateSelectedItemsContextMenu ();
  468. }
  469. internal string GetSortEventReference (SortMode sort) {
  470. return Controller.GetCommandEventReference (this, FileManagerCommands.FileViewSort.ToString (), "'" + sort.ToString () + "'");
  471. }
  472. protected override void AddAttributesToRender (HtmlTextWriter writer) {
  473. base.AddAttributesToRender (writer);
  474. writer.AddAttribute (HtmlTextWriterAttribute.Onclick, FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".SetFocus()");
  475. Controller.AddDirectionAttribute (writer);
  476. writer.AddStyleAttribute (HtmlTextWriterStyle.Position, "relative");
  477. writer.AddStyleAttribute (HtmlTextWriterStyle.ZIndex, "20");
  478. writer.AddStyleAttribute (HtmlTextWriterStyle.Overflow, "auto");
  479. }
  480. void CreateContextMenu () {
  481. _contextMenu = new ContextMenu ();
  482. _contextMenu.EnableViewState = false;
  483. _contextMenu.StaticEnableDefaultPopOutImage = false;
  484. _contextMenu.DynamicEnableDefaultPopOutImage = false;
  485. _contextMenu.Orientation = Orientation.Horizontal;
  486. _contextMenu.SkipLinkText = String.Empty;
  487. _contextMenu.StaticItemTemplate = new CompiledTemplateBuilder (new BuildTemplateMethod (CreateContextMenuRootItem));
  488. _contextMenu.DynamicItemTemplate = new CompiledTemplateBuilder (new BuildTemplateMethod (CreateContextMenuPopupItem));
  489. SetContextMenuStyle (_contextMenu);
  490. Controls.Add (_contextMenu);
  491. // Root
  492. MenuItem root = new MenuItem ();
  493. root.Text = "_contextMenu";
  494. root.NavigateUrl = "javascript: return;";
  495. _contextMenu.Items.Add (root);
  496. string clientClickFunction = "javascript:" + FileManagerController.ClientScriptObjectNamePrefix + Controller.ClientID + ".On{0}(" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ", '{1}');return false;";
  497. // View
  498. MenuItem itemView = new MenuItem ();
  499. itemView.Text = GetResourceString ("View", "View");
  500. itemView.Value = "View";
  501. itemView.NavigateUrl = "javascript: return;";
  502. root.ChildItems.Add (itemView);
  503. // Icons
  504. MenuItem itemViewIcons = new MenuItem ();
  505. itemViewIcons.Text = GetResourceString ("Icons", "Icons");
  506. itemViewIcons.Value = "Icons";
  507. itemViewIcons.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewChangeView, FileViewRenderMode.Icons);
  508. itemView.ChildItems.Add (itemViewIcons);
  509. // Details
  510. MenuItem itemViewDetails = new MenuItem ();
  511. itemViewDetails.Text = GetResourceString ("Details", "Details");
  512. itemViewDetails.Value = "Details";
  513. itemViewDetails.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewChangeView, FileViewRenderMode.Details);
  514. itemView.ChildItems.Add (itemViewDetails);
  515. if (Controller.SupportThumbnails) {
  516. // Thumbnails
  517. MenuItem itemViewThumbnails = new MenuItem ();
  518. itemViewThumbnails.Text = GetResourceString ("Thumbnails", "Thumbnails");
  519. itemViewThumbnails.Value = "Thumbnails";
  520. itemViewThumbnails.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewChangeView, FileViewRenderMode.Thumbnails);
  521. itemView.ChildItems.Add (itemViewThumbnails);
  522. }
  523. root.ChildItems.Add (new MenuItem ("__separator__", "__separator__", null, "javascript: return;"));
  524. // Arrange Icons By
  525. MenuItem itemArrangeIconsBy = new MenuItem ();
  526. itemArrangeIconsBy.Text = GetResourceString ("Arrange_Icons_By", "Arrange Icons By");
  527. itemArrangeIconsBy.Value = "Arrange_Icons_By";
  528. itemArrangeIconsBy.NavigateUrl = "javascript: return;";
  529. root.ChildItems.Add (itemArrangeIconsBy);
  530. // Name
  531. MenuItem itemArrangeIconsByName = new MenuItem ();
  532. itemArrangeIconsByName.Text = GetResourceString ("Name", "Name");
  533. itemArrangeIconsByName.Value = "Name";
  534. itemArrangeIconsByName.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewSort, SortMode.Name);
  535. itemArrangeIconsBy.ChildItems.Add (itemArrangeIconsByName);
  536. // Size
  537. MenuItem itemArrangeIconsBySize = new MenuItem ();
  538. itemArrangeIconsBySize.Text = GetResourceString ("Size", "Size");
  539. itemArrangeIconsBySize.Value = "Size";
  540. itemArrangeIconsBySize.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewSort, SortMode.Size);
  541. itemArrangeIconsBy.ChildItems.Add (itemArrangeIconsBySize);
  542. // Type
  543. MenuItem itemArrangeIconsByType = new MenuItem ();
  544. itemArrangeIconsByType.Text = GetResourceString ("Type", "Type");
  545. itemArrangeIconsByType.Value = "Type";
  546. itemArrangeIconsByType.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewSort, SortMode.Type);
  547. itemArrangeIconsBy.ChildItems.Add (itemArrangeIconsByType);
  548. // Modified
  549. MenuItem itemArrangeIconsByModified = new MenuItem ();
  550. itemArrangeIconsByModified.Text = GetResourceString ("Date_Modified", "Date Modified");
  551. itemArrangeIconsByModified.Value = "Modified";
  552. itemArrangeIconsByModified.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewSort, SortMode.Modified);
  553. itemArrangeIconsBy.ChildItems.Add (itemArrangeIconsByModified);
  554. // Refresh
  555. MenuItem itemRefresh = new MenuItem ();
  556. itemRefresh.Text = Controller.GetResourceString ("Refresh", "Refresh");
  557. itemRefresh.Value = "Refresh";
  558. itemRefresh.ImageUrl = Controller.GetToolbarImage (ToolbarImages.Refresh);
  559. itemRefresh.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.Refresh, "");
  560. root.ChildItems.Add (itemRefresh);
  561. root.ChildItems.Add (new MenuItem ("__separator__", "__separator__", null, "javascript: return;"));
  562. // New
  563. MenuItem itemNew = new MenuItem ();
  564. itemNew.Text = GetResourceString ("Create", "New");
  565. itemNew.Value = "Create";
  566. itemNew.NavigateUrl = "javascript: return;";
  567. itemNew.Enabled = !ReadOnly;
  568. root.ChildItems.Add (itemNew);
  569. if (!ReadOnly) {
  570. // New Folder
  571. MenuItem itemFolder = new MenuItem ();
  572. itemFolder.Text = GetResourceString ("New_Folder", "Folder");
  573. itemFolder.Value = "New_Folder";
  574. itemFolder.ImageUrl = Controller.GetFolderSmallImage ();
  575. itemFolder.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.NewFolder, "");
  576. itemNew.ChildItems.Add (itemFolder);
  577. itemNew.ChildItems.Add (new MenuItem ("__separator__", "__separator__", null, "javascript: return;"));
  578. for (int i = 0; i < Templates.Count; i++) {
  579. NewDocumentTemplate template = Templates [i];
  580. MenuItem item = new MenuItem ();
  581. item.Text = template.Name;
  582. item.Value = "Template" + i;
  583. if (template.SmallImageUrl.Length > 0)
  584. item.ImageUrl = ResolveUrl (template.SmallImageUrl);
  585. else if (template.MasterFileUrl.Length > 0)
  586. item.ImageUrl = Controller.GetFileSmallImage (new FileInfo (Page.MapPath (template.MasterFileUrl)));
  587. else
  588. item.ImageUrl = Controller.GetFileSmallImage ();
  589. item.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.NewDocument, Templates.IndexOf (template));
  590. itemNew.ChildItems.Add (item);
  591. }
  592. }
  593. // client script
  594. StringBuilder sb = new StringBuilder ();
  595. sb.AppendLine ("function " + ClientID + "_ShowContextMenu(x,y) {");
  596. sb.AppendLine ("var bulletImgSrc = '" + Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.Bullet.gif") + "';");
  597. sb.AppendLine ("var emptyImgSrc = '" + Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.Empty.gif") + "';");
  598. sb.AppendLine ("var nameImg = WebForm_GetElementById('" + ClientID + "CMIMGName');");
  599. sb.AppendLine ("var sizeImg = WebForm_GetElementById('" + ClientID + "CMIMGSize');");
  600. sb.AppendLine ("var typeImg = WebForm_GetElementById('" + ClientID + "CMIMGType');");
  601. sb.AppendLine ("var modifiedImg = WebForm_GetElementById('" + ClientID + "CMIMGModified');");
  602. sb.AppendLine ("var iconsImg = WebForm_GetElementById('" + ClientID + "CMIMGIcons');");
  603. sb.AppendLine ("var detailsImg = WebForm_GetElementById('" + ClientID + "CMIMGDetails');");
  604. if (Controller.SupportThumbnails)
  605. sb.AppendLine ("var thumbnailsImg = WebForm_GetElementById('" + ClientID + "CMIMGThumbnails');");
  606. sb.AppendLine ("nameImg.src = emptyImgSrc;");
  607. sb.AppendLine ("sizeImg.src = emptyImgSrc;");
  608. sb.AppendLine ("typeImg.src = emptyImgSrc;");
  609. sb.AppendLine ("modifiedImg.src = emptyImgSrc;");
  610. sb.AppendLine ("iconsImg.src = emptyImgSrc;");
  611. sb.AppendLine ("detailsImg.src = emptyImgSrc;");
  612. if (Controller.SupportThumbnails)
  613. sb.AppendLine ("thumbnailsImg.src = emptyImgSrc;");
  614. sb.AppendLine ("var sort = " + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".GetSort();");
  615. sb.AppendLine ("switch(sort) {");
  616. sb.AppendLine ("case '" + SortMode.Name + "':");
  617. sb.AppendLine ("nameImg.src = bulletImgSrc;");
  618. sb.AppendLine ("break;");
  619. sb.AppendLine ("case '" + SortMode.Type + "':");
  620. sb.AppendLine ("typeImg.src = bulletImgSrc;");
  621. sb.AppendLine ("break;");
  622. sb.AppendLine ("case '" + SortMode.Size + "':");
  623. sb.AppendLine ("sizeImg.src = bulletImgSrc;");
  624. sb.AppendLine ("break;");
  625. sb.AppendLine ("case '" + SortMode.Modified + "':");
  626. sb.AppendLine ("modifiedImg.src = bulletImgSrc;");
  627. sb.AppendLine ("break;");
  628. sb.AppendLine ("}");
  629. sb.AppendLine ("var view = " + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".GetView();");
  630. sb.AppendLine ("switch(view) {");
  631. sb.AppendLine ("case '" + FileViewRenderMode.Icons + "':");
  632. sb.AppendLine ("iconsImg.src = bulletImgSrc;");
  633. sb.AppendLine ("break;");
  634. sb.AppendLine ("case '" + FileViewRenderMode.Details + "':");
  635. sb.AppendLine ("detailsImg.src = bulletImgSrc;");
  636. sb.AppendLine ("break;");
  637. if (Controller.SupportThumbnails) {
  638. sb.AppendLine ("case '" + FileViewRenderMode.Thumbnails + "':");
  639. sb.AppendLine ("thumbnailsImg.src = bulletImgSrc;");
  640. sb.AppendLine ("break;");
  641. }
  642. sb.AppendLine ("}");
  643. sb.AppendLine ("var node = WebForm_GetElementById('" + ClientID + "_ContextMenu')");
  644. sb.AppendLine ("WebForm_SetElementX(node, x)");
  645. sb.AppendLine ("WebForm_SetElementY(node, y)");
  646. sb.AppendLine ("Menu_HoverStatic(WebForm_GetElementById('" + _contextMenu.ClientID + "n0'));");
  647. sb.AppendLine ("}");
  648. Page.ClientScript.RegisterClientScriptBlock (typeof (FileView), ClientID + "_ShowContextMenu", sb.ToString (), true);
  649. }
  650. void CreateSelectedItemsContextMenu () {
  651. _selectedItemsContextMenu = new ContextMenu ();
  652. _selectedItemsContextMenu.EnableViewState = false;
  653. _selectedItemsContextMenu.StaticEnableDefaultPopOutImage = false;
  654. _selectedItemsContextMenu.DynamicEnableDefaultPopOutImage = false;
  655. _selectedItemsContextMenu.Orientation = Orientation.Horizontal;
  656. _selectedItemsContextMenu.SkipLinkText = String.Empty;
  657. _selectedItemsContextMenu.StaticItemTemplate = new CompiledTemplateBuilder (new BuildTemplateMethod (CreateContextMenuRootItem));
  658. _selectedItemsContextMenu.DynamicItemTemplate = new CompiledTemplateBuilder (new BuildTemplateMethod (CreateContextMenuPopupItem));
  659. SetContextMenuStyle (_selectedItemsContextMenu);
  660. Controls.Add (_selectedItemsContextMenu);
  661. // Root
  662. MenuItem root = new MenuItem ();
  663. root.Text = "_contextMenu";
  664. root.NavigateUrl = "javascript: return;";
  665. _selectedItemsContextMenu.Items.Add (root);
  666. string clientClickFunction = "javascript:" + FileManagerController.ClientScriptObjectNamePrefix + Controller.ClientID + ".On{0}(" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ", '{1}');return false;";
  667. StringBuilder sbCommands = new StringBuilder ();
  668. for (int i = 0; i < FileTypes.Count; i++) {
  669. FileType ft = FileTypes [i];
  670. for (int j = 0; j < ft.Commands.Count; j++) {
  671. FileManagerCommand command = ft.Commands [j];
  672. MenuItem itemCommand = new MenuItem ();
  673. itemCommand.Text = command.Name;
  674. itemCommand.Value = i + "_" + j;
  675. itemCommand.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.ExecuteCommand, "0:" + j);
  676. itemCommand.ImageUrl = command.SmallImageUrl;
  677. root.ChildItems.Add (itemCommand);
  678. sbCommands.AppendLine (ClientID + "_SetCommandVisible('" + ClientID + "CMD" + i + "_" + j + "', (" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".SelectedItems.length==1) && (" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".SelectedItems[0].FileType==" + i + "));");
  679. }
  680. }
  681. MenuItem itemOpen = new MenuItem ();
  682. itemOpen.Text = GetResourceString ("Open", "Open");
  683. itemOpen.Value = "Open";
  684. itemOpen.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.ExecuteCommand, "0:-1");
  685. root.ChildItems.Add (itemOpen);
  686. MenuItem itemDownload = new MenuItem ();
  687. itemDownload.Text = GetResourceString ("Download", "Download");
  688. itemDownload.Value = "Download";
  689. itemDownload.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.ExecuteCommand, "0:-2");
  690. root.ChildItems.Add (itemDownload);
  691. sbCommands.AppendLine (ClientID + "_SetCommandVisible('" + ClientID + "CMDDownload', (" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".SelectedItems.length==1) && (" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".SelectedItems[0].FileType!=-2));");
  692. root.ChildItems.Add (new MenuItem ("__separator__", "__separator__", null, "javascript: return;"));
  693. // Copy to
  694. MenuItem itemCopyTo = new MenuItem ();
  695. itemCopyTo.Text = GetResourceString ("Copy", "Copy");
  696. itemCopyTo.Value = "Copy";
  697. itemCopyTo.ImageUrl = Controller.GetToolbarImage (ToolbarImages.Copy);
  698. itemCopyTo.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.SelectedItemsCopyTo, "");
  699. itemCopyTo.Enabled = !ReadOnly;
  700. root.ChildItems.Add (itemCopyTo);
  701. // Move to
  702. MenuItem itemMoveTo = new MenuItem ();
  703. itemMoveTo.Text = GetResourceString ("Move", "Move");
  704. itemMoveTo.Value = "Move";
  705. itemMoveTo.ImageUrl = Controller.GetToolbarImage (ToolbarImages.Move);
  706. itemMoveTo.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.SelectedItemsMoveTo, "");
  707. itemMoveTo.Enabled = !ReadOnly && AllowDelete;
  708. root.ChildItems.Add (itemMoveTo);
  709. root.ChildItems.Add (new MenuItem ("__separator__", "__separator__", null, "javascript: return;"));
  710. // Delete
  711. MenuItem itemDelete = new MenuItem ();
  712. itemDelete.Text = GetResourceString ("Delete", "Delete");
  713. itemDelete.Value = "Delete";
  714. itemDelete.ImageUrl = Controller.GetToolbarImage (ToolbarImages.Delete);
  715. itemDelete.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.SelectedItemsDelete, "");
  716. itemDelete.Enabled = !ReadOnly && AllowDelete;
  717. root.ChildItems.Add (itemDelete);
  718. // Rename
  719. MenuItem itemRename = new MenuItem ();
  720. itemRename.Text = GetResourceString ("Rename", "Rename");
  721. itemRename.Value = "Rename";
  722. itemRename.ImageUrl = Controller.GetToolbarImage (ToolbarImages.Rename);
  723. itemRename.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.Rename, "");
  724. itemRename.Enabled = !ReadOnly && AllowDelete;
  725. root.ChildItems.Add (itemRename);
  726. // client script
  727. StringBuilder sb = new StringBuilder ();
  728. sb.AppendLine ("function " + ClientID + "_ShowSelectedItemsContextMenu(x,y) {");
  729. sb.Append (sbCommands.ToString ());
  730. sb.AppendLine ("var node = WebForm_GetElementById('" + ClientID + "_SelectedItemsContextMenu')");
  731. sb.AppendLine ("WebForm_SetElementX(node, x)");
  732. sb.AppendLine ("WebForm_SetElementY(node, y)");
  733. sb.AppendLine ("WebForm_GetElementById('" + _selectedItemsContextMenu.ClientID + "n0Items').style.height = \"auto\";");
  734. sb.AppendLine ("WebForm_GetElementById('" + _selectedItemsContextMenu.ClientID + "n0Items').physicalHeight = null;");
  735. sb.AppendLine ("Menu_HoverStatic(WebForm_GetElementById('" + _selectedItemsContextMenu.ClientID + "n0'));");
  736. sb.AppendLine ("}");
  737. sb.AppendLine ("function " + ClientID + "_SetCommandVisible(command, value) {");
  738. sb.AppendLine ("var node = WebForm_GetElementById(command);");
  739. sb.AppendLine ("var row = node.parentNode.parentNode.parentNode.parentNode.parentNode;");
  740. sb.AppendLine ("if (value) {");
  741. sb.AppendLine ("row.style.visibility = \"visible\";");
  742. sb.AppendLine ("row.style.display = \"block\";");
  743. sb.AppendLine ("row.style.position = \"static\";");
  744. sb.AppendLine ("row.parentNode.parentNode.style.height = \"auto\";");
  745. sb.AppendLine ("} else {");
  746. sb.AppendLine ("row.style.visibility = \"hidden\";");
  747. sb.AppendLine ("row.style.display = \"none\";");
  748. sb.AppendLine ("row.style.position = \"absolute\";");
  749. sb.AppendLine ("row.parentNode.parentNode.style.height = \"0px\";");
  750. sb.AppendLine ("}");
  751. sb.AppendLine ("}");
  752. Page.ClientScript.RegisterClientScriptBlock (typeof (FileView), ClientID + "_ShowSelectedItemsContextMenu", sb.ToString (), true);
  753. }
  754. void SetContextMenuStyle (Menu menu) {
  755. // TODO
  756. menu.DynamicMenuStyle.BackColor = Color.White;
  757. menu.DynamicMenuStyle.BorderStyle = BorderStyle.Solid;
  758. menu.DynamicMenuStyle.BorderWidth = Unit.Pixel (1);
  759. menu.DynamicMenuStyle.BorderColor = Color.FromArgb (0xACA899);
  760. menu.DynamicMenuStyle.HorizontalPadding = Unit.Pixel (2);
  761. menu.DynamicMenuStyle.VerticalPadding = Unit.Pixel (2);
  762. menu.DynamicMenuItemStyle.ForeColor = Color.Black;
  763. menu.DynamicMenuItemStyle.Font.Names = new string [] { "Tahoma", "Verdana", "Geneva", "Arial", "Helvetica", "sans-serif" };
  764. menu.DynamicMenuItemStyle.VerticalPadding = Unit.Pixel (1);
  765. menu.DynamicMenuItemStyle.Font.Size = FontUnit.Parse ("11px", null);
  766. menu.DynamicHoverStyle.ForeColor = Color.White;
  767. menu.DynamicHoverStyle.BackColor = Color.FromArgb (0x316AC5);
  768. }
  769. void CreateContextMenuPopupItem (Control control) {
  770. MenuItemTemplateContainer container = (MenuItemTemplateContainer) control;
  771. MenuItem menuItem = (MenuItem) container.DataItem;
  772. if (menuItem.Text == "__separator__") {
  773. Table t = new Table ();
  774. t.CellPadding = 0;
  775. t.CellSpacing = 0;
  776. t.BorderWidth = 0;
  777. t.BackColor = Color.FromArgb (0xACA899);
  778. t.Height = 1;
  779. t.Width = Unit.Percentage (100);
  780. t.Style [HtmlTextWriterStyle.Cursor] = "default";
  781. container.Controls.Add (t);
  782. TableRow r = new TableRow ();
  783. TableCell c = new TableCell ();
  784. System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image ();
  785. img.ImageUrl = Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.Empty.gif");
  786. img.Width = 1;
  787. img.Height = 1;
  788. c.Controls.Add (img);
  789. r.Cells.Add (c);
  790. t.Rows.Add (r);
  791. }
  792. else {
  793. Table t = new Table ();
  794. t.CellPadding = 0;
  795. t.CellSpacing = 0;
  796. t.BorderWidth = 0;
  797. t.Style [HtmlTextWriterStyle.Cursor] = "default";
  798. if (menuItem.Enabled)
  799. t.Attributes ["onclick"] = menuItem.NavigateUrl;
  800. else
  801. t.Style ["color"] = "gray";
  802. t.Attributes ["id"] = ClientID + "CMD" + menuItem.Value;
  803. container.Controls.Add (t);
  804. TableRow r = new TableRow ();
  805. t.Rows.Add (r);
  806. TableCell c1 = new TableCell ();
  807. System.Web.UI.WebControls.Image img1 = new System.Web.UI.WebControls.Image ();
  808. if (String.IsNullOrEmpty (menuItem.ImageUrl))
  809. img1.ImageUrl = Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.Empty.gif");
  810. else
  811. img1.ImageUrl = menuItem.ImageUrl;
  812. img1.Attributes ["id"] = ClientID + "CMIMG" + menuItem.Value;
  813. img1.Width = 16;
  814. img1.Height = 16;
  815. c1.Controls.Add (img1);
  816. r.Cells.Add (c1);
  817. TableCell c2 = new TableCell ();
  818. c2.Wrap = false;
  819. c2.Style [HtmlTextWriterStyle.PaddingLeft] = "2px";
  820. c2.Style [HtmlTextWriterStyle.PaddingRight] = "2px";
  821. c2.Text = "&nbsp;" + menuItem.Text;
  822. c2.Width = Unit.Percentage (100);
  823. r.Cells.Add (c2);
  824. TableCell c3 = new TableCell ();
  825. System.Web.UI.WebControls.Image img3 = new System.Web.UI.WebControls.Image ();
  826. if (menuItem.ChildItems.Count == 0)
  827. img3.ImageUrl = Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.Empty.gif");
  828. else
  829. if (Controller.IsRightToLeft)
  830. img3.ImageUrl = Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.PopOutRtl.gif");
  831. else
  832. img3.ImageUrl = Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.PopOut.gif");
  833. img3.Width = 16;
  834. img3.Height = 16;
  835. c3.Controls.Add (img3);
  836. r.Cells.Add (c3);
  837. }
  838. }
  839. void CreateContextMenuRootItem (Control control) {
  840. }
  841. #endregion
  842. }
  843. }