mattercontrol/PrinterControls/PrinterConnections/PrinterListItems.cs

250 lines
8.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.PrinterCommunication;
using MatterHackers.SerialPortCommunication.FrostedSerial;
namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
{
//Empty base class for selectable printer list
public class PrinterListItem : FlowLayoutWidget
{
protected ConnectionWindow windowController;
protected Printer printerRecord;
public PrinterListItem(Printer printerRecord, ConnectionWindow windowController)
{
this.printerRecord = printerRecord;
this.windowController = windowController;
}
}
class PrinterListItemView : PrinterListItem
{
TextWidget printerName;
RGBA_Bytes defaultBackgroundColor = new RGBA_Bytes(250,250,250);
RGBA_Bytes hoverBackgroundColor = new RGBA_Bytes(204, 204, 204);
RGBA_Bytes defaultTextColor = new RGBA_Bytes(34, 34, 34);
RGBA_Bytes hoverTextColor = new RGBA_Bytes(34, 34, 34);
public PrinterListItemView(Printer printerRecord, ConnectionWindow windowController)
:base(printerRecord, windowController)
{
this.Margin = new BorderDouble(1);
this.BackgroundColor = this.defaultBackgroundColor;
this.Padding = new BorderDouble(0);
string[] comportNames = FrostedSerialPort.GetPortNames();
bool portIsAvailable = comportNames.Contains(printerRecord.ComPort);
printerName = new TextWidget(this.printerRecord.Name);
printerName.TextColor = this.defaultTextColor;
printerName.HAnchor = HAnchor.ParentLeftRight;
printerName.Margin = new BorderDouble (5, 10, 5, 10);
string availableText = LocalizedString.Get("Unavailable");
RGBA_Bytes availableColor = new RGBA_Bytes(158, 18, 0);
if (portIsAvailable)
{
availableText = "";
}
if (ActivePrinterProfile.Instance.ActivePrinter != null)
{
int connectedPrinterHash = ActivePrinterProfile.Instance.ActivePrinter.GetHashCode();
int printerOptionHash = printerRecord.GetHashCode();
if (connectedPrinterHash == printerOptionHash)
{
availableText = PrinterConnectionAndCommunication.Instance.PrinterConnectionStatusVerbose;
availableColor = new RGBA_Bytes(0,95,107);
}
}
TextWidget availableIndicator = new TextWidget(availableText, pointSize: 10);
availableIndicator.TextColor = availableColor;
availableIndicator.Padding = new BorderDouble(3, 0, 0, 3);
availableIndicator.Margin = new BorderDouble (right: 5);
availableIndicator.VAnchor = Agg.UI.VAnchor.ParentCenter;
this.AddChild(printerName);
this.AddChild(availableIndicator);
this.HAnchor = HAnchor.ParentLeftRight;
BindHandlers();
}
public void BindHandlers()
{
this.MouseEnter += new EventHandler(onMouse_Enter);
this.MouseLeave += new EventHandler(onMouse_Leave);
this.MouseUp += new MouseEventHandler(onMouse_Up);
}
void onMouse_Up(object sender, EventArgs e)
{
MouseEventArgs mouseEvent = e as MouseEventArgs;
//Turns this into a standard 'click' event
if (this.PositionWithinLocalBounds(mouseEvent.X, mouseEvent.Y))
{
// Changing ordering around so that CloseOnIdle is called after ActivePrinter is set
ActivePrinterProfile.Instance.ActivePrinter = this.printerRecord;
UiThread.RunOnIdle(CloseOnIdle);
}
}
void CloseOnIdle(object state)
{
this.windowController.Close();
}
void onMouse_Enter(object sender, EventArgs args)
{
this.BackgroundColor = this.hoverBackgroundColor;
this.printerName.TextColor = this.hoverTextColor;
}
void onMouse_Leave(object sender, EventArgs args)
{
this.BackgroundColor = this.defaultBackgroundColor;
this.printerName.TextColor = this.defaultTextColor;
}
}
class PrinterListItemEdit : PrinterListItem
{
TextWidget printerName;
RGBA_Bytes defaultBackgroundColor = new RGBA_Bytes(250,250,250);
RGBA_Bytes hoverBackgroundColor = ActiveTheme.Instance.PrimaryAccentColor;
RGBA_Bytes defaultTextColor = new RGBA_Bytes(34, 34, 34);
RGBA_Bytes hoverTextColor = new RGBA_Bytes(250, 250, 250);
SlideWidget rightButtonOverlay;
public PrinterListItemEdit(Printer printerRecord, ConnectionWindow windowController)
:base(printerRecord, windowController)
{
this.printerRecord = printerRecord;
this.Margin = new BorderDouble(1);
this.BackgroundColor = this.defaultBackgroundColor;
this.Padding = new BorderDouble(0);
this.HAnchor = HAnchor.ParentLeftRight;
FlowLayoutWidget printerNameContainer = new FlowLayoutWidget ();
printerNameContainer.HAnchor = HAnchor.ParentLeftRight;
printerName = new TextWidget(this.printerRecord.Name);
printerName.TextColor = this.defaultTextColor;
printerName.Margin = new BorderDouble (5, 10, 0, 10);
printerName.HAnchor = HAnchor.ParentLeftRight;
printerNameContainer.AddChild(printerName);
FlowLayoutWidget rightButtonOverlayContainer = new FlowLayoutWidget (FlowDirection.RightToLeft);
rightButtonOverlayContainer.HAnchor = HAnchor.ParentLeftRight;
rightButtonOverlayContainer.VAnchor = VAnchor.ParentBottomTop;
this.rightButtonOverlay = getItemActionButtons();
this.rightButtonOverlay.Padding = new BorderDouble(0);
this.rightButtonOverlay.Visible = true;
rightButtonOverlayContainer.AddChild (rightButtonOverlay);
this.AddChild (printerNameContainer);
this.AddChild (rightButtonOverlayContainer);
}
SlideWidget getItemActionButtons()
{
int buttonWidth;
if (ActiveTheme.Instance.DisplayMode == ActiveTheme.ApplicationDisplayType.Touchscreen)
{
buttonWidth = 120;
}
else
{
buttonWidth = 80;//80
}
SlideWidget buttonContainer = new SlideWidget();
buttonContainer.VAnchor = VAnchor.ParentBottomTop;
FlowLayoutWidget buttonFlowContainer = new FlowLayoutWidget(FlowDirection.LeftToRight);
buttonFlowContainer.VAnchor = VAnchor.ParentBottomTop;
TextWidget printLabel = new TextWidget("Remove".Localize());
printLabel.TextColor = RGBA_Bytes.White;
printLabel.VAnchor = VAnchor.ParentCenter;
printLabel.HAnchor = HAnchor.ParentCenter;
FatFlatClickWidget removeButton = new FatFlatClickWidget(printLabel);
removeButton.VAnchor = VAnchor.ParentBottomTop;
removeButton.BackgroundColor = ActiveTheme.Instance.PrimaryAccentColor;
removeButton.Width = buttonWidth;
removeButton.Click += RemoveConnectionLink_Click;
TextWidget editLabel = new TextWidget("Edit".Localize());
editLabel.TextColor = RGBA_Bytes.White;
editLabel.VAnchor = VAnchor.ParentCenter;
editLabel.HAnchor = HAnchor.ParentCenter;
FatFlatClickWidget editButton = new FatFlatClickWidget(editLabel);
editButton.VAnchor = VAnchor.ParentBottomTop;
editButton.BackgroundColor = ActiveTheme.Instance.SecondaryAccentColor;
editButton.Width = buttonWidth;
editButton.Click += EditConnectionLink_Click;
buttonFlowContainer.AddChild(editButton);
buttonFlowContainer.AddChild(removeButton);
buttonContainer.AddChild(buttonFlowContainer);
buttonContainer.Width = buttonWidth*2;
return buttonContainer;
}
void EditConnectionLink_Click(object sender, EventArgs mouseEvent)
{
this.windowController.ChangedToEditPrinter(this.printerRecord);
}
void RemoveConnectionLink_Click(object sender, EventArgs mouseEvent)
{
if (ActivePrinterProfile.Instance.ActivePrinter != null)
{
int connectedPrinterHash = ActivePrinterProfile.Instance.ActivePrinter.GetHashCode();
int printerOptionHash = this.printerRecord.GetHashCode();
//Disconnect printer if the printer being removed is currently connected
if (connectedPrinterHash == printerOptionHash)
{
PrinterConnectionAndCommunication.Instance.Disable();
ActivePrinterProfile.Instance.ActivePrinter = null;
}
}
this.printerRecord.Delete();
this.windowController.ChangeToChoosePrinter(true);
}
}
}