Significantly improved the layout consistency when enlarging the device scale. Created a DeviceMargin and DevicePadding on GuiWidget Deleted dead code Made many images have default larger disk sizes and scale in memory. Made the menus have horizontal spacers rather than dashed lines
114 lines
No EOL
3.9 KiB
C#
114 lines
No EOL
3.9 KiB
C#
using MatterHackers.Agg;
|
|
using MatterHackers.Agg.UI;
|
|
using System;
|
|
|
|
namespace MatterHackers.MatterControl
|
|
{
|
|
public class SplitButtonFactory
|
|
{
|
|
public BorderDouble Margin = new BorderDouble(0, 0);
|
|
public RGBA_Bytes normalFillColor = new RGBA_Bytes(0, 0, 0, 0);
|
|
public RGBA_Bytes hoverFillColor = new RGBA_Bytes(0, 0, 0, 50);
|
|
public RGBA_Bytes pressedFillColor = new RGBA_Bytes(0, 0, 0, 0);
|
|
public RGBA_Bytes disabledFillColor = new RGBA_Bytes(255, 255, 255, 50);
|
|
|
|
public RGBA_Bytes normalBorderColor = new RGBA_Bytes(255, 255, 255, 0);
|
|
public RGBA_Bytes hoverBorderColor = new RGBA_Bytes(0, 0, 0, 0);
|
|
public RGBA_Bytes pressedBorderColor = new RGBA_Bytes(0, 0, 0, 0);
|
|
public RGBA_Bytes disabledBorderColor = new RGBA_Bytes(0, 0, 0, 0);
|
|
public RGBA_Bytes checkedBorderColor = new RGBA_Bytes(255, 255, 255, 0);
|
|
|
|
public RGBA_Bytes normalTextColor = ActiveTheme.Instance.PrimaryTextColor;
|
|
public RGBA_Bytes hoverTextColor = ActiveTheme.Instance.PrimaryTextColor;
|
|
public RGBA_Bytes pressedTextColor = ActiveTheme.Instance.PrimaryTextColor;
|
|
public RGBA_Bytes disabledTextColor = ActiveTheme.Instance.PrimaryTextColor;
|
|
|
|
public int fontSize = 12;
|
|
public double borderWidth = 1;
|
|
public bool invertImageLocation = false;
|
|
public bool AllowThemeToAdjustImage = true;
|
|
private string imageName;
|
|
|
|
public double FixedHeight = 30 * GuiWidget.DeviceScale;
|
|
|
|
public SplitButtonFactory()
|
|
{
|
|
}
|
|
|
|
public SplitButton Generate(TupleList<string, Func<bool>> buttonList, Direction direction = Direction.Down, string imageName = null)
|
|
{
|
|
this.imageName = imageName;
|
|
|
|
DynamicDropDownMenu menu = CreateMenu(direction);
|
|
if(buttonList.Count > 1)
|
|
{
|
|
menu.Name = buttonList[1].Item1 + " Menu";
|
|
}
|
|
|
|
menu.Margin = new BorderDouble();
|
|
Button button = CreateButton(buttonList[0]);
|
|
|
|
for (int index = 1; index < buttonList.Count; index++)
|
|
{
|
|
menu.addItem(buttonList[index].Item1, buttonList[index].Item2);
|
|
}
|
|
|
|
SplitButton splitButton = new SplitButton(button, menu);
|
|
|
|
return splitButton;
|
|
}
|
|
|
|
private Button CreateButton(Tuple<string, Func<bool>> buttonInfo)
|
|
{
|
|
TextImageButtonFactory buttonFactory = new TextImageButtonFactory();
|
|
|
|
buttonFactory.FixedHeight = this.FixedHeight;
|
|
buttonFactory.normalFillColor = this.normalFillColor;
|
|
buttonFactory.normalTextColor = this.normalTextColor;
|
|
buttonFactory.hoverTextColor = this.hoverTextColor;
|
|
buttonFactory.hoverFillColor = this.hoverFillColor;
|
|
buttonFactory.borderWidth = 1;
|
|
buttonFactory.normalBorderColor = this.normalBorderColor;
|
|
buttonFactory.hoverBorderColor = this.hoverBorderColor;
|
|
|
|
Button button = buttonFactory.Generate(buttonInfo.Item1, normalImageName: imageName, centerText: true);
|
|
|
|
button.Click += (object sender, EventArgs e) =>
|
|
{
|
|
buttonInfo.Item2();
|
|
};
|
|
|
|
return button;
|
|
}
|
|
|
|
private DynamicDropDownMenu CreateMenu(Direction direction = Direction.Down)
|
|
{
|
|
DropDownMenuFactory menuFactory = new DropDownMenuFactory();
|
|
|
|
menuFactory.normalFillColor = this.normalFillColor;
|
|
menuFactory.hoverFillColor = this.hoverFillColor;
|
|
menuFactory.pressedFillColor = this.pressedFillColor;
|
|
menuFactory.pressedFillColor = this.pressedFillColor;
|
|
|
|
menuFactory.normalBorderColor = this.normalBorderColor;
|
|
menuFactory.hoverBorderColor = this.hoverBorderColor;
|
|
menuFactory.pressedBorderColor = this.pressedBorderColor;
|
|
menuFactory.disabledBorderColor = this.disabledBorderColor;
|
|
|
|
menuFactory.normalTextColor = this.normalTextColor;
|
|
menuFactory.hoverTextColor = this.hoverTextColor;
|
|
menuFactory.pressedTextColor = this.pressedTextColor;
|
|
menuFactory.disabledTextColor = this.disabledTextColor;
|
|
|
|
DynamicDropDownMenu menu = menuFactory.Generate(direction: direction);
|
|
|
|
menu.Height = FixedHeight;
|
|
menu.BorderColor = normalBorderColor;
|
|
menu.HoverArrowColor = this.hoverTextColor;
|
|
menu.NormalArrowColor = this.normalTextColor;
|
|
menu.BackgroundColor = normalFillColor;
|
|
|
|
return menu;
|
|
}
|
|
}
|
|
} |