Work on Queue 'edit' mode.

This commit is contained in:
kevinepope 2014-10-20 20:21:22 -07:00
parent 6dd447e415
commit d354a26216
8 changed files with 175 additions and 102 deletions

View file

@ -35,21 +35,28 @@ using MatterHackers.Agg.UI;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.CreatorPlugins;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.MatterControl.CustomWidgets;
using MatterHackers.MatterControl.SlicerConfiguration;
using MatterHackers.MatterControl.SettingsManagement;
namespace MatterHackers.MatterControl.PrintQueue
{
public class QueueBottomToolbar : GuiWidget
public class QueueDataWidget : GuiWidget
{
TextImageButtonFactory editButtonFactory = new TextImageButtonFactory();
TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory();
PluginChooserWindow pluginChooserWindow;
QueueDataView queueDataView;
Button enterEditModeButton;
Button leaveEditModeButton;
Button addToQueueButton;
Button createButton;
static Button shopButton;
event EventHandler unregisterEvents;
public QueueBottomToolbar(QueueDataView queueDataView)
public QueueDataWidget(QueueDataView queueDataView)
{
this.queueDataView = queueDataView;
@ -61,9 +68,33 @@ namespace MatterHackers.MatterControl.PrintQueue
textImageButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor;
textImageButtonFactory.borderWidth = 0;
FlowLayoutWidget allControls = new FlowLayoutWidget(FlowDirection.TopToBottom);
editButtonFactory.normalTextColor = ActiveTheme.Instance.SecondaryAccentColor;
editButtonFactory.hoverTextColor = RGBA_Bytes.White;
editButtonFactory.disabledTextColor = ActiveTheme.Instance.SecondaryAccentColor;
editButtonFactory.pressedTextColor = RGBA_Bytes.White;
editButtonFactory.borderWidth = 0;
editButtonFactory.FixedWidth = 70;
FlowLayoutWidget allControls = new FlowLayoutWidget(FlowDirection.TopToBottom);
{
enterEditModeButton = editButtonFactory.Generate("Edit".Localize(), centerText: true);
leaveEditModeButton = editButtonFactory.Generate("Done".Localize(), centerText: true);
leaveEditModeButton.Visible = false;
FlowLayoutWidget searchPanel = new FlowLayoutWidget();
searchPanel.BackgroundColor = ActiveTheme.Instance.TransparentDarkOverlay;
searchPanel.HAnchor = HAnchor.ParentLeftRight;
searchPanel.Padding = new BorderDouble(0);
searchPanel.AddChild(enterEditModeButton);
searchPanel.AddChild(leaveEditModeButton);
searchPanel.AddChild(new HorizontalSpacer());
allControls.AddChild(searchPanel);
{
// Ensure the form opens with no rows selected.
//ActiveQueueList.Instance.ClearSelected();
@ -76,17 +107,17 @@ namespace MatterHackers.MatterControl.PrintQueue
buttonPanel1.Padding = new BorderDouble(0, 3);
{
Button addToQueueButton = textImageButtonFactory.Generate(LocalizedString.Get("Add"), "icon_circle_plus.png");
addToQueueButton = textImageButtonFactory.Generate(LocalizedString.Get("Add"), "icon_circle_plus.png");
buttonPanel1.AddChild(addToQueueButton);
addToQueueButton.Margin = new BorderDouble(0, 0, 3, 0);
addToQueueButton.Click += new ButtonBase.ButtonEventHandler(addToQueueButton_Click);
// put in the creator button
{
Button runCreator = textImageButtonFactory.Generate(LocalizedString.Get("Create"), "icon_creator_white_32x32.png");
buttonPanel1.AddChild(runCreator);
runCreator.Margin = new BorderDouble(0, 0, 3, 0);
runCreator.Click += (sender, e) =>
createButton = textImageButtonFactory.Generate(LocalizedString.Get("Create"), "icon_creator_white_32x32.png");
buttonPanel1.AddChild(createButton);
createButton.Margin = new BorderDouble(0, 0, 3, 0);
createButton.Click += (sender, e) =>
{
OpenPluginChooserWindow();
};
@ -117,27 +148,21 @@ namespace MatterHackers.MatterControl.PrintQueue
deleteAllFromQueueButton.Margin = new BorderDouble(3, 0);
deleteAllFromQueueButton.Click += new ButtonBase.ButtonEventHandler(deleteAllFromQueueButton_Click);
//buttonPanel1.AddChild(deleteAllFromQueueButton);
buttonPanel1.AddChild(new HorizontalSpacer());
GuiWidget spacer1 = new GuiWidget();
spacer1.HAnchor = HAnchor.ParentLeftRight;
buttonPanel1.AddChild(spacer1);
GuiWidget spacer2 = new GuiWidget();
spacer2.HAnchor = HAnchor.ParentLeftRight;
buttonPanel1.AddChild(spacer2);
FlowLayoutWidget queueMenuSpace = new FlowLayoutWidget();
queueMenuSpace.VAnchor = Agg.UI.VAnchor.ParentBottomTop;
QueueOptionsMenu queueMenu = new QueueOptionsMenu();
queueMenuSpace.AddChild(queueMenu.MenuDropList);
buttonPanel1.AddChild(queueMenuSpace);
queueMenuContainer = new FlowLayoutWidget();
queueMenuContainer.VAnchor = Agg.UI.VAnchor.ParentBottomTop;
queueMenu = new QueueOptionsMenu();
queueMenuContainer.AddChild(queueMenu.MenuDropList);
buttonPanel1.AddChild(queueMenuContainer);
ActivePrinterProfile.Instance.ActivePrinterChanged.RegisterEvent((object sender, EventArgs e) =>
{
queueMenuSpace.RemoveAllChildren();
queueMenuContainer.RemoveAllChildren();
// the printer changed reload the queueMenue
queueMenu = new QueueOptionsMenu();
queueMenuSpace.AddChild(queueMenu.MenuDropList);
queueMenuContainer.AddChild(queueMenu.MenuDropList);
}, ref unregisterEvents);
}
allControls.AddChild(buttonPanel1);
@ -145,6 +170,44 @@ namespace MatterHackers.MatterControl.PrintQueue
allControls.AnchorAll();
this.AddChild(allControls);
AddHandlers();
}
QueueOptionsMenu queueMenu;
FlowLayoutWidget queueMenuContainer;
void AddHandlers()
{
enterEditModeButton.Click += enterEditModeButtonClick;
leaveEditModeButton.Click += leaveEditModeButtonClick;
}
void enterEditModeButtonClick(object sender, MouseEventArgs mouseEvent)
{
enterEditModeButton.Visible = false;
leaveEditModeButton.Visible = true;
queueDataView.EditMode = true;
addToQueueButton.Visible = false;
createButton.Visible = false;
queueMenuContainer.Visible = false;
SetVisibleButtons();
}
void leaveEditModeButtonClick(object sender, MouseEventArgs mouseEvent)
{
enterEditModeButton.Visible = true;
leaveEditModeButton.Visible = false;
queueDataView.EditMode = false;
addToQueueButton.Visible = true;
createButton.Visible = true;
queueMenuContainer.Visible = true;
SetVisibleButtons();
}
void SetVisibleButtons()
{
}
private void SetDisplayAttributes()

View file

@ -75,10 +75,22 @@ namespace MatterHackers.MatterControl.PrintQueue
{
get { return printItems; }
}
private int selectedIndex = -1;
public int SelectedIndex
{
get { return selectedIndex; }
set
{
selectedIndex = value;
OnSelectedIndexChanged(new IndexArgs(value));
}
}
public RootedObjectEventHandler ItemAdded = new RootedObjectEventHandler();
public RootedObjectEventHandler ItemRemoved = new RootedObjectEventHandler();
public RootedObjectEventHandler OrderChanged = new RootedObjectEventHandler();
public RootedObjectEventHandler SelectedIndexChanged = new RootedObjectEventHandler();
static QueueData instance;
public static QueueData Instance
@ -159,6 +171,11 @@ namespace MatterHackers.MatterControl.PrintQueue
ItemRemoved.CallEvents(this, e);
}
public void OnSelectedIndexChanged(EventArgs e)
{
SelectedIndexChanged.CallEvents(this, e);
}
public PrintItemWrapper GetPrintItemWrapper(int index)
{
if (index >= 0 && index < PrintItems.Count)

View file

@ -201,8 +201,7 @@ namespace MatterHackers.MatterControl.PrintQueue
RGBA_Bytes selectedColor = new RGBA_Bytes(180, 180, 180, 255);
//RGBA_Bytes selectedColor = new RGBA_Bytes(0, 95, 107, 255);
RGBA_Bytes baseColor = new RGBA_Bytes(255, 255, 255);
int selectedIndex = -1;
int hoverIndex = -1;
int dragIndex = -1;
@ -218,58 +217,11 @@ namespace MatterHackers.MatterControl.PrintQueue
{
get
{
return selectedIndex;
return QueueData.Instance.SelectedIndex;
}
set
{
if (value < -1 || value >= topToBottomItemList.Children.Count)
{
throw new ArgumentOutOfRangeException();
}
selectedIndex = value;
OnSelectedIndexChanged();
for (int index = 0; index < topToBottomItemList.Children.Count; index++)
{
GuiWidget child = topToBottomItemList.Children[index];
if (index == selectedIndex)
{
((QueueRowItem)child.Children[0]).isSelectedItem = true;
if (!PrinterConnectionAndCommunication.Instance.PrinterIsPrinting && !PrinterConnectionAndCommunication.Instance.PrinterIsPaused)
{
((QueueRowItem)child.Children[0]).isActivePrint = true;
PrinterConnectionAndCommunication.Instance.ActivePrintItem = ((QueueRowItem)child.Children[0]).PrintItemWrapper;
}
else if (((QueueRowItem)child.Children[0]).PrintItemWrapper == PrinterConnectionAndCommunication.Instance.ActivePrintItem)
{
// the selection must be the active print item
((QueueRowItem)child.Children[0]).isActivePrint = true;
}
}
else
{
if (((QueueRowItem)child.Children[0]).isSelectedItem)
{
((QueueRowItem)child.Children[0]).isSelectedItem = false;
}
if (!PrinterConnectionAndCommunication.Instance.PrinterIsPrinting && !PrinterConnectionAndCommunication.Instance.PrinterIsPaused)
{
if (((QueueRowItem)child.Children[0]).isActivePrint)
{
((QueueRowItem)child.Children[0]).isActivePrint = false;
}
}
}
child.Invalidate();
Invalidate();
}
if (QueueData.Instance.Count == 0)
{
PrinterConnectionAndCommunication.Instance.ActivePrintItem = null;
}
QueueData.Instance.SelectedIndex = value;
}
}
@ -356,7 +308,9 @@ namespace MatterHackers.MatterControl.PrintQueue
AddChild(queueItem);
}
QueueData.Instance.ItemAdded.RegisterEvent(ItemAddedToQueue, ref unregisterEvents);
this.MouseLeaveBounds += new EventHandler(control_MouseLeaveBounds);
QueueData.Instance.SelectedIndexChanged.RegisterEvent(SelectedIndexChanged, ref unregisterEvents);
QueueData.Instance.ItemAdded.RegisterEvent(ItemAddedToQueue, ref unregisterEvents);
QueueData.Instance.ItemRemoved.RegisterEvent(ItemRemovedFromToQueue, ref unregisterEvents);
QueueData.Instance.OrderChanged.RegisterEvent(QueueOrderChanged, ref unregisterEvents);
@ -379,6 +333,51 @@ namespace MatterHackers.MatterControl.PrintQueue
SelectedPrintItem = PrinterConnectionAndCommunication.Instance.ActivePrintItem;
}
void SelectedIndexChanged(object sender, EventArgs e)
{
OnSelectedIndexChanged();
for (int index = 0; index < topToBottomItemList.Children.Count; index++)
{
GuiWidget child = topToBottomItemList.Children[index];
if (index == SelectedIndex)
{
((QueueRowItem)child.Children[0]).isSelectedItem = true;
if (!PrinterConnectionAndCommunication.Instance.PrinterIsPrinting && !PrinterConnectionAndCommunication.Instance.PrinterIsPaused)
{
((QueueRowItem)child.Children[0]).isActivePrint = true;
PrinterConnectionAndCommunication.Instance.ActivePrintItem = ((QueueRowItem)child.Children[0]).PrintItemWrapper;
}
else if (((QueueRowItem)child.Children[0]).PrintItemWrapper == PrinterConnectionAndCommunication.Instance.ActivePrintItem)
{
// the selection must be the active print item
((QueueRowItem)child.Children[0]).isActivePrint = true;
}
}
else
{
if (((QueueRowItem)child.Children[0]).isSelectedItem)
{
((QueueRowItem)child.Children[0]).isSelectedItem = false;
}
if (!PrinterConnectionAndCommunication.Instance.PrinterIsPrinting && !PrinterConnectionAndCommunication.Instance.PrinterIsPaused)
{
if (((QueueRowItem)child.Children[0]).isActivePrint)
{
((QueueRowItem)child.Children[0]).isActivePrint = false;
}
}
}
child.Invalidate();
Invalidate();
}
if (QueueData.Instance.Count == 0)
{
PrinterConnectionAndCommunication.Instance.ActivePrintItem = null;
}
}
void ItemAddedToQueue(object sender, EventArgs e)
{
IndexArgs addedIndexArgs = e as IndexArgs;
@ -425,6 +424,11 @@ namespace MatterHackers.MatterControl.PrintQueue
base.OnClosed(e);
}
void control_MouseLeaveBounds(object sender, EventArgs e)
{
HoverIndex = -1;
}
public override void AddChild(GuiWidget childToAdd, int indexInChildrenList = -1)
{
FlowLayoutWidget itemHolder = new FlowLayoutWidget();
@ -545,9 +549,9 @@ namespace MatterHackers.MatterControl.PrintQueue
public void ClearSelected()
{
if (selectedIndex != -1)
if (SelectedIndex != -1)
{
selectedIndex = -1;
SelectedIndex = -1;
OnSelectedIndexChanged();
}
}

View file

@ -199,29 +199,29 @@ namespace MatterHackers.MatterControl.PrintQueue
editButton.BackgroundColor = ActiveTheme.Instance.SecondaryAccentColor;
editButton.Width = 100;
TextWidget editLabel = new TextWidget("Edit".Localize());
TextWidget editLabel = new TextWidget("View".Localize());
editLabel.TextColor = RGBA_Bytes.White;
editLabel.VAnchor = VAnchor.ParentCenter;
editLabel.HAnchor = HAnchor.ParentCenter;
editButton.AddChild(editLabel);
editButton.Click += onEditPartClick;
editButton.Click += onViewPartClick;
//buttonFlowContainer.AddChild(editButton);
buttonFlowContainer.AddChild(editButton);
buttonFlowContainer.AddChild(printButton);
buttonContainer.AddChild(buttonFlowContainer);
//buttonContainer.Width = 200;
buttonContainer.Width = 100;
buttonContainer.Width = 200;
//buttonContainer.Width = 100;
return buttonContainer;
}
private void onEditPartClick(object sender, MouseEventArgs e)
private void onViewPartClick(object sender, MouseEventArgs e)
{
UiThread.RunOnIdle((state) =>
{
OpenPartViewWindow(true);
OpenPartViewWindow(false);
});
}
@ -415,11 +415,7 @@ namespace MatterHackers.MatterControl.PrintQueue
void AddHandlers()
{
ActiveTheme.Instance.ThemeChanged.RegisterEvent(ThemeChanged, ref unregisterEvents);
PrintItemWrapper.SlicingOutputMessage.RegisterEvent(PrintItem_SlicingOutputMessage, ref unregisterEvents);
MouseEnterBounds += new EventHandler(PrintQueueItem_MouseEnterBounds);
MouseLeaveBounds += new EventHandler(PrintQueueItem_MouseLeaveBounds);
}
void PrintItem_SlicingOutputMessage(object sender, EventArgs e)
@ -438,16 +434,6 @@ namespace MatterHackers.MatterControl.PrintQueue
this.Margin = new BorderDouble(6,0,6,6);
}
void PrintQueueItem_MouseLeaveBounds(object sender, EventArgs e)
{
editControls.Visible = false;
}
void PrintQueueItem_MouseEnterBounds(object sender, EventArgs e)
{
editControls.Visible = true;
}
class PartToAddToQueue
{
internal string Name;
@ -539,7 +525,8 @@ namespace MatterHackers.MatterControl.PrintQueue
}
int thisIndexInQueue = QueueData.Instance.GetIndex(PrintItemWrapper);
QueueData.Instance.RemoveIndexOnIdle(thisIndexInQueue);
QueueData.Instance.RemoveIndexOnIdle(thisIndexInQueue);
}
public static void ShowCantFindFileMessage(PrintItemWrapper printItemWrapper)