1163 lines
		
	
	
		
			42 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1163 lines
		
	
	
		
			42 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.ComponentModel;
 | |
| using System.Drawing;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| using System.Xml;
 | |
| using DevComponents.AdvTree;
 | |
| using DevComponents.DotNetBar.Primitives;
 | |
| using DevComponents.DotNetBar.Rendering;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.Controls
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Represents Toolbox control to create.
 | |
|     /// </summary>
 | |
|     [ToolboxBitmap(typeof(ToolboxControl), "Controls.ToolboxControl.bmp"), ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.ToolboxControlDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf"), System.Runtime.InteropServices.ComVisible(false)]
 | |
|     public class ToolboxControl : ContainerControl
 | |
|     {
 | |
|         #region Implementation
 | |
| 
 | |
|         private ItemPanel _ItemPanel = null;
 | |
|         private Bar _TitleBar = null;
 | |
|         private TextBoxX _SearchBox = null;
 | |
|         private Bar _MenuBar = null;
 | |
| 
 | |
|         public ToolboxControl()
 | |
|         {
 | |
|             _BackgroundStyle.StyleChanged += new EventHandler(this.VisualPropertyChanged);
 | |
|             _BackgroundStyle.Class = ElementStyleClassKeys.ToolboxControlKey;
 | |
|             this.Padding = new System.Windows.Forms.Padding(2);
 | |
| 
 | |
|             this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque |
 | |
|             ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer | ControlStyles.Selectable, true);
 | |
| 
 | |
|             _ItemPanel = CreateItemsPanel();
 | |
|             this.Controls.Add(_ItemPanel);
 | |
| 
 | |
|             _MenuBar = CreateMenuBar();
 | |
|             this.Controls.Add(_MenuBar);
 | |
| 
 | |
|             _SearchBox = CreateSearchBox();
 | |
|             this.Controls.Add(_SearchBox);
 | |
| 
 | |
|             _TitleBar = CreateTitleBar();
 | |
|             this.Controls.Add(_TitleBar);
 | |
| 
 | |
|             _SelectedItems = new CustomCollection<ToolboxItem>();
 | |
| 
 | |
|             _Groups.CollectionChanged += GroupsCollectionChanged;
 | |
|         }
 | |
| 
 | |
|         private void GroupsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
 | |
|         {
 | |
|             if (e.Action == NotifyCollectionChangedAction.Add)
 | |
|             {
 | |
|                 int index = e.NewStartingIndex;
 | |
|                 foreach (ToolboxGroup group in e.NewItems)
 | |
|                 {
 | |
|                     _ItemPanel.Items.Insert(index, group);
 | |
|                     index++;
 | |
|                 }
 | |
|             }
 | |
|             else if (e.Action == NotifyCollectionChangedAction.Remove)
 | |
|             {
 | |
|                 foreach (ToolboxGroup group in e.OldItems)
 | |
|                     _ItemPanel.Items.Remove(group);
 | |
|             }
 | |
|             else if (e.Action == NotifyCollectionChangedAction.Reset)
 | |
|             {
 | |
|                 _ItemPanel.Items.Clear();
 | |
|                 if (e.NewItems != null)
 | |
|                 {
 | |
|                     foreach (ToolboxGroup group in e.NewItems)
 | |
|                         _ItemPanel.Items.Add(group);
 | |
|                 }
 | |
|             }
 | |
|             else if (e.Action == NotifyCollectionChangedAction.Replace)
 | |
|             {
 | |
|                 _ItemPanel.Items.Remove(e.NewStartingIndex);
 | |
|                 _ItemPanel.Items.Insert(e.NewStartingIndex, (BaseItem)e.NewItems[0]);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected override void Dispose(bool disposing)
 | |
|         {
 | |
|             base.Dispose(disposing);
 | |
|         }
 | |
| 
 | |
|         private ButtonItem _MenuButton = null;
 | |
|         private Bar CreateMenuBar()
 | |
|         {
 | |
|             Bar menuBar = new Bar();
 | |
|             menuBar.Name = "menuBar";
 | |
|             menuBar.AntiAlias = true;
 | |
|             menuBar.BackColor = System.Drawing.Color.Transparent;
 | |
|             menuBar.Dock = System.Windows.Forms.DockStyle.Top;
 | |
|             menuBar.Font = new System.Drawing.Font("Segoe UI", 9F);
 | |
|             menuBar.IsMaximized = false;
 | |
|             menuBar.Location = new System.Drawing.Point(6, 93);
 | |
|             menuBar.PaddingBottom = 4;
 | |
|             menuBar.PaddingTop = 4;
 | |
|             menuBar.Size = new System.Drawing.Size(365, 61);
 | |
|             menuBar.Stretch = true;
 | |
|             menuBar.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
 | |
|             menuBar.TabIndex = 2;
 | |
|             menuBar.TabStop = false;
 | |
| 
 | |
|             ButtonItem menuButton = new ButtonItem("menuButton");
 | |
|             menuButton.AutoExpandOnClick = true;
 | |
|             menuButton.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText;
 | |
|             menuButton.ImagePaddingHorizontal = 30;
 | |
|             menuButton.ImagePaddingVertical = 12;
 | |
|             menuButton.ImagePosition = DevComponents.DotNetBar.eImagePosition.Right;
 | |
|             menuButton.PopupSide = DevComponents.DotNetBar.ePopupSide.Right;
 | |
|             menuButton.Text = "Menu";
 | |
|             menuButton.SubItems.Add(new ButtonItem()); // Just placeholder
 | |
|             menuButton.PopupOpen += MenuButtonPopupOpen;
 | |
|             menuButton.PopupClose += MenuButtonPopupClose;
 | |
|             _MenuButton = menuButton;
 | |
| 
 | |
|             menuBar.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
 | |
|             menuButton});
 | |
| 
 | |
|             return menuBar;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the Bar control used as menu bar.
 | |
|         /// </summary>
 | |
|         [Browsable(false)]
 | |
|         public Bar MenuBar
 | |
|         {
 | |
|             get { return _MenuBar; }
 | |
|         }
 | |
| 
 | |
|         private void MenuButtonPopupClose(object sender, EventArgs e)
 | |
|         {
 | |
|             ClearAndDisposeMenuItems();
 | |
|             _MenuButton.SubItems.Add(new ButtonItem());
 | |
|         }
 | |
| 
 | |
|         private void ClearAndDisposeMenuItems()
 | |
|         {
 | |
|             foreach (BaseItem item in _MenuButton.SubItems)
 | |
|             {
 | |
|                 item.Dispose();
 | |
|             }
 | |
|             _MenuButton.SubItems.Clear();
 | |
|         }
 | |
| 
 | |
|         private void MenuButtonPopupOpen(object sender, PopupOpenEventArgs e)
 | |
|         {
 | |
|             ClearAndDisposeMenuItems();
 | |
|             foreach (BaseItem item in this.Groups)
 | |
|             {
 | |
|                 ToolboxGroup group = item as ToolboxGroup;
 | |
|                 if (group != null)
 | |
|                 {
 | |
|                     ButtonItem menuItem = new ButtonItem();
 | |
|                     menuItem.Text = group.TitleText;
 | |
|                     menuItem.Click += MenuItemClick;
 | |
|                     menuItem.Tag = group;
 | |
|                     _MenuButton.SubItems.Add(menuItem);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void MenuItemClick(object sender, EventArgs e)
 | |
|         {
 | |
|             ToolboxGroup group = ((BaseItem)sender).Tag as ToolboxGroup;
 | |
|             if (group != null)
 | |
|                 group.Expanded = true;
 | |
|         }
 | |
| 
 | |
|         private string _SearchBoxWatermark = "Enter text to search...";
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates the search-box watermark text.
 | |
|         /// </summary>
 | |
|         [DefaultValue("Enter text to search..."), Category("Appearance"), Description("Indicates the search-box watermark text."), Localizable(true)]
 | |
|         public string SearchBoxWatermark
 | |
|         {
 | |
|             get { return _SearchBoxWatermark; }
 | |
|             set
 | |
|             {
 | |
|                 if (_SearchBoxWatermark != value)
 | |
|                 {
 | |
|                     string oldValue = value;
 | |
|                     _SearchBoxWatermark = value;
 | |
|                     OnSearchBoxWatermarkChanged(oldValue, value);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void OnSearchBoxWatermarkChanged(string oldValue, string newValue)
 | |
|         {
 | |
|             _SearchBox.WatermarkText = newValue;
 | |
|         }
 | |
| 
 | |
|         private TextBoxX CreateSearchBox()
 | |
|         {
 | |
|             TextBoxX searchBox = new TextBoxX();
 | |
|             searchBox.Name = "searchBox";
 | |
|             searchBox.Border.Class = "TextBoxBorder";
 | |
|             searchBox.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
 | |
|             searchBox.ButtonCustom.Symbol = "";
 | |
|             searchBox.ButtonCustom.Visible = true;
 | |
|             searchBox.ButtonCustomClick += SearchBoxButtonCustomClick;
 | |
|             searchBox.Dock = System.Windows.Forms.DockStyle.Top;
 | |
|             searchBox.Location = new System.Drawing.Point(6, 55);
 | |
|             searchBox.PreventEnterBeep = true;
 | |
|             searchBox.Size = new System.Drawing.Size(365, 38);
 | |
|             searchBox.TabIndex = 0;
 | |
|             searchBox.WatermarkText = "Enter text to search...";
 | |
|             searchBox.TextChanged += SearchBoxTextChanged;
 | |
|             searchBox.WordWrap = false;
 | |
| 
 | |
|             return searchBox;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Returns reference to internal search text-box.
 | |
|         /// </summary>
 | |
|         [Browsable(false)]
 | |
|         public TextBoxX SearchBoxTextBox
 | |
|         {
 | |
|             get { return _SearchBox; }
 | |
|         }
 | |
| 
 | |
|         void SearchBoxButtonCustomClick(object sender, EventArgs e)
 | |
|         {
 | |
|             _SearchBox.Text = string.Empty;
 | |
|         }
 | |
| 
 | |
|         private void SearchBoxTextChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(_SearchBox.Text))
 | |
|                 _SearchBox.ButtonCustom.Symbol = "\uf002";
 | |
|             else
 | |
|                 _SearchBox.ButtonCustom.Symbol = "\uf00d";
 | |
|             Search(_SearchBox.Text);
 | |
|         }
 | |
| 
 | |
|         private ButtonItem _ExpandButton = null;
 | |
|         private LabelItem _TitleLabel = null;
 | |
|         private Bar CreateTitleBar()
 | |
|         {
 | |
|             Bar titleBar = new Bar();
 | |
|             titleBar.Name = "titleBar";
 | |
|             titleBar.AntiAlias = true;
 | |
|             titleBar.BackColor = System.Drawing.Color.Transparent;
 | |
|             titleBar.Dock = System.Windows.Forms.DockStyle.Top;
 | |
|             titleBar.IsMaximized = false;
 | |
|             titleBar.Location = new System.Drawing.Point(6, 6);
 | |
|             titleBar.PaddingBottom = 4;
 | |
|             titleBar.PaddingTop = 4;
 | |
|             titleBar.Size = new System.Drawing.Size(365, 49);
 | |
|             titleBar.Stretch = true;
 | |
|             titleBar.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
 | |
|             titleBar.TabIndex = 0;
 | |
|             titleBar.TabStop = false;
 | |
| 
 | |
|             LabelItem toolboxLabel = new LabelItem("toolboxLabel");
 | |
|             toolboxLabel.Text = "Toolbox";
 | |
|             _TitleLabel = toolboxLabel;
 | |
| 
 | |
|             ButtonItem expandButton = new ButtonItem("expandButton");
 | |
|             expandButton.ItemAlignment = DevComponents.DotNetBar.eItemAlignment.Far;
 | |
|             expandButton.Symbol = "\uf053";
 | |
|             expandButton.SymbolSize = 10F;
 | |
|             expandButton.Click += ExpandButtonClick;
 | |
|             _ExpandButton = expandButton;
 | |
| 
 | |
|             titleBar.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
 | |
|             toolboxLabel,
 | |
|             expandButton});
 | |
| 
 | |
|             return titleBar;
 | |
|         }
 | |
| 
 | |
|         private string _TitleText = "Toolbox";
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates the title label text.
 | |
|         /// </summary>
 | |
|         [DefaultValue("Toolbox"), Category("Appearance"), Description("Indicates the title label text."), Localizable(true)]
 | |
|         public string TitleText
 | |
|         {
 | |
|             get { return _TitleText; }
 | |
|             set
 | |
|             {
 | |
|                 if (_TitleText != value)
 | |
|                 {
 | |
|                     string oldValue = value;
 | |
|                     _TitleText = value;
 | |
|                     OnTitleTextChanged(oldValue, value);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void OnTitleTextChanged(string oldValue, string newValue)
 | |
|         {
 | |
|             _TitleLabel.Text = newValue;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the Bar control used as title bar.
 | |
|         /// </summary>
 | |
|         [Browsable(false)]
 | |
|         public Bar TitleBar
 | |
|         {
 | |
|             get { return _TitleBar; }
 | |
|         }
 | |
| 
 | |
|         private void ExpandButtonClick(object sender, EventArgs e)
 | |
|         {
 | |
|             this.Expanded = !this.Expanded;
 | |
|         }
 | |
| 
 | |
|         private ItemPanel CreateItemsPanel()
 | |
|         {
 | |
|             ItemPanel itemPanel = new ItemPanel();
 | |
|             itemPanel.Dock = DockStyle.Fill;
 | |
|             itemPanel.LayoutOrientation = eOrientation.Vertical;
 | |
|             itemPanel.AutoScroll = true;
 | |
| #if !TRIAL
 | |
|             itemPanel.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F";
 | |
| #endif
 | |
|             itemPanel.ItemClick += ItemPanelItemClick;
 | |
|             itemPanel.DragDropSupport = true;
 | |
|             itemPanel.EnableDragDrop = true;
 | |
|             itemPanel.UseNativeDragDrop = true;
 | |
|             itemPanel.AllowDrop = true;
 | |
|             itemPanel.BeforeItemDrag += ItemsPanelBeforeItemDrag;
 | |
|             itemPanel.GetBaseItemContainer().SubItemsChanged += ItemsChanged;
 | |
|             itemPanel.DragDropAllowedContainerTypes.Add(typeof(ToolboxGroup));
 | |
|             return itemPanel;
 | |
|         }
 | |
| 
 | |
|         private void ItemsChanged(object sender, CollectionChangeEventArgs e)
 | |
|         {
 | |
|             if (!IsUpdateSuspended)
 | |
|                 this.RecalcLayout();
 | |
|         }
 | |
| 
 | |
|         private int _UpdateSuspended = 0;
 | |
|         /// <summary>
 | |
|         /// Disables any redrawing of the tree control. To maintain performance while items
 | |
|         /// are added one at a time to the control, call the BeginUpdate method. The BeginUpdate
 | |
|         /// method prevents the control from painting until the
 | |
|         /// <see cref="EndUpdate">EndUpdate</see> method is called.
 | |
|         /// </summary>
 | |
|         public void BeginUpdate()
 | |
|         {
 | |
|             _UpdateSuspended++;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Enables the redrawing of the tree view. To maintain performance while items are
 | |
|         /// added one at a time to the control, call the <see cref="BeginUpdate">BeginUpdate</see>
 | |
|         /// method. The BeginUpdate method prevents the control from painting until the EndUpdate
 | |
|         /// method is called.
 | |
|         /// </summary>
 | |
|         /// <remarks>
 | |
|         /// Call to EndUpdate will enable the layout and painting in tree control. If there
 | |
|         /// are any pending layouts the EndUpdate will call
 | |
|         /// <see cref="RecalcLayout">RecalcLayout</see> method to perform the layout and it will
 | |
|         /// repaint the control.
 | |
|         /// </remarks>
 | |
|         public void EndUpdate()
 | |
|         {
 | |
|             EndUpdate(true);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Enables the redrawing of the tree view. To maintain performance while items are
 | |
|         /// added one at a time to the control, call the <see cref="BeginUpdate">BeginUpdate</see>
 | |
|         /// method. The BeginUpdate method prevents the control from painting until the EndUpdate
 | |
|         /// method is called.
 | |
|         /// </summary>
 | |
|         /// <param name="performLayoutAndRefresh">Gets or sets whether layout and refresh of control is performed if there are no other update blocks pending.</param>
 | |
|         public void EndUpdate(bool performLayoutAndRefresh)
 | |
|         {
 | |
|             if (_UpdateSuspended > 0) _UpdateSuspended--;
 | |
|             if (_UpdateSuspended == 0 && performLayoutAndRefresh)
 | |
|             {
 | |
|                 this.RecalcLayout();
 | |
|                 this.Invalidate(true);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets whether layout is suspended for tree control. Layout is suspended after
 | |
|         /// call to <see cref="BeginUpdate">BeginUpdate</see> method and it is resumed after the
 | |
|         /// call to <see cref="EndUpdate">EndUpdate</see> method.
 | |
|         /// </summary>
 | |
|         [Browsable(false)]
 | |
|         public bool IsUpdateSuspended
 | |
|         {
 | |
|             get { return (_UpdateSuspended > 0); }
 | |
|         }
 | |
| 
 | |
|         public void RecalcLayout()
 | |
|         {
 | |
|             _ItemPanel.RecalcLayout();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Returns reference to internal item panel used to display the toolbox items and groups.
 | |
|         /// </summary>
 | |
|         [Browsable(false)]
 | |
|         public ItemPanel ItemsPanel
 | |
|         {
 | |
|             get { return _ItemPanel; }
 | |
|         }
 | |
| 
 | |
|         private void ItemsPanelBeforeItemDrag(object sender, CancelEventArgs e)
 | |
|         {
 | |
|             OnBeforeItemDrag(sender, e);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Returns collection of toolbox control groups, collection of ToolboxGroup items.
 | |
|         /// </summary>
 | |
|         //[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false)]
 | |
|         //[System.ComponentModel.Editor("DevComponents.DotNetBar.Design.ToolboxControlGroupsEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor))]
 | |
|         //public SubItemsCollection Groups
 | |
|         //{
 | |
|         //    get { return _ItemPanel.GetBaseItemContainer().SubItems; }
 | |
|         //}
 | |
| 
 | |
|         private CustomCollection<ToolboxGroup> _Groups = new CustomCollection<ToolboxGroup>();
 | |
|         /// <summary>
 | |
|         /// Gets the list of items displayed in list box.
 | |
|         /// </summary>
 | |
|         [Category("Appearance"), Description("List of items displayed in list box."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), MergableProperty(false), Localizable(false)]
 | |
|         public CustomCollection<ToolboxGroup> Groups
 | |
|         {
 | |
|             get { return _Groups; }
 | |
|         }
 | |
| 
 | |
|         private bool _ExpandSingleGroupOnly = true;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates whether single group only is expanded at a time. When new group is expanded currently expanded group is collapsed.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Category("Behavior"),
 | |
|          Description("Indicates whether single toolbox group only is expanded at a time")]
 | |
|         public bool ExpandSingleGroupOnly
 | |
|         {
 | |
|             get { return _ExpandSingleGroupOnly; }
 | |
|             set { _ExpandSingleGroupOnly = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs after Expanded property value has changed
 | |
|         /// </summary>
 | |
|         [Description("Occurs after Expanded property value has changed")]
 | |
|         public event EventHandler ExpandedChanged;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Raises ExpandedChanged event.
 | |
|         /// </summary>
 | |
|         /// <param name="e">Provides event arguments.</param>
 | |
|         protected virtual void OnExpandedChanged(EventArgs e)
 | |
|         {
 | |
|             EventHandler handler = ExpandedChanged;
 | |
|             if (handler != null)
 | |
|                 handler(this, e);
 | |
|         }
 | |
| 
 | |
|         private bool _Expanded = true;
 | |
|         /// <summary>
 | |
|         /// Gets or sets whether control is expanded and shows items in full size with image and text. When collapsed
 | |
|         /// control will show only images for toolbox items and will hide other UI elements to minimize its size.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Category("Appearance"), Description("Indicates whether control is expanded and shows items in full size with images and text")]
 | |
|         public bool Expanded
 | |
|         {
 | |
|             get { return _Expanded; }
 | |
|             set
 | |
|             {
 | |
|                 if (_Expanded != value)
 | |
|                 {
 | |
|                     _Expanded = value;
 | |
|                     OnExpandedChanged();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private Color _CollapsedSeparatorColor = Color.Gray;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates the collapsed toolbox separator color, the line drawn between the toolbox and menu/expand buttons above.
 | |
|         /// </summary>
 | |
|         [Category("Appearance"), Description("Indicates the collapsed toolbox separator color, the line drawn between the toolbox and menu/expand buttons above.")]
 | |
|         public Color CollapsedSeparatorColor
 | |
|         {
 | |
|             get { return _CollapsedSeparatorColor; }
 | |
|             set
 | |
|             {
 | |
|                 _CollapsedSeparatorColor = value;
 | |
|                 if (!_Expanded)
 | |
|                 {
 | |
|                     _MenuBar.Invalidate();
 | |
|                     _MenuBar.BorderColors = new Color[] { Color.Empty, Color.Empty, Color.Empty, _CollapsedSeparatorColor };
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public bool ShouldSerializeCollapsedSeparatorColor()
 | |
|         {
 | |
|             return _CollapsedSeparatorColor != Color.Gray;
 | |
|         }
 | |
|         [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public void ResetCollapsedSeparatorColor()
 | |
|         {
 | |
|             CollapsedSeparatorColor = Color.Gray;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the expanded width of the control. This property value is valid after control has been collapsed. 
 | |
|         /// </summary>
 | |
|         [Browsable(false)]
 | |
|         public int ExpandedWidth
 | |
|         {
 | |
|             get { return _ExpandedWidth; }
 | |
|             set { _ExpandedWidth = value; }
 | |
|         }
 | |
| 
 | |
|         private List<BaseItemAutoSizeBag> _CollapsedList = new List<BaseItemAutoSizeBag>();
 | |
|         private int _ExpandedWidth = 0;
 | |
|         protected virtual void OnExpandedChanged()
 | |
|         {
 | |
|             OnExpandedChanged(EventArgs.Empty);
 | |
|             if (!_Expanded)
 | |
|             {
 | |
|                 _ExpandedWidth = this.Width;
 | |
|                 _ExpandButton.Symbol = "\uf054";
 | |
|                 _MenuButton.ButtonStyle = eButtonStyle.Default;
 | |
|                 _TitleLabel.Visible = false;
 | |
| 
 | |
|                 _MenuButton.Symbol = "\ue037";
 | |
|                 _MenuButton.SymbolSet = eSymbolSet.Material;
 | |
|                 _MenuButton.SymbolSize = 10f;
 | |
|                 _MenuButton.ButtonStyle = eButtonStyle.Default;
 | |
|                 _MenuButton.ImagePaddingHorizontal = 8;
 | |
|                 _MenuButton.ImagePaddingVertical = 6;
 | |
|                 _MenuButton.ImagePosition = eImagePosition.Left;
 | |
|                 _MenuButton.ShowSubItems = false;
 | |
|                 _MenuBar.BorderColors = new Color[] { Color.Empty, Color.Empty, Color.Empty, _CollapsedSeparatorColor };
 | |
| 
 | |
|                 _SearchBox.Visible = false;
 | |
| 
 | |
|                 // Collapse everything
 | |
|                 foreach (BaseItem item in _ItemPanel.Items)
 | |
|                 {
 | |
|                     if (!(item is ToolboxGroup)) continue;
 | |
| 
 | |
|                     ToolboxGroup group = (ToolboxGroup)item;
 | |
|                     BaseItemAutoSizeBag bagGroup = AutoSizeBagFactory.CreateAutoSizeBag(group);
 | |
|                     bagGroup.RecordSetting(item);
 | |
|                     _CollapsedList.Add(bagGroup);
 | |
|                     group.TitleVisible = false;
 | |
|                     group.LayoutOrientation = eOrientation.Vertical;
 | |
|                     group.MultiLine = false;
 | |
|                     foreach (BaseItem ti in group.SubItems)
 | |
|                     {
 | |
|                         ButtonItem tbItem = ti as ButtonItem;
 | |
|                         if (tbItem != null)
 | |
|                         {
 | |
|                             BaseItemAutoSizeBag bagItem = AutoSizeBagFactory.CreateAutoSizeBag(tbItem);
 | |
|                             bagItem.RecordSetting(tbItem);
 | |
|                             _CollapsedList.Add(bagItem);
 | |
|                             tbItem.ButtonStyle = eButtonStyle.Default;
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 // Expand everything
 | |
|                 _ExpandButton.Symbol = "\uf053";
 | |
|                 _MenuBar.BorderColors = new Color[0];
 | |
|                 _MenuButton.ButtonStyle = eButtonStyle.ImageAndText;
 | |
|                 _TitleLabel.Visible = true;
 | |
| 
 | |
|                 _MenuButton.Symbol = string.Empty;
 | |
|                 _MenuButton.ButtonStyle = eButtonStyle.Default;
 | |
|                 _MenuButton.ImagePaddingHorizontal = 30;
 | |
|                 _MenuButton.ImagePaddingVertical = 12;
 | |
|                 _MenuButton.ImagePosition = DevComponents.DotNetBar.eImagePosition.Right;
 | |
|                 _MenuButton.ShowSubItems = true;
 | |
|                 _MenuBar.BorderColors = new Color[0];
 | |
| 
 | |
|                 _SearchBox.Visible = true;
 | |
| 
 | |
|                 BaseItemAutoSizeBag[] bagItems = new BaseItemAutoSizeBag[_CollapsedList.Count];
 | |
|                 _CollapsedList.CopyTo(bagItems);
 | |
|                 foreach (BaseItemAutoSizeBag ab in bagItems)
 | |
|                     ab.RestoreSettings();
 | |
| 
 | |
|                 _CollapsedList.Clear();
 | |
| 
 | |
|                 this.Width = _ExpandedWidth;
 | |
|             }
 | |
| 
 | |
|             _ItemPanel.RecalcLayout();
 | |
| 
 | |
|             if (_Expanded)
 | |
|             {
 | |
|                 _MenuButton.FixedSize = Size.Empty;
 | |
|                 _ExpandButton.FixedSize = Size.Empty;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 int itemsWidth = UpdateCollapsedWidth();
 | |
|                 _MenuButton.FixedSize = new Size(itemsWidth - Dpi.Width2, _MenuButton.HeightInternal);
 | |
|                 _ExpandButton.FixedSize = new Size(itemsWidth - Dpi.Width2, _ExpandButton.HeightInternal);
 | |
| 
 | |
|             }
 | |
| 
 | |
|             _MenuBar.RecalcLayout();
 | |
|             _TitleBar.RecalcLayout();
 | |
|         }
 | |
| 
 | |
|         private int UpdateCollapsedWidth()
 | |
|         {
 | |
|             int itemsWidth = GetItemsWidth();
 | |
|             int width = itemsWidth +
 | |
|                     ElementStyleLayout.LeftWhiteSpace(_ItemPanel.BackgroundStyle, eSpacePart.Margin | eSpacePart.Padding) +
 | |
|                     ElementStyleLayout.RightWhiteSpace(_ItemPanel.BackgroundStyle, eSpacePart.Padding | eSpacePart.Margin) + this.Padding.Horizontal;
 | |
|             _MenuButton.FixedSize = new Size(itemsWidth - Dpi.Width2, _MenuButton.HeightInternal);
 | |
|             _ExpandButton.FixedSize = new Size(itemsWidth - Dpi.Width2, _ExpandButton.HeightInternal);
 | |
|             this.Width = width;
 | |
|             return itemsWidth;
 | |
|         }
 | |
| 
 | |
|         private int GetItemsWidth()
 | |
|         {
 | |
|             int width = 0;
 | |
|             bool scrollBar = false;
 | |
|             foreach (BaseItem item in _ItemPanel.Items)
 | |
|             {
 | |
|                 if (item is ToolboxGroup)
 | |
|                 {
 | |
|                     foreach (BaseItem ti in item.SubItems)
 | |
|                     {
 | |
|                         if (ti is ButtonItem && ti.WidthInternal > width)
 | |
|                             width = ti.WidthInternal;
 | |
|                     }
 | |
|                 }
 | |
|                 if (item.Bounds.Bottom > this.ClientRectangle.Height) scrollBar = true;
 | |
|             }
 | |
| 
 | |
|             if (scrollBar)
 | |
|                 width += SystemInformation.VerticalScrollBarWidth;
 | |
| 
 | |
|             if (width == 0)
 | |
|                 width = 32;
 | |
| 
 | |
|             return width;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs after toolbox group is expanded
 | |
|         /// </summary>
 | |
|         [Description("Occurs after toolbox group is expanded")]
 | |
|         public event EventHandler ToolboxGroupExpanded;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Raises RemovingToken event.
 | |
|         /// </summary>
 | |
|         /// <param name="sender">Provides source of the event.</param>
 | |
|         /// <param name="e">Provides event arguments.</param>
 | |
|         protected virtual void OnToolboxGroupExpanded(object sender, EventArgs e)
 | |
|         {
 | |
|             EventHandler handler = ToolboxGroupExpanded;
 | |
|             if (handler != null)
 | |
|                 handler(sender, e);
 | |
|         }
 | |
|         internal void InvokeToolboxGroupExpanded(ToolboxGroup toolboxGroup)
 | |
|         {
 | |
|             if (!_Expanded)
 | |
|             {
 | |
|                 // Adjust width of collapsed control if needed
 | |
|                 UpdateCollapsedWidth();
 | |
|             }
 | |
|             OnToolboxGroupExpanded(toolboxGroup, EventArgs.Empty);
 | |
|         }
 | |
| 
 | |
|         private eToolboxItemSelectionMode _SelectionMode = eToolboxItemSelectionMode.Single;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates toolbox item selection mode.
 | |
|         /// </summary>
 | |
|         [DefaultValue(eToolboxItemSelectionMode.Single), Category("Behavior"), Description("Indicates toolbox item selection mode.")]
 | |
|         public eToolboxItemSelectionMode SelectionMode
 | |
|         {
 | |
|             get { return _SelectionMode; }
 | |
|             set
 | |
|             {
 | |
|                 if (_SelectionMode != value)
 | |
|                 {
 | |
|                     _SelectionMode = value;
 | |
|                     OnSelectionModeChanged();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void OnSelectionModeChanged()
 | |
|         {
 | |
| 
 | |
|         }
 | |
| 
 | |
|         void ItemPanelItemClick(object sender, EventArgs e)
 | |
|         {
 | |
|             if (_SelectionMode == eToolboxItemSelectionMode.NoSelection) return;
 | |
| 
 | |
|             ToolboxItem item = sender as ToolboxItem;
 | |
|             if (item == null || item.AutoCheckOnClick || item.Checked && (Control.ModifierKeys & Keys.Control) == Keys.None) return;
 | |
| 
 | |
|             if (item.Checked)
 | |
|                 SetSelectedItem(item, false);
 | |
|             else
 | |
|                 SetSelectedItem(item, true);
 | |
| 
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Selects or deselects an item.
 | |
|         /// </summary>
 | |
|         /// <param name="item">Item to select or deselect.</param>
 | |
|         /// <param name="isSelected">Selection state.</param>
 | |
|         public void SetSelectedItem(ToolboxItem item, bool isSelected)
 | |
|         {
 | |
|             if (_SelectionMode == eToolboxItemSelectionMode.Single)
 | |
|             {
 | |
|                 if (_SelectedItem == item && !isSelected)
 | |
|                     this.SelectedItem = null;
 | |
|                 else if (isSelected)
 | |
|                     this.SelectedItem = item;
 | |
|             }
 | |
|             else if (item.Checked != isSelected)
 | |
|             {
 | |
|                 item.Checked = isSelected;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs after selected item has changed.
 | |
|         /// </summary>
 | |
|         [Description("Occurs after selected item has changed. ")]
 | |
|         public event EventHandler SelectedItemChanged;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Raises RemovingToken event.
 | |
|         /// </summary>
 | |
|         /// <param name="e">Provides event arguments.</param>
 | |
|         protected virtual void OnSelectedItemChanged(EventArgs e)
 | |
|         {
 | |
|             EventHandler handler = SelectedItemChanged;
 | |
|             if (handler != null)
 | |
|                 handler(this, e);
 | |
|         }
 | |
| 
 | |
|         private CustomCollection<ToolboxItem> _SelectedItems;
 | |
|         /// <summary>
 | |
|         /// Gets a collection containing the currently selected items in the ToolboxControl. Do not modify items in this collection. To select or deselect list items while in multi-selection mode use SetSelected method.
 | |
|         /// </summary>
 | |
|         [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | |
|         public CustomCollection<ToolboxItem> SelectedItems
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _SelectedItems;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private ToolboxItem _SelectedItem;
 | |
|         /// <summary>
 | |
|         /// Gets or sets selected item in toolbox control.
 | |
|         /// </summary>
 | |
|         [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | |
|         public ToolboxItem SelectedItem
 | |
|         {
 | |
|             get { return _SelectedItem; }
 | |
|             set
 | |
|             {
 | |
|                 if (_SelectedItem != value)
 | |
|                 {
 | |
|                     ToolboxItem oldValue = _SelectedItem;
 | |
|                     _SelectedItem = value;
 | |
|                     OnSelectedItemChanged(oldValue, value);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private bool _IgnoreCheckedChange = false;
 | |
|         protected virtual void OnSelectedItemChanged(ToolboxItem oldValue, ToolboxItem newValue)
 | |
|         {
 | |
|             if (oldValue != null)
 | |
|             {
 | |
|                 if (newValue != null) _IgnoreCheckedChange = true;
 | |
|                 oldValue.Checked = false;
 | |
|                 _IgnoreCheckedChange = false;
 | |
|             }
 | |
|             if (newValue != null) newValue.Checked = true;
 | |
|         }
 | |
| 
 | |
|         internal void ToolboxItemCheckedChanged(ToolboxItem toolboxItem)
 | |
|         {
 | |
|             if (_SelectionMode == eToolboxItemSelectionMode.Single)
 | |
|             {
 | |
|                 _SelectedItems.Clear();
 | |
|                 if (toolboxItem.Checked)
 | |
|                     _SelectedItem = toolboxItem;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 if (!toolboxItem.Checked && _SelectedItems.Contains(toolboxItem))
 | |
|                     _SelectedItems.Remove(toolboxItem);
 | |
|                 else if (toolboxItem.Checked)
 | |
|                     _SelectedItems.Add(toolboxItem);
 | |
|             }
 | |
|             if (!_IgnoreCheckedChange)
 | |
|                 OnSelectedItemChanged(EventArgs.Empty);
 | |
|         }
 | |
| 
 | |
|         private bool _TitleVisible = true;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates whether title bar of the control is visible, default value is true.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Category("Appearance"), Description("Indicates whether title bar of the control is visible.")]
 | |
|         public bool TitleVisible
 | |
|         {
 | |
|             get { return _TitleVisible; }
 | |
|             set
 | |
|             {
 | |
|                 if (_TitleVisible != value)
 | |
|                 {
 | |
|                     bool oldValue = value;
 | |
|                     _TitleVisible = value;
 | |
|                     OnTitleVisibleChanged(oldValue, value);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void OnTitleVisibleChanged(bool oldValue, bool newValue)
 | |
|         {
 | |
|             _TitleBar.Visible = newValue;
 | |
|         }
 | |
| 
 | |
|         private bool _MenuVisible = true;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates whether menu bar of the control is visible, default value is true.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Category("Appearance"), Description("Indicates whether menu bar of the control is visible")]
 | |
|         public bool MenuVisible
 | |
|         {
 | |
|             get { return _MenuVisible; }
 | |
|             set
 | |
|             {
 | |
|                 if (_MenuVisible != value)
 | |
|                 {
 | |
|                     bool oldValue = value;
 | |
|                     _MenuVisible = value;
 | |
|                     OnMenuVisibleChanged(oldValue, value);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void OnMenuVisibleChanged(bool oldValue, bool newValue)
 | |
|         {
 | |
|             _MenuBar.Visible = newValue;
 | |
|         }
 | |
| 
 | |
|         private bool _SearchBoxVisible = true;
 | |
|         /// <summary>
 | |
|         /// Gets or set whether search text-box which allows searching for the toolbox items is visible. Default value is true.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Category("Appearance"), Description("Indicates whether search text-box which allows searching for the toolbox items is visible.")]
 | |
|         public bool SearchBoxVisible
 | |
|         {
 | |
|             get { return _SearchBoxVisible; }
 | |
|             set
 | |
|             {
 | |
|                 if (_SearchBoxVisible != value)
 | |
|                 {
 | |
|                     _SearchBoxVisible = value;
 | |
|                     OnSearchBoxVisibleChanged();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private bool _SearchForEachWord = true;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates whether search text when entered is split into separate words and items returned that match any of the words entered.
 | |
|         /// </summary>
 | |
|         [Category("Behavior"), DefaultValue(true), Description("Indicates whether search text when entered is split into separate words and items returned that match any of the words entered.")]
 | |
|         public bool SearchForEachWord
 | |
|         {
 | |
|             get { return _SearchForEachWord; }
 | |
|             set
 | |
|             {
 | |
|                 if (_SearchForEachWord != value)
 | |
|                 {
 | |
|                     bool oldValue = value;
 | |
|                     _SearchForEachWord = value;
 | |
|                     OnSearchForEachWordChanged(oldValue, value);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void OnSearchForEachWordChanged(bool oldValue, bool newValue)
 | |
|         {
 | |
| 
 | |
|         }
 | |
| 
 | |
|         private void OnSearchBoxVisibleChanged()
 | |
|         {
 | |
|             _SearchBox.Visible = _SearchBoxVisible;
 | |
|         }
 | |
| 
 | |
|         private bool _IsSearching = false;
 | |
|         private List<BaseItem> _HiddenItems = new List<BaseItem>();
 | |
|         private List<ToolboxGroup> _ExpandedGroups = new List<ToolboxGroup>();
 | |
|         private string _LastSearchText = string.Empty;
 | |
|         /// <summary>
 | |
|         /// Filters control toolbox items based on specified text. To clear last search and show all items pass string.empty or null/nothing as search text.
 | |
|         /// </summary>
 | |
|         /// <param name="text">Text to search for</param>
 | |
|         public void Search(string text)
 | |
|         {
 | |
|             _IsSearching = true;
 | |
|             RestoreHiddenItems();
 | |
| 
 | |
|             if (!string.IsNullOrEmpty(text))
 | |
|             {
 | |
|                 text = text.ToLower();
 | |
|                 string[] wordList = text.Split(' ');
 | |
|                 foreach (BaseItem item in _ItemPanel.Items)
 | |
|                 {
 | |
|                     ToolboxGroup group = item as ToolboxGroup;
 | |
|                     if (group == null) continue;
 | |
|                     if (group.Expanded) _ExpandedGroups.Add(group);
 | |
|                     group.Expanded = true;
 | |
|                     foreach (BaseItem groupItem in group.SubItems)
 | |
|                     {
 | |
|                         ToolboxItem ti = groupItem as ToolboxItem;
 | |
|                         if (ti == null)
 | |
|                         {
 | |
|                             ti.Visible = false;
 | |
|                             _HiddenItems.Add(ti);
 | |
|                             continue;
 | |
|                         }
 | |
|                         if (!((!_SearchForEachWord || wordList.Length < 2) && ti.Text.ToLower().Contains(text) ||
 | |
|                             _SearchBoxVisible && ContainsAny(ti.Text.ToLower(), wordList)))
 | |
|                         {
 | |
|                             ti.Visible = false;
 | |
|                             _HiddenItems.Add(ti);
 | |
|                         }
 | |
|                     }
 | |
|                     if (group.VisibleSubItems == 0)
 | |
|                     {
 | |
|                         group.Visible = false;
 | |
|                         _HiddenItems.Add(group);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             _ItemPanel.RecalcLayout();
 | |
|             _IsSearching = false;
 | |
|             _LastSearchText = text;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets whether control is performing search operation.
 | |
|         /// </summary>
 | |
|         [Browsable(false)]
 | |
|         public bool IsSearching
 | |
|         {
 | |
|             get { return _IsSearching; }
 | |
|         }
 | |
| 
 | |
|         private void RestoreHiddenItems()
 | |
|         {
 | |
|             bool restoreExpanded = _HiddenItems.Count > 0 || !string.IsNullOrEmpty(_LastSearchText);
 | |
|             if (_HiddenItems.Count > 0)
 | |
|             {
 | |
|                 foreach (BaseItem item in _HiddenItems)
 | |
|                 {
 | |
|                     item.Visible = true;
 | |
|                 }
 | |
|                 _HiddenItems.Clear();
 | |
|             }
 | |
| 
 | |
|             if (restoreExpanded)
 | |
|             {
 | |
|                 foreach (BaseItem item in _ItemPanel.Items)
 | |
|                 {
 | |
|                     ToolboxGroup group = item as ToolboxGroup;
 | |
|                     if (group == null) continue;
 | |
|                     if (_ExpandedGroups.Contains(group))
 | |
|                         group.Expanded = true;
 | |
|                     else
 | |
|                         group.Expanded = false;
 | |
|                 }
 | |
|                 _ExpandedGroups.Clear();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private ElementStyle _BackgroundStyle = new ElementStyle();
 | |
|         /// <summary>
 | |
|         /// Specifies the background style of the control.
 | |
|         /// </summary>
 | |
|         [Browsable(true), DevCoBrowsable(true), Category("Style"), Description("Gets or sets bar background style."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | |
|         public ElementStyle BackgroundStyle
 | |
|         {
 | |
|             get { return _BackgroundStyle; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Resets style to default value. Used by windows forms designer.
 | |
|         /// </summary>
 | |
|         [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public void ResetBackgroundStyle()
 | |
|         {
 | |
|             _BackgroundStyle.StyleChanged -= new EventHandler(this.VisualPropertyChanged);
 | |
|             _BackgroundStyle = new ElementStyle();
 | |
|             _BackgroundStyle.StyleChanged += new EventHandler(this.VisualPropertyChanged);
 | |
|             this.Invalidate();
 | |
|         }
 | |
| 
 | |
|         private void VisualPropertyChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             OnVisualPropertyChanged();
 | |
|         }
 | |
| 
 | |
|         protected virtual void OnVisualPropertyChanged()
 | |
|         {
 | |
|             this.Invalidate();
 | |
|         }
 | |
| 
 | |
|         private void PaintStyleBackground(Graphics g)
 | |
|         {
 | |
|             if (!this.BackColor.IsEmpty)
 | |
|             {
 | |
|                 using (SolidBrush brush = new SolidBrush(this.BackColor))
 | |
|                     g.FillRectangle(brush, this.ClientRectangle);
 | |
|             }
 | |
| 
 | |
|             ElementStyleDisplayInfo info = new ElementStyleDisplayInfo();
 | |
|             info.Bounds = this.ClientRectangle;
 | |
|             info.Graphics = g;
 | |
|             bool disposeStyle = false;
 | |
|             ElementStyle style = ElementStyleDisplay.GetElementStyle(_BackgroundStyle, out disposeStyle);
 | |
|             info.Style = style;
 | |
|             ElementStyleDisplay.Paint(info);
 | |
|             if (disposeStyle)
 | |
|                 style.Dispose();
 | |
|         }
 | |
| 
 | |
|         protected override void OnPaint(PaintEventArgs e)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             PaintStyleBackground(g);
 | |
| 
 | |
|             base.OnPaint(e);
 | |
|         }
 | |
| 
 | |
|         // <summary>
 | |
|         /// Occurs before an item drag & drop operation is started and allows cancellation.
 | |
|         /// </summary>
 | |
|         [Description("Occurs before an item drag & drop operation is started and allows cancellation")]
 | |
|         public event CancelEventHandler BeforeItemDrag;
 | |
|         /// <summary>
 | |
|         /// Raises BeforeItemDrag event.
 | |
|         /// </summary>
 | |
|         /// <param name="itemSource">Item being dragged.</param>
 | |
|         /// <param name="e">Provides event arguments.</param>
 | |
|         protected virtual void OnBeforeItemDrag(object itemSource, CancelEventArgs e)
 | |
|         {
 | |
|             CancelEventHandler handler = BeforeItemDrag;
 | |
|             if (handler != null)
 | |
|                 handler(itemSource, e);
 | |
|         }
 | |
| 
 | |
|         private static bool ContainsAny(string textToSearch, params string[] wordsList)
 | |
|         {
 | |
|             foreach (string word in wordsList)
 | |
|             {
 | |
|                 if (textToSearch.Contains(word))
 | |
|                     return true;
 | |
|             }
 | |
| 
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates whether item drag and drop is enabled. Default value is true.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Category("Behavior"), Description("Indicates whether item drag and drop is enabled. Default value is true.")]
 | |
|         public bool ItemDragDropEnabled
 | |
|         {
 | |
|             get { return _ItemPanel.EnableDragDrop; }
 | |
|             set { _ItemPanel.EnableDragDrop = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates whether toolbox items can be rearranged using drag & drop.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Category("Behavior"), Description("Indicates whether toolbox items can be rearranged using drag & drop.")]
 | |
|         public bool ItemRearrangeEnabled
 | |
|         {
 | |
|             get { return _ItemPanel.AllowDrop; }
 | |
|             set { _ItemPanel.AllowDrop = value; }
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region Licensing
 | |
| #if !TRIAL
 | |
|         private string m_LicenseKey = "";
 | |
|         private bool m_DialogDisplayed = false;
 | |
|         [Browsable(false), DefaultValue("")]
 | |
|         public string LicenseKey
 | |
|         {
 | |
|             get { return m_LicenseKey; }
 | |
|             set
 | |
|             {
 | |
|                 if (NodeOperations.ValidateLicenseKey(value))
 | |
|                     return;
 | |
|                 m_LicenseKey = (!NodeOperations.CheckLicenseKey(value) ? "9dsjkhds7" : value);
 | |
|             }
 | |
|         }
 | |
| #endif
 | |
|         #endregion
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Defines selection modes for toolbox control items.
 | |
|     /// </summary>
 | |
|     public enum eToolboxItemSelectionMode
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// No item selection is allowed.
 | |
|         /// </summary>
 | |
|         NoSelection,
 | |
|         /// <summary>
 | |
|         /// Only single item can be selected.
 | |
|         /// </summary>
 | |
|         Single,
 | |
|         /// <summary>
 | |
|         /// Multiple items can be selected.
 | |
|         /// </summary>
 | |
|         Multiple
 | |
|     }
 | |
| }
 |