123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- namespace System.Windows.Forms
- {
- public class ToolStrip : Control
- {
- protected new CustomControls.ToolStrip control { get; }
- public ToolStripItemCollection Items { get; }
- private ImageList imageList;
- public ImageList ImageList
- {
- get => imageList;
- set
- {
- imageList = value;
- ResetImages();
- }
- }
- public System.Drawing.Size ImageScalingSize { get; set; } // TODO?
- public ToolStripGripStyle GripStyle
- {
- get => control.GripVisible ? ToolStripGripStyle.Visible : ToolStripGripStyle.Hidden;
- set => control.GripVisible = value == ToolStripGripStyle.Visible;
- }
- private ToolStripRenderer renderer;
- public ToolStripRenderer Renderer
- {
- get => renderer;
- set
- {
- renderer = value;
- ApplyStyle();
- }
- }
- public bool ShowItemToolTips { get; set; } // TODO?
- public override DockStyle Dock
- {
- get => base.Dock;
- set
- {
- base.Dock = value;
- control.Vertical = value == DockStyle.Left || value == DockStyle.Right;
- }
- }
- public override string Text { get; set; }
- // not in SWF
- public Padding BorderThickness
- {
- get => new Padding((int)control.BorderThickness.Left, (int)control.BorderThickness.Top, (int)control.BorderThickness.Right, (int)control.BorderThickness.Bottom);
- set => control.BorderThickness = new Thickness(value.Left, value.Top, value.Right, value.Bottom);
- }
- internal bool Vertical => control.Vertical;
- private void SetupThumbDrag(System.Windows.Controls.Primitives.Thumb thumb)
- {
- if (thumb == null)
- return;
- var pt = new Point(0, 0);
- bool dragMode = false;
- thumb.PreviewMouseDown += (s, e) =>
- {
- pt = e.GetPosition(thumb);
- };
- thumb.PreviewMouseMove += (s, e) =>
- {
- if (e.LeftButton == Input.MouseButtonState.Pressed)
- {
- var pt1 = e.GetPosition(thumb);
- if (!dragMode && Math.Sqrt((pt1.X - pt.X) * (pt1.X - pt.X) + (pt1.Y - pt.Y) * (pt1.Y - pt.Y)) > 5)
- {
- dragMode = true;
- BringToFront();
- }
- if (dragMode)
- {
- Left += (int)(pt1.X - pt.X) * (control.FlowDirection == FlowDirection.RightToLeft ? -1 : 1);
- Top += (int)(pt1.Y - pt.Y);
- OnDragOver(null);
- }
- }
- };
- thumb.PreviewMouseUp += (s, e) =>
- {
- if (dragMode)
- OnDragDrop(null);
- dragMode = false;
- };
- }
- internal protected virtual void ApplyStyle(ToolStripProfessionalRenderer r)
- {
- control.BorderBrush = r.ToolBarBorder;
- control.Resources["ToolBarHorizontalBackground"] = r.ToolBarHorizontalBackground;
- control.Resources["ToolBarVerticalBackground"] = r.ToolBarVerticalBackground;
- control.Resources["ToolBarGripDark"] = r.ToolBarGripDark;
- control.Resources["ToolBarGripLight"] = r.ToolBarGripLight;
- }
- internal void ApplyStyle()
- {
- if (Renderer is ToolStripProfessionalRenderer pr)
- {
- ApplyStyle(pr);
- foreach (ToolStripItem item in Items)
- item.ApplyStyle(pr);
- }
- }
- internal void ResetImages()
- {
- foreach (ToolStripItem item in Items)
- item.ResetImage();
- }
- internal override void AddChild(Control child)
- {
- control.Items.Add(child.control);
- }
- internal override void RemoveChild(Control child)
- {
- control.Items.Remove(child.control);
- }
- internal override void SetChildIndex(Control child, int index)
- {
- control.Items.Insert(index, child.control);
- }
- public ToolStrip()
- {
- control = new();
- SetControl(control);
- control.Loaded += (s, e) =>
- {
- var thumb = control.Template.FindName("ToolBarThumb", control) as System.Windows.Controls.Primitives.Thumb;
- SetupThumbDrag(thumb);
- };
- control.BorderThickness = new Thickness(0,0,1,1);
- Items = new ToolStripItemCollection(this);
- Dock = DockStyle.Top;
- }
- }
- }
|