diff --git a/MatterControlLib/ApplicationView/ApplicationController.cs b/MatterControlLib/ApplicationView/ApplicationController.cs
index fb744aeba..28a1ec0b1 100644
--- a/MatterControlLib/ApplicationView/ApplicationController.cs
+++ b/MatterControlLib/ApplicationView/ApplicationController.cs
@@ -30,13 +30,11 @@ either expressed or implied, of the FreeBSD Project.
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
-using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net;
-using System.Net.Http;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
@@ -46,7 +44,6 @@ using System.Threading;
using System.Threading.Tasks;
using global::MatterControl.Printing;
using Markdig.Agg;
-using Markdig.Syntax.Inlines;
using MatterControlLib.Library.OpenInto;
using MatterHackers.Agg;
using MatterHackers.Agg.Font;
@@ -71,7 +68,6 @@ using MatterHackers.MatterControl.PrintHistory;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.MatterControl.SettingsManagement;
using MatterHackers.MatterControl.SlicerConfiguration;
-using MatterHackers.MatterControl.Tour;
using MatterHackers.PolygonMesh;
using MatterHackers.PolygonMesh.Processors;
using MatterHackers.VectorMath;
@@ -1648,17 +1644,17 @@ namespace MatterHackers.MatterControl
///
/// Set or get the current ui hint for the thing the mouse is over
///
- public string UiHint
+ public string GetUiHint()
{
- get => _uiHint;
-
- set
+ return _uiHint;
+ }
+
+ public void SetUiHint(string value)
+ {
+ if (_uiHint != value)
{
- if (_uiHint != value)
- {
- _uiHint = value;
- UiHintChanged?.Invoke(this, null);
- }
+ _uiHint = value;
+ UiHintChanged?.Invoke(this, null);
}
}
@@ -2673,4 +2669,24 @@ namespace MatterHackers.MatterControl
public Action Action { get; set; }
}
}
+
+ public static class SetUiHintExtensions
+ {
+ // GuiWidget extension
+ public static void SetActiveUiHint(this GuiWidget widget, string value)
+ {
+ if (ApplicationController.Instance.GetUiHint() != value)
+ {
+ void MouseHasLeftBounds(object s, EventArgs e)
+ {
+ ApplicationController.Instance.SetUiHint("");
+ widget.MouseLeaveBounds -= MouseHasLeftBounds;
+ }
+
+ widget.MouseLeaveBounds += MouseHasLeftBounds;
+
+ ApplicationController.Instance.SetUiHint(value);
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/MatterControlLib/DesignTools/Primitives/TracedPositionObject3DControl.cs b/MatterControlLib/DesignTools/Primitives/TracedPositionObject3DControl.cs
index 98c9d3d18..c64fa03d6 100644
--- a/MatterControlLib/DesignTools/Primitives/TracedPositionObject3DControl.cs
+++ b/MatterControlLib/DesignTools/Primitives/TracedPositionObject3DControl.cs
@@ -96,12 +96,12 @@ namespace MatterHackers.MatterControl.DesignTools
{
if (DownOnControl)
{
- ApplicationController.Instance.UiHint = "";
+ ApplicationController.Instance.SetUiHint("");
DownOnControl = false;
setPosition(mouseDownPosition);
- ApplicationController.Instance.UiHint = "";
- }
- }
+ ApplicationController.Instance.SetUiHint("");
+ }
+ }
public void Draw(DrawGlContentEventArgs e)
{
@@ -144,7 +144,7 @@ namespace MatterHackers.MatterControl.DesignTools
public void OnMouseDown(Mouse3DEventArgs mouseEvent3D)
{
DownOnControl = true;
- ApplicationController.Instance.UiHint = UiHint;
+ ApplicationController.Instance.SetUiHint(UiHint);
mouseDownPosition = getPosition();
// Make sure we always get a new hit plane
ResetHitPlane();
@@ -219,7 +219,7 @@ namespace MatterHackers.MatterControl.DesignTools
{
DownOnControl = false;
editComplete(mouseDownPosition);
- ApplicationController.Instance.UiHint = "";
+ ApplicationController.Instance.SetUiHint("");
}
}
diff --git a/MatterControlLib/PartPreviewWindow/MainViewWidget.cs b/MatterControlLib/PartPreviewWindow/MainViewWidget.cs
index ed98c400d..cc432c93e 100644
--- a/MatterControlLib/PartPreviewWindow/MainViewWidget.cs
+++ b/MatterControlLib/PartPreviewWindow/MainViewWidget.cs
@@ -1149,9 +1149,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
tasksContainer.AddChild(runningTaskPanel);
}
- if (!string.IsNullOrEmpty(ApplicationController.Instance.UiHint))
+ if (!string.IsNullOrEmpty(ApplicationController.Instance.GetUiHint()))
{
- statusMessage.Text = ApplicationController.Instance.UiHint;
+ statusMessage.Text = ApplicationController.Instance.GetUiHint();
statusMessage.Visible = true;
var parent = statusMessage.Parent;
if (parent.Children.IndexOf(statusMessage) != parent.Children.Count - 1)
diff --git a/MatterControlLib/PartPreviewWindow/Tabs.cs b/MatterControlLib/PartPreviewWindow/Tabs.cs
index 9aca0eafe..670fac9d2 100644
--- a/MatterControlLib/PartPreviewWindow/Tabs.cs
+++ b/MatterControlLib/PartPreviewWindow/Tabs.cs
@@ -283,12 +283,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
TabBar.MouseEnterBounds += (s, e) =>
{
- ApplicationController.Instance.UiHint = "You can drag and drop .mcx files here to open them";
- };
-
- TabBar.MouseLeaveBounds += (s, e) =>
- {
- ApplicationController.Instance.UiHint = "";
+ TabBar.SetActiveUiHint("You can drag and drop .mcx files here to open them");
};
this.TabBar.MouseUp += (s, e) =>
diff --git a/MatterControlLib/PartPreviewWindow/View3D/Interaction/Object3DControl.cs b/MatterControlLib/PartPreviewWindow/View3D/Interaction/Object3DControl.cs
index 6a7115259..f83ab6718 100644
--- a/MatterControlLib/PartPreviewWindow/View3D/Interaction/Object3DControl.cs
+++ b/MatterControlLib/PartPreviewWindow/View3D/Interaction/Object3DControl.cs
@@ -120,9 +120,9 @@ namespace MatterHackers.MeshVisualizer
{
if (!string.IsNullOrEmpty(UiHint))
{
- ApplicationController.Instance.UiHint = "";
- }
- }
+ ApplicationController.Instance.SetUiHint("");
+ }
+ }
public virtual void OnMouseDown(Mouse3DEventArgs mouseEvent3D)
{
@@ -132,7 +132,7 @@ namespace MatterHackers.MeshVisualizer
this.Object3DControlContext.GuiSurface.Invalidate();
if (!string.IsNullOrEmpty(UiHint))
{
- ApplicationController.Instance.UiHint = UiHint;
+ ApplicationController.Instance.SetUiHint(UiHint);
}
}
}
@@ -148,7 +148,7 @@ namespace MatterHackers.MeshVisualizer
if (!string.IsNullOrEmpty(UiHint))
{
- ApplicationController.Instance.UiHint = "";
+ ApplicationController.Instance.SetUiHint("");
}
}
diff --git a/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs b/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs
index 2dbb7184b..1226b6acb 100644
--- a/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs
+++ b/MatterControlLib/PartPreviewWindow/View3D/Object3DControlsLayer.cs
@@ -480,11 +480,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
lastControlMessage = "Click to edit values".Localize();
}
- ApplicationController.Instance.UiHint = lastControlMessage;
+ ApplicationController.Instance.SetUiHint(lastControlMessage);
}
- else if (ApplicationController.Instance.UiHint == lastControlMessage)
+ else if (ApplicationController.Instance.GetUiHint() == lastControlMessage)
{
- ApplicationController.Instance.UiHint = "";
+ ApplicationController.Instance.SetUiHint("");
}
}
}
diff --git a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrintPopupMenu.cs b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrintPopupMenu.cs
index 1f02019db..3438eca64 100644
--- a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrintPopupMenu.cs
+++ b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrintPopupMenu.cs
@@ -171,8 +171,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
var errors = printer.Validate();
var startPrintButton = CreateStartPrintButton("Start Print".Localize(), printer, menuTheme, out bool printEnabled);
- startPrintButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Ctrl + P".Localize();
- startPrintButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ startPrintButton.MouseEnterBounds += (s, e) => startPrintButton.SetActiveUiHint("Ctrl + P".Localize());
startPrintButton.Click += (s, e) => this.CloseMenu();
var hasErrors = errors.Any(e => e.ErrorLevel == ValidationErrorLevel.Error);
diff --git a/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs b/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs
index d504dd997..7afbc88b0 100644
--- a/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs
+++ b/MatterControlLib/PartPreviewWindow/View3D/View3DWidget.cs
@@ -363,8 +363,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Margin = theme.ButtonSpacing,
};
- partSelectButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Ctrl + A = Select Alll, 'Space' = Clear Selection, 'ESC' = Cancel Drag".Localize();
- partSelectButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ partSelectButton.MouseEnterBounds += (s, e) => partSelectButton.SetActiveUiHint("Ctrl + A = Select Alll, 'Space' = Clear Selection, 'ESC' = Cancel Drag".Localize());
AddRoundButton(partSelectButton, RotatedMargin(partSelectButton, MathHelper.Tau * .15));
partSelectButton.Click += (s, e) => viewControls3D.ActiveButton = ViewControls3DButtons.PartSelect;
buttonGroupA.Add(partSelectButton);
@@ -375,8 +374,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ToolTipText = "Rotate View".Localize(),
Margin = theme.ButtonSpacing
};
- rotateButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Rotate: Right Mouse Button, Ctrl + Left Mouse Button, Arrow Keys".Localize();
- rotateButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ rotateButton.MouseEnterBounds += (s, e) => rotateButton.SetActiveUiHint("Rotate: Right Mouse Button, Ctrl + Left Mouse Button, Arrow Keys".Localize());
AddRoundButton(rotateButton, RotatedMargin(rotateButton, MathHelper.Tau * .05));
rotateButton.Click += (s, e) => viewControls3D.ActiveButton = ViewControls3DButtons.Rotate;
buttonGroupA.Add(rotateButton);
@@ -387,8 +385,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ToolTipText = "Move View".Localize(),
Margin = theme.ButtonSpacing
};
- translateButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Move: Middle Mouse Button, Ctrl + Shift + Left Mouse Button, Shift Arrow Keys".Localize();
- translateButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ translateButton.MouseEnterBounds += (s, e) => translateButton.SetActiveUiHint("Move: Middle Mouse Button, Ctrl + Shift + Left Mouse Button, Shift Arrow Keys".Localize());
AddRoundButton(translateButton, RotatedMargin(translateButton , - MathHelper.Tau * .05));
translateButton.Click += (s, e) => viewControls3D.ActiveButton = ViewControls3DButtons.Translate;
buttonGroupA.Add(translateButton);
@@ -399,8 +396,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ToolTipText = "Zoom View".Localize(),
Margin = theme.ButtonSpacing
};
- zoomButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Zoom: Mouse Wheel, Ctrl + Alt + Left Mouse Button, Ctrl + '+' & Ctrl + '-'".Localize();
- zoomButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ zoomButton.MouseEnterBounds += (s, e) => zoomButton.SetActiveUiHint("Zoom: Mouse Wheel, Ctrl + Alt + Left Mouse Button, Ctrl + '+' & Ctrl + '-'".Localize());
AddRoundButton(zoomButton, RotatedMargin(zoomButton, - MathHelper.Tau * .15));
zoomButton.Click += (s, e) => viewControls3D.ActiveButton = ViewControls3DButtons.Scale;
buttonGroupA.Add(zoomButton);
@@ -471,8 +467,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ToolTipText = "Reset View".Localize(),
Margin = theme.ButtonSpacing
};
- homeButton.MouseEnterBounds += (s1, e1) => ApplicationController.Instance.UiHint = "W Key";
- homeButton.MouseLeaveBounds += (s1, e1) => ApplicationController.Instance.UiHint = "";
+ homeButton.MouseEnterBounds += (s1, e1) => homeButton.SetActiveUiHint("W Key");
AddRoundButton(homeButton, RotatedMargin(homeButton, MathHelper.Tau * .3)).Click += (s, e) => viewControls3D.NotifyResetView();
var zoomToSelectionButton = new ThemedIconButton(StaticData.Instance.LoadIcon("select.png", 16, 16).SetToColor(theme.TextColor), theme)
@@ -481,8 +476,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ToolTipText = "Zoom to Selection".Localize(),
Margin = theme.ButtonSpacing
};
- zoomToSelectionButton.MouseEnterBounds += (s1, e1) => ApplicationController.Instance.UiHint = "Z Key";
- zoomToSelectionButton.MouseLeaveBounds += (s1, e1) => ApplicationController.Instance.UiHint = "";
+ zoomToSelectionButton.MouseEnterBounds += (s1, e1) => zoomToSelectionButton.SetActiveUiHint("Z Key");
void SetZoomEnabled(object s, EventArgs e)
{
zoomToSelectionButton.Enabled = this.Scene.SelectedItem != null
@@ -507,8 +501,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Checked = turntableEnabled,
//DoubleBuffer = true,
};
- turnTableButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Switch between turn table and trackball modes".Localize();
- turnTableButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ turnTableButton.MouseEnterBounds += (s, e) => turnTableButton.SetActiveUiHint("Switch between turn table and trackball modes".Localize());
AddRoundButton(turnTableButton, RotatedMargin(turnTableButton, -MathHelper.Tau * .4)); // 2 button position
turnTableButton.CheckedStateChanged += (s, e) =>
@@ -534,8 +527,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
SiblingRadioButtonList = new List(),
Checked = TrackballTumbleWidget.PerspectiveMode,
};
- projectionButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Turn on and off perspective rendering".Localize();
- projectionButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ projectionButton.MouseEnterBounds += (s, e) => projectionButton.SetActiveUiHint("Turn on and off perspective rendering".Localize());
AddRoundButton(projectionButton, RotatedMargin(projectionButton, -MathHelper.Tau * .3));
projectionButton.CheckedStateChanged += (s, e) =>
{
@@ -564,8 +556,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ToggleButton = true,
SiblingRadioButtonList = new List(),
};
- bedButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Hide and show the bed".Localize();
- bedButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ bedButton.MouseEnterBounds += (s, e) => bedButton.SetActiveUiHint("Hide and show the bed".Localize());
AddRoundButton(bedButton, new Vector2((cubeCenterFromRightTop.X + 18 * scale - bedButton.Width / 2) / scale, startHeight));
var printAreaButton = new ThemedRadioIconButton(StaticData.Instance.LoadIcon("print_area.png", 16, 16).SetToColor(theme.TextColor), theme)
@@ -623,8 +614,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Mate = new MateOptions(MateEdge.Right, MateEdge.Top)
}
};
- modelViewStyleButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Change the current rendering mode".Localize();
- modelViewStyleButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ modelViewStyleButton.MouseEnterBounds += (s, e) => modelViewStyleButton.SetActiveUiHint("Change the current rendering mode".Localize());
modelViewStyleButton.AnchorMate.Mate.VerticalEdge = MateEdge.Bottom;
modelViewStyleButton.AnchorMate.Mate.HorizontalEdge = MateEdge.Right;
@@ -660,8 +650,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Mate = new MateOptions(MateEdge.Right, MateEdge.Top)
}
};
- gridSnapButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Adjust the grid that objects will snap to when moved".Localize();
- gridSnapButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ gridSnapButton.MouseEnterBounds += (s, e) => gridSnapButton.SetActiveUiHint("Adjust the grid that objects will snap to when moved".Localize());
gridSnapButton.AnchorMate.Mate.VerticalEdge = MateEdge.Bottom;
gridSnapButton.AnchorMate.Mate.HorizontalEdge = MateEdge.Right;
diff --git a/MatterControlLib/PartPreviewWindow/ViewToolBarControls.cs b/MatterControlLib/PartPreviewWindow/ViewToolBarControls.cs
index 8cd3ebe09..5d4923d25 100644
--- a/MatterControlLib/PartPreviewWindow/ViewToolBarControls.cs
+++ b/MatterControlLib/PartPreviewWindow/ViewToolBarControls.cs
@@ -131,8 +131,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Margin = theme.ButtonSpacing,
VAnchor = VAnchor.Center
};
- undoButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Ctrl + z".Localize();
- undoButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ undoButton.MouseEnterBounds += (s, e) => undoButton.SetActiveUiHint("Ctrl + z".Localize());
undoButton.Click += (sender, e) =>
{
sceneContext.Scene.Undo();
@@ -148,8 +147,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Enabled = false,
VAnchor = VAnchor.Center
};
- redoButton.MouseEnterBounds += (s, e) => ApplicationController.Instance.UiHint = "Ctrl + Y, Ctrl + Shift + Z".Localize();
- redoButton.MouseLeaveBounds += (s, e) => ApplicationController.Instance.UiHint = "";
+ redoButton.MouseEnterBounds += (s, e) => redoButton.SetActiveUiHint("Ctrl + Y, Ctrl + Shift + Z".Localize());
redoButton.Click += (sender, e) =>
{
sceneContext.Scene.Redo();
@@ -265,8 +263,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
if (!string.IsNullOrEmpty(namedAction.UiHint))
{
- button.MouseEnterBounds += (s1, e1) => ApplicationController.Instance.UiHint = namedAction.UiHint;
- button.MouseLeaveBounds += (s1, e1) => ApplicationController.Instance.UiHint = "";
+ button.MouseEnterBounds += (s1, e1) => button.SetActiveUiHint(namedAction.UiHint);
}
}
else
@@ -476,8 +473,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
var operationButton = new OperationIconButton(operation, sceneContext, theme);
if (!string.IsNullOrEmpty(operation.UiHint))
{
- operationButton.MouseEnterBounds += (s1, e1) => ApplicationController.Instance.UiHint = operation.UiHint;
- operationButton.MouseLeaveBounds += (s1, e1) => ApplicationController.Instance.UiHint = "";
+ operationButton.MouseEnterBounds += (s1, e1) => operationButton.SetActiveUiHint(operation.UiHint);
}
operationButtons.Add(operationButton, operation);
@@ -542,8 +538,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
if (!string.IsNullOrEmpty(operation.UiHint))
{
- iconButton.MouseEnterBounds += (s1, e1) => ApplicationController.Instance.UiHint = operation.UiHint;
- iconButton.MouseLeaveBounds += (s1, e1) => ApplicationController.Instance.UiHint = "";
+ iconButton.MouseEnterBounds += (s1, e1) => iconButton.SetActiveUiHint(operation.UiHint);
}
UserSettings.Instance.set(operationGroup.GroupRecordId, operationGroup.Operations.IndexOf(operation).ToString());
@@ -770,6 +765,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
foreach (var (button, operation) in operationButtons.Select(kvp => (kvp.Key, kvp.Value)))
{
button.Enabled = operation.IsEnabled?.Invoke(sceneContext) ?? false;
+ button.MouseEnterBounds += (s, e) => button.SetActiveUiHint(operation.Title);
button.ToolTipText = operation.Title;
if (!button.Enabled
&& !string.IsNullOrEmpty(operation.HelpText))
diff --git a/MatterControlLib/SlicerConfiguration/UIFields/NumberField.cs b/MatterControlLib/SlicerConfiguration/UIFields/NumberField.cs
index 65d880fc7..7d26af987 100644
--- a/MatterControlLib/SlicerConfiguration/UIFields/NumberField.cs
+++ b/MatterControlLib/SlicerConfiguration/UIFields/NumberField.cs
@@ -59,13 +59,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
if (internalTextEditWidget != null
&& double.TryParse(internalTextEditWidget.Text, out double value))
{
- ApplicationController.Instance.UiHint = "Up Arrow = +1, Down Arrow = -1, (Shift * 10, Control / 10)".Localize();
+ guiWidget.SetActiveUiHint("Up Arrow = +1, Down Arrow = -1, (Shift * 10, Control / 10)".Localize());
}
};
- guiWidget.MouseLeaveBounds += (s, e) =>
- {
- ApplicationController.Instance.UiHint = "";
- };
}
private static void InternalTextEditWidget_KeyDown(object sender, KeyEventArgs e)