/IZWebFileManager/FileView.cs
C# | 982 lines | 790 code | 139 blank | 53 comment | 101 complexity | b79a648b9ad9c0468360df7086868be2 MD5 | raw file
- // Copyright (C) 2006 Igor Zelmanovich <izwebfilemanager@gmail.com>
- //
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation; either version 2 of the License, or
- // (at your option) any later version.
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with this program; if not, write to the Free Software
- // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Text;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using IZ.WebFileManager.Components;
- using System.IO;
- using System.Text.RegularExpressions;
- using System.Collections;
- using System.Drawing;
- using System.Globalization;
- using System.Collections.Specialized;
-
- namespace IZ.WebFileManager
- {
- [DefaultProperty ("Text")]
- [ToolboxData ("<{0}:FileView runat=\"server\" width=\"400\" height=\"300\"></{0}:FileView>")]
- public sealed class FileView : FileManagerControlBase
- {
- #region Constructors
-
- public FileView () : base () { InitializeDefaults (); }
- public FileView (FileManagerController controller) : base (controller) { InitializeDefaults (); }
-
- #endregion
-
- #region Fields
-
- BorderedPanelStyle _detailsColumnHeaderStyle;
- Style _editTextBoxStyle;
- Style _itemStyle;
- Style _selectedItemStyle;
- Style _detailsSortedColumnStyle;
- StringBuilder _initScript = new StringBuilder ();
- ContextMenu _contextMenu;
- ContextMenu _selectedItemsContextMenu;
-
- // control state fields
- FileViewRenderMode _view = FileViewRenderMode.Icons;
- SortMode _sort = SortMode.Name;
- SortDirection _sortDirection;
- bool _showInGroups;
- string _directory;
- FileManagerItemInfo _currentDirectory;
-
- #endregion
-
- #region Properties
-
- [PersistenceMode (PersistenceMode.InnerProperty)]
- [Category ("Appearance")]
- public BorderedPanelStyle DetailsColumnHeaderStyle {
- get {
- if (_detailsColumnHeaderStyle == null) {
- _detailsColumnHeaderStyle = new BorderedPanelStyle ();
- _detailsColumnHeaderStyle.Height = Unit.Pixel (17);
- _detailsColumnHeaderStyle.BackColor = Color.FromArgb (0xebeadb);
- _detailsColumnHeaderStyle.BackImageUrl = Page.ClientScript.GetWebResourceUrl (GetType (), "IZ.WebFileManager.resources.detailscolumnheader_RB.gif");
- _detailsColumnHeaderStyle.OuterBorderLeftImageUrl = Page.ClientScript.GetWebResourceUrl (GetType (), "IZ.WebFileManager.resources.detailscolumnheader_R.gif");
- _detailsColumnHeaderStyle.Font.Bold = false;
- _detailsColumnHeaderStyle.PaddingLeft = Unit.Pixel (4);
- _detailsColumnHeaderStyle.PaddingRight = Unit.Pixel (4);
- _detailsColumnHeaderStyle.PaddingTop = Unit.Pixel (3);
- _detailsColumnHeaderStyle.OuterBorderStyle = OuterBorderStyle.Left;
- _detailsColumnHeaderStyle.OuterBorderLeftWidth = Unit.Pixel (2);
-
- if (IsTrackingViewState)
- ((IStateManager) _detailsColumnHeaderStyle).TrackViewState ();
- }
- return _detailsColumnHeaderStyle;
- }
- }
-
- [PersistenceMode (PersistenceMode.InnerProperty)]
- [Category ("Appearance")]
- public Style DetailsSortedColumnStyle {
- get {
- if (_detailsSortedColumnStyle == null) {
- _detailsSortedColumnStyle = new Style ();
- _detailsSortedColumnStyle.BackColor = Color.FromArgb (0xF7F7F7);
-
- if (IsTrackingViewState)
- ((IStateManager) _detailsSortedColumnStyle).TrackViewState ();
- }
- return _detailsSortedColumnStyle;
- }
- }
-
- [PersistenceMode (PersistenceMode.InnerProperty)]
- [Category ("Appearance")]
- public Style SelectedItemStyle {
- get {
- if (_selectedItemStyle == null) {
- _selectedItemStyle = new Style ();
- _selectedItemStyle.ForeColor = Color.White;
- _selectedItemStyle.BackColor = Color.FromArgb (0x316AC5);
-
- if (IsTrackingViewState)
- ((IStateManager) _selectedItemStyle).TrackViewState ();
- }
- return _selectedItemStyle;
- }
- }
-
- [PersistenceMode (PersistenceMode.InnerProperty)]
- [Category ("Appearance")]
- public Style ItemStyle {
- get {
- if (_itemStyle == null) {
- _itemStyle = new Style ();
-
- if (IsTrackingViewState)
- ((IStateManager) _itemStyle).TrackViewState ();
- }
- return _itemStyle;
- }
- }
-
- [PersistenceMode (PersistenceMode.InnerProperty)]
- [Category ("Appearance")]
- public Style EditTextBoxStyle {
- get {
- if (_editTextBoxStyle == null) {
- _editTextBoxStyle = new Style ();
- _editTextBoxStyle.BorderStyle = BorderStyle.Solid;
- _editTextBoxStyle.BorderWidth = Unit.Pixel (1);
- _editTextBoxStyle.BorderColor = Color.Black;
- _editTextBoxStyle.Font.Names = new string [] { "Tahoma", "Verdana", "Geneva", "Arial", "Helvetica", "sans-serif" };
- _editTextBoxStyle.Font.Size = FontUnit.Parse ("11px", null);
-
- if (IsTrackingViewState)
- ((IStateManager) _editTextBoxStyle).TrackViewState ();
- }
- return _editTextBoxStyle;
- }
- }
-
- [Bindable (true)]
- [Category ("Data")]
- [DefaultValue ("[0]/")]
- [Localizable (false)]
- [Themeable (false)]
- public string Directory {
- get { return _directory == null ? "[0]/" : _directory; }
- internal set {
- _directory = value;
- _currentDirectory = null;
- }
- }
-
- string [] selectedItemsStr;
- FileManagerItemInfo [] selectedItems;
- public override FileManagerItemInfo [] SelectedItems {
- get {
- if (selectedItems == null) {
- if (selectedItemsStr == null || selectedItemsStr.Length == 0)
- selectedItems = new FileManagerItemInfo [0];
- else {
- ArrayList selectedItemsArray = new ArrayList ();
- FileManagerItemInfo dir = GetCurrentDirectory ();
- foreach (string name in selectedItemsStr) {
- FileManagerItemInfo itemInfo = ResolveFileManagerItemInfo (name);
- selectedItemsArray.Add (itemInfo);
- }
- selectedItems = (FileManagerItemInfo []) selectedItemsArray.ToArray (typeof (FileManagerItemInfo));
- }
- }
- return selectedItems;
- }
- }
-
- public override FileManagerItemInfo CurrentDirectory {
- get {
- if (_currentDirectory == null)
- _currentDirectory = Controller.ResolveFileManagerItemInfo (Directory);
- return _currentDirectory;
- }
- }
-
- [Bindable (true)]
- [Category ("Appearance")]
- [DefaultValue (false)]
- [Localizable (false)]
- private bool ShowInGroups {
- get { return _showInGroups; }
- set { _showInGroups = value; }
- }
-
- [Bindable (true)]
- [Category ("Appearance")]
- [DefaultValue (FileViewRenderMode.Icons)]
- [Localizable (false)]
- public FileViewRenderMode View {
- get { return _view; }
- set { _view = value; }
- }
-
- [Bindable (true)]
- [Category ("Appearance")]
- [DefaultValue (SortMode.Name)]
- [Localizable (false)]
- public SortMode Sort {
- get { return _sort; }
- set { _sort = value; }
- }
-
- [Bindable (true)]
- [Category ("Appearance")]
- [DefaultValue (SortDirection.Ascending)]
- [Localizable (false)]
- public SortDirection SortDirection {
- get { return _sortDirection; }
- set { _sortDirection = value; }
- }
-
- [Bindable (true)]
- [Category ("Behavior")]
- [DefaultValue (false)]
- [Localizable (false)]
- public bool UseLinkToOpenItem {
- get { return (bool) (ViewState ["UseLinkToOpenItem"] ?? false); }
- set { ViewState ["UseLinkToOpenItem"] = value; }
- }
-
- [Bindable (true)]
- [Category ("Behavior")]
- [DefaultValue ("_blank")]
- [Localizable (false)]
- public string LinkToOpenItemTarget {
- get { return (string) (ViewState ["LinkToOpenItemTarget"] ?? "_blank"); }
- set { ViewState ["LinkToOpenItemTarget"] = value; }
- }
-
- internal string LinkToOpenItemClass {
- get { return "linkToOpenItem" + ClientID; }
- }
-
- #endregion
-
- #region Methods
-
- private void InitializeDefaults () {
- LinkToOpenItemTarget = "_blank";
- }
-
- protected internal override string RenderContents () {
- StringBuilder sb = new StringBuilder ();
- HtmlTextWriter writer = new HtmlTextWriter (new StringWriter (sb, null));
- RenderContents (writer);
- return sb.ToString ();
- }
-
- protected override void RenderContents (HtmlTextWriter writer) {
- if (DesignMode)
- return;
-
- DirectoryInfo directoryInfo = GetCurrentDirectory ().Directory;
-
- FileViewRender render = FileViewRender.GetRender (this);
- DirectoryProvider provider = new DirectoryProvider (directoryInfo, Sort, SortDirection);
-
- render.RenderBeginList (writer);
-
- //FileViewItem upDirectory = new FileViewUpDirectoryItem(directoryInfo.Parent, this);
- //render.RenderItem(output, upDirectory);
-
- //if (ShowInGroups) {
- // GroupInfo [] groups = provider.GetGroups ();
- // foreach (GroupInfo group in groups) {
- // render.RenderBeginGroup (writer, group);
- // foreach (FileSystemInfo fsi in provider.GetFileSystemInfos (group)) {
- // FileViewItem item = new FileViewItem (fsi, this);
- // render.RenderItem (writer, item);
- // }
-
- // render.RenderEndGroup (writer, group);
- // }
- //}
- //else {
- foreach (FileSystemInfo fsi in provider.GetFileSystemInfos ()) {
- FileViewItem item = new FileViewItem (fsi, this);
-
- if (!ShowHiddenFilesAndFolders && item.Hidden)
- continue;
-
- render.RenderItem (writer, item);
- }
- //}
-
- render.RenderEndList (writer);
- RenderInitScript (writer);
- }
-
- private void RenderInitScript (HtmlTextWriter output) {
- output.AddAttribute (HtmlTextWriterAttribute.Id, ClientID + "_InitScript");
- output.AddStyleAttribute (HtmlTextWriterStyle.Display, "none");
- output.AddStyleAttribute (HtmlTextWriterStyle.Visibility, "hidden");
- output.AddStyleAttribute (HtmlTextWriterStyle.Position, "absolute");
- output.RenderBeginTag (HtmlTextWriterTag.Div);
- output.Write (_initScript.ToString ());
- output.Write (FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".Items = new Array(" + String.Join (",", (string []) itemIds.ToArray (typeof (string))) + ");\r\n");
- output.Write (FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".ClearSelectedItems();\r\n");
- output.RenderEndTag ();
- }
-
- internal override FileManagerItemInfo GetCurrentDirectory () {
- return Controller.ResolveFileManagerItemInfo (Directory);
- }
-
- int _itemIndex;
- ArrayList itemIds = new ArrayList ();
- internal void RenderItemBeginTag (HtmlTextWriter output, FileViewItem item) {
- string id = ClientID + "_Item_" + _itemIndex;
- item.ClientID = id;
-
- int fileType = -2; //is Directory
- if (item.FileSystemInfo is FileInfo) {
- FileInfo file = (FileInfo) item.FileSystemInfo;
- FileType ft = Controller.GetFileType (file);
- if (ft != null)
- fileType = Controller.FileTypes.IndexOf (ft);
- else
- fileType = -1;
- }
-
- itemIds.Add (id);
-
- output.AddAttribute (HtmlTextWriterAttribute.Id, id);
- output.RenderBeginTag (HtmlTextWriterTag.Div);
-
- // trace init script
- _initScript.AppendLine ("var " + id + " = document.getElementById('" + id + "');");
- _initScript.AppendLine (FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".InitItem(" + id + ",'" + FileManagerController.EncodeURIComponent (item.Name) + "'," + (item.IsDirectory ? "true" : "false") + "," + (item.CanBeRenamed ? "true" : "false") + "," + "false" + "," + fileType + ");");
-
- _itemIndex++;
- }
-
- [System.Diagnostics.CodeAnalysis.SuppressMessage ("Microsoft.Performance", "CA1822:MarkMembersAsStatic")]
- internal void RenderItemEndTag (HtmlTextWriter output) {
- output.RenderEndTag ();
- }
-
- public override void RenderBeginTag (HtmlTextWriter writer) {
- if (writer == null)
- throw new ArgumentNullException ("writer");
-
- writer.AddStyleAttribute (HtmlTextWriterStyle.Position, "absolute");
- writer.AddStyleAttribute (HtmlTextWriterStyle.ZIndex, "100");
- writer.AddStyleAttribute (HtmlTextWriterStyle.Visibility, "hidden");
- writer.AddAttribute (HtmlTextWriterAttribute.Id, ClientID + "_ContextMenu");
- writer.RenderBeginTag (HtmlTextWriterTag.Div);
- _contextMenu.RenderControl (writer);
- writer.RenderEndTag ();
-
- writer.AddStyleAttribute (HtmlTextWriterStyle.Position, "absolute");
- writer.AddStyleAttribute (HtmlTextWriterStyle.ZIndex, "100");
- writer.AddStyleAttribute (HtmlTextWriterStyle.Visibility, "hidden");
- writer.AddAttribute (HtmlTextWriterAttribute.Id, ClientID + "_SelectedItemsContextMenu");
- writer.RenderBeginTag (HtmlTextWriterTag.Div);
- _selectedItemsContextMenu.RenderControl (writer);
- writer.RenderEndTag ();
-
- RenderFocusTextBox (writer);
- RenderEditTextBox (writer);
-
- base.RenderBeginTag (writer);
- }
-
- void RenderEditTextBox (HtmlTextWriter writer) {
- writer.AddStyleAttribute (HtmlTextWriterStyle.Position, "absolute");
- writer.AddStyleAttribute (HtmlTextWriterStyle.ZIndex, "100");
- writer.AddStyleAttribute (HtmlTextWriterStyle.Visibility, "hidden");
- writer.AddStyleAttribute (HtmlTextWriterStyle.Display, "none");
- writer.AddAttribute (HtmlTextWriterAttribute.Id, Controller.ClientID + "_TextBox");
- writer.RenderBeginTag (HtmlTextWriterTag.Input);
- writer.RenderEndTag ();
- }
-
- private void RenderFocusTextBox (HtmlTextWriter writer) {
- writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0px");
- writer.AddStyleAttribute (HtmlTextWriterStyle.Width, "1px");
- writer.AddStyleAttribute (HtmlTextWriterStyle.BackgroundColor, "transparent");
- writer.AddStyleAttribute (HtmlTextWriterStyle.Position, "absolute");
- writer.AddAttribute (HtmlTextWriterAttribute.Type, "text");
- writer.AddAttribute (HtmlTextWriterAttribute.Id, ClientID + "_Focus");
- writer.RenderBeginTag (HtmlTextWriterTag.Input);
- writer.RenderEndTag ();
- }
-
-
- internal override FileManagerItemInfo ResolveFileManagerItemInfo (string path) {
- string fileManagerPath;
- if (String.IsNullOrEmpty (path))
- fileManagerPath = Directory;
- else if (path [0] == '[' || path [0] == '/')
- fileManagerPath = path;
- else
- fileManagerPath = VirtualPathUtility.AppendTrailingSlash (Directory) + path;
-
- return Controller.ResolveFileManagerItemInfo (fileManagerPath);
- }
-
- protected override object SaveViewState () {
- object [] states = new object [6];
-
- states [0] = base.SaveViewState ();
- if (_detailsColumnHeaderStyle != null)
- states [1] = ((IStateManager) _detailsColumnHeaderStyle).SaveViewState ();
- if (_detailsSortedColumnStyle != null)
- states [2] = ((IStateManager) _detailsSortedColumnStyle).SaveViewState ();
- if (_editTextBoxStyle != null)
- states [3] = ((IStateManager) _editTextBoxStyle).SaveViewState ();
- if (_itemStyle != null)
- states [4] = ((IStateManager) _itemStyle).SaveViewState ();
- if (_selectedItemStyle != null)
- states [5] = ((IStateManager) _selectedItemStyle).SaveViewState ();
-
- for (int i = 0; i < states.Length; i++) {
- if (states [i] != null)
- return states;
- }
- return null;
- }
-
- protected override void LoadViewState (object savedState) {
- if (savedState == null)
- return;
-
- object [] states = (object []) savedState;
-
- base.LoadViewState (states [0]);
- if (states [1] != null)
- ((IStateManager) DetailsColumnHeaderStyle).LoadViewState (states [1]);
- if (states [2] != null)
- ((IStateManager) DetailsSortedColumnStyle).LoadViewState (states [2]);
- if (states [3] != null)
- ((IStateManager) EditTextBoxStyle).LoadViewState (states [3]);
- if (states [4] != null)
- ((IStateManager) ItemStyle).LoadViewState (states [4]);
- if (states [5] != null)
- ((IStateManager) SelectedItemStyle).LoadViewState (states [5]);
- }
-
- protected override void TrackViewState () {
- base.TrackViewState ();
-
- if (_detailsColumnHeaderStyle != null)
- ((IStateManager) _detailsColumnHeaderStyle).TrackViewState ();
- if (_detailsSortedColumnStyle != null)
- ((IStateManager) _detailsSortedColumnStyle).TrackViewState ();
- if (_editTextBoxStyle != null)
- ((IStateManager) _editTextBoxStyle).TrackViewState ();
- if (_itemStyle != null)
- ((IStateManager) _itemStyle).TrackViewState ();
- if (_selectedItemStyle != null)
- ((IStateManager) _selectedItemStyle).TrackViewState ();
- }
-
- protected override object SaveControlState () {
- RegisterHiddenField ("View", View.ToString ());
- RegisterHiddenField ("Sort", Sort.ToString ());
- RegisterHiddenField ("SortDirection", SortDirection.ToString ());
- RegisterHiddenField ("ShowInGroups", ShowInGroups ? "true" : "false");
- RegisterHiddenField ("Directory", FileManagerController.EncodeURIComponent (CurrentDirectory.FileManagerPath));
- RegisterHiddenField ("SelectedItems", "");
-
- return new object [] { base.SaveControlState () };
- }
-
- protected override void LoadControlState (object savedState) {
- base.LoadControlState (((object []) savedState) [0]);
-
- View = (FileViewRenderMode) Enum.Parse (typeof (FileViewRenderMode), GetValueFromHiddenField ("View"));
- Sort = (SortMode) Enum.Parse (typeof (SortMode), GetValueFromHiddenField ("Sort"));
- SortDirection = (SortDirection) Enum.Parse (typeof (SortDirection), GetValueFromHiddenField ("SortDirection"));
- ShowInGroups = bool.Parse (GetValueFromHiddenField ("ShowInGroups"));
- Directory = HttpUtility.UrlDecode (GetValueFromHiddenField ("Directory"));
-
- string [] selectedItemsEncoded = GetValueFromHiddenField ("SelectedItems").Split (new char [] { ':' }, StringSplitOptions.RemoveEmptyEntries);
- ArrayList selectedItemsArray = new ArrayList ();
- foreach (string pathEncoded in selectedItemsEncoded) {
- string path = HttpUtility.UrlDecode (pathEncoded);
- selectedItemsArray.Add (path);
- }
-
- selectedItemsStr = (string []) selectedItemsArray.ToArray (typeof (string));
- }
-
- string GetInitInstanceScript () {
-
- StringBuilder sb = new StringBuilder ();
- string fileView = FileManagerController.ClientScriptObjectNamePrefix + ClientID;
- sb.AppendLine ("var " + fileView + "=new FileView('" + ClientID + "','" + Controller.ClientID + "','" + ItemStyle.RegisteredCssClass + "','" + SelectedItemStyle.RegisteredCssClass + "','" + EditTextBoxStyle.RegisteredCssClass + "');");
- sb.AppendLine (fileView + ".Initialize();");
-
- return sb.ToString ();
- }
-
- protected override void OnInit (EventArgs e) {
- base.OnInit (e);
- Page.RegisterRequiresControlState (this);
- }
-
- protected override void OnPreRender (EventArgs e) {
- base.OnPreRender (e);
-
- Page.Header.StyleSheet.RegisterStyle (ItemStyle, this);
- Page.Header.StyleSheet.RegisterStyle (SelectedItemStyle, this);
- Page.Header.StyleSheet.RegisterStyle (EditTextBoxStyle, this);
-
- if (UseLinkToOpenItem) {
- Style linkStyle = new Style ();
- linkStyle.Font.Underline = false;
- Page.Header.StyleSheet.CreateStyleRule (linkStyle, this, "a." + LinkToOpenItemClass);
-
- Style hoverLinkStyle = new Style ();
- hoverLinkStyle.Font.Underline = true;
- Page.Header.StyleSheet.CreateStyleRule (hoverLinkStyle, this, "a." + LinkToOpenItemClass + ":hover");
-
- Style itemLinkStyle = new Style ();
- itemLinkStyle.ForeColor = ItemStyle.ForeColor;
- if (itemLinkStyle.ForeColor == Color.Empty)
- itemLinkStyle.ForeColor = ForeColor;
- Page.Header.StyleSheet.CreateStyleRule (itemLinkStyle, this, "." + ItemStyle.RegisteredCssClass + " a." + LinkToOpenItemClass);
-
- Style selectedItemLinkStyle = new Style ();
- selectedItemLinkStyle.ForeColor = SelectedItemStyle.ForeColor;
- if (selectedItemLinkStyle.ForeColor == Color.Empty)
- selectedItemLinkStyle.ForeColor = ForeColor;
- Page.Header.StyleSheet.CreateStyleRule (selectedItemLinkStyle, this, "." + SelectedItemStyle.RegisteredCssClass + " a." + LinkToOpenItemClass);
- }
-
- Page.ClientScript.RegisterClientScriptResource (typeof (FileView), "IZ.WebFileManager.resources.FileView.js");
- Page.ClientScript.RegisterStartupScript (typeof (FileView), ClientID, GetInitInstanceScript (), true);
-
- CreateContextMenu ();
- CreateSelectedItemsContextMenu ();
- }
-
- internal string GetSortEventReference (SortMode sort) {
- return Controller.GetCommandEventReference (this, FileManagerCommands.FileViewSort.ToString (), "'" + sort.ToString () + "'");
- }
-
- protected override void AddAttributesToRender (HtmlTextWriter writer) {
- base.AddAttributesToRender (writer);
-
- writer.AddAttribute (HtmlTextWriterAttribute.Onclick, FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".SetFocus()");
- Controller.AddDirectionAttribute (writer);
- writer.AddStyleAttribute (HtmlTextWriterStyle.Position, "relative");
- writer.AddStyleAttribute (HtmlTextWriterStyle.ZIndex, "20");
- writer.AddStyleAttribute (HtmlTextWriterStyle.Overflow, "auto");
- }
-
- void CreateContextMenu () {
- _contextMenu = new ContextMenu ();
- _contextMenu.EnableViewState = false;
- _contextMenu.StaticEnableDefaultPopOutImage = false;
- _contextMenu.DynamicEnableDefaultPopOutImage = false;
- _contextMenu.Orientation = Orientation.Horizontal;
- _contextMenu.SkipLinkText = String.Empty;
- _contextMenu.StaticItemTemplate = new CompiledTemplateBuilder (new BuildTemplateMethod (CreateContextMenuRootItem));
- _contextMenu.DynamicItemTemplate = new CompiledTemplateBuilder (new BuildTemplateMethod (CreateContextMenuPopupItem));
- SetContextMenuStyle (_contextMenu);
- Controls.Add (_contextMenu);
-
- // Root
- MenuItem root = new MenuItem ();
- root.Text = "_contextMenu";
- root.NavigateUrl = "javascript: return;";
- _contextMenu.Items.Add (root);
-
- string clientClickFunction = "javascript:" + FileManagerController.ClientScriptObjectNamePrefix + Controller.ClientID + ".On{0}(" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ", '{1}');return false;";
-
- // View
- MenuItem itemView = new MenuItem ();
- itemView.Text = GetResourceString ("View", "View");
- itemView.Value = "View";
- itemView.NavigateUrl = "javascript: return;";
- root.ChildItems.Add (itemView);
-
- // Icons
- MenuItem itemViewIcons = new MenuItem ();
- itemViewIcons.Text = GetResourceString ("Icons", "Icons");
- itemViewIcons.Value = "Icons";
- itemViewIcons.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewChangeView, FileViewRenderMode.Icons);
- itemView.ChildItems.Add (itemViewIcons);
-
- // Details
- MenuItem itemViewDetails = new MenuItem ();
- itemViewDetails.Text = GetResourceString ("Details", "Details");
- itemViewDetails.Value = "Details";
- itemViewDetails.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewChangeView, FileViewRenderMode.Details);
- itemView.ChildItems.Add (itemViewDetails);
-
- if (Controller.SupportThumbnails) {
- // Thumbnails
- MenuItem itemViewThumbnails = new MenuItem ();
- itemViewThumbnails.Text = GetResourceString ("Thumbnails", "Thumbnails");
- itemViewThumbnails.Value = "Thumbnails";
- itemViewThumbnails.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewChangeView, FileViewRenderMode.Thumbnails);
- itemView.ChildItems.Add (itemViewThumbnails);
- }
-
- root.ChildItems.Add (new MenuItem ("__separator__", "__separator__", null, "javascript: return;"));
-
- // Arrange Icons By
- MenuItem itemArrangeIconsBy = new MenuItem ();
- itemArrangeIconsBy.Text = GetResourceString ("Arrange_Icons_By", "Arrange Icons By");
- itemArrangeIconsBy.Value = "Arrange_Icons_By";
- itemArrangeIconsBy.NavigateUrl = "javascript: return;";
- root.ChildItems.Add (itemArrangeIconsBy);
-
- // Name
- MenuItem itemArrangeIconsByName = new MenuItem ();
- itemArrangeIconsByName.Text = GetResourceString ("Name", "Name");
- itemArrangeIconsByName.Value = "Name";
- itemArrangeIconsByName.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewSort, SortMode.Name);
- itemArrangeIconsBy.ChildItems.Add (itemArrangeIconsByName);
-
- // Size
- MenuItem itemArrangeIconsBySize = new MenuItem ();
- itemArrangeIconsBySize.Text = GetResourceString ("Size", "Size");
- itemArrangeIconsBySize.Value = "Size";
- itemArrangeIconsBySize.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewSort, SortMode.Size);
- itemArrangeIconsBy.ChildItems.Add (itemArrangeIconsBySize);
-
- // Type
- MenuItem itemArrangeIconsByType = new MenuItem ();
- itemArrangeIconsByType.Text = GetResourceString ("Type", "Type");
- itemArrangeIconsByType.Value = "Type";
- itemArrangeIconsByType.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewSort, SortMode.Type);
- itemArrangeIconsBy.ChildItems.Add (itemArrangeIconsByType);
-
- // Modified
- MenuItem itemArrangeIconsByModified = new MenuItem ();
- itemArrangeIconsByModified.Text = GetResourceString ("Date_Modified", "Date Modified");
- itemArrangeIconsByModified.Value = "Modified";
- itemArrangeIconsByModified.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.FileViewSort, SortMode.Modified);
- itemArrangeIconsBy.ChildItems.Add (itemArrangeIconsByModified);
-
- // Refresh
- MenuItem itemRefresh = new MenuItem ();
- itemRefresh.Text = Controller.GetResourceString ("Refresh", "Refresh");
- itemRefresh.Value = "Refresh";
- itemRefresh.ImageUrl = Controller.GetToolbarImage (ToolbarImages.Refresh);
- itemRefresh.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.Refresh, "");
- root.ChildItems.Add (itemRefresh);
-
- root.ChildItems.Add (new MenuItem ("__separator__", "__separator__", null, "javascript: return;"));
-
- // New
- MenuItem itemNew = new MenuItem ();
- itemNew.Text = GetResourceString ("Create", "New");
- itemNew.Value = "Create";
- itemNew.NavigateUrl = "javascript: return;";
- itemNew.Enabled = !ReadOnly;
- root.ChildItems.Add (itemNew);
-
- if (!ReadOnly) {
- // New Folder
- MenuItem itemFolder = new MenuItem ();
- itemFolder.Text = GetResourceString ("New_Folder", "Folder");
- itemFolder.Value = "New_Folder";
- itemFolder.ImageUrl = Controller.GetFolderSmallImage ();
- itemFolder.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.NewFolder, "");
- itemNew.ChildItems.Add (itemFolder);
-
- itemNew.ChildItems.Add (new MenuItem ("__separator__", "__separator__", null, "javascript: return;"));
-
- for (int i = 0; i < Templates.Count; i++) {
- NewDocumentTemplate template = Templates [i];
- MenuItem item = new MenuItem ();
- item.Text = template.Name;
- item.Value = "Template" + i;
- if (template.SmallImageUrl.Length > 0)
- item.ImageUrl = ResolveUrl (template.SmallImageUrl);
- else if (template.MasterFileUrl.Length > 0)
- item.ImageUrl = Controller.GetFileSmallImage (new FileInfo (Page.MapPath (template.MasterFileUrl)));
- else
- item.ImageUrl = Controller.GetFileSmallImage ();
- item.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.NewDocument, Templates.IndexOf (template));
- itemNew.ChildItems.Add (item);
- }
- }
-
- // client script
- StringBuilder sb = new StringBuilder ();
- sb.AppendLine ("function " + ClientID + "_ShowContextMenu(x,y) {");
-
- sb.AppendLine ("var bulletImgSrc = '" + Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.Bullet.gif") + "';");
- sb.AppendLine ("var emptyImgSrc = '" + Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.Empty.gif") + "';");
-
- sb.AppendLine ("var nameImg = WebForm_GetElementById('" + ClientID + "CMIMGName');");
- sb.AppendLine ("var sizeImg = WebForm_GetElementById('" + ClientID + "CMIMGSize');");
- sb.AppendLine ("var typeImg = WebForm_GetElementById('" + ClientID + "CMIMGType');");
- sb.AppendLine ("var modifiedImg = WebForm_GetElementById('" + ClientID + "CMIMGModified');");
- sb.AppendLine ("var iconsImg = WebForm_GetElementById('" + ClientID + "CMIMGIcons');");
- sb.AppendLine ("var detailsImg = WebForm_GetElementById('" + ClientID + "CMIMGDetails');");
- if (Controller.SupportThumbnails)
- sb.AppendLine ("var thumbnailsImg = WebForm_GetElementById('" + ClientID + "CMIMGThumbnails');");
-
- sb.AppendLine ("nameImg.src = emptyImgSrc;");
- sb.AppendLine ("sizeImg.src = emptyImgSrc;");
- sb.AppendLine ("typeImg.src = emptyImgSrc;");
- sb.AppendLine ("modifiedImg.src = emptyImgSrc;");
- sb.AppendLine ("iconsImg.src = emptyImgSrc;");
- sb.AppendLine ("detailsImg.src = emptyImgSrc;");
- if (Controller.SupportThumbnails)
- sb.AppendLine ("thumbnailsImg.src = emptyImgSrc;");
-
- sb.AppendLine ("var sort = " + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".GetSort();");
- sb.AppendLine ("switch(sort) {");
- sb.AppendLine ("case '" + SortMode.Name + "':");
- sb.AppendLine ("nameImg.src = bulletImgSrc;");
- sb.AppendLine ("break;");
- sb.AppendLine ("case '" + SortMode.Type + "':");
- sb.AppendLine ("typeImg.src = bulletImgSrc;");
- sb.AppendLine ("break;");
- sb.AppendLine ("case '" + SortMode.Size + "':");
- sb.AppendLine ("sizeImg.src = bulletImgSrc;");
- sb.AppendLine ("break;");
- sb.AppendLine ("case '" + SortMode.Modified + "':");
- sb.AppendLine ("modifiedImg.src = bulletImgSrc;");
- sb.AppendLine ("break;");
- sb.AppendLine ("}");
-
- sb.AppendLine ("var view = " + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".GetView();");
- sb.AppendLine ("switch(view) {");
- sb.AppendLine ("case '" + FileViewRenderMode.Icons + "':");
- sb.AppendLine ("iconsImg.src = bulletImgSrc;");
- sb.AppendLine ("break;");
- sb.AppendLine ("case '" + FileViewRenderMode.Details + "':");
- sb.AppendLine ("detailsImg.src = bulletImgSrc;");
- sb.AppendLine ("break;");
- if (Controller.SupportThumbnails) {
- sb.AppendLine ("case '" + FileViewRenderMode.Thumbnails + "':");
- sb.AppendLine ("thumbnailsImg.src = bulletImgSrc;");
- sb.AppendLine ("break;");
- }
- sb.AppendLine ("}");
-
-
- sb.AppendLine ("var node = WebForm_GetElementById('" + ClientID + "_ContextMenu')");
- sb.AppendLine ("WebForm_SetElementX(node, x)");
- sb.AppendLine ("WebForm_SetElementY(node, y)");
- sb.AppendLine ("Menu_HoverStatic(WebForm_GetElementById('" + _contextMenu.ClientID + "n0'));");
- sb.AppendLine ("}");
- Page.ClientScript.RegisterClientScriptBlock (typeof (FileView), ClientID + "_ShowContextMenu", sb.ToString (), true);
- }
-
- void CreateSelectedItemsContextMenu () {
- _selectedItemsContextMenu = new ContextMenu ();
- _selectedItemsContextMenu.EnableViewState = false;
- _selectedItemsContextMenu.StaticEnableDefaultPopOutImage = false;
- _selectedItemsContextMenu.DynamicEnableDefaultPopOutImage = false;
- _selectedItemsContextMenu.Orientation = Orientation.Horizontal;
- _selectedItemsContextMenu.SkipLinkText = String.Empty;
- _selectedItemsContextMenu.StaticItemTemplate = new CompiledTemplateBuilder (new BuildTemplateMethod (CreateContextMenuRootItem));
- _selectedItemsContextMenu.DynamicItemTemplate = new CompiledTemplateBuilder (new BuildTemplateMethod (CreateContextMenuPopupItem));
- SetContextMenuStyle (_selectedItemsContextMenu);
- Controls.Add (_selectedItemsContextMenu);
-
- // Root
- MenuItem root = new MenuItem ();
- root.Text = "_contextMenu";
- root.NavigateUrl = "javascript: return;";
- _selectedItemsContextMenu.Items.Add (root);
-
- string clientClickFunction = "javascript:" + FileManagerController.ClientScriptObjectNamePrefix + Controller.ClientID + ".On{0}(" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ", '{1}');return false;";
-
- StringBuilder sbCommands = new StringBuilder ();
-
- for (int i = 0; i < FileTypes.Count; i++) {
- FileType ft = FileTypes [i];
- for (int j = 0; j < ft.Commands.Count; j++) {
- FileManagerCommand command = ft.Commands [j];
- MenuItem itemCommand = new MenuItem ();
- itemCommand.Text = command.Name;
- itemCommand.Value = i + "_" + j;
- itemCommand.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.ExecuteCommand, "0:" + j);
- itemCommand.ImageUrl = command.SmallImageUrl;
- root.ChildItems.Add (itemCommand);
-
- sbCommands.AppendLine (ClientID + "_SetCommandVisible('" + ClientID + "CMD" + i + "_" + j + "', (" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".SelectedItems.length==1) && (" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".SelectedItems[0].FileType==" + i + "));");
- }
- }
-
- MenuItem itemOpen = new MenuItem ();
- itemOpen.Text = GetResourceString ("Open", "Open");
- itemOpen.Value = "Open";
- itemOpen.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.ExecuteCommand, "0:-1");
- root.ChildItems.Add (itemOpen);
-
- MenuItem itemDownload = new MenuItem ();
- itemDownload.Text = GetResourceString ("Download", "Download");
- itemDownload.Value = "Download";
- itemDownload.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.ExecuteCommand, "0:-2");
- root.ChildItems.Add (itemDownload);
- sbCommands.AppendLine (ClientID + "_SetCommandVisible('" + ClientID + "CMDDownload', (" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".SelectedItems.length==1) && (" + FileManagerController.ClientScriptObjectNamePrefix + ClientID + ".SelectedItems[0].FileType!=-2));");
-
- root.ChildItems.Add (new MenuItem ("__separator__", "__separator__", null, "javascript: return;"));
-
- // Copy to
- MenuItem itemCopyTo = new MenuItem ();
- itemCopyTo.Text = GetResourceString ("Copy", "Copy");
- itemCopyTo.Value = "Copy";
- itemCopyTo.ImageUrl = Controller.GetToolbarImage (ToolbarImages.Copy);
- itemCopyTo.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.SelectedItemsCopyTo, "");
- itemCopyTo.Enabled = !ReadOnly;
- root.ChildItems.Add (itemCopyTo);
-
- // Move to
- MenuItem itemMoveTo = new MenuItem ();
- itemMoveTo.Text = GetResourceString ("Move", "Move");
- itemMoveTo.Value = "Move";
- itemMoveTo.ImageUrl = Controller.GetToolbarImage (ToolbarImages.Move);
- itemMoveTo.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.SelectedItemsMoveTo, "");
- itemMoveTo.Enabled = !ReadOnly && AllowDelete;
- root.ChildItems.Add (itemMoveTo);
-
- root.ChildItems.Add (new MenuItem ("__separator__", "__separator__", null, "javascript: return;"));
-
- // Delete
- MenuItem itemDelete = new MenuItem ();
- itemDelete.Text = GetResourceString ("Delete", "Delete");
- itemDelete.Value = "Delete";
- itemDelete.ImageUrl = Controller.GetToolbarImage (ToolbarImages.Delete);
- itemDelete.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.SelectedItemsDelete, "");
- itemDelete.Enabled = !ReadOnly && AllowDelete;
- root.ChildItems.Add (itemDelete);
-
- // Rename
- MenuItem itemRename = new MenuItem ();
- itemRename.Text = GetResourceString ("Rename", "Rename");
- itemRename.Value = "Rename";
- itemRename.ImageUrl = Controller.GetToolbarImage (ToolbarImages.Rename);
- itemRename.NavigateUrl = String.Format (clientClickFunction, FileManagerCommands.Rename, "");
- itemRename.Enabled = !ReadOnly && AllowDelete;
- root.ChildItems.Add (itemRename);
-
- // client script
- StringBuilder sb = new StringBuilder ();
- sb.AppendLine ("function " + ClientID + "_ShowSelectedItemsContextMenu(x,y) {");
- sb.Append (sbCommands.ToString ());
- sb.AppendLine ("var node = WebForm_GetElementById('" + ClientID + "_SelectedItemsContextMenu')");
- sb.AppendLine ("WebForm_SetElementX(node, x)");
- sb.AppendLine ("WebForm_SetElementY(node, y)");
- sb.AppendLine ("WebForm_GetElementById('" + _selectedItemsContextMenu.ClientID + "n0Items').style.height = \"auto\";");
- sb.AppendLine ("WebForm_GetElementById('" + _selectedItemsContextMenu.ClientID + "n0Items').physicalHeight = null;");
- sb.AppendLine ("Menu_HoverStatic(WebForm_GetElementById('" + _selectedItemsContextMenu.ClientID + "n0'));");
- sb.AppendLine ("}");
- sb.AppendLine ("function " + ClientID + "_SetCommandVisible(command, value) {");
- sb.AppendLine ("var node = WebForm_GetElementById(command);");
- sb.AppendLine ("var row = node.parentNode.parentNode.parentNode.parentNode.parentNode;");
- sb.AppendLine ("if (value) {");
- sb.AppendLine ("row.style.visibility = \"visible\";");
- sb.AppendLine ("row.style.display = \"block\";");
- sb.AppendLine ("row.style.position = \"static\";");
- sb.AppendLine ("row.parentNode.parentNode.style.height = \"auto\";");
- sb.AppendLine ("} else {");
- sb.AppendLine ("row.style.visibility = \"hidden\";");
- sb.AppendLine ("row.style.display = \"none\";");
- sb.AppendLine ("row.style.position = \"absolute\";");
- sb.AppendLine ("row.parentNode.parentNode.style.height = \"0px\";");
- sb.AppendLine ("}");
- sb.AppendLine ("}");
- Page.ClientScript.RegisterClientScriptBlock (typeof (FileView), ClientID + "_ShowSelectedItemsContextMenu", sb.ToString (), true);
- }
-
- void SetContextMenuStyle (Menu menu) {
- // TODO
- menu.DynamicMenuStyle.BackColor = Color.White;
- menu.DynamicMenuStyle.BorderStyle = BorderStyle.Solid;
- menu.DynamicMenuStyle.BorderWidth = Unit.Pixel (1);
- menu.DynamicMenuStyle.BorderColor = Color.FromArgb (0xACA899);
- menu.DynamicMenuStyle.HorizontalPadding = Unit.Pixel (2);
- menu.DynamicMenuStyle.VerticalPadding = Unit.Pixel (2);
-
- menu.DynamicMenuItemStyle.ForeColor = Color.Black;
- menu.DynamicMenuItemStyle.Font.Names = new string [] { "Tahoma", "Verdana", "Geneva", "Arial", "Helvetica", "sans-serif" };
- menu.DynamicMenuItemStyle.VerticalPadding = Unit.Pixel (1);
- menu.DynamicMenuItemStyle.Font.Size = FontUnit.Parse ("11px", null);
-
- menu.DynamicHoverStyle.ForeColor = Color.White;
- menu.DynamicHoverStyle.BackColor = Color.FromArgb (0x316AC5);
- }
-
- void CreateContextMenuPopupItem (Control control) {
- MenuItemTemplateContainer container = (MenuItemTemplateContainer) control;
- MenuItem menuItem = (MenuItem) container.DataItem;
- if (menuItem.Text == "__separator__") {
- Table t = new Table ();
- t.CellPadding = 0;
- t.CellSpacing = 0;
- t.BorderWidth = 0;
- t.BackColor = Color.FromArgb (0xACA899);
- t.Height = 1;
- t.Width = Unit.Percentage (100);
- t.Style [HtmlTextWriterStyle.Cursor] = "default";
- container.Controls.Add (t);
- TableRow r = new TableRow ();
- TableCell c = new TableCell ();
- System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image ();
- img.ImageUrl = Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.Empty.gif");
- img.Width = 1;
- img.Height = 1;
- c.Controls.Add (img);
- r.Cells.Add (c);
- t.Rows.Add (r);
- }
- else {
- Table t = new Table ();
- t.CellPadding = 0;
- t.CellSpacing = 0;
- t.BorderWidth = 0;
- t.Style [HtmlTextWriterStyle.Cursor] = "default";
- if (menuItem.Enabled)
- t.Attributes ["onclick"] = menuItem.NavigateUrl;
- else
- t.Style ["color"] = "gray";
- t.Attributes ["id"] = ClientID + "CMD" + menuItem.Value;
- container.Controls.Add (t);
- TableRow r = new TableRow ();
- t.Rows.Add (r);
- TableCell c1 = new TableCell ();
- System.Web.UI.WebControls.Image img1 = new System.Web.UI.WebControls.Image ();
- if (String.IsNullOrEmpty (menuItem.ImageUrl))
- img1.ImageUrl = Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.Empty.gif");
- else
- img1.ImageUrl = menuItem.ImageUrl;
- img1.Attributes ["id"] = ClientID + "CMIMG" + menuItem.Value;
- img1.Width = 16;
- img1.Height = 16;
- c1.Controls.Add (img1);
- r.Cells.Add (c1);
- TableCell c2 = new TableCell ();
- c2.Wrap = false;
- c2.Style [HtmlTextWriterStyle.PaddingLeft] = "2px";
- c2.Style [HtmlTextWriterStyle.PaddingRight] = "2px";
- c2.Text = " " + menuItem.Text;
- c2.Width = Unit.Percentage (100);
- r.Cells.Add (c2);
- TableCell c3 = new TableCell ();
- System.Web.UI.WebControls.Image img3 = new System.Web.UI.WebControls.Image ();
- if (menuItem.ChildItems.Count == 0)
- img3.ImageUrl = Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.Empty.gif");
- else
- if (Controller.IsRightToLeft)
- img3.ImageUrl = Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.PopOutRtl.gif");
- else
- img3.ImageUrl = Page.ClientScript.GetWebResourceUrl (typeof (FileManagerController), "IZ.WebFileManager.resources.PopOut.gif");
- img3.Width = 16;
- img3.Height = 16;
- c3.Controls.Add (img3);
- r.Cells.Add (c3);
- }
- }
-
- void CreateContextMenuRootItem (Control control) {
- }
-
- #endregion
- }
- }