More work on Library. Edit mode now contains export and edit functions (during single selection).

This commit is contained in:
kevinepope 2014-10-05 18:12:37 -07:00
parent bacd85da89
commit 53551add48
7 changed files with 217 additions and 60 deletions

View file

@ -89,15 +89,15 @@ namespace MatterHackers.MatterControl
QueueTabPage = new TabPage(new QueueBottomToolbar(queueDataView), LocalizedString.Get("Queue").ToUpper());
this.AddTab(new SimpleTextTabWidget(QueueTabPage, "Queue Tab", TabTextSize,
ActiveTheme.Instance.TabLabelSelected, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
LibraryTabPage = new TabPage(new PrintLibraryWidget(), LocalizedString.Get("Library").ToUpper());
this.AddTab(new SimpleTextTabWidget(LibraryTabPage, "Library Tab", TabTextSize,
ActiveTheme.Instance.TabLabelSelected, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
HistoryTabPage = new TabPage(new PrintHistoryWidget(), LocalizedString.Get("History").ToUpper());
this.AddTab(new SimpleTextTabWidget(HistoryTabPage, "History Tab", TabTextSize,
ActiveTheme.Instance.TabLabelSelected, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
@ -117,30 +117,30 @@ namespace MatterHackers.MatterControl
string partPreviewLabel = LocalizedString.Get("Part Preview").ToUpper();
this.AddTab(new SimpleTextTabWidget(new TabPage(part3DViewContainer, partPreviewLabel), "Part Preview Tab", TabTextSize,
ActiveTheme.Instance.PrimaryTextColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
string layerPreviewLabel = LocalizedString.Get("Layer Preview").ToUpper();
this.AddTab(new SimpleTextTabWidget(new TabPage(partGcodeViewContainer, layerPreviewLabel), "Layer Preview Tab", TabTextSize,
ActiveTheme.Instance.PrimaryTextColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
//Add the tab contents for 'Advanced Controls'
string printerControlsLabel = LocalizedString.Get("Controls").ToUpper();
this.AddTab(new SimpleTextTabWidget(new TabPage(manualPrinterControlsScrollArea, printerControlsLabel), "Controls Tab", TabTextSize,
ActiveTheme.Instance.PrimaryTextColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
string sliceSettingsLabel = LocalizedString.Get("Slice Settings").ToUpper();
sliceSettingsWidget = new SliceSettingsWidget(sliceSettingsUiState);
this.AddTab(new SimpleTextTabWidget(new TabPage(sliceSettingsWidget, sliceSettingsLabel), "Slice Settings Tab", TabTextSize,
ActiveTheme.Instance.PrimaryTextColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
string configurationLabel = LocalizedString.Get("Configuration").ToUpper();
ScrollableWidget configurationControls = new PrinterConfigurationPage();
this.AddTab(new SimpleTextTabWidget(new TabPage(configurationControls, configurationLabel), "Configuration Tab", TabTextSize,
ActiveTheme.Instance.PrimaryTextColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
AboutTabPage = new TabPage(new AboutPage(), LocalizedString.Get("About").ToUpper());
AboutTabView = new SimpleTextTabWidget(AboutTabPage, "About Tab", TabTextSize,
ActiveTheme.Instance.TabLabelSelected, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes());
ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes());
this.AddTab(AboutTabView);
NumQueueItemsChanged(this, null);

View file

@ -1,6 +1,6 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MatterControl", "MatterControl.csproj", "{0B8D6F56-BD7F-4426-B858-D9292B084656}"
ProjectSection(ProjectDependencies) = postProject
{F67AE800-B0C7-42A8-836F-597B4E74591C} = {F67AE800-B0C7-42A8-836F-597B4E74591C}
@ -120,10 +120,10 @@ Global
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug|x64.ActiveCfg = Debug|Any CPU
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug|x86.ActiveCfg = Debug|Any CPU
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|Any CPU.ActiveCfg = Debug64|x64
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|Any CPU.Build.0 = Debug64|x64
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|x64.ActiveCfg = Debug64|Any CPU
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|x86.ActiveCfg = Debug64|Any CPU
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|Any CPU.Build.0 = Debug|Any CPU
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|x64.ActiveCfg = Debug|Any CPU
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|x86.ActiveCfg = Debug|Any CPU
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Release|Any CPU.Build.0 = Release|Any CPU
{0B8D6F56-BD7F-4426-B858-D9292B084656}.Release|x64.ActiveCfg = Release|Any CPU
@ -554,10 +554,10 @@ Global
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug|x64.ActiveCfg = Debug|Any CPU
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug|x64.Build.0 = Debug|Any CPU
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug|x86.ActiveCfg = Debug|Any CPU
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|Any CPU.ActiveCfg = Debug64|x64
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|Any CPU.Build.0 = Debug64|x64
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|x64.ActiveCfg = Debug64|Any CPU
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|x86.ActiveCfg = Debug64|Any CPU
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|Any CPU.Build.0 = Debug|Any CPU
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|x64.ActiveCfg = Debug|Any CPU
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|x86.ActiveCfg = Debug|Any CPU
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release|Any CPU.Build.0 = Release|Any CPU
{C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release|x64.ActiveCfg = Release|Any CPU

View file

@ -932,7 +932,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private void DeleteSelectedMesh()
{
// don't ever delet the last mesh
// don't ever delete the last mesh
if (Meshes.Count > 1)
{
Meshes.RemoveAt(SelectedMeshIndex);

View file

@ -89,10 +89,9 @@ namespace MatterHackers.MatterControl.PrintLibrary
if (this.editMode != value)
{
this.editMode = value;
foreach (LibraryRowItem item in topToBottomItemList.Children)
if (this.editMode == false)
{
item.EditMode = this.editMode;
this.ClearSelectedItems();
}
}
@ -124,17 +123,12 @@ namespace MatterHackers.MatterControl.PrintLibrary
public void ClearSelectedItems()
{
List<LibraryRowItem> itemsToClear = new List<LibraryRowItem>();
foreach (LibraryRowItem item in SelectedItems)
{
itemsToClear.Add(item);
}
foreach (LibraryRowItem item in itemsToClear)
{
item.isSelectedItem = false;
item.selectionCheckBox.Checked = false;
}
this.SelectedItems.Clear();
}
public delegate void SelectedValueChangedEventHandler(object sender, EventArgs e);

View file

@ -230,8 +230,9 @@ namespace MatterHackers.MatterControl.PrintLibrary
void SetDisplayAttributes()
{
//this.VAnchor = Agg.UI.VAnchor.FitToChildren;
this.HAnchor = Agg.UI.HAnchor.ParentLeftRight;
this.Height = 65;
this.Height = 50;
this.Padding = new BorderDouble(0);
this.Margin = new BorderDouble(6, 0, 6, 6);
}
@ -256,12 +257,7 @@ namespace MatterHackers.MatterControl.PrintLibrary
}
this.Invalidate();
};
selectionCheckBox.CheckedStateChanged += selectionCheckBox_CheckedStateChanged;
}
void PrintLibraryListItem_Click(object sender, EventArgs e)
{
selectionCheckBox.Checked = !selectionCheckBox.Checked;
//selectionCheckBox.CheckedStateChanged += selectionCheckBox_CheckedStateChanged;
}
public override void OnClosed(EventArgs e)
@ -275,21 +271,27 @@ namespace MatterHackers.MatterControl.PrintLibrary
private void onLibraryItemClick(object sender, MouseEventArgs e)
{
if (this.EditMode == false)
if (this.libraryDataView.EditMode == false)
{
UiThread.RunOnIdle((state) =>
{
openPartView(state);
});
});
}
else
{
if (this.isSelectedItem == false)
{
this.isSelectedItem = true;
this.selectionCheckBox.Checked = true;
libraryDataView.SelectedItems.Add(this);
}
else
{
this.isSelectedItem = false;
this.selectionCheckBox.Checked = false;
libraryDataView.SelectedItems.Remove(this);
}
}
}
@ -338,7 +340,7 @@ namespace MatterHackers.MatterControl.PrintLibrary
}
private void OpenPartViewWindow(bool openInEditMode = false)
public void OpenPartViewWindow(bool openInEditMode = false)
{
if (viewWindowIsOpen == false)
{
@ -387,12 +389,16 @@ namespace MatterHackers.MatterControl.PrintLibrary
}
public override void OnDraw(Graphics2D graphics2D)
{
{
if (this.libraryDataView.EditMode)
{
selectionCheckBoxContainer.Visible = true;
rightButtonOverlay.Visible = false;
rightButtonOverlay.Visible = false;
}
else
{
selectionCheckBoxContainer.Visible = false;
}
base.OnDraw(graphics2D);
@ -409,6 +415,9 @@ namespace MatterHackers.MatterControl.PrintLibrary
RoundedRect rectBorder = new RoundedRect(Bounds, 0);
this.BackgroundColor = RGBA_Bytes.White;
this.partLabel.TextColor = RGBA_Bytes.Black;
this.selectionCheckBox.TextColor = RGBA_Bytes.Black;
graphics2D.Render(new Stroke(rectBorder, 3), ActiveTheme.Instance.SecondaryAccentColor);
}
else

View file

@ -44,16 +44,24 @@ using MatterHackers.VectorMath;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.CustomWidgets;
namespace MatterHackers.MatterControl.PrintLibrary
{
public class PrintLibraryWidget : GuiWidget
{
TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory();
TextImageButtonFactory editButtonFactory = new TextImageButtonFactory();
TextImageButtonFactory searchButtonFactory = new TextImageButtonFactory();
Button deleteFromLibraryButton;
TextWidget navigationLabel;
Button removeFromLibraryButton;
Button addToQueueButton;
Button searchButton;
Button exportItemButton;
Button editItemButton;
Button addToLibraryButton;
Button enterEditModeButton;
Button leaveEditModeButton;
MHTextEditWidget searchInput;
LibraryDataView libraryDataView;
@ -70,51 +78,101 @@ namespace MatterHackers.MatterControl.PrintLibrary
searchButtonFactory.borderWidth = 0;
searchButtonFactory.FixedWidth = 80;
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 = 50;
FlowLayoutWidget allControls = new FlowLayoutWidget(FlowDirection.TopToBottom);
{
{
enterEditModeButton = editButtonFactory.Generate("Edit".Localize());
leaveEditModeButton = editButtonFactory.Generate("Done".Localize());
leaveEditModeButton.Visible = false;
FlowLayoutWidget searchPanel = new FlowLayoutWidget();
searchPanel.BackgroundColor = ActiveTheme.Instance.TransparentDarkOverlay;
searchPanel.HAnchor = HAnchor.ParentLeftRight;
searchPanel.Padding = new BorderDouble(0);
{
searchInput = new MHTextEditWidget();
searchInput = new MHTextEditWidget(messageWhenEmptyAndNotSelected:"Search Library".Localize());
searchInput.Margin = new BorderDouble(6, 3, 0, 0);
searchInput.HAnchor = HAnchor.ParentLeftRight;
searchInput.VAnchor = VAnchor.ParentCenter;
searchButton = searchButtonFactory.Generate(LocalizedString.Get("Search"),centerText:true);
searchPanel.AddChild(enterEditModeButton);
searchPanel.AddChild(leaveEditModeButton);
searchPanel.AddChild(searchInput);
searchPanel.AddChild(searchButton);
}
FlowLayoutWidget navigationPanel = new FlowLayoutWidget();
navigationPanel.HAnchor = HAnchor.ParentLeftRight;
navigationPanel.Padding = new BorderDouble(0);
navigationPanel.BackgroundColor = ActiveTheme.Instance.TransparentLightOverlay;
navigationLabel = new TextWidget("My Library".Localize(), pointSize: 14);
navigationLabel.VAnchor = Agg.UI.VAnchor.ParentCenter;
navigationLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor;
navigationPanel.AddChild(new GuiWidget(50,0)); //Add this as temporary balance to edit buttons
navigationPanel.AddChild(new HorizontalSpacer());
navigationPanel.AddChild(navigationLabel);
navigationPanel.AddChild(new HorizontalSpacer());
//navigationPanel.AddChild(enterEditModeButton);
//navigationPanel.AddChild(leaveEditModeButton);
FlowLayoutWidget buttonPanel = new FlowLayoutWidget();
buttonPanel.HAnchor = HAnchor.ParentLeftRight;
buttonPanel.Padding = new BorderDouble(0, 3);
buttonPanel.MinimumSize = new Vector2(0, 46);
{
Button addToLibrary = textImageButtonFactory.Generate(LocalizedString.Get("Import"), "icon_import_white_32x32.png");
buttonPanel.AddChild(addToLibrary);
addToLibrary.Margin = new BorderDouble(0, 0, 3, 0);
addToLibrary.Click += new ButtonBase.ButtonEventHandler(loadFile_Click);
addToLibraryButton = textImageButtonFactory.Generate(LocalizedString.Get("Import"), "icon_import_white_32x32.png");
buttonPanel.AddChild(addToLibraryButton);
addToLibraryButton.Margin = new BorderDouble(0, 0, 3, 0);
addToLibraryButton.Click += new ButtonBase.ButtonEventHandler(loadFile_Click);
addToQueueButton = textImageButtonFactory.Generate("Add to Queue");
addToQueueButton = textImageButtonFactory.Generate("Add to Queue".Localize());
addToQueueButton.Margin = new BorderDouble(3, 0);
addToQueueButton.Click += new ButtonBase.ButtonEventHandler(addToQueueButton_Click);
addToQueueButton.Visible = false;
buttonPanel.AddChild(addToQueueButton);
deleteFromLibraryButton = textImageButtonFactory.Generate("Remove");
deleteFromLibraryButton.Margin = new BorderDouble(3, 0);
deleteFromLibraryButton.Click += new ButtonBase.ButtonEventHandler(deleteFromQueueButton_Click);
deleteFromLibraryButton.Visible = false;
buttonPanel.AddChild(deleteFromLibraryButton);
exportItemButton = textImageButtonFactory.Generate("Export".Localize());
exportItemButton.Margin = new BorderDouble(3, 0);
exportItemButton.Click += new ButtonBase.ButtonEventHandler(exportButton_Click);
exportItemButton.Visible = false;
buttonPanel.AddChild(exportItemButton);
editItemButton = textImageButtonFactory.Generate("Edit".Localize());
editItemButton.Margin = new BorderDouble(3, 0);
editItemButton.Click += new ButtonBase.ButtonEventHandler(editButton_Click);
editItemButton.Visible = false;
buttonPanel.AddChild(editItemButton);
removeFromLibraryButton = textImageButtonFactory.Generate("Remove".Localize());
removeFromLibraryButton.Margin = new BorderDouble(3, 0);
removeFromLibraryButton.Click += new ButtonBase.ButtonEventHandler(deleteFromQueueButton_Click);
removeFromLibraryButton.Visible = false;
buttonPanel.AddChild(removeFromLibraryButton);
GuiWidget spacer = new GuiWidget();
spacer.HAnchor = HAnchor.ParentLeftRight;
buttonPanel.AddChild(spacer);
}
allControls.AddChild(searchPanel);
//allControls.AddChild(navigationPanel);
allControls.AddChild(searchPanel);
libraryDataView = new LibraryDataView();
allControls.AddChild(libraryDataView);
allControls.AddChild(buttonPanel);
@ -134,6 +192,8 @@ namespace MatterHackers.MatterControl.PrintLibrary
searchInput.ActualTextEditWidget.EnterPressed += new KeyEventHandler(searchInputEnterPressed);
searchButton.Click += searchButtonClick;
searchInput.ActualTextEditWidget.KeyUp += searchInputKeyUp;
enterEditModeButton.Click += enterEditModeButtonClick;
leaveEditModeButton.Click += leaveEditModeButtonClick;
}
void searchInputKeyUp(object sender, KeyEventArgs keyEvent)
@ -146,6 +206,25 @@ namespace MatterHackers.MatterControl.PrintLibrary
searchButtonClick(null, null);
}
void enterEditModeButtonClick(object sender, MouseEventArgs mouseEvent)
{
enterEditModeButton.Visible = false;
leaveEditModeButton.Visible = true;
libraryDataView.EditMode = true;
addToLibraryButton.Visible = false;
SetVisibleButtons();
}
void leaveEditModeButtonClick(object sender, MouseEventArgs mouseEvent)
{
enterEditModeButton.Visible = true;
leaveEditModeButton.Visible = false;
libraryDataView.EditMode = false;
addToLibraryButton.Visible = true;
SetVisibleButtons();
}
void searchButtonClick(object sender, MouseEventArgs mouseEvent)
{
string textToSend = searchInput.Text.Trim();
@ -163,16 +242,36 @@ namespace MatterHackers.MatterControl.PrintLibrary
private void onLibraryItemsSelected(object sender, EventArgs e)
{
List<LibraryRowItem> selectedItemsList = (List<LibraryRowItem>)sender;
SetVisibleButtons();
}
private void SetVisibleButtons()
{
List<LibraryRowItem> selectedItemsList = libraryDataView.SelectedItems;
if (selectedItemsList.Count > 0)
{
if (selectedItemsList.Count == 1)
{
exportItemButton.Visible = true;
editItemButton.Visible = true;
}
else
{
exportItemButton.Visible = false;
editItemButton.Visible = false;
}
addToQueueButton.Visible = true;
deleteFromLibraryButton.Visible = true;
removeFromLibraryButton.Visible = true;
}
else
{
addToQueueButton.Visible = false;
deleteFromLibraryButton.Visible = false;
removeFromLibraryButton.Visible = false;
exportItemButton.Visible = false;
editItemButton.Visible = false;
}
}
@ -186,6 +285,55 @@ namespace MatterHackers.MatterControl.PrintLibrary
void deleteFromQueueButton_Click(object sender, MouseEventArgs mouseEvent)
{
libraryDataView.RemoveSelectedItems();
SetVisibleButtons();
}
ExportPrintItemWindow exportingWindow;
bool exportingWindowIsOpen = false;
void exportButton_Click(object sender, MouseEventArgs mouseEvent)
{
//Open export options
if (libraryDataView.SelectedItems.Count == 1)
{
LibraryRowItem libraryItem = libraryDataView.SelectedItems[0];
OpenExportWindow(libraryItem.printItemWrapper);
}
}
void editButton_Click(object sender, MouseEventArgs mouseEvent)
{
//Open export options
if (libraryDataView.SelectedItems.Count == 1)
{
LibraryRowItem libraryItem = libraryDataView.SelectedItems[0];
libraryItem.OpenPartViewWindow(openInEditMode:true);
}
}
private void OpenExportWindow(PrintItemWrapper printItem)
{
if (exportingWindowIsOpen == false)
{
exportingWindow = new ExportPrintItemWindow(printItem);
this.exportingWindowIsOpen = true;
exportingWindow.Closed += new EventHandler(ExportQueueItemWindow_Closed);
exportingWindow.ShowAsSystemWindow();
}
else
{
if (exportingWindow != null)
{
exportingWindow.BringToFront();
}
}
}
void ExportQueueItemWindow_Closed(object sender, EventArgs e)
{
this.exportingWindowIsOpen = false;
}
public override void OnDragEnter(FileDropEventArgs fileDropEventArgs)

View file

@ -2636,3 +2636,9 @@ Translated:Extruder Count
English:Hardware
Translated:Hardware
English:Search Library
Translated:Search Library
English:My Library
Translated:My Library