diff --git a/MatterControl.Winforms/WinformsSingleWindowProvider.cs b/MatterControl.Winforms/WinformsSingleWindowProvider.cs index 7830e3467..620b45f55 100644 --- a/MatterControl.Winforms/WinformsSingleWindowProvider.cs +++ b/MatterControl.Winforms/WinformsSingleWindowProvider.cs @@ -27,6 +27,7 @@ of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. */ +using MatterHackers.Agg; using MatterHackers.Agg.UI; namespace MatterHackers.MatterControl diff --git a/MatterControlLib/CustomWidgets/HelpArticleHeader.cs b/MatterControlLib/CustomWidgets/HelpArticleHeader.cs index 2b2684e0f..ec659c430 100644 --- a/MatterControlLib/CustomWidgets/HelpArticleHeader.cs +++ b/MatterControlLib/CustomWidgets/HelpArticleHeader.cs @@ -42,7 +42,7 @@ namespace MatterHackers.MatterControl.CustomWidgets public event EventHandler EditClicked; public HelpArticleHeader(HelpArticle helpArticle, ThemeConfig theme, bool boldFont = false, int pointSize = -1, string editToolTipText = null) - : base(theme) + : base(theme.TabbarPadding, theme.CreateSmallResetButton()) { this.Padding = theme.ToolbarPadding; this.HAnchor = HAnchor.Stretch; diff --git a/MatterControlLib/CustomWidgets/InlineStringEdit.cs b/MatterControlLib/CustomWidgets/InlineStringEdit.cs index 4fdab7b6e..1acabd9cf 100644 --- a/MatterControlLib/CustomWidgets/InlineStringEdit.cs +++ b/MatterControlLib/CustomWidgets/InlineStringEdit.cs @@ -55,7 +55,7 @@ namespace MatterHackers.MatterControl.CustomWidgets bool boldFont = false, bool editable = true, string emptyText = null) - : base(theme) + : base(theme.TabbarPadding, theme.CreateSmallResetButton()) { this.Padding = theme.ToolbarPadding; this.HAnchor = HAnchor.Stretch; diff --git a/MatterControlLib/CustomWidgets/SingleWindowProvider.cs b/MatterControlLib/CustomWidgets/SingleWindowProvider.cs deleted file mode 100644 index 5434257b2..000000000 --- a/MatterControlLib/CustomWidgets/SingleWindowProvider.cs +++ /dev/null @@ -1,235 +0,0 @@ -/* -Copyright (c) 2018, Lars Brubaker, John Lewin -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those -of the authors and should not be interpreted as representing official policies, -either expressed or implied, of the FreeBSD Project. -*/ - -using System; -using System.Collections.Generic; -using System.Linq; -using MatterHackers.Agg.Platform; -using MatterHackers.Localizations; -using MatterHackers.MatterControl; -using MatterHackers.MatterControl.PartPreviewWindow; - -namespace MatterHackers.Agg.UI -{ - public class SingleWindowProvider : ISystemWindowProvider - { - protected List _openWindows = new List(); - protected IPlatformWindow platformWindow; - - SystemWindow _topWindow; - public SystemWindow TopWindow - { - get => _topWindow; - - private set - { - void MaintainSizes(object s, EventArgs e) - { - foreach (var window in _openWindows) - { - if (_topWindow != window) - { - window.LocalBounds = new RectangleDouble(0, 0, _topWindow.Width, _topWindow.Height); - } - } - } - - if (_topWindow != null) - { - _topWindow.SizeChanged -= MaintainSizes; - } - - _topWindow = value; - - if (_topWindow != null) - { - _topWindow.SizeChanged += MaintainSizes; - } - } - } - - public IReadOnlyList OpenWindows => _openWindows; - - /// - /// Creates or connects a PlatformWindow to the given SystemWindow - /// - public virtual void ShowSystemWindow(SystemWindow systemWindow) - { - if (_openWindows.Count == 0) - { - this._openWindows.Add(systemWindow); - } - else - { - if (systemWindow.PlatformWindow != null) - { - return; - } - - var overlayWindow = new SystemWindow(_openWindows.FirstOrDefault().Width, _openWindows.FirstOrDefault().Height) - { - PlatformWindow = platformWindow - }; - - _openWindows.FirstOrDefault().Unfocus(); - - systemWindow.HAnchor = HAnchor.Stretch; - systemWindow.VAnchor = VAnchor.Stretch; - - var theme = ApplicationController.Instance.Theme; - - var movable = new WindowWidget(systemWindow) - { - WindowBorderColor = new Color(theme.PrimaryAccentColor, 175) - }; - - movable.Width = Math.Min(overlayWindow.Width, movable.Width); - movable.Height = Math.Min(overlayWindow.Height, movable.Height); - - overlayWindow.AddChild(movable); - - var closeButton = theme.CreateSmallResetButton(); - closeButton.HAnchor = HAnchor.Right; - closeButton.ToolTipText = "Close".Localize(); - closeButton.Click += (s, e) => - { - systemWindow.Close(); - }; - - var titleBarRow = new Toolbar(theme, closeButton) - { - HAnchor = HAnchor.Stretch, - VAnchor = VAnchor.Fit | VAnchor.Center, - }; - - titleBarRow.AddChild(new ImageWidget(AggContext.StaticData.LoadIcon("mh.png", 16, 16, theme.InvertIcons)) - { - Margin = new BorderDouble(4, 0, 6, 0), - VAnchor = VAnchor.Center - }); - - titleBarRow.ActionArea.AddChild(new TextWidget(systemWindow.Title ?? "", pointSize: theme.DefaultFontSize - 1, textColor: theme.TextColor) - { - VAnchor = VAnchor.Center, - }); - - movable.TitleBar.BackgroundColor = theme.TabBarBackground; - - movable.TitleBar.AddChild(titleBarRow); - - void SystemWindow_VisibleChanged(object sender, EventArgs e) - { - if (systemWindow.Visible) - { - _openWindows.Add(overlayWindow); - this.TopWindow = overlayWindow; - - overlayWindow.Visible = true; - } - else - { - _openWindows.Remove(overlayWindow); - this.TopWindow = _openWindows.LastOrDefault(); - - overlayWindow.Visible = false; - } - - platformWindow.ShowSystemWindow(TopWindow); - }; - - void SystemWindow_BoundsChanged(object sender, EventArgs e) - { - var position = movable.Position; - - // Adjust Y - if (position.Y + movable.Height > overlayWindow.Height) - { - position.Y = overlayWindow.Height - movable.Height; - } - - // Adjust X - if (position.X + movable.Width > overlayWindow.Width) - { - position.X = Math.Max(0, overlayWindow.Width - movable.Width); - } - - movable.Position = position; - } - - overlayWindow.BoundsChanged += SystemWindow_BoundsChanged; - - systemWindow.VisibleChanged += SystemWindow_VisibleChanged; - - systemWindow.Closed += (s, e) => - { - systemWindow.VisibleChanged -= SystemWindow_VisibleChanged; - overlayWindow.BoundsChanged -= SystemWindow_BoundsChanged; - - overlayWindow.Close(); - }; - - movable.Width += 1; - - movable.Position = new VectorMath.Vector2((overlayWindow.Width - movable.Width) / 2, (overlayWindow.Height - movable.Height) / 2); - - this._openWindows.Add(overlayWindow); - } - - TopWindow = _openWindows.LastOrDefault(); - - platformWindow.ShowSystemWindow(TopWindow); - - // Ensure focus is set to the new window - systemWindow.Focus(); - } - - public virtual void CloseSystemWindow(SystemWindow systemWindow) - { - if (_openWindows.Count > 1) - { - if (systemWindow == _openWindows.FirstOrDefault()) - { - foreach (var openWindow in _openWindows.Reverse()) - { - openWindow.Close(); - } - - _openWindows.Clear(); - } - - // Find and remove the WindowContainer from the openWindows list - _openWindows.Remove(systemWindow); - } - - TopWindow = _openWindows.LastOrDefault(); - - platformWindow.CloseSystemWindow(systemWindow); - } - } -} \ No newline at end of file diff --git a/MatterControlLib/Library/Widgets/HardwarePage/HardwareTabPage.cs b/MatterControlLib/Library/Widgets/HardwarePage/HardwareTabPage.cs index 524392451..5cb550c33 100644 --- a/MatterControlLib/Library/Widgets/HardwarePage/HardwareTabPage.cs +++ b/MatterControlLib/Library/Widgets/HardwarePage/HardwareTabPage.cs @@ -52,7 +52,7 @@ namespace MatterHackers.MatterControl.PrintLibrary this.HAnchor = HAnchor.Stretch; this.VAnchor = VAnchor.Stretch; - var toolbar = new Toolbar(theme) + var toolbar = new Toolbar(theme.TabbarPadding, theme.CreateSmallResetButton()) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Fit, diff --git a/MatterControlLib/PartPreviewWindow/MainViewWidget.cs b/MatterControlLib/PartPreviewWindow/MainViewWidget.cs index 9d2f094f2..246b764fd 100644 --- a/MatterControlLib/PartPreviewWindow/MainViewWidget.cs +++ b/MatterControlLib/PartPreviewWindow/MainViewWidget.cs @@ -371,7 +371,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow tabControl.RefreshTabPointers(); } - statusBar = new Toolbar(theme) + statusBar = new Toolbar(theme.TabbarPadding, theme.CreateSmallResetButton()) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Absolute, diff --git a/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs b/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs index 3158f265e..4f5fbbcb8 100644 --- a/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs +++ b/MatterControlLib/PartPreviewWindow/SelectedObjectPanel.cs @@ -231,7 +231,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow if (primaryActionsPanel.Children.Any()) { // add in a separator from the apply and cancel buttons - primaryActionsPanel.AddChild(new ToolbarSeparator(theme)); + primaryActionsPanel.AddChild(new ToolbarSeparator(theme.GetBorderColor(50), theme.SeparatorMargin)); } editorSectionWidget.Text = selectedItem.Name ?? selectedItemType.Name; diff --git a/MatterControlLib/PartPreviewWindow/Tabs.cs b/MatterControlLib/PartPreviewWindow/Tabs.cs index 7fda4428f..9fd9f02c0 100644 --- a/MatterControlLib/PartPreviewWindow/Tabs.cs +++ b/MatterControlLib/PartPreviewWindow/Tabs.cs @@ -69,7 +69,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } else { - TabBar = new Toolbar(theme, rightAnchorItem) + TabBar = new Toolbar(theme.TabbarPadding, rightAnchorItem) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Fit diff --git a/MatterControlLib/PartPreviewWindow/Toolbar.cs b/MatterControlLib/PartPreviewWindow/Toolbar.cs deleted file mode 100644 index bbe8ec464..000000000 --- a/MatterControlLib/PartPreviewWindow/Toolbar.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* -Copyright (c) 2018, Lars Brubaker, John Lewin -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those -of the authors and should not be interpreted as representing official policies, -either expressed or implied, of the FreeBSD Project. -*/ - -using MatterHackers.Agg.UI; -using MatterHackers.MatterControl.CustomWidgets; - -namespace MatterHackers.MatterControl.PartPreviewWindow -{ - /// - /// A toolbar with an optional right anchored element and an ActionBar child to add actions to the bar - /// - public class Toolbar : GuiWidget - { - public Toolbar(ThemeConfig theme, GuiWidget rightAnchorItem = null) - { - this.Padding = theme.ToolbarPadding; - - this.ActionArea = new FlowLayoutWidget() - { - HAnchor = HAnchor.Stretch, - VAnchor = VAnchor.Fit | VAnchor.Center - }; - - base.AddChild(this.ActionArea, 0); - this.SetRightAnchorItem(rightAnchorItem); - } - - public FlowLayoutWidget ActionArea { get; } - - public GuiWidget RightAnchorItem { get; private set; } - - public void SetRightAnchorItem(GuiWidget rightAnchorItem) - { - if (rightAnchorItem != null) - { - rightAnchorItem.HAnchor |= HAnchor.Right; - base.AddChild(rightAnchorItem); - } - - this.RightAnchorItem = rightAnchorItem; - } - - public override GuiWidget AddChild(GuiWidget childToAdd, int indexInChildrenList = -1) - { - return ActionArea.AddChild(childToAdd, indexInChildrenList); - } - - public void AddChildDirect(GuiWidget guiWidget) - { - base.AddChild(guiWidget); - } - } - - public class ToolbarSeparator : VerticalLine - { - public ToolbarSeparator(ThemeConfig theme) - : base(ApplicationController.Instance.Theme.GetBorderColor(50)) - { - Margin = theme.SeparatorMargin; - } - } -} \ No newline at end of file diff --git a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/OverflowBar.cs b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/OverflowBar.cs index 31ef24d95..1ffc61b74 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/OverflowBar.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/OverflowBar.cs @@ -51,7 +51,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { } public OverflowBar(ImageBuffer icon, ThemeConfig theme) - : base(theme) + : base(theme.TabbarPadding, theme.CreateSmallResetButton()) { this.theme = theme; diff --git a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterActionsBar.cs b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterActionsBar.cs index ca71f6a0c..04568569f 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterActionsBar.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrinterActionsBar.cs @@ -129,7 +129,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow }); // Add vertical separator - this.AddChild(new ToolbarSeparator(theme) + this.AddChild(new ToolbarSeparator(theme.GetBorderColor(50), theme.SeparatorMargin) { VAnchor = VAnchor.Absolute, Height = theme.ButtonHeight, diff --git a/MatterControlLib/PartPreviewWindow/ViewControls3D.cs b/MatterControlLib/PartPreviewWindow/ViewControls3D.cs index 74e3dba71..d97224fec 100644 --- a/MatterControlLib/PartPreviewWindow/ViewControls3D.cs +++ b/MatterControlLib/PartPreviewWindow/ViewControls3D.cs @@ -135,7 +135,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.AddChild(CreateAddButton(sceneContext, theme)); - this.AddChild(new ToolbarSeparator(theme)); + this.AddChild(new ToolbarSeparator(theme.GetBorderColor(50), theme.SeparatorMargin)); bedMenuButton = new PopupMenuButton(AggContext.StaticData.LoadIcon("bed.png", 16, 16, theme.InvertIcons), theme) { @@ -149,13 +149,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.AddChild(bedMenuButton); - this.AddChild(new ToolbarSeparator(theme)); + this.AddChild(new ToolbarSeparator(theme.GetBorderColor(50), theme.SeparatorMargin)); this.AddChild(CreateOpenButton(theme)); this.AddChild(CreateSaveButton(theme)); - this.AddChild(new ToolbarSeparator(theme)); + this.AddChild(new ToolbarSeparator(theme.GetBorderColor(50), theme.SeparatorMargin)); undoButton = new IconButton(AggContext.StaticData.LoadIcon("Undo_grey_16x.png", 16, 16, theme.InvertIcons), theme) { @@ -201,7 +201,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.AddChild(printButton); } - this.AddChild(new ToolbarSeparator(theme)); + this.AddChild(new ToolbarSeparator(theme.GetBorderColor(50), theme.SeparatorMargin)); undoButton.Enabled = undoBuffer.UndoCount > 0; redoButton.Enabled = undoBuffer.RedoCount > 0; @@ -246,7 +246,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow rotateButton.Checked = true; // Add vertical separator - this.AddChild(new ToolbarSeparator(theme)); + this.AddChild(new ToolbarSeparator(theme.GetBorderColor(50), theme.SeparatorMargin)); iconPath = Path.Combine("ViewTransformControls", "partSelect.png"); partSelectButton = new RadioIconButton(AggContext.StaticData.LoadIcon(iconPath, 32, 32, theme.InvertIcons), theme) @@ -267,7 +267,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { if (namedAction is SceneSelectionSeparator) { - this.AddChild(new ToolbarSeparator(theme)); + this.AddChild(new ToolbarSeparator(theme.GetBorderColor(50), theme.SeparatorMargin)); continue; } @@ -276,7 +276,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow && group.Id == "Transform") { this.AddChild(CreateSupportButton(theme)); - this.AddChild(new ToolbarSeparator(theme)); + this.AddChild(new ToolbarSeparator(theme.GetBorderColor(50), theme.SeparatorMargin)); } GuiWidget button = null; @@ -343,7 +343,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { if (!(this.ActionArea.Children.LastOrDefault() is ToolbarSeparator)) { - this.AddChild(new ToolbarSeparator(theme)); + this.AddChild(new ToolbarSeparator(theme.GetBorderColor(50), theme.SeparatorMargin)); } foreach (var operation in operationGroup.Operations) @@ -354,7 +354,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.AddChild(operationButton); } - this.AddChild(new ToolbarSeparator(theme)); + this.AddChild(new ToolbarSeparator(theme.GetBorderColor(50), theme.SeparatorMargin)); } } else if (namedAction.Icon != null) diff --git a/MatterControlLib/PrinterControls/MovementSpeedsPage.cs b/MatterControlLib/PrinterControls/MovementSpeedsPage.cs index 661859cf4..d512d3de4 100644 --- a/MatterControlLib/PrinterControls/MovementSpeedsPage.cs +++ b/MatterControlLib/PrinterControls/MovementSpeedsPage.cs @@ -59,7 +59,7 @@ namespace MatterHackers.MatterControl Margin = new BorderDouble(right: 20) }; - var headerBar = new Toolbar(theme, rightLabel) + var headerBar = new Toolbar(theme.TabbarPadding, rightLabel) { Height = theme.ButtonHeight, Padding = theme.ToolbarPadding, diff --git a/MatterControlLib/SetupWizard/HelpTreePanel.cs b/MatterControlLib/SetupWizard/HelpTreePanel.cs index ea9c635c2..3c95b8f4c 100644 --- a/MatterControlLib/SetupWizard/HelpTreePanel.cs +++ b/MatterControlLib/SetupWizard/HelpTreePanel.cs @@ -53,7 +53,7 @@ namespace MatterHackers.MatterControl { horizontalSplitter.Panel1.BackgroundColor = Color.Black.WithAlpha(12); - var toolbar = new Toolbar(theme) + var toolbar = new Toolbar(theme.TabbarPadding, theme.CreateSmallResetButton()) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Fit,