diff --git a/DarkUI/Controls/DarkDropdownItem.cs b/DarkUI/Controls/DarkDropdownItem.cs new file mode 100644 index 0000000..e110c29 --- /dev/null +++ b/DarkUI/Controls/DarkDropdownItem.cs @@ -0,0 +1,34 @@ +using System.Drawing; +using System.Windows.Forms; + +namespace DarkUI.Controls +{ + public class DarkDropdownItem + { + #region Property Region + + public string Text { get; set; } + + public Bitmap Icon { get; set; } + + #endregion + + #region Constructor Region + + public DarkDropdownItem() + { } + + public DarkDropdownItem(string text) + { + Text = text; + } + + public DarkDropdownItem(string text, Bitmap icon) + : this(text) + { + Icon = icon; + } + + #endregion + } +} diff --git a/DarkUI/Controls/DarkDropdownList.cs b/DarkUI/Controls/DarkDropdownList.cs new file mode 100644 index 0000000..ad43722 --- /dev/null +++ b/DarkUI/Controls/DarkDropdownList.cs @@ -0,0 +1,489 @@ +using DarkUI.Config; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Collections.Specialized; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; + +namespace DarkUI.Controls +{ + public class DarkDropdownList : Control + { + #region Event Region + + public event EventHandler SelectedItemChanged; + + #endregion + + #region Field Region + + private DarkControlState _controlState = DarkControlState.Normal; + + private ObservableCollection _items = new ObservableCollection(); + private DarkDropdownItem _selectedItem; + + private DarkContextMenu _menu = new DarkContextMenu(); + private bool _menuOpen = false; + + private bool _showBorder = true; + + private int _itemHeight = 22; + private int _maxHeight = 130; + + private readonly int _iconSize = 16; + + private ToolStripDropDownDirection _dropdownDirection = ToolStripDropDownDirection.Default; + + #endregion + + #region Property Region + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public ObservableCollection Items + { + get { return _items; } + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public DarkDropdownItem SelectedItem + { + get { return _selectedItem; } + set + { + _selectedItem = value; + SelectedItemChanged?.Invoke(this, new EventArgs()); + } + } + + [Category("Appearance")] + [Description("Determines whether a border is drawn around the control.")] + [DefaultValue(true)] + public bool ShowBorder + { + get { return _showBorder; } + set + { + _showBorder = value; + Invalidate(); + } + } + + protected override Size DefaultSize + { + get { return new Size(100, 26); } + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public DarkControlState ControlState + { + get { return _controlState; } + } + + [Category("Appearance")] + [Description("Determines the height of the individual list view items.")] + [DefaultValue(22)] + public int ItemHeight + { + get { return _itemHeight; } + set + { + _itemHeight = value; + ResizeMenu(); + } + } + + [Category("Appearance")] + [Description("Determines the maximum height of the dropdown panel.")] + [DefaultValue(130)] + public int MaxHeight + { + get { return _maxHeight; } + set + { + _maxHeight = value; + ResizeMenu(); + } + } + + [Category("Behavior")] + [Description("Determines what location the dropdown list appears.")] + [DefaultValue(ToolStripDropDownDirection.Default)] + public ToolStripDropDownDirection DropdownDirection + { + get { return _dropdownDirection; } + set { _dropdownDirection = value; } + } + + #endregion + + #region Constructor Region + + public DarkDropdownList() + { + SetStyle(ControlStyles.OptimizedDoubleBuffer | + ControlStyles.ResizeRedraw | + ControlStyles.UserPaint | + ControlStyles.Selectable | + ControlStyles.UserMouse, true); + + _menu.AutoSize = false; + _menu.Closed += Menu_Closed; + + Items.CollectionChanged += Items_CollectionChanged; + SelectedItemChanged += DarkDropdownList_SelectedItemChanged; + + SetControlState(DarkControlState.Normal); + } + + #endregion + + #region Method Region + + private ToolStripMenuItem GetMenuItem(DarkDropdownItem item) + { + foreach (ToolStripMenuItem menuItem in _menu.Items) + { + if ((DarkDropdownItem)menuItem.Tag == item) + return menuItem; + } + + return null; + } + + private void SetControlState(DarkControlState controlState) + { + if (_menuOpen) + return; + + if (_controlState != controlState) + { + _controlState = controlState; + Invalidate(); + } + } + + private void ShowMenu() + { + if (_menu.Visible) + return; + + SetControlState(DarkControlState.Pressed); + + _menuOpen = true; + + var pos = new Point(0, ClientRectangle.Bottom); + + if (_dropdownDirection == ToolStripDropDownDirection.AboveLeft || _dropdownDirection == ToolStripDropDownDirection.AboveRight) + pos.Y = 0; + + _menu.Show(this, pos, _dropdownDirection); + + if (SelectedItem != null) + { + var selectedItem = GetMenuItem(SelectedItem); + selectedItem.Select(); + } + } + + private void ResizeMenu() + { + var width = ClientRectangle.Width; + var height = (_menu.Items.Count * _itemHeight) + 4; + + if (height > _maxHeight) + height = _maxHeight; + + // Dirty: Check what the autosized items are + foreach (ToolStripMenuItem item in _menu.Items) + { + item.AutoSize = true; + + if (item.Size.Width > width) + width = item.Size.Width; + + item.AutoSize = false; + } + + // Force the size + foreach (ToolStripMenuItem item in _menu.Items) + item.Size = new Size(width - 1, _itemHeight); + + _menu.Size = new Size(width, height); + } + + #endregion + + #region Event Handler Region + + private void Items_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + { + if (e.Action == NotifyCollectionChangedAction.Add) + { + foreach (DarkDropdownItem item in e.NewItems) + { + var menuItem = new ToolStripMenuItem(item.Text) + { + Image = item.Icon, + AutoSize = false, + Height = _itemHeight, + Font = Font, + Tag = item, + TextAlign = ContentAlignment.MiddleLeft + }; + + _menu.Items.Add(menuItem); + menuItem.Click += Item_Select; + + if (SelectedItem == null) + SelectedItem = item; + } + } + + if (e.Action == NotifyCollectionChangedAction.Remove) + { + foreach (DarkDropdownItem item in e.OldItems) + { + foreach (ToolStripMenuItem menuItem in _menu.Items) + { + if ((DarkDropdownItem)menuItem.Tag == item) + _menu.Items.Remove(menuItem); + } + } + } + + ResizeMenu(); + } + + private void Item_Select(object sender, EventArgs e) + { + var menuItem = sender as ToolStripMenuItem; + if (menuItem == null) + return; + + var dropdownItem = (DarkDropdownItem)menuItem.Tag; + if (_selectedItem != dropdownItem) + SelectedItem = dropdownItem; + } + + private void DarkDropdownList_SelectedItemChanged(object sender, EventArgs e) + { + foreach (ToolStripMenuItem item in _menu.Items) + { + if ((DarkDropdownItem)item.Tag == SelectedItem) + { + item.BackColor = Colors.DarkBlueBackground; + item.Font = new Font(Font, FontStyle.Bold); + } + else + { + item.BackColor = Colors.GreyBackground; + item.Font = new Font(Font, FontStyle.Regular); + } + } + + Invalidate(); + } + + protected override void OnResize(EventArgs e) + { + base.OnResize(e); + + ResizeMenu(); + } + + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + + if (e.Button == MouseButtons.Left) + { + if (ClientRectangle.Contains(e.Location)) + SetControlState(DarkControlState.Pressed); + else + SetControlState(DarkControlState.Hover); + } + else + { + SetControlState(DarkControlState.Hover); + } + } + + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + + ShowMenu(); + } + + protected override void OnMouseUp(MouseEventArgs e) + { + base.OnMouseUp(e); + + SetControlState(DarkControlState.Normal); + } + + protected override void OnMouseLeave(EventArgs e) + { + base.OnMouseLeave(e); + + SetControlState(DarkControlState.Normal); + } + + protected override void OnMouseCaptureChanged(EventArgs e) + { + base.OnMouseCaptureChanged(e); + + var location = Cursor.Position; + + if (!ClientRectangle.Contains(location)) + SetControlState(DarkControlState.Normal); + } + + protected override void OnGotFocus(EventArgs e) + { + base.OnGotFocus(e); + + Invalidate(); + } + + protected override void OnLostFocus(EventArgs e) + { + base.OnLostFocus(e); + + var location = Cursor.Position; + + if (!ClientRectangle.Contains(location)) + SetControlState(DarkControlState.Normal); + else + SetControlState(DarkControlState.Hover); + } + + protected override void OnKeyDown(KeyEventArgs e) + { + base.OnKeyDown(e); + + if (e.KeyCode == Keys.Space) + ShowMenu(); + } + + private void Menu_Closed(object sender, ToolStripDropDownClosedEventArgs e) + { + _menuOpen = false; + + if (!ClientRectangle.Contains(MousePosition)) + SetControlState(DarkControlState.Normal); + else + SetControlState(DarkControlState.Hover); + } + + #endregion + + #region Render Region + + protected override void OnPaint(PaintEventArgs e) + { + var g = e.Graphics; + + // Draw background + using (var b = new SolidBrush(Colors.MediumBackground)) + { + g.FillRectangle(b, ClientRectangle); + } + + // Draw normal state + if (ControlState == DarkControlState.Normal) + { + if (ShowBorder) + { + using (var p = new Pen(Colors.LightBorder, 1)) + { + var modRect = new Rectangle(ClientRectangle.Left, ClientRectangle.Top, ClientRectangle.Width - 1, ClientRectangle.Height - 1); + g.DrawRectangle(p, modRect); + } + } + } + + // Draw hover state + if (ControlState == DarkControlState.Hover) + { + using (var b = new SolidBrush(Colors.DarkBorder)) + { + g.FillRectangle(b, ClientRectangle); + } + + using (var b = new SolidBrush(Colors.DarkBackground)) + { + var arrowRect = new Rectangle(ClientRectangle.Right - DropdownIcons.small_arrow.Width - 8, ClientRectangle.Top, DropdownIcons.small_arrow.Width + 8, ClientRectangle.Height); + g.FillRectangle(b, arrowRect); + } + + using (var p = new Pen(Colors.BlueSelection, 1)) + { + var modRect = new Rectangle(ClientRectangle.Left, ClientRectangle.Top, ClientRectangle.Width - 1 - DropdownIcons.small_arrow.Width - 8, ClientRectangle.Height - 1); + g.DrawRectangle(p, modRect); + } + } + + // Draw pressed state + if (ControlState == DarkControlState.Pressed) + { + using (var b = new SolidBrush(Colors.DarkBorder)) + { + g.FillRectangle(b, ClientRectangle); + } + + using (var b = new SolidBrush(Colors.BlueSelection)) + { + var arrowRect = new Rectangle(ClientRectangle.Right - DropdownIcons.small_arrow.Width - 8, ClientRectangle.Top, DropdownIcons.small_arrow.Width + 8, ClientRectangle.Height); + g.FillRectangle(b, arrowRect); + } + } + + // Draw dropdown arrow + using (var img = DropdownIcons.small_arrow) + { + g.DrawImageUnscaled(img, ClientRectangle.Right - img.Width - 4, ClientRectangle.Top + (ClientRectangle.Height / 2) - (img.Height / 2)); + } + + // Draw selected item + if (SelectedItem != null) + { + // Draw Icon + var hasIcon = SelectedItem.Icon != null; + + if (hasIcon) + { + g.DrawImageUnscaled(SelectedItem.Icon, new Point(ClientRectangle.Left + 5, ClientRectangle.Top + (ClientRectangle.Height / 2) - (_iconSize / 2))); + } + + // Draw Text + using (var b = new SolidBrush(Colors.LightText)) + { + var stringFormat = new StringFormat + { + Alignment = StringAlignment.Near, + LineAlignment = StringAlignment.Center + }; + + var rect = new Rectangle(ClientRectangle.Left + 2, ClientRectangle.Top, ClientRectangle.Width - 16, ClientRectangle.Height); + + if (hasIcon) + { + rect.X += _iconSize + 7; + rect.Width -= _iconSize + 7; + } + + g.DrawString(SelectedItem.Text, Font, b, rect, stringFormat); + } + } + } + + #endregion + } +} diff --git a/DarkUI/Controls/DarkListItem.cs b/DarkUI/Controls/DarkListItem.cs index 1070753..b8abcbe 100644 --- a/DarkUI/Controls/DarkListItem.cs +++ b/DarkUI/Controls/DarkListItem.cs @@ -38,6 +38,8 @@ namespace DarkUI.Controls public FontStyle FontStyle { get; set; } + public Bitmap Icon { get; set; } + public object Tag { get; set; } #endregion diff --git a/DarkUI/Controls/DarkListView.cs b/DarkUI/Controls/DarkListView.cs index 35b71ce..76955a2 100644 --- a/DarkUI/Controls/DarkListView.cs +++ b/DarkUI/Controls/DarkListView.cs @@ -23,6 +23,8 @@ namespace DarkUI.Controls private int _itemHeight = 20; private bool _multiSelect; + private readonly int _iconSize = 16; + private ObservableCollection _items; private List _selectedIndices; private int _anchoredItemStart = -1; @@ -79,6 +81,11 @@ namespace DarkUI.Controls set { _multiSelect = value; } } + [Category("Appearance")] + [Description("Determines whether icons are rendered with the list items.")] + [DefaultValue(false)] + public bool ShowIcons { get; set; } + #endregion #region Constructor Region @@ -397,6 +404,9 @@ namespace DarkUI.Controls var size = g.MeasureString(item.Text, Font); size.Width++; + if (ShowIcons) + size.Width += _iconSize + 8; + item.Area = new Rectangle(item.Area.Left, item.Area.Top, (int)size.Width, item.Area.Height); } @@ -523,6 +533,12 @@ namespace DarkUI.Controls g.DrawLine(p, new Point(rect.Left, rect.Bottom - 1), new Point(rect.Right, rect.Bottom - 1)); }*/ + // Icon + if (ShowIcons && Items[i].Icon != null) + { + g.DrawImageUnscaled(Items[i].Icon, new Point(rect.Left + 5, rect.Top + (rect.Height / 2) - (_iconSize / 2))); + } + // Text using (var b = new SolidBrush(Items[i].TextColor)) { @@ -535,6 +551,10 @@ namespace DarkUI.Controls var modFont = new Font(Font, Items[i].FontStyle); var modRect = new Rectangle(rect.Left + 2, rect.Top, rect.Width, rect.Height); + + if (ShowIcons) + modRect.X += _iconSize + 8; + g.DrawString(Items[i].Text, modFont, b, modRect, stringFormat); } } diff --git a/DarkUI/Controls/DarkScrollBar.cs b/DarkUI/Controls/DarkScrollBar.cs index 4b9ab16..55d5a80 100644 --- a/DarkUI/Controls/DarkScrollBar.cs +++ b/DarkUI/Controls/DarkScrollBar.cs @@ -388,16 +388,8 @@ namespace DarkUI.Controls public void UpdateScrollBar() { - if (ViewSize >= Maximum) - return; - var area = ClientRectangle; - // Cap to maximum value - var maximumValue = Maximum - ViewSize; - if (Value > maximumValue) - Value = maximumValue; - // Arrow buttons if (_scrollOrientation == DarkScrollOrientation.Vertical) { @@ -427,7 +419,15 @@ namespace DarkUI.Controls } private void UpdateThumb(bool forceRefresh = false) - { + { + if (ViewSize >= Maximum) + return; + + // Cap to maximum value + var maximumValue = Maximum - ViewSize; + if (Value > maximumValue) + Value = maximumValue; + // Calculate size ratio _viewContentRatio = (float)ViewSize / (float)Maximum; var viewAreaSize = Maximum - ViewSize; @@ -493,6 +493,9 @@ namespace DarkUI.Controls if (_upArrowClicked) upIcon = ScrollIcons.scrollbar_arrow_clicked; + if (!Enabled) + upIcon = ScrollIcons.scrollbar_arrow_disabled; + if (_scrollOrientation == DarkScrollOrientation.Vertical) upIcon.RotateFlip(RotateFlipType.RotateNoneFlipY); else if (_scrollOrientation == DarkScrollOrientation.Horizontal) @@ -508,6 +511,9 @@ namespace DarkUI.Controls if (_downArrowClicked) downIcon = ScrollIcons.scrollbar_arrow_clicked; + if (!Enabled) + downIcon = ScrollIcons.scrollbar_arrow_disabled; + if (_scrollOrientation == DarkScrollOrientation.Horizontal) downIcon.RotateFlip(RotateFlipType.Rotate270FlipNone); @@ -516,14 +522,17 @@ namespace DarkUI.Controls _downArrowArea.Top + (_downArrowArea.Height / 2) - (downIcon.Height / 2)); // Draw thumb - var scrollColor = _thumbHot ? Colors.GreyHighlight : Colors.GreySelection; - - if (_isScrolling) - scrollColor = Colors.ActiveControl; - - using (var b = new SolidBrush(scrollColor)) + if (Enabled) { - g.FillRectangle(b, _thumbArea); + var scrollColor = _thumbHot ? Colors.GreyHighlight : Colors.GreySelection; + + if (_isScrolling) + scrollColor = Colors.ActiveControl; + + using (var b = new SolidBrush(scrollColor)) + { + g.FillRectangle(b, _thumbArea); + } } } diff --git a/DarkUI/Controls/DarkScrollBase.cs b/DarkUI/Controls/DarkScrollBase.cs index f0d56c1..46426ae 100644 --- a/DarkUI/Controls/DarkScrollBase.cs +++ b/DarkUI/Controls/DarkScrollBase.cs @@ -30,6 +30,8 @@ namespace DarkUI.Controls private int _maxDragChange = 0; private Timer _dragTimer; + private bool _hideScrollBars = true; + #endregion #region Property Region @@ -88,6 +90,19 @@ namespace DarkUI.Controls [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool IsDragging { get; private set; } + [Category("Behavior")] + [Description("Determines whether scrollbars will remain visible when disabled.")] + [DefaultValue(true)] + public bool HideScrollBars + { + get { return _hideScrollBars; } + set + { + _hideScrollBars = value; + UpdateScrollBars(); + } + } + #endregion #region Constructor Region @@ -159,8 +174,14 @@ namespace DarkUI.Controls private void SetScrollBarVisibility() { - _vScrollBar.Visible = _visibleSize.Height < ContentSize.Height; - _hScrollBar.Visible = _visibleSize.Width < ContentSize.Width; + _vScrollBar.Enabled = _visibleSize.Height < ContentSize.Height; + _hScrollBar.Enabled = _visibleSize.Width < ContentSize.Width; + + if (_hideScrollBars) + { + _vScrollBar.Visible = _vScrollBar.Enabled; + _hScrollBar.Visible = _hScrollBar.Enabled; + } } private void SetVisibleSize() diff --git a/DarkUI/DarkUI.csproj b/DarkUI/DarkUI.csproj index 6f4914b..f4fcfc8 100644 --- a/DarkUI/DarkUI.csproj +++ b/DarkUI/DarkUI.csproj @@ -50,6 +50,10 @@ Component + + + Component + @@ -161,6 +165,11 @@ True DockIcons.resx + + True + True + DropdownIcons.resx + True True @@ -202,6 +211,11 @@ DockIcons.Designer.cs DarkUI + + ResXFileCodeGenerator + DropdownIcons.Designer.cs + DarkUI + PublicResXFileCodeGenerator MenuIcons.Designer.cs @@ -292,6 +306,12 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\small_arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/DarkUI/Icons/ScrollIcons.Designer.cs b/DarkUI/Icons/ScrollIcons.Designer.cs index 1d297f4..73745cc 100644 --- a/DarkUI/Icons/ScrollIcons.Designer.cs +++ b/DarkUI/Icons/ScrollIcons.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace DarkUI.Icons { +namespace DarkUI { using System; @@ -80,6 +80,16 @@ namespace DarkUI.Icons { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap scrollbar_arrow_disabled { + get { + object obj = ResourceManager.GetObject("scrollbar_arrow_disabled", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/DarkUI/Icons/ScrollIcons.resx b/DarkUI/Icons/ScrollIcons.resx index 8e8374b..b049c9a 100644 --- a/DarkUI/Icons/ScrollIcons.resx +++ b/DarkUI/Icons/ScrollIcons.resx @@ -124,6 +124,9 @@ ..\Resources\scrollbar_arrow_clicked.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\scrollbar_disabled.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\scrollbar_arrow_hot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/DarkUI/Renderers/DarkMenuRenderer.cs b/DarkUI/Renderers/DarkMenuRenderer.cs index 9997e66..ef80e2f 100644 --- a/DarkUI/Renderers/DarkMenuRenderer.cs +++ b/DarkUI/Renderers/DarkMenuRenderer.cs @@ -1,4 +1,5 @@ using DarkUI.Config; +using DarkUI.Controls; using DarkUI.Icons; using System; using System.Drawing; @@ -22,6 +23,7 @@ namespace DarkUI.Renderers { base.InitializeItem(item); + item.BackColor = Colors.GreyBackground; item.ForeColor = Colors.LightText; if (item.GetType() == typeof(ToolStripSeparator)) @@ -107,15 +109,15 @@ namespace DarkUI.Renderers if (e.Item.Enabled) { - // Normal item - if (e.Item.Selected) - { - var rect = new Rectangle(2, 0, e.Item.Width - 3, e.Item.Height); + + var bgColor = e.Item.Selected ? Colors.GreyHighlight : e.Item.BackColor; - using (var b = new SolidBrush(Colors.GreySelection)) - { - g.FillRectangle(b, rect); - } + // Normal item + var rect = new Rectangle(2, 0, e.Item.Width - 3, e.Item.Height); + + using (var b = new SolidBrush(bgColor)) + { + g.FillRectangle(b, rect); } // Header item on open menu @@ -123,8 +125,6 @@ namespace DarkUI.Renderers { if (((ToolStripMenuItem)e.Item).DropDown.Visible && e.Item.IsOnDropDown == false) { - var rect = new Rectangle(2, 0, e.Item.Width - 3, e.Item.Height); - using (var b = new SolidBrush(Colors.GreySelection)) { g.FillRectangle(b, rect); diff --git a/DarkUI/Resources/scrollbar_disabled.png b/DarkUI/Resources/scrollbar_disabled.png new file mode 100644 index 0000000..d29f977 Binary files /dev/null and b/DarkUI/Resources/scrollbar_disabled.png differ diff --git a/DarkUI/Resources/small_arrow.png b/DarkUI/Resources/small_arrow.png new file mode 100644 index 0000000..4824816 Binary files /dev/null and b/DarkUI/Resources/small_arrow.png differ diff --git a/Example/Forms/Docking/DockDocument.Designer.cs b/Example/Forms/Docking/DockDocument.Designer.cs index 8f6a77d..d5d706d 100644 --- a/Example/Forms/Docking/DockDocument.Designer.cs +++ b/Example/Forms/Docking/DockDocument.Designer.cs @@ -29,6 +29,7 @@ private void InitializeComponent() { this.txtDocument = new System.Windows.Forms.TextBox(); + this.cmbOptions = new DarkUI.Controls.DarkDropdownList(); this.SuspendLayout(); // // txtDocument @@ -44,10 +45,24 @@ this.txtDocument.TabIndex = 1; this.txtDocument.Text = "This is some example text"; // + // cmbOptions + // + this.cmbOptions.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.cmbOptions.DropdownDirection = System.Windows.Forms.ToolStripDropDownDirection.AboveRight; + this.cmbOptions.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cmbOptions.Location = new System.Drawing.Point(0, 158); + this.cmbOptions.MaxHeight = 300; + this.cmbOptions.Name = "cmbOptions"; + this.cmbOptions.ShowBorder = false; + this.cmbOptions.Size = new System.Drawing.Size(65, 15); + this.cmbOptions.TabIndex = 2; + this.cmbOptions.Text = "darkComboBox1"; + // // DockDocument // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.cmbOptions); this.Controls.Add(this.txtDocument); this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "DockDocument"; @@ -60,5 +75,6 @@ #endregion private System.Windows.Forms.TextBox txtDocument; + private DarkUI.Controls.DarkDropdownList cmbOptions; } } diff --git a/Example/Forms/Docking/DockDocument.cs b/Example/Forms/Docking/DockDocument.cs index 1b737ca..fe8fa72 100644 --- a/Example/Forms/Docking/DockDocument.cs +++ b/Example/Forms/Docking/DockDocument.cs @@ -1,4 +1,5 @@ using DarkUI.Config; +using DarkUI.Controls; using DarkUI.Docking; using DarkUI.Forms; using System.Drawing; @@ -16,6 +17,14 @@ namespace Example // Workaround to stop the textbox from highlight all text. txtDocument.SelectionStart = txtDocument.Text.Length; + + // Build dummy dropdown data + cmbOptions.Items.Add(new DarkDropdownItem("25%")); + cmbOptions.Items.Add(new DarkDropdownItem("50%")); + cmbOptions.Items.Add(new DarkDropdownItem("100%")); + cmbOptions.Items.Add(new DarkDropdownItem("200%")); + cmbOptions.Items.Add(new DarkDropdownItem("300%")); + cmbOptions.Items.Add(new DarkDropdownItem("400%")); } public DockDocument(string text, Image icon) diff --git a/Example/Forms/Docking/DockLayers.Designer.cs b/Example/Forms/Docking/DockLayers.Designer.cs index 796dec4..446effc 100644 --- a/Example/Forms/Docking/DockLayers.Designer.cs +++ b/Example/Forms/Docking/DockLayers.Designer.cs @@ -32,22 +32,36 @@ namespace Example private void InitializeComponent() { this.lstLayers = new DarkUI.Controls.DarkListView(); + this.cmbList = new DarkUI.Controls.DarkDropdownList(); this.SuspendLayout(); // // lstLayers // this.lstLayers.Dock = System.Windows.Forms.DockStyle.Fill; - this.lstLayers.Location = new System.Drawing.Point(0, 25); + this.lstLayers.HideScrollBars = false; + this.lstLayers.Location = new System.Drawing.Point(0, 51); this.lstLayers.Name = "lstLayers"; - this.lstLayers.Size = new System.Drawing.Size(280, 425); + this.lstLayers.ShowIcons = true; + this.lstLayers.Size = new System.Drawing.Size(280, 399); this.lstLayers.TabIndex = 0; this.lstLayers.Text = "darkListView1"; // + // cmbList + // + this.cmbList.Dock = System.Windows.Forms.DockStyle.Top; + this.cmbList.Location = new System.Drawing.Point(0, 25); + this.cmbList.Name = "cmbList"; + this.cmbList.ShowBorder = false; + this.cmbList.Size = new System.Drawing.Size(280, 26); + this.cmbList.TabIndex = 1; + this.cmbList.Text = "darkDropdownList1"; + // // DockLayers // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.lstLayers); + this.Controls.Add(this.cmbList); this.DefaultDockArea = DarkUI.Docking.DarkDockArea.Right; this.DockText = "Layers"; this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -62,5 +76,6 @@ namespace Example #endregion private DarkListView lstLayers; + private DarkDropdownList cmbList; } } diff --git a/Example/Forms/Docking/DockLayers.cs b/Example/Forms/Docking/DockLayers.cs index 14bf7c4..ebe0440 100644 --- a/Example/Forms/Docking/DockLayers.cs +++ b/Example/Forms/Docking/DockLayers.cs @@ -1,4 +1,5 @@ -using DarkUI.Controls; +using System; +using DarkUI.Controls; using DarkUI.Docking; namespace Example @@ -15,8 +16,15 @@ namespace Example for (var i = 0; i < 100; i++) { var item = new DarkListItem($"List item #{i}"); + item.Icon = Icons.application_16x; lstLayers.Items.Add(item); } + + // Build dropdown list data + for (var i = 0; i < 5; i++) + { + cmbList.Items.Add(new DarkDropdownItem($"Dropdown item #{i}")); + } } #endregion diff --git a/Example/Forms/Docking/DockProperties.Designer.cs b/Example/Forms/Docking/DockProperties.Designer.cs index 29dd419..1251611 100644 --- a/Example/Forms/Docking/DockProperties.Designer.cs +++ b/Example/Forms/Docking/DockProperties.Designer.cs @@ -42,20 +42,26 @@ namespace Example this.darkCheckBox2 = new DarkUI.Controls.DarkCheckBox(); this.darkCheckBox1 = new DarkUI.Controls.DarkCheckBox(); this.darkTitle2 = new DarkUI.Controls.DarkTitle(); + this.darkScrollBar1 = new DarkUI.Controls.DarkScrollBar(); + this.panel3 = new System.Windows.Forms.Panel(); + this.darkTitle3 = new DarkUI.Controls.DarkTitle(); + this.cmbList = new DarkUI.Controls.DarkDropdownList(); this.pnlMain.SuspendLayout(); this.panel1.SuspendLayout(); this.panel2.SuspendLayout(); + this.panel3.SuspendLayout(); this.SuspendLayout(); // // pnlMain // + this.pnlMain.Controls.Add(this.panel3); this.pnlMain.Controls.Add(this.panel1); this.pnlMain.Controls.Add(this.panel2); this.pnlMain.Dock = System.Windows.Forms.DockStyle.Fill; this.pnlMain.Location = new System.Drawing.Point(0, 25); this.pnlMain.Name = "pnlMain"; - this.pnlMain.Padding = new System.Windows.Forms.Padding(10); - this.pnlMain.Size = new System.Drawing.Size(280, 425); + this.pnlMain.Padding = new System.Windows.Forms.Padding(10, 10, 5, 10); + this.pnlMain.Size = new System.Drawing.Size(265, 425); this.pnlMain.TabIndex = 0; // // panel1 @@ -69,7 +75,7 @@ namespace Example this.panel1.Location = new System.Drawing.Point(10, 103); this.panel1.Name = "panel1"; this.panel1.Padding = new System.Windows.Forms.Padding(0, 0, 0, 10); - this.panel1.Size = new System.Drawing.Size(260, 93); + this.panel1.Size = new System.Drawing.Size(250, 93); this.panel1.TabIndex = 2; // // darkRadioButton3 @@ -79,7 +85,7 @@ namespace Example this.darkRadioButton3.Enabled = false; this.darkRadioButton3.Location = new System.Drawing.Point(0, 64); this.darkRadioButton3.Name = "darkRadioButton3"; - this.darkRadioButton3.Size = new System.Drawing.Size(260, 19); + this.darkRadioButton3.Size = new System.Drawing.Size(250, 19); this.darkRadioButton3.TabIndex = 6; this.darkRadioButton3.TabStop = true; this.darkRadioButton3.Text = "Disabled radiobutton"; @@ -90,7 +96,7 @@ namespace Example this.darkRadioButton2.Dock = System.Windows.Forms.DockStyle.Top; this.darkRadioButton2.Location = new System.Drawing.Point(0, 45); this.darkRadioButton2.Name = "darkRadioButton2"; - this.darkRadioButton2.Size = new System.Drawing.Size(260, 19); + this.darkRadioButton2.Size = new System.Drawing.Size(250, 19); this.darkRadioButton2.TabIndex = 5; this.darkRadioButton2.TabStop = true; this.darkRadioButton2.Text = "Radiobutton"; @@ -101,7 +107,7 @@ namespace Example this.darkRadioButton1.Dock = System.Windows.Forms.DockStyle.Top; this.darkRadioButton1.Location = new System.Drawing.Point(0, 26); this.darkRadioButton1.Name = "darkRadioButton1"; - this.darkRadioButton1.Size = new System.Drawing.Size(260, 19); + this.darkRadioButton1.Size = new System.Drawing.Size(250, 19); this.darkRadioButton1.TabIndex = 4; this.darkRadioButton1.TabStop = true; this.darkRadioButton1.Text = "Radiobutton"; @@ -111,7 +117,7 @@ namespace Example this.darkTitle1.Dock = System.Windows.Forms.DockStyle.Top; this.darkTitle1.Location = new System.Drawing.Point(0, 0); this.darkTitle1.Name = "darkTitle1"; - this.darkTitle1.Size = new System.Drawing.Size(260, 26); + this.darkTitle1.Size = new System.Drawing.Size(250, 26); this.darkTitle1.TabIndex = 7; this.darkTitle1.Text = "Radio buttons"; // @@ -126,7 +132,7 @@ namespace Example this.panel2.Location = new System.Drawing.Point(10, 10); this.panel2.Name = "panel2"; this.panel2.Padding = new System.Windows.Forms.Padding(0, 0, 0, 10); - this.panel2.Size = new System.Drawing.Size(260, 93); + this.panel2.Size = new System.Drawing.Size(250, 93); this.panel2.TabIndex = 1; // // darkCheckBox3 @@ -138,7 +144,7 @@ namespace Example this.darkCheckBox3.Enabled = false; this.darkCheckBox3.Location = new System.Drawing.Point(0, 64); this.darkCheckBox3.Name = "darkCheckBox3"; - this.darkCheckBox3.Size = new System.Drawing.Size(260, 19); + this.darkCheckBox3.Size = new System.Drawing.Size(250, 19); this.darkCheckBox3.TabIndex = 6; this.darkCheckBox3.Text = "Disabled checked checkbox"; // @@ -149,7 +155,7 @@ namespace Example this.darkCheckBox2.Enabled = false; this.darkCheckBox2.Location = new System.Drawing.Point(0, 45); this.darkCheckBox2.Name = "darkCheckBox2"; - this.darkCheckBox2.Size = new System.Drawing.Size(260, 19); + this.darkCheckBox2.Size = new System.Drawing.Size(250, 19); this.darkCheckBox2.TabIndex = 5; this.darkCheckBox2.Text = "Disabled checkbox"; // @@ -159,7 +165,7 @@ namespace Example this.darkCheckBox1.Dock = System.Windows.Forms.DockStyle.Top; this.darkCheckBox1.Location = new System.Drawing.Point(0, 26); this.darkCheckBox1.Name = "darkCheckBox1"; - this.darkCheckBox1.Size = new System.Drawing.Size(260, 19); + this.darkCheckBox1.Size = new System.Drawing.Size(250, 19); this.darkCheckBox1.TabIndex = 4; this.darkCheckBox1.Text = "Checkbox"; // @@ -168,15 +174,58 @@ namespace Example this.darkTitle2.Dock = System.Windows.Forms.DockStyle.Top; this.darkTitle2.Location = new System.Drawing.Point(0, 0); this.darkTitle2.Name = "darkTitle2"; - this.darkTitle2.Size = new System.Drawing.Size(260, 26); + this.darkTitle2.Size = new System.Drawing.Size(250, 26); this.darkTitle2.TabIndex = 8; this.darkTitle2.Text = "Check boxes"; // + // darkScrollBar1 + // + this.darkScrollBar1.Dock = System.Windows.Forms.DockStyle.Right; + this.darkScrollBar1.Enabled = false; + this.darkScrollBar1.Location = new System.Drawing.Point(265, 25); + this.darkScrollBar1.Maximum = 5; + this.darkScrollBar1.Minimum = 1; + this.darkScrollBar1.Name = "darkScrollBar1"; + this.darkScrollBar1.Size = new System.Drawing.Size(15, 425); + this.darkScrollBar1.TabIndex = 1; + this.darkScrollBar1.Text = "darkScrollBar1"; + // + // panel3 + // + this.panel3.AutoSize = true; + this.panel3.Controls.Add(this.cmbList); + this.panel3.Controls.Add(this.darkTitle3); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(10, 196); + this.panel3.Name = "panel3"; + this.panel3.Padding = new System.Windows.Forms.Padding(0, 0, 0, 10); + this.panel3.Size = new System.Drawing.Size(250, 62); + this.panel3.TabIndex = 3; + // + // darkTitle3 + // + this.darkTitle3.Dock = System.Windows.Forms.DockStyle.Top; + this.darkTitle3.Location = new System.Drawing.Point(0, 0); + this.darkTitle3.Name = "darkTitle3"; + this.darkTitle3.Size = new System.Drawing.Size(250, 26); + this.darkTitle3.TabIndex = 7; + this.darkTitle3.Text = "Lists"; + // + // cmbList + // + this.cmbList.Dock = System.Windows.Forms.DockStyle.Top; + this.cmbList.Location = new System.Drawing.Point(0, 26); + this.cmbList.Name = "cmbList"; + this.cmbList.Size = new System.Drawing.Size(250, 26); + this.cmbList.TabIndex = 8; + this.cmbList.Text = "darkDropdownList1"; + // // DockProperties // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.pnlMain); + this.Controls.Add(this.darkScrollBar1); this.DefaultDockArea = DarkUI.Docking.DarkDockArea.Right; this.DockText = "Properties"; this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -190,6 +239,7 @@ namespace Example this.panel1.PerformLayout(); this.panel2.ResumeLayout(false); this.panel2.PerformLayout(); + this.panel3.ResumeLayout(false); this.ResumeLayout(false); } @@ -207,5 +257,9 @@ namespace Example private DarkUI.Controls.DarkCheckBox darkCheckBox2; private DarkUI.Controls.DarkCheckBox darkCheckBox1; private DarkUI.Controls.DarkTitle darkTitle2; + private DarkUI.Controls.DarkScrollBar darkScrollBar1; + private System.Windows.Forms.Panel panel3; + private DarkUI.Controls.DarkTitle darkTitle3; + private DarkUI.Controls.DarkDropdownList cmbList; } } diff --git a/Example/Forms/Docking/DockProperties.cs b/Example/Forms/Docking/DockProperties.cs index c32ad3b..5fd81c1 100644 --- a/Example/Forms/Docking/DockProperties.cs +++ b/Example/Forms/Docking/DockProperties.cs @@ -1,4 +1,5 @@ -using DarkUI.Docking; +using DarkUI.Controls; +using DarkUI.Docking; namespace Example { @@ -9,6 +10,16 @@ namespace Example public DockProperties() { InitializeComponent(); + + // Build dummy dropdown data + cmbList.Items.Add(new DarkDropdownItem("Item1")); + cmbList.Items.Add(new DarkDropdownItem("Item2")); + cmbList.Items.Add(new DarkDropdownItem("Item3")); + cmbList.Items.Add(new DarkDropdownItem("Item4")); + cmbList.Items.Add(new DarkDropdownItem("Item5")); + cmbList.Items.Add(new DarkDropdownItem("Item6")); + + cmbList.SelectedItemChanged += delegate { System.Console.WriteLine($"Item changed to {cmbList.SelectedItem.Text}"); }; } #endregion