mattercontrol/ActionBar/HelpTextWidget.cs
2014-01-29 19:09:30 -08:00

153 lines
4.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MatterHackers.Agg.Image;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.VectorMath;
using MatterHackers.Localizations;
namespace MatterHackers.MatterControl
{
public class HelpTextWidget : TextWidget
{
string defaultHelpMessage = "";
string hoverHelpMessage = "";
public bool showHoverText = false;
static HelpTextWidget globalInstance;
public static HelpTextWidget Instance
{
get
{
if (globalInstance == null)
{
globalInstance = new HelpTextWidget("");
}
return globalInstance;
}
}
public void ShowHoverText(string message)
{
if (this.Text != message)
{
hoverHelpMessage = message;
if (!showHoverText)
{
showHoverText = true;
this.Invalidate();
}
}
}
public void HideHoverText()
{
showHoverText = false;
this.Invalidate();
}
public HelpTextWidget(string initialText)
: base(initialText, pointSize: 10, ellipsisIfClipped: true)
{
this.HAnchor = HAnchor.ParentLeftRight;
this.VAnchor = VAnchor.ParentCenter;
this.Margin = new BorderDouble(0);
this.TextColor = RGBA_Bytes.White;
this.MinimumSize = new Vector2(LocalBounds.Width, LocalBounds.Height);
AddHandlers();
setHelpMessageFromStatus();
}
private void SetDefaultMessage(string message)
{
if (message != this.defaultHelpMessage)
{
this.defaultHelpMessage = message;
this.Invalidate();
}
}
event EventHandler unregisterEvents;
private void AddHandlers()
{
PrinterCommunication.Instance.ActivePrinterChanged.RegisterEvent(onPrinterStatusChanged, ref unregisterEvents);
PrinterCommunication.Instance.ConnectionStateChanged.RegisterEvent(onPrinterStatusChanged, ref unregisterEvents);
}
public override void OnClosed(EventArgs e)
{
if (unregisterEvents != null)
{
unregisterEvents(this, null);
}
base.OnClosed(e);
}
private void onPrinterStatusChanged(object sender, EventArgs e)
{
setHelpMessageFromStatus();
}
public override void OnDraw(Graphics2D graphics2D)
{
if (this.showHoverText == true && this.Text != hoverHelpMessage)
{
this.Text = hoverHelpMessage;
}
else
{
if (this.Text != defaultHelpMessage)
{
this.Text = defaultHelpMessage;
}
}
base.OnDraw(graphics2D);
}
private void setHelpMessageFromStatus()
{
string newMessage = getHelpMessageFromStatus();
SetDefaultMessage(newMessage);
}
private string getHelpMessageFromStatus()
{
if (PrinterCommunication.Instance.ActivePrinter == null)
{
return new LocalizedString("No printer selected. Press 'Connect' to choose a printer.").Translated;
}
else
{
switch (PrinterCommunication.Instance.CommunicationState)
{
case PrinterCommunication.CommunicationStates.Disconnected:
return new LocalizedString("Not connected. Press 'Connect' to enable printing.").Translated;
case PrinterCommunication.CommunicationStates.AttemptingToConnect:
return "Attempting to connect...";
case PrinterCommunication.CommunicationStates.ConnectionLost:
case PrinterCommunication.CommunicationStates.FailedToConnect:
return new LocalizedString("Unable to communicate with printer.").Translated;
case PrinterCommunication.CommunicationStates.Connected:
if (PrinterCommunication.Instance.ActivePrintItem != null)
{
return new LocalizedString("Item selected. Press 'Start' to begin your print.").Translated;
}
else
{
return new LocalizedString("No items to select. Press 'Add' to select a file to print.").Translated;
}
default:
return "";
}
}
}
}
}