1
0
mirror of synced 2024-12-04 20:08:00 +01:00
Switch-Toolbox/Switch_Toolbox_Library/Forms/Custom/DropdownPanel/STDropDownPanel.cs
KillzXGaming a8e6d104f2 A few improvements.
Panes can now be selected and moved around.
Panes can be resized from corners or edges.
Improved hit detection for panes.
Mouse left click now selects and moves panes. Use middle mouse or hold shift + left mouse to pan/move camera.
More progress on timeline, but currently not functional so currently disabled atm.
Multiple layout animations can be selected and played at once. Goes to the highest amount of frames.
Start to impliment a parts manager. Will allow editing external layout and animation data, and saving back properly.
2019-10-05 13:25:28 -04:00

210 lines
6.3 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.ComponentModel.Design;
namespace Toolbox.Library.Forms
{
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
public partial class STDropDownPanel : STPanel
{
private Size _previousParentSize = Size.Empty;
public Image SetIcon
{
get
{
return stCollapsePanelButton1.SetIcon;
}
set
{
stCollapsePanelButton1.SetIcon = value;
}
}
public Color SetIconColor
{
get
{
return stCollapsePanelButton1.SetIconColor;
}
set
{
stCollapsePanelButton1.SetIconColor = value;
}
}
public Color SetIconAlphaColor
{
get
{
return stCollapsePanelButton1.SetIconAlphaColor;
}
set
{
stCollapsePanelButton1.SetIconAlphaColor = value;
}
}
/// <summary>
/// Height of panel in expanded state
/// </summary>
private int _expandedHeight;
/// <summary>
/// Height of panel in collapsed state
/// </summary>
private readonly int _collapsedHeight;
public string PanelName
{
get
{
return stCollapsePanelButton1.PanelName;
}
set
{
stCollapsePanelButton1.PanelName = value;
}
}
public string PanelValueName
{
get
{
return stCollapsePanelButton1.PanelValueName;
}
set
{
stCollapsePanelButton1.PanelValueName = value;
}
}
private InternalPanelState _internalPanelState;
private enum InternalPanelState
{
Normal,
Expanding,
Collapsing
}
public void AddColorPreview(Color color)
{
}
public STDropDownPanel()
{
InitializeComponent();
_collapsedHeight = stCollapsePanelButton1.Location.Y + stCollapsePanelButton1.Size.Height;
// _collapsedHeight = stCollapsePanelButton1.Location.Y + stCollapsePanelButton1.Size.Height + stCollapsePanelButton1.Margin.Bottom;
stCollapsePanelButton1.Size = new Size(ClientSize.Width - stCollapsePanelButton1.Margin.Left - stCollapsePanelButton1.Margin.Right,
stCollapsePanelButton1.Height);
stCollapsePanelButton1.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
stCollapsePanelButton1.AutoSize = true;
stCollapsePanelButton1.IsExpanded = true;
stCollapsePanelButton1.ExpandCollapse += BtnExpandCollapseExpandCollapse;
stCollapsePanelButton1.SetIconColor = FormThemes.BaseTheme.DropdownButtonBackColor;
}
public bool IsExpanded
{
get { return stCollapsePanelButton1.IsExpanded; }
set
{
if (stCollapsePanelButton1.IsExpanded != value)
stCollapsePanelButton1.IsExpanded = value;
}
}
public int ExpandedHeight
{
get { return _expandedHeight; }
set
{
_expandedHeight = value;
if (IsExpanded)
{
Height = _expandedHeight;
}
}
}
public event EventHandler<ExpandCollapseEventArgs> ExpandCollapse;
private void BtnExpandCollapseExpandCollapse(object sender, ExpandCollapseEventArgs e)
{
if (e.IsExpanded) // if button is expanded now
{
Expand(); // expand the panel
}
else
{
Collapse(); // collapse the panel
}
// Retrieve expand-collapse state changed event for panel
EventHandler<ExpandCollapseEventArgs> handler = ExpandCollapse;
if (handler != null)
handler(this, e);
}
protected virtual void Expand()
{
_internalPanelState = InternalPanelState.Normal;
Size = new Size(Size.Width, _expandedHeight);
}
protected virtual void Collapse()
{
if (_internalPanelState == InternalPanelState.Normal)
{
// store current panel height in expanded state
_expandedHeight = Size.Height;
}
Size = new Size(Size.Width, _collapsedHeight);
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
// we always manually scale expand-collapse button for filling the horizontal space of panel:
stCollapsePanelButton1.Size = new Size(ClientSize.Width - stCollapsePanelButton1.Margin.Left - stCollapsePanelButton1.Margin.Right,
stCollapsePanelButton1.Height);
#region Handling panel's Anchor property sets to Bottom when panel collapsed
if (!IsExpanded // if panel collapsed
&& ((Anchor & AnchorStyles.Bottom) != 0) //and panel's Anchor property sets to Bottom
&& Size.Height != _collapsedHeight // and panel height is changed (it could happens only if parent control just has resized)
&& Parent != null) // and panel has the parent control
{
// main, calculate the parent control resize diff and add it to expandedHeight value:
_expandedHeight += Parent.Height - _previousParentSize.Height;
// reset resized height (by base.OnSizeChanged anchor.Bottom handling) to collapsedHeight value:
Size = new Size(Size.Width, _collapsedHeight);
}
// store previous size of parent control (however we need only height)
if (Parent != null)
_previousParentSize = Parent.Size;
#endregion
}
}
}