partial refactor to queue

This commit is contained in:
larsbrubaker 2016-12-03 17:06:36 -08:00
parent 95fec91905
commit 65e487dbc3
4 changed files with 91 additions and 215 deletions

View file

@ -108,6 +108,75 @@ namespace MatterHackers.MatterControl.PrintQueue
}
}
public void MoveToNext()
{
if (SelectedIndex >= 0 && SelectedIndex < Count)
{
if (this.SelectedIndex == Count - 1)
{
this.SelectedIndex = 0;
}
else
{
this.SelectedIndex++;
}
}
}
public PrintItemWrapper SelectedPrintItem
{
get
{
if (SelectedIndex >= 0)
{
return QueueData.Instance.GetPrintItemWrapper(SelectedIndex);
}
else
{
return null;
}
}
set
{
if (SelectedPrintItem != value)
{
for (int index = 0; index < QueueData.Instance.PrintItems.Count; index++)
{
if (PrintItems[index] == value)
{
SelectedIndex = index;
return;
}
}
throw new Exception("Item not in queue.");
}
}
}
public void EnsureSelection()
{
if (Count > 0)
{
if (SelectedIndex < 0)
{
SelectedIndex = 0;
}
else if (SelectedIndex > Count - 1)
{
SelectedIndex = Count - 1;
}
// force a refresh of the ui in the case where we are still on the same index but have changed items.
SelectedIndex = SelectedIndex;
}
else
{
SelectedIndex = -1;
}
}
public void SwapItemsOnIdle(int indexA, int indexB)
{
UiThread.RunOnIdle(SwapItems, new SwapIndexArgs(indexA, indexB));

View file

@ -42,8 +42,6 @@ namespace MatterHackers.MatterControl.PrintQueue
{
public class QueueDataView : ScrollableWidget
{
public static int selectedQueueItemIndex = -1;
private event EventHandler unregisterEvents;
// make this private so it can only be built from the Instance
@ -69,7 +67,7 @@ namespace MatterHackers.MatterControl.PrintQueue
if (this.editMode == false)
{
this.ClearSelectedItems();
this.EnsureSelection();
SetMultiSelectToMatchSingleSelect();
}
else
{
@ -83,6 +81,11 @@ namespace MatterHackers.MatterControl.PrintQueue
}
}
private void SetMultiSelectToMatchSingleSelect()
{
throw new NotImplementedException();
}
public void ClearSelectedItems()
{
foreach (var item in SelectedItems)
@ -108,90 +111,8 @@ namespace MatterHackers.MatterControl.PrintQueue
}
}
public void EnsureSelection()
{
if (Count > 0)
{
if (SelectedIndex < 0)
{
SelectedIndex = 0;
}
else if (SelectedIndex > Count - 1)
{
SelectedIndex = Count - 1;
}
// force a refresh of the ui in the case where we are still on the same index but have changed items.
SelectedIndex = SelectedIndex;
}
else
{
SelectedIndex = -1;
}
}
public void MoveToNext()
{
if (SelectedIndex >= 0 && SelectedIndex < Count)
{
if (this.SelectedIndex == Count - 1)
{
this.SelectedIndex = 0;
}
else
{
this.SelectedIndex++;
}
}
}
public void MoveSelectedToBottom()
{
if (SelectedIndex >= 0 && SelectedIndex < Count)
{
int currentIndex = SelectedIndex;
PrintItem replacementItem = new PrintItem(SelectedPrintItem.Name, SelectedPrintItem.FileLocation);
QueueData.Instance.RemoveAt(SelectedIndex);
this.SelectedIndex = currentIndex;
}
}
public SelectedListItems<QueueRowItem> SelectedItems = new SelectedListItems<QueueRowItem>();
public PrintItemWrapper SelectedPrintItem
{
get
{
if (SelectedIndex >= 0)
{
return QueueData.Instance.GetPrintItemWrapper(SelectedIndex);
}
else
{
return null;
}
}
set
{
if (SelectedPrintItem != value)
{
for (int index = 0; index < topToBottomItemList.Children.Count; index++)
{
GuiWidget child = topToBottomItemList.Children[index];
QueueRowItem rowItem = child.Children[0] as QueueRowItem;
if (rowItem.PrintItemWrapper == value)
{
SelectedIndex = index;
return;
}
}
throw new Exception("Item not in queue.");
}
}
}
public QueueRowItem GetPrintQueueItem(int index)
{
if (index >= 0 && index < topToBottomItemList.Children.Count)
@ -231,18 +152,6 @@ namespace MatterHackers.MatterControl.PrintQueue
}
}
public int SelectedIndex
{
get
{
return QueueData.Instance.SelectedIndex;
}
set
{
QueueData.Instance.SelectedIndex = value;
}
}
public override void SendToChildren(object objectToRout)
{
base.SendToChildren(objectToRout);
@ -271,26 +180,17 @@ namespace MatterHackers.MatterControl.PrintQueue
QueueData.Instance.SelectedIndexChanged.RegisterEvent(SelectedIndexChanged, ref unregisterEvents);
QueueData.Instance.ItemAdded.RegisterEvent(ItemAddedToQueue, ref unregisterEvents);
QueueData.Instance.ItemRemoved.RegisterEvent(ItemRemovedFromToQueue, ref unregisterEvents);
QueueData.Instance.ItemRemoved.RegisterEvent(ItemRemovedFromQueue, ref unregisterEvents);
QueueData.Instance.OrderChanged.RegisterEvent(QueueOrderChanged, ref unregisterEvents);
PrinterConnectionAndCommunication.Instance.ActivePrintItemChanged.RegisterEvent(PrintItemChange, ref unregisterEvents);
WidescreenPanel.PreChangePanels.RegisterEvent(SaveCurrentlySelctedItemIndex, ref unregisterEvents);
selectedQueueItemIndex = Math.Min(selectedQueueItemIndex, QueueData.Instance.Count - 1);
SelectedIndex = selectedQueueItemIndex;
EnsureSelection();
}
private void SaveCurrentlySelctedItemIndex(object sender, EventArgs e)
{
selectedQueueItemIndex = SelectedIndex;
QueueData.Instance.EnsureSelection();
}
private void PrintItemChange(object sender, EventArgs e)
{
SelectedPrintItem = PrinterConnectionAndCommunication.Instance.ActivePrintItem;
QueueData.Instance.SelectedPrintItem = PrinterConnectionAndCommunication.Instance.ActivePrintItem;
}
private void SelectedIndexChanged(object sender, EventArgs e)
@ -298,13 +198,12 @@ namespace MatterHackers.MatterControl.PrintQueue
// Skip this processing while in EditMode
if (this.editMode) return;
OnSelectedIndexChanged();
for (int index = 0; index < topToBottomItemList.Children.Count; index++)
{
GuiWidget child = topToBottomItemList.Children[index];
var queueRowItem = (QueueRowItem)child.Children[0];
if (index == SelectedIndex)
if (index == QueueData.Instance.SelectedIndex)
{
if (!PrinterConnectionAndCommunication.Instance.PrinterIsPrinting && !PrinterConnectionAndCommunication.Instance.PrinterIsPaused)
{
@ -351,19 +250,12 @@ namespace MatterHackers.MatterControl.PrintQueue
PrintItemWrapper item = QueueData.Instance.GetPrintItemWrapper(addedIndexArgs.Index);
QueueRowItem queueItem = new QueueRowItem(item, this);
AddChild(queueItem, addedIndexArgs.Index);
EnsureSelection();
}
private void ItemRemovedFromToQueue(object sender, EventArgs e)
private void ItemRemovedFromQueue(object sender, EventArgs e)
{
IndexArgs removeIndexArgs = e as IndexArgs;
topToBottomItemList.RemoveChild(removeIndexArgs.Index);
EnsureSelection();
if (QueueData.Instance.Count > 0 && SelectedIndex > QueueData.Instance.Count - 1)
{
SelectedIndex = Math.Max(SelectedIndex - 1, 0);
}
}
private void QueueOrderChanged(object sender, EventArgs e)
@ -371,12 +263,6 @@ namespace MatterHackers.MatterControl.PrintQueue
throw new NotImplementedException();
}
public override void OnLoad(EventArgs args)
{
EnsureSelection();
base.OnLoad(args);
}
public override void OnClosed(EventArgs e)
{
if (unregisterEvents != null)
@ -455,7 +341,7 @@ namespace MatterHackers.MatterControl.PrintQueue
GuiWidget child = topToBottomItemList.Children[index];
if (child == widgetClicked)
{
SelectedIndex = index;
QueueData.Instance.SelectedIndex = index;
}
}
}
@ -463,9 +349,9 @@ namespace MatterHackers.MatterControl.PrintQueue
private void itemToAdd_MouseLeaveBounds(object sender, EventArgs e)
{
GuiWidget widgetLeft = ((GuiWidget)sender);
if (SelectedIndex >= 0)
if (QueueData.Instance.SelectedIndex >= 0)
{
if (widgetLeft != topToBottomItemList.Children[SelectedIndex])
if (widgetLeft != topToBottomItemList.Children[QueueData.Instance.SelectedIndex])
{
widgetLeft.BackgroundColor = new RGBA_Bytes();
widgetLeft.Invalidate();
@ -495,15 +381,6 @@ namespace MatterHackers.MatterControl.PrintQueue
return false;
}
public void OnSelectedIndexChanged()
{
Invalidate();
if (SelectedValueChanged != null)
{
SelectedValueChanged(this, null);
}
}
public void OnHoverIndexChanged()
{
Invalidate();
@ -512,46 +389,6 @@ namespace MatterHackers.MatterControl.PrintQueue
HoverValueChanged(this, null);
}
}
public void ClearSelected()
{
if (SelectedIndex != -1)
{
SelectedIndex = -1;
OnSelectedIndexChanged();
}
}
public GuiWidget SelectedItem
{
get
{
if (SelectedIndex != -1
&& topToBottomItemList.Children?.Count > SelectedIndex
&& topToBottomItemList.Children[SelectedIndex].Children?.Count > 0)
{
return topToBottomItemList.Children[SelectedIndex].Children[0];
}
return null;
}
set
{
for (int i = 0; i < Children.Count; i++)
{
if (topToBottomItemList.Children[SelectedIndex].Children[0] == value)
{
SelectedIndex = i;
}
}
}
}
public QueueRowItem SelectedPrintQueueItem()
{
return GetPrintQueueItem(SelectedIndex);
}
}
public class PrintItemAction

