using FastReport.Forms;
using FastReport.Utils;
using System.Collections;
using System.Windows;
using System.Windows.Forms;
namespace FastReport.Design.RibbonDesigner
{
internal enum GroupState
{
Normal,
Reduced,
Collapsed
}
internal enum GroupPriority
{
Low,
Medium,
High
}
internal class RibbonGroup : GridPanel, IDesignerPlugin
{
private Hashtable cachedWidths = new Hashtable();
public Designer Designer { get; }
public StackedPanel Panel { get; }
public Label Caption { get; }
private GroupState state;
public GroupState State
{
get => state;
set
{
state = value;
UpdateState();
control.UpdateLayout();
}
}
public double GroupWidth
{
get
{
if (!cachedWidths.ContainsKey(state))
cachedWidths[state] = this.Measure();
return (double)cachedWidths[state];
}
}
public ToolbarLayoutDropDownButton CollapsedButton { get; }
public string CollapsedImageName { get; set; }
public GroupPriority Priority { get; set; }
private ControlStorageService storage;
///
/// Gets storage service.
///
public ControlStorageService Storage
{
get
{
if (storage == null)
storage = new ControlStorageService(this, "Designer," + Name);
return storage;
}
}
public override string Text
{
get => base.Text;
set
{
base.Text = value;
Caption.Text = value;
CollapsedButton.Text = value;
}
}
public override bool Visible
{
get => base.Visible;
set
{
if (value != Visible)
{
base.Visible = value;
control.Visibility = value ? Visibility.Visible : Visibility.Collapsed;
cachedWidths.Clear();
control.UpdateLayout();
(Parent as Ribbon).UpdateLayout();
}
}
}
#region IDesignerPlugin
public string PluginName => Name;
///
public virtual void SaveState()
{
}
///
public virtual void RestoreState()
{
}
///
public virtual void SelectionChanged()
{
}
///
public virtual void UpdateContent()
{
}
///
public void Lock()
{
}
///
public void Unlock()
{
UpdateContent();
}
///
public virtual void Localize()
{
cachedWidths.Clear();
}
///
public virtual DesignerOptionsPage GetOptionsPage()
{
return null;
}
///
public virtual void UpdateUIStyle()
{
Panel.UpdateUIStyle(Designer.UIStyle);
CollapsedButton.UpdateUIStyle(Designer.UIStyle);
}
///
public virtual void UpdateDpiDependencies()
{
RibbonExtensions.UpdateDpiDependencies(this);
Panel.UpdateDpiDependencies();
if (!string.IsNullOrEmpty(CollapsedImageName))
CollapsedButton.Image = Designer.GetImage(CollapsedImageName);
}
#endregion
public virtual void UpdateState()
{
if (State == GroupState.Collapsed)
{
Panel.CollapseTo(CollapsedButton);
}
else
{
CollapsedButton.ExpandTo(Panel);
}
}
public void SetItemText(ToolStripItem item, string text)
{
if (text.EndsWith("..."))
text = text.Substring(0, text.Length - 3);
item.ToolTipText = text;
item.Text = text;
}
public RibbonGroup(Designer designer)
{
Designer = designer;
state = GroupState.Normal;
control.Margin = new Thickness(4, 1, 4, 1);
Caption = new RibbonGroupCaption();
this.Controls.Add(Caption);
Panel = new StackedPanel() { Vertical = false };
Panel.control.Margin = new Thickness(0, 3, 0, 16);
this.Controls.Add(Panel);
CollapsedButton = new ToolbarLayoutDropDownButton();
CollapsedButton.MakeBig();
CollapsedButton.DropDownOpening += (s, e) => UpdateDpiDependencies();
}
}
}