View file

@ -243,10 +243,12 @@ namespace MatterHackers.MatterControl.PrintQueue
allControls.AnchorAll();
this.AddChild(allControls);
AddHandlers();
SetEditButtonsStates();
//enterEditModeButtonClick(null, null);
queueDataView.SelectedItems.OnAdd += (s, e) => SetEditButtonsStates();
queueDataView.SelectedItems.OnRemove += (s, e) => SetEditButtonsStates();
QueueData.Instance.SelectedIndexChanged.RegisterEvent((s,e) => SetEditButtonsStates(), ref unregisterEvents);
SetEditButtonsStates();
}
private void CreateEditBarButtons()
@ -433,31 +435,6 @@ namespace MatterHackers.MatterControl.PrintQueue
base.OnDragOver(fileDropEventArgs);
}
private void AddHandlers()
{
queueDataView.SelectedItems.OnAdd += onLibraryItemsSelectChanged;
queueDataView.SelectedItems.OnRemove += onLibraryItemsSelectChanged;
QueueData.Instance.SelectedIndexChanged.RegisterEvent(PrintItemSelectionChanged, ref unregisterEvents);
}
void PrintItemSelectionChanged(object sender, EventArgs e)
{
if (!queueDataView.EditMode)
{
// Set the selection to the selected print item.
QueueRowItem selectedItem = queueDataView.SelectedItem as QueueRowItem;
if (selectedItem != null)
{
if (this.queueDataView.SelectedItems.Count > 0
|| !this.queueDataView.SelectedItems.Contains(selectedItem))
{
this.queueDataView.ClearSelectedItems();
this.queueDataView.SelectedItems.Add(selectedItem);
}
}
}
}
private void AddItemsToQueue()
{
FileDialog.OpenFileDialog(
@ -612,8 +589,6 @@ namespace MatterHackers.MatterControl.PrintQueue
enterEditModeButton.Visible = true;
leaveEditModeButton.Visible = false;
queueDataView.EditMode = false;
PrintItemSelectionChanged(null, null);
}
}
@ -622,11 +597,6 @@ namespace MatterHackers.MatterControl.PrintQueue
LeaveEditMode();
}
private void onLibraryItemsSelectChanged(object sender, EventArgs e)
{
SetEditButtonsStates();
}
private void OpenExportWindow(PrintItemWrapper printItem)
{
if (exportingWindowIsOpen == false)