Lots of work on Getting the QueueData instance to be separate form the UI queue and refs.

This commit is contained in:
larsbrubaker 2014-04-15 18:13:27 -07:00
parent 49c8a045a5
commit 4b6a3cfa97
40 changed files with 586 additions and 1534 deletions

View file

@ -186,15 +186,15 @@ namespace MatterHackers.MatterControl
}
static string applicationDataPath = DataStorage.ApplicationDataStorage.Instance.ApplicationUserDataPath;
static string updateFileLocation = System.IO.Path.Combine(applicationDataPath, "updates");
static string updateFileLocation = Path.Combine(applicationDataPath, "updates");
public void InstallUpdate(object sender, MouseEventArgs e)
{
string downloadToken = ApplicationSettings.Instance.get("CurrentBuildToken");
string updateFileName = System.IO.Path.Combine(updateFileLocation, "{0}.{1}".FormatWith(downloadToken, InstallerExtension));
string updateFileName = Path.Combine(updateFileLocation, "{0}.{1}".FormatWith(downloadToken, InstallerExtension));
string releaseVersion = ApplicationSettings.Instance.get("CurrentReleaseVersion");
string friendlyFileName = System.IO.Path.Combine(updateFileLocation, "MatterControlSetup-{0}.{1}".FormatWith(releaseVersion, InstallerExtension));
string friendlyFileName = Path.Combine(updateFileLocation, "MatterControlSetup-{0}.{1}".FormatWith(releaseVersion, InstallerExtension));
if (System.IO.File.Exists(friendlyFileName))
{
@ -274,7 +274,7 @@ namespace MatterHackers.MatterControl
System.IO.Directory.CreateDirectory(updateFileLocation);
}
string updateFileName = System.IO.Path.Combine(updateFileLocation, string.Format("{0}.{1}", downloadToken, InstallerExtension));
string updateFileName = Path.Combine(updateFileLocation, string.Format("{0}.{1}", downloadToken, InstallerExtension));
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted);
@ -307,7 +307,7 @@ namespace MatterHackers.MatterControl
void CheckVersionStatus()
{
string currentBuildToken = ApplicationSettings.Instance.get("CurrentBuildToken");
string updateFileName = System.IO.Path.Combine(updateFileLocation, string.Format("{0}.{1}", currentBuildToken, InstallerExtension));
string updateFileName = Path.Combine(updateFileLocation, string.Format("{0}.{1}", currentBuildToken, InstallerExtension));
string applicationBuildToken = VersionInfo.Instance.BuildToken;
@ -335,7 +335,7 @@ namespace MatterHackers.MatterControl
{
this.updateInitiated = false;
string currentBuildToken = ApplicationSettings.Instance.get("CurrentBuildToken");
string updateFileName = System.IO.Path.Combine(updateFileLocation, string.Format("{0}.{1}", currentBuildToken, InstallerExtension));
string updateFileName = Path.Combine(updateFileLocation, string.Format("{0}.{1}", currentBuildToken, InstallerExtension));
string applicationBuildToken = VersionInfo.Instance.BuildToken;

View file

@ -48,7 +48,6 @@ namespace MatterHackers.MatterControl.ActionBar
}
}
//Base widget for use in ButtonViewStates
public class ControlButtonViewBase : GuiWidget
{

View file

@ -19,9 +19,12 @@ namespace MatterHackers.MatterControl
{
public class ActionBarPlus : FlowLayoutWidget
{
public ActionBarPlus()
QueueDataView queueDataView;
public ActionBarPlus(QueueDataView queueDataView)
: base(FlowDirection.TopToBottom)
{
{
this.queueDataView = queueDataView;
this.Create();
}
@ -42,7 +45,7 @@ namespace MatterHackers.MatterControl
// Add Child Elements
this.AddChild(new ActionBar.PrinterActionRow());
this.AddChild(new PrintStatusRow());
this.AddChild(new PrintStatusRow(queueDataView));
// Add Handlers
ActiveTheme.Instance.ThemeChanged.RegisterEvent(onThemeChanged, ref unregisterEvents);

View file

@ -1,19 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Threading;
using MatterHackers.Agg.Image;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.VectorMath;
using MatterHackers.MatterControl;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.MatterControl.SlicerConfiguration;
namespace MatterHackers.MatterControl.ActionBar
@ -42,6 +35,13 @@ namespace MatterHackers.MatterControl.ActionBar
TooltipButton reprintButton;
TooltipButton doneWithCurrentPartButton;
QueueDataView queueDataView;
public PrintActionRow(QueueDataView queueDataView)
{
this.queueDataView = queueDataView;
}
protected override void Initialize()
{
textImageButtonFactory.normalTextColor = RGBA_Bytes.White;
@ -177,14 +177,9 @@ namespace MatterHackers.MatterControl.ActionBar
{
foreach (string loadedFileName in openParams.FileNames)
{
PrintQueueItem queueItem = new PrintQueueItem(System.IO.Path.GetFileNameWithoutExtension(loadedFileName), System.IO.Path.GetFullPath(loadedFileName));
PrintQueueControl.Instance.AddChild(queueItem);
QueueData.Instance.AddItem(new PrintItem(Path.GetFileNameWithoutExtension(loadedFileName), Path.GetFullPath(loadedFileName)));
}
PrintQueueControl.Instance.EnsureSelection();
PrintQueueControl.Instance.Invalidate();
}
PrintQueueControl.Instance.SaveDefaultQueue();
}
void partToPrint_SliceDone(object sender, EventArgs e)
@ -267,7 +262,7 @@ namespace MatterHackers.MatterControl.ActionBar
string message = String.Format(removeFromQueueMessage, pathAndFile);
if (StyledMessageBox.ShowMessageBox(message, itemNotFoundMessage, StyledMessageBox.MessageType.YES_NO))
{
PrintQueueControl.Instance.RemoveIndex(PrintQueueControl.Instance.SelectedIndex);
QueueData.Instance.RemoveAt(queueDataView.SelectedIndex);
}
}
}
@ -280,9 +275,9 @@ namespace MatterHackers.MatterControl.ActionBar
void onSkipButton_Click(object sender, MouseEventArgs mouseEvent)
{
if (PrintQueueControl.Instance.Count > 1)
if (QueueData.Instance.Count > 1)
{
PrintQueueControl.Instance.MoveToNext();
queueDataView.MoveToNext();
}
}
@ -296,8 +291,7 @@ namespace MatterHackers.MatterControl.ActionBar
void onRemoveButton_Click(object sender, MouseEventArgs mouseEvent)
{
PrintQueueControl.Instance.RemoveIndex(PrintQueueControl.Instance.SelectedIndex);
PrintQueueControl.Instance.SaveDefaultQueue();
QueueData.Instance.RemoveAt(queueDataView.SelectedIndex);
}
void onPauseButton_Click(object sender, MouseEventArgs mouseEvent)
@ -333,8 +327,7 @@ namespace MatterHackers.MatterControl.ActionBar
void onDoneWithCurrentPartButton_Click(object sender, MouseEventArgs mouseEvent)
{
PrinterCommunication.Instance.ResetToReadyState();
PrintQueueControl.Instance.RemoveIndex(PrintQueueControl.Instance.SelectedIndex);
PrintQueueControl.Instance.SaveDefaultQueue();
QueueData.Instance.RemoveAt(queueDataView.SelectedIndex);
// We don't have to change the selected index because we should be on the next one as we deleted the one
// we were on.
}
@ -412,7 +405,7 @@ namespace MatterHackers.MatterControl.ActionBar
this.activePrintButtons.Add(startButton);
//Show 'skip' button if there are more items in queue
if (PrintQueueControl.Instance.Count > 1)
if (QueueData.Instance.Count > 1)
{
this.activePrintButtons.Add(skipButton);
}

View file

@ -1,24 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Diagnostics;
using System.Threading;
using System.IO;
/*
Copyright (c) 2014, Kevin Pope
All rights reserved.
using MatterHackers.Agg.Image;
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.VectorMath;
using MatterHackers.Agg.VertexSource;
using MatterHackers.MatterControl;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.PolygonMesh;
using MatterHackers.Localizations;
using MatterHackers.VectorMath;
namespace MatterHackers.MatterControl.ActionBar
{
@ -33,6 +51,14 @@ namespace MatterHackers.MatterControl.ActionBar
TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
TextWidget activePrintStatus;
QueueDataView queueDataView;
public PrintStatusRow(QueueDataView queueDataView)
{
this.queueDataView = queueDataView;
}
string ActivePrintStatusText
{
set
@ -95,7 +121,7 @@ namespace MatterHackers.MatterControl.ActionBar
temperatureWidgets.VAnchor |= VAnchor.ParentTop;
temperatureWidgets.Margin = new BorderDouble(left: 6);
FlowLayoutWidget printStatusContainer = getActivePrinterInfo();
FlowLayoutWidget printStatusContainer = CreateActivePrinterInfoWidget();
printStatusContainer.VAnchor |= VAnchor.ParentTop;
FlowLayoutWidget iconContainer = new FlowLayoutWidget(FlowDirection.TopToBottom);
@ -140,7 +166,7 @@ namespace MatterHackers.MatterControl.ActionBar
return notifyButton;
}
private FlowLayoutWidget getActivePrinterInfo()
private FlowLayoutWidget CreateActivePrinterInfoWidget()
{
FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom);
container.Margin = new BorderDouble(6, 0,6,3);
@ -168,7 +194,7 @@ namespace MatterHackers.MatterControl.ActionBar
activePrintInfo = getPrintStatusLabel("", pointSize: 11);
activePrintInfo.AutoExpandBoundsToText = true;
PrintActionRow printActionRow = new PrintActionRow();
PrintActionRow printActionRow = new PrintActionRow(queueDataView);
container.AddChild(topRow);
container.AddChild(activePrintName);

View file

@ -44,7 +44,6 @@ using MatterHackers.MatterControl;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.MatterControl.PrintLibrary;
using MatterHackers.MatterControl.SlicerConfiguration;
using MatterHackers.MatterControl.ToolsPage;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.Localizations;
@ -63,6 +62,8 @@ namespace MatterHackers.MatterControl
RGBA_Bytes unselectedTextColor = ActiveTheme.Instance.TabLabelUnselected;
public EventHandler AdvancedControlsLoaded;
QueueDataView queueDataView;
GuiWidget LeftPanel
{
get { return GetPannel(0); }
@ -73,9 +74,10 @@ namespace MatterHackers.MatterControl
get { return GetPannel(1); }
}
public CompactSlidePanel()
public CompactSlidePanel(QueueDataView queueDataView)
: base(2)
{
this.queueDataView = queueDataView;
AddElements();
}
@ -89,7 +91,7 @@ namespace MatterHackers.MatterControl
this.LeftPanel.AddChild(new PrintProgressBar());
// construct the main controls tab control
mainControlsTabControl = new QueueTab();
mainControlsTabControl = new QueueTab(queueDataView);
advancedControlsButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor;
advancedControlsButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor;

View file

@ -44,7 +44,6 @@ using MatterHackers.MatterControl;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.MatterControl.PrintLibrary;
using MatterHackers.MatterControl.SlicerConfiguration;
using MatterHackers.MatterControl.ToolsPage;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.Localizations;

View file

@ -53,7 +53,6 @@ namespace MatterHackers.MatterControl
{
class QueueTab : TabControl
{
TabPage QueueTabPage;
TabPage LibraryTabPage;
TabPage HistoryTabPage;
@ -61,9 +60,11 @@ namespace MatterHackers.MatterControl
SimpleTextTabWidget AboutTabView;
RGBA_Bytes unselectedTextColor = ActiveTheme.Instance.TabLabelUnselected;
GuiWidget addedUpdateMark = null;
QueueDataView queueDataView;
public QueueTab()
public QueueTab(QueueDataView queueDataView)
{
this.queueDataView = queueDataView;
this.TabBar.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor;
this.TabBar.BorderColor = new RGBA_Bytes(0, 0, 0, 0);
this.TabBar.Margin = new BorderDouble(0, 0);
@ -71,7 +72,7 @@ namespace MatterHackers.MatterControl
this.Margin = new BorderDouble(top: 4);
QueueTabPage = new TabPage(new QueueControlsWidget(), LocalizedString.Get("Queue").ToUpper());
QueueTabPage = new TabPage(new BottomToolbar(queueDataView), LocalizedString.Get("Queue").ToUpper());
this.AddTab(new SimpleTextTabWidget(QueueTabPage, 15,
ActiveTheme.Instance.TabLabelSelected, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
@ -96,15 +97,15 @@ namespace MatterHackers.MatterControl
void NumQueueItemsChanged(object sender, EventArgs widgetEvent)
{
string queueStringBeg = LocalizedString.Get("Queue").ToUpper();
string queueString = string.Format("{1} ({0})", PrintQueue.PrintQueueControl.Instance.Count, queueStringBeg);
QueueTabPage.Text = string.Format(queueString, PrintQueue.PrintQueueControl.Instance.Count);
string queueString = string.Format("{1} ({0})", QueueData.Instance.Count, queueStringBeg);
QueueTabPage.Text = string.Format(queueString, QueueData.Instance.Count);
}
event EventHandler unregisterEvents;
void AddHandlers()
{
PrintQueue.PrintQueueControl.Instance.ItemAdded.RegisterEvent(NumQueueItemsChanged, ref unregisterEvents);
PrintQueue.PrintQueueControl.Instance.ItemRemoved.RegisterEvent(NumQueueItemsChanged, ref unregisterEvents);
QueueData.Instance.ItemAdded.RegisterEvent(NumQueueItemsChanged, ref unregisterEvents);
QueueData.Instance.ItemRemoved.RegisterEvent(NumQueueItemsChanged, ref unregisterEvents);
ApplicationWidget.Instance.SetUpdateNotificationTrigger.RegisterEvent(SetUpdateNotification, ref unregisterEvents);
}

View file

@ -233,6 +233,28 @@ namespace MatterHackers.MatterControl
LoadColumnTwo();
}
void LoadCompactView()
{
QueueDataView queueDataView = new QueueDataView();
ColumnOne.RemoveAllChildren();
ColumnOne.AddChild(new ActionBarPlus(queueDataView));
ColumnOne.AddChild(new CompactSlidePanel(queueDataView));
ColumnOne.AnchorAll();
}
void LoadColumnOne()
{
QueueDataView queueDataView = new QueueDataView();
ColumnOne.RemoveAllChildren();
ColumnOne.VAnchor = VAnchor.ParentBottomTop;
ColumnOne.AddChild(new ActionBarPlus(queueDataView));
ColumnOne.AddChild(new PrintProgressBar());
ColumnOne.AddChild(new QueueTab(queueDataView));
ColumnOne.Width = 500; //Ordering here matters - must go after children are added
}
void LoadColumnTwo()
{
ColumnTwo.RemoveAllChildren();
@ -251,30 +273,11 @@ namespace MatterHackers.MatterControl
SetVisibleStatus();
}
void LoadColumnZero()
{
ColumnOne.RemoveAllChildren();
ColumnOne.AddChild(new ActionBarPlus());
ColumnOne.AddChild(new CompactSlidePanel());
ColumnOne.AnchorAll();
}
void LoadColumnOne()
{
ColumnOne.RemoveAllChildren();
ColumnOne.VAnchor = VAnchor.ParentBottomTop;
ColumnOne.AddChild(new ActionBarPlus());
ColumnOne.AddChild(new PrintProgressBar());
ColumnOne.AddChild(new QueueTab());
ColumnOne.Width = 500; //Ordering here matters - must go after children are added
}
void LoadColumnThree()
{
advancedControlsTabControl = CreateNewAdvancedControlsTab(new SliceSettingsWidget.UiState());
ColumnThree.AddChild(advancedControlsTabControl);
ColumnThree.Width = 590; //Ordering here matters - must go after children are added
}
int UiState = -1;
@ -292,7 +295,7 @@ namespace MatterHackers.MatterControl
UiState = 0;
ApplicationWidget.Instance.WidescreenMode = false;
LoadColumnZero();
LoadCompactView();
ColumnThree.Visible = false;
ColumnTwo.Visible = false;

View file

@ -18,11 +18,11 @@ namespace MatterHackers.MatterControl
public class ExportQueueItemWindow : SystemWindow
{
CheckBox showInFolderAfterSave;
private PrintQueue.PrintQueueItem printQueueItem;
private PrintQueue.RowItem printQueueItem;
string pathAndFilenameToSave;
bool partIsGCode = false;
public ExportQueueItemWindow(PrintQueue.PrintQueueItem printQueueItem)
public ExportQueueItemWindow(PrintQueue.RowItem printQueueItem)
: base(400, 250)
{
if (Path.GetExtension(printQueueItem.PrintItemWrapper.FileLocation).ToUpper() == ".GCODE")

View file

@ -218,7 +218,7 @@ namespace MatterHackers.MatterControl
}
else
{
PrintQueueItem.ShowCantFindFileMessage(printItem);
RowItem.ShowCantFindFileMessage(printItem);
}
}
}

View file

@ -82,7 +82,7 @@ namespace MatterHackers.MatterControl.DataStorage
{
if (this.applicationPath == null)
{
applicationPath = System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly ().Location);
applicationPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
}
return applicationPath;
}
@ -149,7 +149,7 @@ namespace MatterHackers.MatterControl.DataStorage
/// <returns></returns>
public string DatastorePath
{
get { return System.IO.Path.Combine(ApplicationUserDataPath, datastoreName); }
get { return Path.Combine(ApplicationUserDataPath, datastoreName); }
}
public override string ToString()

View file

@ -1,4 +1,33 @@
using System;
/*
Copyright (c) 2014, Kevin Pope
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

View file

@ -89,6 +89,7 @@
<Compile Include="PrintHistory\PrintHistoryListControl.cs" />
<Compile Include="PrintHistory\PrintHistoryListItem.cs" />
<Compile Include="PrintHistory\PrintHistoryWidget.cs" />
<Compile Include="PrintQueue\QueueData.cs" />
<Compile Include="SlicerConfiguration\SettingsControlSelectors.cs" />
<Compile Include="SlicerConfiguration\SlicePresetsWindow\SlicePresetDetailWidget.cs" />
<Compile Include="SlicerConfiguration\SlicePresetsWindow\SlicePresetListWidget.cs" />
@ -117,9 +118,6 @@
<Compile Include="SlicerConfiguration\SlicerMapping\EngineMapingBase.cs" />
<Compile Include="Testing\ReleaseTests.cs" />
<Compile Include="Testing\TestingDispatch.cs" />
<Compile Include="ToolsPage\ToolsListControl.cs" />
<Compile Include="ToolsPage\ToolsListItem.cs" />
<Compile Include="ToolsPage\ToolsWidget.cs" />
<Compile Include="ApplicationView\WidescreenPanel.cs" />
<Compile Include="ConfigurationPage\PrintLevelWizard.cs" />
<Compile Include="AboutPage\ContactForm.cs" />
@ -150,7 +148,7 @@
<Compile Include="ControlElements\MHTextEditWidget.cs" />
<Compile Include="PartPreviewWindow\GcodeViewBasic.cs" />
<Compile Include="PartPreviewWindow\PartPreviewMainWindow.cs" />
<Compile Include="PrintQueue\PartsSheet.cs" />
<Compile Include="PrintQueue\PartsSheetCreator.cs" />
<Compile Include="Utilities\WebUtilities\JsonResponseDictionary.cs" />
<Compile Include="PrinterCommunication\PrinterCommunication.cs" />
<Compile Include="PrinterControls\PrintLeveling.cs" />
@ -178,14 +176,14 @@
<Compile Include="PrintQueue\ExportToFolderProcess.cs" />
<Compile Include="CustomWidgets\PartThumbnailWidget.cs" />
<Compile Include="PrintQueue\PrintItemWrapper.cs" />
<Compile Include="PrintQueue\PrintQueueItem.cs" />
<Compile Include="PrintQueue\RowItem.cs" />
<Compile Include="MatterControlApplication.cs" />
<Compile Include="PrintQueue\PrintQueueControl.cs" />
<Compile Include="PrintQueue\PrintQueueMenu.cs" />
<Compile Include="PrintQueue\QueueDataView.cs" />
<Compile Include="PrintQueue\QueueOptionsMenu.cs" />
<Compile Include="Utilities\ProjectFileHandler.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Utilities\WebUtilities\RequestManager.cs" />
<Compile Include="PrintQueue\QueueControlsWidget.cs" />
<Compile Include="PrintQueue\BottomToolbar.cs" />
<Compile Include="SettingsManagement\ApplicationSettings.cs" />
<Compile Include="SettingsManagement\UserSettings.cs" />
<Compile Include="SlicerConfiguration\ActiveSliceSettings.cs" />

View file

@ -349,7 +349,7 @@ namespace MatterHackers.MatterControl
public override void OnClosing(out bool CancelClose)
{
//Save a snapshot of the prints in queue
PrintQueueControl.Instance.SaveDefaultQueue();
QueueData.Instance.SaveDefaultQueue();
if (PrinterCommunication.Instance.PrinterIsPrinting)
{

View file

@ -28,26 +28,15 @@ either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.ComponentModel;
using System.IO;
using MatterHackers.Agg;
using MatterHackers.Agg.Image;
using MatterHackers.Agg.UI;
using MatterHackers.Agg.OpenGlGui;
using MatterHackers.MatterControl.SlicerConfiguration;
using MatterHackers.PolygonMesh;
using MatterHackers.RenderOpenGl;
using MatterHackers.VectorMath;
using MatterHackers.GCodeVisualizer;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.MatterControl;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.MatterControl.SlicerConfiguration;
using MatterHackers.VectorMath;
namespace MatterHackers.MatterControl.PartPreviewWindow
{

View file

@ -113,16 +113,13 @@ namespace MatterHackers.MatterControl
PrintItem printItem = new PrintItem();
printItem.Name = newName;
printItem.FileLocation = System.IO.Path.GetFullPath(fileNameAndPath);
printItem.FileLocation = Path.GetFullPath(fileNameAndPath);
printItem.PrintItemCollectionID = PrintLibraryListControl.Instance.LibraryCollection.Id;
printItem.Commit();
QueueData.Instance.AddItem(printItem);
PrintItemWrapper printItemWrapper = new PrintItemWrapper(printItem);
PrintQueueItem queueItem = new PrintQueueItem(printItemWrapper);
PrintQueueControl.Instance.AddChild(queueItem);
PrintQueueControl.Instance.SaveDefaultQueue();
if (addToLibraryOption.Checked)
{
PrintLibraryListItem libraryItem = new PrintLibraryListItem(printItemWrapper);

View file

@ -28,38 +28,23 @@ either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.IO;
using System.ComponentModel;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Threading;
using MatterHackers.Agg;
using MatterHackers.Agg.Image;
using MatterHackers.Agg.UI;
using MatterHackers.Agg.OpenGlGui;
using MatterHackers.PolygonMesh;
using MatterHackers.RenderOpenGl;
using MatterHackers.VectorMath;
using MatterHackers.MeshVisualizer;
using MatterHackers.PolygonMesh.Processors;
using MatterHackers.PolygonMesh.Csg;
using MatterHackers.MarchingSquares;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.Agg.ImageProcessing;
using MatterHackers.Agg.VertexSource;
using MatterHackers.MatterControl;
using MatterHackers.Localizations; //Added Namespace
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.MeshVisualizer;
using MatterHackers.PolygonMesh;
using MatterHackers.PolygonMesh.Processors;
using MatterHackers.RayTracer;
using MatterHackers.RayTracer.Traceable;
using MatterHackers.Localizations; //Added Namespace
using ClipperLib;
using OpenTK.Graphics.OpenGL;
using MatterHackers.RenderOpenGl;
using MatterHackers.VectorMath;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
@ -738,7 +723,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
int subLength = nextPercent - lastPercent;
string loadedFileName = filesToLoad[i];
Mesh copyMesh = StlProcessing.Load(System.IO.Path.GetFullPath(loadedFileName));
Mesh copyMesh = StlProcessing.Load(Path.GetFullPath(loadedFileName));
if (copyMesh != null)
{
int halfNextPercent = (nextPercent - lastPercent) / 2;

View file

@ -155,9 +155,7 @@ namespace MatterHackers.MatterControl.PrintHistory
printAgainLink.Click += (sender, e) =>
{
PrintQueueItem queueItem = new PrintQueueItem(new PrintItemWrapper(printTask.PrintItemId));
PrintQueueControl.Instance.AddChild(queueItem);
PrintQueueControl.Instance.SaveDefaultQueue();
QueueData.Instance.AddItem(new PrintItemWrapper(printTask.PrintItemId).PrintItem);
};
buttonContainer.AddChild(printAgainLink);

View file

@ -27,7 +27,7 @@ namespace MatterHackers.MatterControl.PrintLibrary
public ExportLibraryItemWindow(PrintLibraryListItem printLibraryItem)
: base(400, 250)
{
if (System.IO.Path.GetExtension(printLibraryItem.printItem.FileLocation).ToUpper() == ".GCODE")
if (Path.GetExtension(printLibraryItem.printItem.FileLocation).ToUpper() == ".GCODE")
{
partIsGCode = true;
}
@ -179,7 +179,7 @@ namespace MatterHackers.MatterControl.PrintLibrary
filePathToSave += ".gcode";
}
if (System.IO.Path.GetExtension(printQueueItem.printItem.FileLocation).ToUpper() == ".STL")
if (Path.GetExtension(printQueueItem.printItem.FileLocation).ToUpper() == ".STL")
{
pathAndFilenameToSave = saveParams.FileName;
Close();

View file

@ -213,8 +213,8 @@ namespace MatterHackers.MatterControl.PrintLibrary
if (System.IO.File.Exists(partFullPath))
{
PrintItem printItem = new PrintItem();
printItem.Name = System.IO.Path.GetFileNameWithoutExtension(partFullPath);
printItem.FileLocation = System.IO.Path.GetFullPath(partFullPath);
printItem.Name = Path.GetFileNameWithoutExtension(partFullPath);
printItem.FileLocation = Path.GetFullPath(partFullPath);
printItem.PrintItemCollectionID = PrintLibraryListControl.Instance.LibraryCollection.Id;
printItem.Commit();
}

View file

@ -212,7 +212,7 @@ namespace MatterHackers.MatterControl.PrintLibrary
}
else
{
PrintQueueItem.ShowCantFindFileMessage(printItem);
RowItem.ShowCantFindFileMessage(printItem);
}
}
}
@ -364,9 +364,7 @@ namespace MatterHackers.MatterControl.PrintLibrary
addToQueueLink.Click += (sender, e) =>
{
PrintQueueItem queueItem = new PrintQueueItem(this.printItem.Name, this.printItem.FileLocation);
PrintQueueControl.Instance.AddChild(queueItem);
PrintQueueControl.Instance.SaveDefaultQueue();
QueueData.Instance.AddItem(new PrintItem(this.printItem.Name, this.printItem.FileLocation));
};
viewLink = linkButtonFactory.Generate(LocalizedString.Get("View"));

View file

@ -154,12 +154,9 @@ namespace MatterHackers.MatterControl.PrintLibrary
{
foreach (PrintLibraryListItem item in PrintLibraryListControl.Instance.SelectedItems)
{
PrintQueue.PrintQueueItem queueItem = new PrintQueue.PrintQueueItem(item.printItem);
PrintQueue.PrintQueueControl.Instance.AddChild(queueItem);
QueueData.Instance.AddItem(item.printItem.PrintItem);
}
PrintLibraryListControl.Instance.ClearSelectedItems();
PrintQueue.PrintQueueControl.Instance.EnsureSelection();
PrintQueueControl.Instance.SaveDefaultQueue();
}
private void onLibraryItemsSelected(object sender, EventArgs e)
@ -223,8 +220,8 @@ namespace MatterHackers.MatterControl.PrintLibrary
if (extension == ".STL" || extension == ".GCODE")
{
PrintItem printItem = new PrintItem();
printItem.Name = System.IO.Path.GetFileNameWithoutExtension(droppedFileName);
printItem.FileLocation = System.IO.Path.GetFullPath(droppedFileName);
printItem.Name = Path.GetFileNameWithoutExtension(droppedFileName);
printItem.FileLocation = Path.GetFullPath(droppedFileName);
printItem.PrintItemCollectionID = PrintLibraryListControl.Instance.LibraryCollection.Id;
printItem.Commit();
@ -247,8 +244,8 @@ namespace MatterHackers.MatterControl.PrintLibrary
foreach (string loadedFileName in openParams.FileNames)
{
PrintItem printItem = new PrintItem();
printItem.Name = System.IO.Path.GetFileNameWithoutExtension(loadedFileName);
printItem.FileLocation = System.IO.Path.GetFullPath(loadedFileName);
printItem.Name = Path.GetFileNameWithoutExtension(loadedFileName);
printItem.FileLocation = Path.GetFullPath(loadedFileName);
printItem.PrintItemCollectionID = PrintLibraryListControl.Instance.LibraryCollection.Id;
printItem.Commit();

View file

@ -18,13 +18,16 @@ using MatterHackers.MatterControl.CreatorPlugins;
namespace MatterHackers.MatterControl.PrintQueue
{
public class QueueControlsWidget : GuiWidget
public class BottomToolbar : GuiWidget
{
TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory();
PluginChooserWindow pluginChooserWindow;
QueueDataView queueDataView;
public QueueControlsWidget()
public BottomToolbar(QueueDataView queueDataView)
{
this.queueDataView = queueDataView;
SetDisplayAttributes();
textImageButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor;
@ -40,7 +43,7 @@ namespace MatterHackers.MatterControl.PrintQueue
// Ensure the form opens with no rows selected.
//ActiveQueueList.Instance.ClearSelected();
allControls.AddChild(PrintQueueControl.Instance);
allControls.AddChild(queueDataView);
}
FlowLayoutWidget buttonPanel1 = new FlowLayoutWidget();
@ -51,7 +54,7 @@ namespace MatterHackers.MatterControl.PrintQueue
Button 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(loadFile_Click);
addToQueueButton.Click += new ButtonBase.ButtonEventHandler(addToQueueButton_Click);
Button runCreator = textImageButtonFactory.Generate(LocalizedString.Get("Create"), "icon_creator_white_32x32.png");
buttonPanel1.AddChild(runCreator);
@ -74,7 +77,7 @@ namespace MatterHackers.MatterControl.PrintQueue
spacer2.HAnchor = HAnchor.ParentLeftRight;
buttonPanel1.AddChild(spacer2);
GuiWidget queueMenu = new PrintQueueMenu();
GuiWidget queueMenu = new QueueOptionsMenu();
queueMenu.VAnchor = VAnchor.ParentTop;
buttonPanel1.AddChild(queueMenu);
}
@ -92,7 +95,6 @@ namespace MatterHackers.MatterControl.PrintQueue
this.AnchorAll();
}
private void OpenPluginChooserWindow()
{
if (pluginChooserWindow == null)
@ -111,7 +113,7 @@ namespace MatterHackers.MatterControl.PrintQueue
void createPartsSheetsButton_Click(object sender, MouseEventArgs mouseEvent)
{
List<PrintItem> parts = PrintQueueControl.Instance.CreateReadOnlyPartList();
List<PrintItem> parts = QueueData.Instance.CreateReadOnlyPartList();
SaveFileDialogParams saveParams = new SaveFileDialogParams("Save Parts Sheet|*.pdf");
@ -137,7 +139,7 @@ namespace MatterHackers.MatterControl.PrintQueue
void exportQueueButton_Click(object sender, MouseEventArgs mouseEvent)
{
List<PrintItem> partList = PrintQueueControl.Instance.CreateReadOnlyPartList();
List<PrintItem> partList = QueueData.Instance.CreateReadOnlyPartList();
ProjectFileHandler project = new ProjectFileHandler(partList);
project.SaveAs();
}
@ -148,21 +150,17 @@ namespace MatterHackers.MatterControl.PrintQueue
List<PrintItem> partFiles = project.OpenFromDialog();
if (partFiles != null)
{
PrintQueueControl.Instance.RemoveAllChildren();
QueueData.Instance.RemoveAll();
foreach (PrintItem part in partFiles)
{
PrintQueueControl.Instance.AddChild(new PrintQueueItem(part.Name, part.FileLocation));
QueueData.Instance.AddItem(new PrintItem(part.Name, part.FileLocation));
}
PrintQueueControl.Instance.EnsureSelection();
PrintQueueControl.Instance.Invalidate();
PrintQueueControl.Instance.SaveDefaultQueue();
}
}
void deleteAllFromQueueButton_Click(object sender, MouseEventArgs mouseEvent)
{
PrintQueueControl.Instance.RemoveAllChildren();
PrintQueueControl.Instance.SaveDefaultQueue();
QueueData.Instance.RemoveAll();
}
public override void OnDragEnter(FileDropEventArgs fileDropEventArgs)
@ -198,23 +196,19 @@ namespace MatterHackers.MatterControl.PrintQueue
string extension = Path.GetExtension(droppedFileName).ToUpper();
if (extension == ".STL" || extension == ".GCODE")
{
PrintQueueItem queueItem = new PrintQueueItem(System.IO.Path.GetFileNameWithoutExtension(droppedFileName), System.IO.Path.GetFullPath(droppedFileName));
PrintQueueControl.Instance.AddChild(queueItem);
QueueData.Instance.AddItem(new PrintItem(Path.GetFileNameWithoutExtension(droppedFileName), Path.GetFullPath(droppedFileName)));
}
PrintQueueControl.Instance.EnsureSelection();
PrintQueueControl.Instance.Invalidate();
}
PrintQueueControl.Instance.SaveDefaultQueue();
base.OnDragDrop(fileDropEventArgs);
}
void loadFile_Click(object sender, MouseEventArgs mouseEvent)
void addToQueueButton_Click(object sender, MouseEventArgs mouseEvent)
{
UiThread.RunOnIdle(LoadFileOnIdle);
UiThread.RunOnIdle(AddItemsToQueue);
}
void LoadFileOnIdle(object state)
void AddItemsToQueue(object state)
{
OpenFileDialogParams openParams = new OpenFileDialogParams("Select an STL file, Select a GCODE file|*.stl;*.gcode", multiSelect: true);
openParams.ActionButtonLabel = "Add to Queue";
@ -225,17 +219,9 @@ namespace MatterHackers.MatterControl.PrintQueue
{
foreach (string loadedFileName in openParams.FileNames)
{
PrintQueueItem queueItem = new PrintQueueItem(System.IO.Path.GetFileNameWithoutExtension(loadedFileName), System.IO.Path.GetFullPath(loadedFileName));
PrintQueueControl.Instance.AddChild(queueItem);
QueueData.Instance.AddItem(new PrintItem(Path.GetFileNameWithoutExtension(loadedFileName), Path.GetFullPath(loadedFileName)));
}
if (PrintQueueControl.Instance.Count > 0)
{
PrintQueueControl.Instance.SelectedIndex = PrintQueueControl.Instance.Count - 1;
}
//PrintQueueControl.Instance.EnsureSelection();
PrintQueueControl.Instance.Invalidate();
}
PrintQueueControl.Instance.SaveDefaultQueue();
}
}
}

View file

@ -61,7 +61,7 @@ namespace MatterHackers.MatterControl.PrintQueue
public void Start()
{
if (PrintQueueControl.Instance.Count > 0)
if (QueueData.Instance.Count > 0)
{
if (StartingNextPart != null)
{
@ -69,17 +69,17 @@ namespace MatterHackers.MatterControl.PrintQueue
}
savedGCodeFileNames = new List<string>();
allFilesToExport = PrintQueueControl.Instance.CreateReadOnlyPartList();
allFilesToExport = QueueData.Instance.CreateReadOnlyPartList();
foreach (PrintItem part in allFilesToExport)
{
PrintItemWrapper printItemWrapper = new PrintItemWrapper(part);
if (System.IO.Path.GetExtension(part.FileLocation).ToUpper() == ".STL")
if (Path.GetExtension(part.FileLocation).ToUpper() == ".STL")
{
SlicingQueue.Instance.QueuePartForSlicing(printItemWrapper);
printItemWrapper.Done += new EventHandler(sliceItem_Done);
printItemWrapper.SlicingOutputMessage += printItemWrapper_SlicingOutputMessage;
}
else if (System.IO.Path.GetExtension(part.FileLocation).ToUpper() == ".GCODE")
else if (Path.GetExtension(part.FileLocation).ToUpper() == ".GCODE")
{
sliceItem_Done(printItemWrapper, null);
}

View file

@ -334,7 +334,7 @@ namespace MatterHackers.MatterControl
string applicationUserDataPath = ApplicationDataStorage.Instance.ApplicationUserDataPath;
string folderToSavePrintsTo = Path.Combine(applicationUserDataPath, "data", "temp", "plateImages");
string jpegFileName = System.IO.Path.Combine(folderToSavePrintsTo, plateNumber.ToString() + ".jpeg");
string jpegFileName = Path.Combine(folderToSavePrintsTo, plateNumber.ToString() + ".jpeg");
if (!Directory.Exists(folderToSavePrintsTo))
{

View file

@ -1,4 +1,33 @@
using System;
/*
Copyright (c) 2014, Kevin Pope
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
@ -38,7 +67,7 @@ namespace MatterHackers.MatterControl.PrintQueue
public PrintItemWrapper(DataStorage.PrintItem printItem)
{
this.PrintItem = printItem;
this.fileType = System.IO.Path.GetExtension(printItem.FileLocation).ToUpper();
this.fileType = Path.GetExtension(printItem.FileLocation).ToUpper();
//if (this.fileType == ".GCODE")
//{
//gcodeStatus = GcodeStatuses.Prepared;
@ -48,7 +77,7 @@ namespace MatterHackers.MatterControl.PrintQueue
public PrintItemWrapper(int printItemId)
{
this.PrintItem = DataStorage.Datastore.Instance.dbSQLite.Table<DataStorage.PrintItem>().Where(v => v.Id == printItemId).Take(1).FirstOrDefault();
this.fileType = System.IO.Path.GetExtension(this.PrintItem.FileLocation).ToUpper();
this.fileType = Path.GetExtension(this.PrintItem.FileLocation).ToUpper();
}
bool doneSlicing;
@ -105,8 +134,6 @@ namespace MatterHackers.MatterControl.PrintQueue
}
}
public void Delete()
{
PrintItem.Delete();

236
PrintQueue/QueueData.cs Normal file
View file

@ -0,0 +1,236 @@
/*
Copyright (c) 2014, Kevin Pope
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using MatterHackers.Agg.Image;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.VectorMath;
using MatterHackers.MatterControl;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.Agg.ImageProcessing;
namespace MatterHackers.MatterControl.PrintQueue
{
public class QueueData
{
private List<PrintItem> printItems = new List<PrintItem>();
private List<PrintItem> PrintItems
{
get { return printItems; }
}
public RootedObjectEventHandler ItemAdded = new RootedObjectEventHandler();
public RootedObjectEventHandler ItemRemoved = new RootedObjectEventHandler();
public RootedObjectEventHandler OrderChanged = new RootedObjectEventHandler();
static QueueData instance;
public static QueueData Instance
{
get
{
if (instance == null)
{
instance = new QueueData();
instance.LoadDefaultQueue();
}
return instance;
}
}
public void SwapItemsOnIdle(int indexA, int indexB)
{
UiThread.RunOnIdle(SwapItems, new SwapIndexArgs(indexA, indexB));
}
void SwapItems(object state)
{
int indexA = ((SwapIndexArgs)state).indexA;
int indexB = ((SwapIndexArgs)state).indexB;
if (indexA >= 0 && indexA < Count
&& indexB >= 0 && indexB < Count
&& indexA != indexB)
{
PrintItem hold = PrintItems[indexA];
PrintItems[indexA] = PrintItems[indexB];
PrintItems[indexB] = hold;
OnOrderChanged(null);
SaveDefaultQueue();
}
}
public void OnOrderChanged(EventArgs e)
{
OrderChanged.CallEvents(this, e);
}
class IndexArgs : EventArgs
{
internal int index;
internal IndexArgs(int index)
{
this.index = index;
}
}
class SwapIndexArgs : EventArgs
{
internal int indexA;
internal int indexB;
internal SwapIndexArgs(int indexA, int indexB)
{
this.indexA = indexA;
this.indexB = indexB;
}
}
public void RemoveIndexOnIdle(int index)
{
UiThread.RunOnIdle(RemoveIndex, new IndexArgs(index));
}
void RemoveIndex(object state)
{
IndexArgs removeArgs = state as IndexArgs;
if (removeArgs != null)
{
RemoveAt(removeArgs.index);
}
}
public void RemoveAt(int index)
{
if (index >= 0 && index < Count)
{
PrintItems.RemoveAt(index);
OnItemRemoved(new IndexArgs(index));
SaveDefaultQueue();
}
}
public void OnItemRemoved(EventArgs e)
{
ItemRemoved.CallEvents(this, e);
}
public PrintItem GetPrintItem(int index)
{
if (index >= 0 && index < PrintItems.Count)
{
return PrintItems[index];
}
return null;
}
public int GetIndex(PrintItem printItem)
{
return PrintItems.IndexOf(printItem);
}
public string[] GetItemNames()
{
List<string> itemNames = new List<string>(); ;
for (int i = 0; i < PrintItems.Count; i++)
{
itemNames.Add(PrintItems[i].Name);
}
return itemNames.ToArray();
}
public List<PrintItem> CreateReadOnlyPartList()
{
List<PrintItem> listToReturn = new List<PrintItem>();
for (int i = 0; i < Count; i++)
{
listToReturn.Add(GetPrintItem(i));
}
return listToReturn;
}
public void AddItem(PrintItem item)
{
PrintItems.Add(item);
OnItemAdded(new IndexArgs(PrintItems.Count - 1));
}
public void LoadDefaultQueue()
{
RemoveAll();
ManifestFileHandler manifest = new ManifestFileHandler(null);
List<PrintItem> partFiles = manifest.ImportFromJson();
if (partFiles != null)
{
foreach (PrintItem item in partFiles)
{
AddItem(item);
}
}
}
public void OnItemAdded(EventArgs e)
{
ItemAdded.CallEvents(this, e);
}
public void SaveDefaultQueue()
{
List<PrintItem> partList = CreateReadOnlyPartList();
ManifestFileHandler manifest = new ManifestFileHandler(partList);
manifest.ExportToJson();
}
public int Count
{
get
{
return PrintItems.Count;
}
}
public void RemoveAll()
{
for (int i = PrintItems.Count-1; i >= 0; i--)
{
RemoveAt(i);
}
}
}
}

View file

@ -1,4 +1,33 @@
using System;
/*
Copyright (c) 2014, Kevin Pope
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@ -14,25 +43,9 @@ using MatterHackers.Agg.ImageProcessing;
namespace MatterHackers.MatterControl.PrintQueue
{
public class PrintQueueControl : ScrollableWidget
public class QueueDataView : ScrollableWidget
{
public RootedObjectEventHandler ItemAdded = new RootedObjectEventHandler();
public RootedObjectEventHandler ItemRemoved = new RootedObjectEventHandler();
static PrintQueueControl instance;
public static PrintQueueControl Instance
{
get
{
if (instance == null)
{
instance = new PrintQueueControl();
instance.LoadDefaultQueue();
instance.EnsureSelection();
}
return instance;
}
}
event EventHandler unregisterEvents;
// make this private so it can only be built from the Instance
private void SetDisplayAttributes()
@ -78,42 +91,6 @@ namespace MatterHackers.MatterControl.PrintQueue
}
}
public void SwapItemsDurringUiAction(int indexA, int indexB)
{
UiThread.RunOnIdle(SwapItems, new SwapIndexArgs(indexA, indexB));
}
void SwapItems(object state)
{
int indexA = ((SwapIndexArgs)state).indexA;
int indexB = ((SwapIndexArgs)state).indexB;
int selectedAtEnd = indexB;
// make sure indexA is the smaller index
if (indexA > indexB)
{
int temp = indexA;
indexA = indexB;
indexB = temp;
}
if (indexA >= 0 && indexA < Count
&& indexB >= 0 && indexB < Count
&& indexA != indexB)
{
GuiWidget itemA = topToBottomItemList.Children[indexA];
GuiWidget itemB = topToBottomItemList.Children[indexB];
topToBottomItemList.RemoveChild(indexB);
topToBottomItemList.RemoveChild(indexA);
topToBottomItemList.AddChild(itemB, indexA);
topToBottomItemList.AddChild(itemA, indexB);
AddItemHandlers(itemA);
AddItemHandlers(itemB);
this.SelectedIndex = selectedAtEnd;
}
}
public void MoveToNext()
{
if (SelectedIndex >= 0 && SelectedIndex < Count)
@ -135,70 +112,19 @@ namespace MatterHackers.MatterControl.PrintQueue
if (SelectedIndex >= 0 && SelectedIndex < Count)
{
int currentIndex = SelectedIndex;
PrintQueueItem replacementItem = new PrintQueueItem(PrintQueueControl.Instance.SelectedPart.Name, PrintQueueControl.Instance.SelectedPart.FileLocation);
this.RemoveChild(SelectedIndex);
this.AddChild(replacementItem);
PrintItem replacementItem = new PrintItem(SelectedPart.Name, SelectedPart.FileLocation);
QueueData.Instance.RemoveAt(SelectedIndex);
this.SelectedIndex = currentIndex;
}
}
class RemoveIndexArgs
{
internal int index;
internal RemoveIndexArgs(int index)
{
this.index = index;
}
}
class SwapIndexArgs
{
internal int indexA;
internal int indexB;
internal SwapIndexArgs(int indexA, int indexB)
{
this.indexA = indexA;
this.indexB = indexB;
}
}
public void RemoveIndex(int index)
{
UiThread.RunOnIdle(RemoveIndexAfterEvent, new RemoveIndexArgs(index));
}
void RemoveIndexAfterEvent(object state)
{
RemoveIndexArgs removeArgs = state as RemoveIndexArgs;
if (removeArgs != null & removeArgs.index >= 0 && removeArgs.index < Count)
{
int currentIndex = removeArgs.index;
//If the item to be removed is the active print item, set the active print item to null.
GuiWidget itemHolder = topToBottomItemList.Children[currentIndex];
PrintQueueItem child = (PrintQueueItem)itemHolder.Children[0];
if (child.isActivePrint)
{
if (PrinterCommunication.Instance.PrinterIsPrinting)
{
return;
}
PrinterCommunication.Instance.ActivePrintItem = null;
}
RemoveChild(currentIndex);
SelectedIndex = System.Math.Min(SelectedIndex, Count - 1);
SaveDefaultQueue();
}
}
public PrintItemWrapper SelectedPart
{
get
{
if (SelectedIndex >= 0)
{
return GetSTLToPrint(SelectedIndex);
return new PrintItemWrapper(QueueData.Instance.GetPrintItem(SelectedIndex));
}
else
{
@ -207,12 +133,12 @@ namespace MatterHackers.MatterControl.PrintQueue
}
}
public PrintQueueItem GetPrintQueueItem(int index)
public RowItem GetPrintQueueItem(int index)
{
if (index >= 0 && index < topToBottomItemList.Children.Count)
{
GuiWidget itemHolder = topToBottomItemList.Children[index];
PrintQueueItem child = (PrintQueueItem)itemHolder.Children[0];
RowItem child = (RowItem)itemHolder.Children[0];
return child;
}
@ -220,76 +146,6 @@ namespace MatterHackers.MatterControl.PrintQueue
return null;
}
public int GetIndex(PrintItemWrapper printItem)
{
for (int i = 0; i < topToBottomItemList.Children.Count; i++)
{
PrintQueueItem queueItem = GetPrintQueueItem(i);
if (queueItem != null && queueItem.PrintItemWrapper == printItem)
{
return i;
}
}
return -1;
}
public string[] GetItemNames()
{
List<string> itemNames = new List<string>(); ;
for (int i = 0; i < topToBottomItemList.Children.Count; i++)
{
PrintQueueItem queueItem = GetPrintQueueItem(i);
if (queueItem != null)
{
itemNames.Add(queueItem.PrintItemWrapper.Name);
}
}
return itemNames.ToArray();
}
public PrintItemWrapper GetSTLToPrint(int index)
{
if(index >= 0 && index < Count)
{
return GetPrintQueueItem(index).PrintItemWrapper;
}
return null;
}
public List<PrintItem> CreateReadOnlyPartList()
{
List<PrintItem> listToReturn = new List<PrintItem>();
for (int i = 0; i < Count; i++)
{
listToReturn.Add(GetSTLToPrint(i).PrintItem);
}
return listToReturn;
}
public void LoadDefaultQueue()
{
RemoveAllChildren();
ManifestFileHandler manifest = new ManifestFileHandler(null);
List<PrintItem> partFiles = manifest.ImportFromJson();
if (partFiles != null)
{
foreach (PrintItem part in partFiles)
{
PrintQueueControl.Instance.AddChild(new PrintQueueItem(part.Name, part.FileLocation));
}
}
}
public void SaveDefaultQueue()
{
List<PrintItem> partList = PrintQueueControl.Instance.CreateReadOnlyPartList();
ManifestFileHandler manifest = new ManifestFileHandler(partList);
manifest.ExportToJson();
}
public delegate void SelectedValueChangedEventHandler(object sender, EventArgs e);
public event SelectedValueChangedEventHandler SelectedValueChanged;
public delegate void HoverValueChangedEventHandler(object sender, EventArgs e);
@ -336,25 +192,25 @@ namespace MatterHackers.MatterControl.PrintQueue
GuiWidget child = topToBottomItemList.Children[index];
if (index == selectedIndex)
{
((PrintQueueItem)child.Children[0]).isSelectedItem = true;
((RowItem)child.Children[0]).isSelectedItem = true;
if (!PrinterCommunication.Instance.PrinterIsPrinting && !PrinterCommunication.Instance.PrinterIsPaused)
{
((PrintQueueItem)child.Children[0]).isActivePrint = true;
PrinterCommunication.Instance.ActivePrintItem = ((PrintQueueItem)child.Children[0]).PrintItemWrapper;
((RowItem)child.Children[0]).isActivePrint = true;
PrinterCommunication.Instance.ActivePrintItem = ((RowItem)child.Children[0]).PrintItemWrapper;
}
}
else
{
if (((PrintQueueItem)child.Children[0]).isSelectedItem)
if (((RowItem)child.Children[0]).isSelectedItem)
{
((PrintQueueItem)child.Children[0]).isSelectedItem = false;
((RowItem)child.Children[0]).isSelectedItem = false;
}
if (!PrinterCommunication.Instance.PrinterIsPrinting && !PrinterCommunication.Instance.PrinterIsPaused)
{
if (((PrintQueueItem)child.Children[0]).isActivePrint)
if (((RowItem)child.Children[0]).isActivePrint)
{
((PrintQueueItem)child.Children[0]).isActivePrint = false;
((RowItem)child.Children[0]).isActivePrint = false;
}
}
}
@ -408,11 +264,11 @@ namespace MatterHackers.MatterControl.PrintQueue
GuiWidget child = topToBottomItemList.Children[index];
if (index == HoverIndex)
{
((PrintQueueItem)child.Children[0]).isHoverItem = true;
((RowItem)child.Children[0]).isHoverItem = true;
}
else if (((PrintQueueItem)child.Children[0]).isHoverItem == true)
else if (((RowItem)child.Children[0]).isHoverItem == true)
{
((PrintQueueItem)child.Children[0]).isHoverItem = false;
((RowItem)child.Children[0]).isHoverItem = false;
}
child.Invalidate();
}
@ -422,7 +278,7 @@ namespace MatterHackers.MatterControl.PrintQueue
}
}
public PrintQueueControl()
public QueueDataView()
{
Name = "PrintQueueControl";
@ -435,6 +291,31 @@ namespace MatterHackers.MatterControl.PrintQueue
topToBottomItemList.Name = "PrintQueueControl TopToBottom";
topToBottomItemList.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth;
base.AddChild(topToBottomItemList);
QueueData.Instance.ItemAdded.RegisterEvent(ItemAddedToQueue, ref unregisterEvents);
QueueData.Instance.ItemRemoved.RegisterEvent(ItemRemovedFromToQueue, ref unregisterEvents);
QueueData.Instance.OrderChanged.RegisterEvent(QueueOrderChanged, ref unregisterEvents);
}
void ItemAddedToQueue(object sender, EventArgs e)
{
}
void ItemRemovedFromToQueue(object sender, EventArgs e)
{
}
void QueueOrderChanged(object sender, EventArgs e)
{
}
public override void OnClosed(EventArgs e)
{
if (unregisterEvents != null)
{
unregisterEvents(this, null);
}
base.OnClosed(e);
}
public override void AddChild(GuiWidget childToAdd, int indexInChildrenList = -1)
@ -448,8 +329,6 @@ namespace MatterHackers.MatterControl.PrintQueue
topToBottomItemList.AddChild(itemHolder, indexInChildrenList);
AddItemHandlers(itemHolder);
ItemAdded.CallEvents(this, new GuiWidgetEventArgs(childToAdd));
}
private void AddItemHandlers(GuiWidget itemHolder)
@ -460,38 +339,6 @@ namespace MatterHackers.MatterControl.PrintQueue
itemHolder.ParentChanged += new EventHandler(itemHolder_ParentChanged);
}
public override void RemoveAllChildren()
{
for (int i = topToBottomItemList.Children.Count-1; i >= 0; i--)
{
RemoveIndex(i);
}
}
public override void RemoveChild(int index)
{
GuiWidget childToRemove = topToBottomItemList.Children[index];
RemoveChild(childToRemove);
}
public override void RemoveChild(GuiWidget childToRemove)
{
for (int i = topToBottomItemList.Children.Count - 1; i >= 0; i--)
{
GuiWidget itemHolder = topToBottomItemList.Children[i];
if (itemHolder == childToRemove || itemHolder.Children[0] == childToRemove)
{
topToBottomItemList.RemoveChild(itemHolder);
OnItemRemoved(new GuiWidgetEventArgs(childToRemove));
}
}
}
private void OnItemRemoved(GuiWidgetEventArgs e)
{
ItemRemoved.CallEvents(this, e);
}
bool settingLocalBounds = false;
public override RectangleDouble LocalBounds
{
@ -622,7 +469,7 @@ namespace MatterHackers.MatterControl.PrintQueue
}
}
public PrintQueueItem SelectedPrintQueueItem()
public RowItem SelectedPrintQueueItem()
{
return GetPrintQueueItem(SelectedIndex);
}

View file

@ -17,14 +17,14 @@ using MatterHackers.Localizations;
namespace MatterHackers.MatterControl.PrintQueue
{
public class PrintQueueMenu : GuiWidget
public class QueueOptionsMenu : GuiWidget
{
public DropDownMenu MenuDropList;
private TupleList<string, Func<bool>> menuItems;
ExportToFolderFeedbackWindow exportingWindow = null;
public PrintQueueMenu()
public QueueOptionsMenu()
{
MenuDropList = new DropDownMenu(LocalizedString.Get("Queue Options"), Direction.Up);
MenuDropList.HAnchor |= HAnchor.ParentLeft;
@ -113,7 +113,7 @@ namespace MatterHackers.MatterControl.PrintQueue
void PartSheetClickOnIdle(object state)
{
List<PrintItem> parts = PrintQueueControl.Instance.CreateReadOnlyPartList();
List<PrintItem> parts = QueueData.Instance.CreateReadOnlyPartList();
if (parts.Count > 0)
{
SaveFileDialogParams saveParams = new SaveFileDialogParams("Save Parts Sheet|*.pdf");
@ -177,7 +177,7 @@ namespace MatterHackers.MatterControl.PrintQueue
string path = FileDialog.SelectFolderDialog(ref selectParams);
if (path != null && path != "")
{
List<PrintItem> parts = PrintQueueControl.Instance.CreateReadOnlyPartList();
List<PrintItem> parts = QueueData.Instance.CreateReadOnlyPartList();
if (parts.Count > 0)
{
if (exportingWindow == null)
@ -208,7 +208,7 @@ namespace MatterHackers.MatterControl.PrintQueue
void ExportQueueToZipOnIdle(object state)
{
List<PrintItem> partList = PrintQueueControl.Instance.CreateReadOnlyPartList();
List<PrintItem> partList = QueueData.Instance.CreateReadOnlyPartList();
ProjectFileHandler project = new ProjectFileHandler(partList);
project.SaveAs();
}
@ -225,14 +225,11 @@ namespace MatterHackers.MatterControl.PrintQueue
List<PrintItem> partFiles = project.OpenFromDialog();
if (partFiles != null)
{
PrintQueueControl.Instance.RemoveAllChildren();
QueueData.Instance.RemoveAll();
foreach (PrintItem part in partFiles)
{
PrintQueueControl.Instance.AddChild(new PrintQueueItem(part.Name, part.FileLocation));
QueueData.Instance.AddItem(new PrintItem(part.Name, part.FileLocation));
}
PrintQueueControl.Instance.EnsureSelection();
PrintQueueControl.Instance.Invalidate();
PrintQueueControl.Instance.SaveDefaultQueue();
}
}
@ -244,21 +241,7 @@ namespace MatterHackers.MatterControl.PrintQueue
void removeAllPrintsFromQueue (object state)
{
PrintQueueControl.Instance.RemoveAllChildren ();
PrintQueueControl.Instance.SaveDefaultQueue ();
QueueData.Instance.RemoveAll();
}
void deleteFromQueueButton_Click(object sender, MouseEventArgs mouseEvent)
{
PrintQueueControl.Instance.RemoveIndex(PrintQueueControl.Instance.SelectedIndex);
PrintQueueControl.Instance.SaveDefaultQueue();
}
void deleteAllFromQueueButton_Click(object sender, MouseEventArgs mouseEvent)
{
PrintQueueControl.Instance.RemoveAllChildren();
PrintQueueControl.Instance.SaveDefaultQueue();
}
}
}

View file

@ -20,7 +20,7 @@ using MatterHackers.PolygonMesh;
namespace MatterHackers.MatterControl.PrintQueue
{
public class PrintQueueItem : GuiWidget
public class RowItem : GuiWidget
{
public PrintItemWrapper PrintItemWrapper { get; set; }
public RGBA_Bytes WidgetTextColor;
@ -36,16 +36,11 @@ namespace MatterHackers.MatterControl.PrintQueue
PartPreviewMainWindow viewingWindow;
bool exportingWindowIsOpen = false;
bool viewWindowIsOpen = false;
QueueDataView queueDataViewThisIsIn;
public PrintQueueItem(PrintItemWrapper printItem)
{
this.PrintItemWrapper = printItem;
ConstructPrintQueueItem();
}
public PrintQueueItem(string displayName, string fileLocation)
public RowItem(string displayName, string fileLocation, QueueDataView queueDataViewThisIsIn)
{
this.queueDataViewThisIsIn = queueDataViewThisIsIn;
PrintItem printItem = new PrintItem();
printItem.Name = displayName;
printItem.FileLocation = fileLocation;
@ -250,8 +245,8 @@ namespace MatterHackers.MatterControl.PrintQueue
Button moveUp = linkButtonFactory.Generate(" ^ ");
moveUp.Click += (sender, e) =>
{
int thisIndexInQueue = PrintQueueControl.Instance.GetIndex(PrintItemWrapper);
PrintQueueControl.Instance.SwapItemsDurringUiAction(thisIndexInQueue, thisIndexInQueue - 1);
int thisIndexInQueue = QueueData.Instance.GetIndex(PrintItemWrapper.PrintItem);
QueueData.Instance.SwapItemsOnIdle(thisIndexInQueue, thisIndexInQueue - 1);
};
topToBottom.AddChild(moveUp);
}
@ -261,8 +256,8 @@ namespace MatterHackers.MatterControl.PrintQueue
Button moveDown = linkButtonFactory.Generate(" v ");
moveDown.Click += (sender, e) =>
{
int thisIndexInQueue = PrintQueueControl.Instance.GetIndex(PrintItemWrapper);
PrintQueueControl.Instance.SwapItemsDurringUiAction(thisIndexInQueue, thisIndexInQueue + 1);
int thisIndexInQueue = QueueData.Instance.GetIndex(PrintItemWrapper.PrintItem);
QueueData.Instance.SwapItemsOnIdle(thisIndexInQueue, thisIndexInQueue + 1);
};
topToBottom.AddChild(moveDown);
}
@ -341,14 +336,12 @@ namespace MatterHackers.MatterControl.PrintQueue
void AddPartToQueue(object state)
{
PartToAddToQueue partToAddToQueue = (PartToAddToQueue)state;
PrintQueueItem queueItem = new PrintQueueItem(partToAddToQueue.Name, partToAddToQueue.FileLocation);
PrintQueueControl.Instance.AddChild(queueItem, partToAddToQueue.insertAfterIndex);
PrintQueueControl.Instance.SaveDefaultQueue();
QueueData.Instance.AddItem(new PrintItem(partToAddToQueue.Name, partToAddToQueue.FileLocation));
}
public void CreateCopyInQueue()
{
int thisIndexInQueue = PrintQueueControl.Instance.GetIndex(PrintItemWrapper);
int thisIndexInQueue = QueueData.Instance.GetIndex(PrintItemWrapper.PrintItem);
if (thisIndexInQueue != -1)
{
string applicationDataPath = ApplicationDataStorage.Instance.ApplicationUserDataPath;
@ -383,7 +376,7 @@ namespace MatterHackers.MatterControl.PrintQueue
int copyNumber = 2;
string testName = newName;
string[] itemNames = PrintQueueControl.Instance.GetItemNames();
string[] itemNames = QueueData.Instance.GetItemNames();
// figure out if we have a copy already and increment the number if we do
while (true)
{
@ -405,15 +398,15 @@ namespace MatterHackers.MatterControl.PrintQueue
public void DeletePartFromQueue()
{
int thisIndexInQueue = PrintQueueControl.Instance.GetIndex(PrintItemWrapper);
PrintQueueControl.Instance.RemoveIndex(thisIndexInQueue);
int thisIndexInQueue = QueueData.Instance.GetIndex(PrintItemWrapper.PrintItem);
QueueData.Instance.RemoveIndexOnIdle(thisIndexInQueue);
}
public static void ShowCantFindFileMessage(PrintItemWrapper printItem)
public static void ShowCantFindFileMessage(PrintItemWrapper printItemWrapper)
{
UiThread.RunOnIdle((state) =>
{
string maxLengthName = printItem.FileLocation;
string maxLengthName = printItemWrapper.FileLocation;
int maxLength = 43;
if (maxLengthName.Length > maxLength)
{
@ -428,7 +421,7 @@ namespace MatterHackers.MatterControl.PrintQueue
string titleLabel = LocalizedString.Get("Item not Found");
if (StyledMessageBox.ShowMessageBox(message, titleLabel, StyledMessageBox.MessageType.YES_NO))
{
PrintQueueControl.Instance.RemoveIndex(PrintQueueControl.Instance.GetIndex(printItem));
QueueData.Instance.RemoveIndexOnIdle(QueueData.Instance.GetIndex(printItemWrapper.PrintItem));
}
});
}

View file

@ -59,10 +59,8 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
foreach (string partFile in calibrationPrints)
{
string partFullPath = Path.Combine(ApplicationDataStorage.Instance.ApplicationStaticDataPath, "OEMSettings", "SampleParts", partFile);
PrintQueueControl.Instance.AddChild(new PrintQueueItem(Path.GetFileNameWithoutExtension(partFullPath), partFullPath));
QueueData.Instance.AddItem(new PrintItem(Path.GetFileNameWithoutExtension(partFullPath), partFullPath));
}
PrintQueue.PrintQueueControl.Instance.EnsureSelection();
PrintQueueControl.Instance.SaveDefaultQueue();
}
}

View file

@ -123,14 +123,14 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections
var driverInstallerProcess = new Process();
// Prepare the process to run
// Enter in the command line arguments, everything you would enter after the executable name itself
driverInstallerProcess.StartInfo.Arguments = System.IO.Path.GetFullPath(fileName);
driverInstallerProcess.StartInfo.Arguments = Path.GetFullPath(fileName);
// Enter the executable to run, including the complete path
string printerDriverInstallerExePathAndFileName = Path.Combine(".", "InfInstaller.exe");
driverInstallerProcess.StartInfo.CreateNoWindow = true;
driverInstallerProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
driverInstallerProcess.StartInfo.FileName = System.IO.Path.GetFullPath(printerDriverInstallerExePathAndFileName);
driverInstallerProcess.StartInfo.FileName = Path.GetFullPath(printerDriverInstallerExePathAndFileName);
driverInstallerProcess.StartInfo.Verb = "runas";
driverInstallerProcess.StartInfo.UseShellExecute = true;

View file

@ -872,7 +872,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
RoundedRect rect = new RoundedRect(LocalBounds,0);
graphics2D.Render(rect,new RGBA_Bytes(OverlayColor, 50));
graphics2D.Render(new Stroke(rect, 3),OverlayColor);
}
}

View file

@ -113,9 +113,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
string slic3rRelativePath = Path.Combine("..", "Slic3r", "slic3r.exe");
if (!File.Exists(slic3rRelativePath))
{
slic3rRelativePath = System.IO.Path.Combine(".", "Slic3r", "slic3r.exe");
slic3rRelativePath = Path.Combine(".", "Slic3r", "slic3r.exe");
}
return System.IO.Path.GetFullPath(slic3rRelativePath);
return Path.GetFullPath(slic3rRelativePath);
}
case ActivePrinterProfile.SlicingEngineTypes.CuraEngine:
@ -123,15 +123,15 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
string curaEngineRelativePath = Path.Combine("..", "CuraEngine.exe");
if (!File.Exists(curaEngineRelativePath))
{
curaEngineRelativePath = System.IO.Path.Combine(".", "CuraEngine.exe");
curaEngineRelativePath = Path.Combine(".", "CuraEngine.exe");
}
return System.IO.Path.GetFullPath(curaEngineRelativePath);
return Path.GetFullPath(curaEngineRelativePath);
}
case ActivePrinterProfile.SlicingEngineTypes.MatterSlice:
{
string materSliceRelativePath = Path.Combine(".", "MatterSlice.exe");
return System.IO.Path.GetFullPath(materSliceRelativePath);
return Path.GetFullPath(materSliceRelativePath);
}
default:
@ -144,17 +144,17 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
case ActivePrinterProfile.SlicingEngineTypes.Slic3r:
{
//string parentLocation = Directory.GetParent (ApplicationDataStorage.Instance.ApplicationPath).ToString ();
string applicationPath = System.IO.Path.Combine(ApplicationDataStorage.Instance.ApplicationPath, "Slic3r.app", "Contents", "MacOS", "slic3r");
string applicationPath = Path.Combine(ApplicationDataStorage.Instance.ApplicationPath, "Slic3r.app", "Contents", "MacOS", "slic3r");
return applicationPath;
}
case ActivePrinterProfile.SlicingEngineTypes.CuraEngine:
{
string applicationPath = System.IO.Path.Combine(ApplicationDataStorage.Instance.ApplicationPath, "CuraEngine");
string applicationPath = Path.Combine(ApplicationDataStorage.Instance.ApplicationPath, "CuraEngine");
return applicationPath;
}
case ActivePrinterProfile.SlicingEngineTypes.MatterSlice:
{
string applicationPath = System.IO.Path.Combine(ApplicationDataStorage.Instance.ApplicationPath, "MatterSlice");
string applicationPath = Path.Combine(ApplicationDataStorage.Instance.ApplicationPath, "MatterSlice");
return applicationPath;
}

View file

@ -1959,3 +1959,6 @@ Translated:Downloading updates...
English:Duplicate
Translated:Duplicate
English:End
Translated:End

View file

@ -1,550 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using MatterHackers.Agg.Image;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.VectorMath;
using MatterHackers.MatterControl;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.MatterControl.PrintQueue;
namespace MatterHackers.MatterControl.ToolsPage
{
public class SelectedPrintItems<T> : List<T>
{
public event EventHandler OnAdd;
public event EventHandler OnRemove;
new public void Add(T item)
{
base.Add(item);
if (null != OnAdd)
{
OnAdd(this, null);
}
}
new public void Remove(T item)
{
base.Remove(item);
if (null != OnRemove)
{
OnRemove(this, null);
}
}
}
public class ToolsListControl : ScrollableWidget
{
static ToolsListControl instance;
string keywordFilter;
private DataStorage.PrintItemCollection libraryCollection;
public static ToolsListControl Instance
{
get
{
if (instance == null)
{
instance = new ToolsListControl();
instance.LoadLibraryItems();
}
return instance;
}
}
public string KeywordFilter
{
get { return keywordFilter; }
set
{
if (this.keywordFilter != value)
{
this.keywordFilter = value;
LoadLibraryItems();
}
}
}
private void SetDisplayAttributes()
{
this.MinimumSize = new Vector2(0, 200);
this.AnchorAll();
this.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor;
this.AutoScroll = true;
this.ScrollArea.Padding = new BorderDouble(3);
}
public void RemoveSelectedIndex()
{
if (SelectedIndex >= 0 && SelectedIndex < Count)
{
RemoveChild(SelectedIndex);
}
}
public PrintItem SelectedPart
{
get
{
if (SelectedIndex >= 0)
{
return GetSTLToPrint(SelectedIndex);
}
else
{
return null;
}
}
}
public PrintItem GetSTLToPrint(int index)
{
if(index >= 0 && index < Count)
{
GuiWidget itemHolder = topToBottomItemList.Children[index];
ToolsListItem child = (ToolsListItem)itemHolder.Children[0];
return new PrintItem(child.printItem.Name, child.printItem.FileLocation);
}
return null;
}
public List<PrintItem> CreateReadOnlyPartList()
{
List<PrintItem> listToReturn = new List<PrintItem>();
for (int i = 0; i < Count; i++)
{
listToReturn.Add(GetSTLToPrint(i));
}
return listToReturn;
}
public DataStorage.PrintItemCollection LibraryCollection
{
get
{
//Retrieve a list of saved printers from the Datastore
if (libraryCollection == null)
{
libraryCollection = DataStorage.Datastore.Instance.dbSQLite.Table<DataStorage.PrintItemCollection>().Where(v => v.Name == "_library").Take(1).FirstOrDefault();
}
if (libraryCollection == null)
{
libraryCollection = new PrintItemCollection();
libraryCollection.Name = "_library";
libraryCollection.Commit();
PreloadLibrary();
}
return libraryCollection;
}
}
private List<string> GetLibraryParts()
{
List<string> libraryFilesToPreload = new List<string>();
string setupSettingsPathAndFile = Path.Combine(ApplicationDataStorage.Instance.ApplicationStaticDataPath, "OEMSettings", "PreloadedLibraryFiles.txt");
if (System.IO.File.Exists(setupSettingsPathAndFile))
{
try
{
string[] lines = System.IO.File.ReadAllLines(setupSettingsPathAndFile);
foreach (string line in lines)
{
//Ignore commented lines
if (!line.StartsWith("#"))
{
string settingLine = line.Trim();
libraryFilesToPreload.Add(settingLine);
}
}
}
catch
{
}
}
return libraryFilesToPreload;
}
void PreloadLibrary()
{
List<string> calibrationPrints = GetLibraryParts();
foreach (string partFile in calibrationPrints)
{
string partFullPath = Path.Combine(ApplicationDataStorage.Instance.ApplicationStaticDataPath, "OEMSettings", "SampleParts", partFile);
if (System.IO.File.Exists(partFullPath))
{
PrintItem printItem = new PrintItem();
printItem.Name = System.IO.Path.GetFileNameWithoutExtension(partFullPath);
printItem.FileLocation = System.IO.Path.GetFullPath(partFullPath);
printItem.PrintItemCollectionID = ToolsListControl.Instance.LibraryCollection.Id;
printItem.Commit();
}
}
}
IEnumerable<DataStorage.PrintItem> GetLibraryItems(string keyphrase = null)
{
if (LibraryCollection == null)
{
return null;
}
else
{
string query;
if (keyphrase == null)
{
query = string.Format("SELECT * FROM PrintItem WHERE PrintItemCollectionID = {0} ORDER BY Name ASC;", libraryCollection.Id);
}
else
{
query = string.Format("SELECT * FROM PrintItem WHERE PrintItemCollectionID = {0} AND Name LIKE '%{1}%' ORDER BY Name ASC;", libraryCollection.Id, keyphrase);
}
IEnumerable<DataStorage.PrintItem> result = (IEnumerable<DataStorage.PrintItem>)DataStorage.Datastore.Instance.dbSQLite.Query<DataStorage.PrintItem>(query);
return result;
}
}
public void ClearSelectedItems()
{
List<ToolsListItem> itemsToClear = new List<ToolsListItem>();
foreach(ToolsListItem item in instance.SelectedItems)
{
itemsToClear.Add(item);
}
foreach (ToolsListItem item in itemsToClear)
{
item.isSelectedItem = false;
item.selectionCheckBox.Checked = false;
}
}
public void LoadLibraryItems()
{
RemoveAllChildren();
IEnumerable<DataStorage.PrintItem> partFiles = GetLibraryItems(instance.KeywordFilter);
if (partFiles != null)
{
foreach (PrintItem part in partFiles)
{
ToolsListControl.Instance.AddChild(new ToolsListItem(new PrintItemWrapper(part)));
}
}
}
public void SaveLibraryItems()
{
//
}
public delegate void SelectedValueChangedEventHandler(object sender, EventArgs e);
public event SelectedValueChangedEventHandler SelectedValueChanged;
public delegate void HoverValueChangedEventHandler(object sender, EventArgs e);
public event HoverValueChangedEventHandler HoverValueChanged;
protected FlowLayoutWidget topToBottomItemList;
RGBA_Bytes hoverColor = new RGBA_Bytes(204, 204, 204, 255);
//RGBA_Bytes hoverColor = new RGBA_Bytes(0, 140, 158, 255);
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);
public SelectedPrintItems<ToolsListItem> SelectedItems = new SelectedPrintItems<ToolsListItem>();
int selectedIndex = -1;
int hoverIndex = -1;
int dragIndex = -1;
public int Count
{
get
{
return topToBottomItemList.Children.Count;
}
}
public int SelectedIndex
{
get
{
return selectedIndex;
}
set
{
if (value < -1 || value >= topToBottomItemList.Children.Count)
{
throw new ArgumentOutOfRangeException();
}
selectedIndex = value;
OnSelectedIndexChanged();
}
}
public int DragIndex
{
get
{
return dragIndex;
}
set
{
if (value < -1 || value >= topToBottomItemList.Children.Count)
{
throw new ArgumentOutOfRangeException();
}
if (value != dragIndex)
{
dragIndex = value;
}
}
}
public int HoverIndex
{
get
{
return hoverIndex;
}
set
{
if (value < -1 || value >= topToBottomItemList.Children.Count)
{
throw new ArgumentOutOfRangeException();
}
if (value != hoverIndex)
{
hoverIndex = value;
OnHoverIndexChanged();
for (int index = 0; index < topToBottomItemList.Children.Count; index++)
{
GuiWidget child = topToBottomItemList.Children[index];
if (index == HoverIndex)
{
((ToolsListItem)child.Children[0]).isHoverItem = true;
}
else if (((ToolsListItem)child.Children[0]).isHoverItem == true)
{
((ToolsListItem)child.Children[0]).isHoverItem = false;
}
child.Invalidate();
}
Invalidate();
}
}
}
public ToolsListControl()
{
SetDisplayAttributes();
ScrollArea.HAnchor |= Agg.UI.HAnchor.ParentLeftRight;
AutoScroll = true;
topToBottomItemList = new FlowLayoutWidget(FlowDirection.TopToBottom);
topToBottomItemList.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth;
base.AddChild(topToBottomItemList);
AddHandlers();
}
void AddHandlers()
{
this.MouseLeaveBounds += new EventHandler(control_MouseLeaveBounds);
}
public override void AddChild(GuiWidget child, int indexInChildrenList = -1)
{
FlowLayoutWidget itemHolder = new FlowLayoutWidget();
itemHolder.Name = "LB item holder";
itemHolder.Margin = new BorderDouble(3, 0, 0, 0);
itemHolder.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth;
itemHolder.AddChild(child);
itemHolder.VAnchor = VAnchor.FitToChildren;
topToBottomItemList.AddChild(itemHolder, indexInChildrenList);
itemHolder.MouseEnterBounds += new EventHandler(itemToAdd_MouseEnterBounds);
itemHolder.MouseLeaveBounds += new EventHandler(itemToAdd_MouseLeaveBounds);
itemHolder.MouseDownInBounds += new MouseEventHandler(itemHolder_MouseDownInBounds);
itemHolder.ParentChanged += new EventHandler(itemHolder_ParentChanged);
}
bool settingLocalBounds = false;
public override RectangleDouble LocalBounds
{
set
{
if (!settingLocalBounds)
{
Vector2 currentTopLeftOffset = new Vector2();
if (Parent != null)
{
currentTopLeftOffset = TopLeftOffset;
}
settingLocalBounds = true;
if (topToBottomItemList != null)
{
if (VerticalScrollBar.Visible)
{
topToBottomItemList.Width = Math.Max(0, value.Width - ScrollArea.Padding.Width - topToBottomItemList.Margin.Width - VerticalScrollBar.Width);
}
else
{
topToBottomItemList.Width = Math.Max(0, value.Width - ScrollArea.Padding.Width - topToBottomItemList.Margin.Width);
}
}
base.LocalBounds = value;
if (Parent != null)
{
TopLeftOffset = currentTopLeftOffset;
}
settingLocalBounds = false;
}
}
}
public void RemoveSelectedItems()
{
foreach (ToolsListItem item in instance.SelectedItems)
{
RemoveChild(item);
item.printItem.Delete();
}
}
public override void RemoveChild(int index)
{
topToBottomItemList.RemoveChild(index);
}
public override void RemoveChild(GuiWidget childToRemove)
{
for (int i = topToBottomItemList.Children.Count - 1; i >= 0; i--)
{
GuiWidget itemHolder = topToBottomItemList.Children[i];
if (itemHolder == childToRemove || itemHolder.Children[0] == childToRemove)
{
topToBottomItemList.RemoveChild(itemHolder);
}
}
}
public override void RemoveAllChildren()
{
topToBottomItemList.RemoveAllChildren();
}
void itemHolder_ParentChanged(object sender, EventArgs e)
{
FlowLayoutWidget itemHolder = (FlowLayoutWidget)sender;
itemHolder.MouseEnterBounds -= new EventHandler(itemToAdd_MouseEnterBounds);
itemHolder.MouseLeaveBounds -= new EventHandler(itemToAdd_MouseLeaveBounds);
itemHolder.MouseDownInBounds -= new MouseEventHandler(itemHolder_MouseDownInBounds);
itemHolder.ParentChanged -= new EventHandler(itemHolder_ParentChanged);
}
void itemHolder_MouseDownInBounds(object sender, MouseEventArgs mouseEvent)
{
}
void control_MouseLeaveBounds(object sender, EventArgs e)
{
HoverIndex = -1;
}
void itemToAdd_MouseLeaveBounds(object sender, EventArgs e)
{
GuiWidget widgetLeft = ((GuiWidget)sender);
if (SelectedIndex >= 0)
{
if (widgetLeft != topToBottomItemList.Children[SelectedIndex])
{
widgetLeft.BackgroundColor = new RGBA_Bytes();
widgetLeft.Invalidate();
Invalidate();
}
}
}
void itemToAdd_MouseEnterBounds(object sender, EventArgs e)
{
GuiWidget widgetEntered = ((GuiWidget)sender);
for (int index = 0; index < topToBottomItemList.Children.Count; index++)
{
GuiWidget child = topToBottomItemList.Children[index];
if (child == widgetEntered)
{
HoverIndex = index;
}
}
}
public void OnSelectedIndexChanged()
{
Invalidate();
if (SelectedValueChanged != null)
{
SelectedValueChanged(this, null);
}
}
public void OnHoverIndexChanged()
{
Invalidate();
if (HoverValueChanged != null)
{
HoverValueChanged(this, null);
}
}
public void ClearSelected()
{
if (selectedIndex != -1)
{
selectedIndex = -1;
OnSelectedIndexChanged();
}
}
public GuiWidget SelectedItem
{
get
{
if (SelectedIndex != -1)
{
return Children[SelectedIndex];
}
return null;
}
set
{
for (int i = 0; i < Children.Count; i++)
{
if (Children[SelectedIndex] == value)
{
SelectedIndex = i;
}
}
}
}
}
}

View file

@ -1,250 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Threading;
using System.IO;
using MatterHackers.Agg.Image;
using MatterHackers.Agg.VertexSource;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.VectorMath;
using MatterHackers.MatterControl.PartPreviewWindow;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.MatterControl;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.PolygonMesh;
namespace MatterHackers.MatterControl.ToolsPage
{
public class ToolsListItem : ClickWidget
{
public PrintItemWrapper printItem;
public RGBA_Bytes WidgetTextColor;
public RGBA_Bytes WidgetBackgroundColor;
public bool isActivePrint = false;
public bool isSelectedItem = false;
public bool isHoverItem = false;
TextWidget partLabel;
Button viewLink;
Button removeLink;
public CheckBox selectionCheckBox;
FlowLayoutWidget buttonContainer;
LinkButtonFactory linkButtonFactory = new LinkButtonFactory();
public ToolsListItem(PrintItemWrapper printItem)
{
this.printItem = printItem;
linkButtonFactory.fontSize = 10;
linkButtonFactory.textColor = RGBA_Bytes.White;
WidgetTextColor = RGBA_Bytes.Black;
WidgetBackgroundColor = RGBA_Bytes.White;
TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
SetDisplayAttributes();
FlowLayoutWidget mainContainer = new FlowLayoutWidget(FlowDirection.LeftToRight);
mainContainer.HAnchor |= Agg.UI.HAnchor.ParentLeftRight;
{
GuiWidget selectionCheckBoxContainer = new GuiWidget();
selectionCheckBoxContainer.VAnchor = VAnchor.Max_FitToChildren_ParentHeight;
selectionCheckBoxContainer.HAnchor = Agg.UI.HAnchor.FitToChildren;
selectionCheckBoxContainer.Margin = new BorderDouble(left: 6);
selectionCheckBox = new CheckBox("");
selectionCheckBox.VAnchor = VAnchor.ParentCenter;
selectionCheckBox.HAnchor = HAnchor.ParentCenter;
selectionCheckBoxContainer.AddChild(selectionCheckBox);
FlowLayoutWidget leftColumn = new FlowLayoutWidget(FlowDirection.TopToBottom);
leftColumn.VAnchor |= VAnchor.ParentTop;
FlowLayoutWidget middleColumn = new FlowLayoutWidget(FlowDirection.TopToBottom);
middleColumn.VAnchor |= VAnchor.ParentTop;
middleColumn.HAnchor |= HAnchor.ParentLeftRight;
middleColumn.Padding = new BorderDouble(6);
middleColumn.Margin = new BorderDouble(10,0);
{
string labelName = textInfo.ToTitleCase(printItem.Name);
labelName = labelName.Replace('_', ' ');
partLabel = new TextWidget(labelName, pointSize: 12);
partLabel.TextColor = WidgetTextColor;
partLabel.MinimumSize = new Vector2(1, 16);
middleColumn.AddChild(partLabel);
}
FlowLayoutWidget rightColumn = new FlowLayoutWidget(FlowDirection.TopToBottom);
rightColumn.VAnchor |= VAnchor.ParentCenter;
buttonContainer = new FlowLayoutWidget();
buttonContainer.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth;
buttonContainer.VAnchor = Agg.UI.VAnchor.Max_FitToChildren_ParentHeight;
{
viewLink = linkButtonFactory.Generate("View");
viewLink.Margin = new BorderDouble(left: 10, right:10);
viewLink.VAnchor = VAnchor.ParentCenter;
removeLink = linkButtonFactory.Generate("Remove");
removeLink.Margin = new BorderDouble(right: 10);
removeLink.VAnchor = VAnchor.ParentCenter;
buttonContainer.AddChild(viewLink);
buttonContainer.AddChild(removeLink);
}
rightColumn.AddChild(buttonContainer);
mainContainer.AddChild(selectionCheckBoxContainer);
mainContainer.AddChild(leftColumn);
mainContainer.AddChild(middleColumn);
mainContainer.AddChild(rightColumn);
}
this.AddChild(mainContainer);
AddHandlers();
}
void SetDisplayAttributes()
{
this.VAnchor = Agg.UI.VAnchor.Max_FitToChildren_ParentHeight;
this.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth;
this.Height = 28;
this.BackgroundColor = this.WidgetBackgroundColor;
this.Padding = new BorderDouble(0);
this.Margin = new BorderDouble(6,0,6,6);
}
event EventHandler unregisterEvents;
void AddHandlers()
{
ActiveTheme.Instance.ThemeChanged.RegisterEvent(onThemeChanged, ref unregisterEvents);
viewLink.Click += new ButtonBase.ButtonEventHandler(onViewLinkClick);
removeLink.Click += new ButtonBase.ButtonEventHandler(onRemoveLinkClick);
selectionCheckBox.CheckedStateChanged += selectionCheckBox_CheckedStateChanged;
}
public override void OnClosed(EventArgs e)
{
if (unregisterEvents != null)
{
unregisterEvents(this, null);
}
base.OnClosed(e);
}
private void onClick(object sender, MouseEventArgs e)
{
if (this.isSelectedItem == false)
{
this.isSelectedItem = true;
ToolsListControl.Instance.SelectedItems.Add(this);
}
}
private void selectionCheckBox_CheckedStateChanged(object sender, EventArgs e)
{
if (selectionCheckBox.Checked == true)
{
this.isSelectedItem = true;
ToolsListControl.Instance.SelectedItems.Add(this);
}
else
{
this.isSelectedItem = false;
ToolsListControl.Instance.SelectedItems.Remove(this);
}
}
private void onAddLinkClick(object sender, MouseEventArgs e)
{
}
void RemoveThisFromPrintLibrary(object state)
{
ToolsListControl.Instance.RemoveChild(this);
this.printItem.Delete();
}
private void onRemoveLinkClick(object sender, MouseEventArgs e)
{
UiThread.RunOnIdle(RemoveThisFromPrintLibrary);
}
private void onViewLinkClick(object sender, MouseEventArgs e)
{
UiThread.RunOnIdle(onViewLinkClick);
}
private void onViewLinkClick(object state)
{
string pathAndFile = this.printItem.FileLocation;
Console.WriteLine(pathAndFile);
if (File.Exists(pathAndFile))
{
new PartPreviewMainWindow(this.printItem);
}
else
{
string message = String.Format("Cannot find\n'{0}'.\nWould you like to remove it from the queue?", pathAndFile);
if (StyledMessageBox.ShowMessageBox(message, "Item not found", StyledMessageBox.MessageType.YES_NO))
{
ToolsListControl.Instance.RemoveChild(this);
}
}
}
private void onThemeChanged(object sender, EventArgs e)
{
//Set background and text color to new theme
this.Invalidate();
}
public override void OnDraw(Graphics2D graphics2D)
{
if (this.isHoverItem)
{
buttonContainer.Visible = true;
}
else
{
buttonContainer.Visible = false;
}
base.OnDraw(graphics2D);
if (this.isSelectedItem)
{
this.BackgroundColor = ActiveTheme.Instance.PrimaryAccentColor;
this.partLabel.TextColor = RGBA_Bytes.White;
this.selectionCheckBox.TextColor = RGBA_Bytes.White;
//RectangleDouble Bounds = LocalBounds;
//RoundedRect rectBorder = new RoundedRect(Bounds, 0);
//graphics2D.Render(new Stroke(rectBorder, 3), RGBA_Bytes.White);
}
else if (this.isHoverItem)
{
RectangleDouble Bounds = LocalBounds;
RoundedRect rectBorder = new RoundedRect(Bounds, 0);
this.BackgroundColor = ActiveTheme.Instance.SecondaryAccentColor;
this.partLabel.TextColor = RGBA_Bytes.White;
this.selectionCheckBox.TextColor = RGBA_Bytes.White;
graphics2D.Render(new Stroke(rectBorder, 3), ActiveTheme.Instance.PrimaryAccentColor);
}
else
{
this.BackgroundColor = RGBA_Bytes.White;
this.partLabel.TextColor = RGBA_Bytes.Black;
this.selectionCheckBox.TextColor = RGBA_Bytes.Black;
}
}
}
}

View file

@ -1,237 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.IO;
using System.Diagnostics;
using System.Threading;
using MatterHackers.Agg.Image;
using MatterHackers.Agg.VertexSource;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.VectorMath;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.MatterControl.PrintQueue;
using MatterHackers.Localizations;
namespace MatterHackers.MatterControl.ToolsPage
{
public class ToolsWidget : GuiWidget
{
TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory();
TextImageButtonFactory searchButtonFactory = new TextImageButtonFactory();
Button deleteFromLibraryButton;
Button addToQueueButton;
Button searchButton;
MHTextEditWidget searchInput;
public ToolsWidget()
{
SetDisplayAttributes();
textImageButtonFactory.normalTextColor = RGBA_Bytes.White;
textImageButtonFactory.hoverTextColor = RGBA_Bytes.White;
textImageButtonFactory.disabledTextColor = RGBA_Bytes.White;
textImageButtonFactory.pressedTextColor = RGBA_Bytes.White;
textImageButtonFactory.borderWidth = 0;
searchButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryBackgroundColor;
searchButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryBackgroundColor;
searchButtonFactory.disabledTextColor = ActiveTheme.Instance.PrimaryBackgroundColor;
searchButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryBackgroundColor;
searchButtonFactory.borderWidth = 0;
FlowLayoutWidget allControls = new FlowLayoutWidget(FlowDirection.TopToBottom);
{
FlowLayoutWidget searchPanel = new FlowLayoutWidget();
searchPanel.BackgroundColor = new RGBA_Bytes(180, 180, 180);
searchPanel.HAnchor = HAnchor.ParentLeftRight;
searchPanel.Padding = new BorderDouble(3, 3);
{
searchInput = new MHTextEditWidget();
searchInput.Margin = new BorderDouble(6, 0);
searchInput.HAnchor = HAnchor.ParentLeftRight;
searchInput.VAnchor = VAnchor.ParentCenter;
searchButton = searchButtonFactory.Generate("Search");
searchButton.Margin = new BorderDouble(right:9);
searchPanel.AddChild(searchInput);
searchPanel.AddChild(searchButton);
}
FlowLayoutWidget buttonPanel = new FlowLayoutWidget();
buttonPanel.HAnchor = HAnchor.ParentLeftRight;
buttonPanel.Padding = new BorderDouble(0, 3);
{
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);
deleteFromLibraryButton = textImageButtonFactory.Generate(LocalizedString.Get("Delete"));
deleteFromLibraryButton.Margin = new BorderDouble(3, 0);
deleteFromLibraryButton.Click += new ButtonBase.ButtonEventHandler(deleteFromQueueButton_Click);
deleteFromLibraryButton.Visible = false;
buttonPanel.AddChild(deleteFromLibraryButton);
addToQueueButton = textImageButtonFactory.Generate(LocalizedString.Get("Add to Queue"));
addToQueueButton.Margin = new BorderDouble(3, 0);
addToQueueButton.Click += new ButtonBase.ButtonEventHandler(addToQueueButton_Click);
addToQueueButton.Visible = false;
buttonPanel.AddChild(addToQueueButton);
GuiWidget spacer = new GuiWidget();
spacer.HAnchor = HAnchor.ParentLeftRight;
buttonPanel.AddChild(spacer);
}
allControls.AddChild(searchPanel);
allControls.AddChild(ToolsListControl.Instance);
allControls.AddChild(buttonPanel);
}
allControls.AnchorAll();
this.AddChild(allControls);
AddHandlers();
}
private void AddHandlers()
{
ToolsListControl.Instance.SelectedItems.OnAdd += onLibraryItemsSelected;
ToolsListControl.Instance.SelectedItems.OnRemove += onLibraryItemsSelected;
searchInput.ActualTextEditWidget.EnterPressed += new KeyEventHandler(searchInputEnterPressed);
searchButton.Click += searchButtonClick;
searchInput.ActualTextEditWidget.KeyUp += searchInputKeyUp;
}
void searchInputKeyUp(object sender, KeyEventArgs keyEvent)
{
searchButtonClick(null, null);
}
void searchInputEnterPressed(object sender, KeyEventArgs keyEvent)
{
searchButtonClick(null, null);
}
void searchButtonClick(object sender, MouseEventArgs mouseEvent)
{
string textToSend = searchInput.Text.Trim();
ToolsListControl.Instance.KeywordFilter = textToSend;
}
private void addToQueueButton_Click(object sender, MouseEventArgs e)
{
foreach (ToolsListItem item in ToolsListControl.Instance.SelectedItems)
{
PrintQueue.PrintQueueItem queueItem = new PrintQueue.PrintQueueItem(item.printItem);
PrintQueue.PrintQueueControl.Instance.AddChild(queueItem);
}
ToolsListControl.Instance.ClearSelectedItems();
PrintQueue.PrintQueueControl.Instance.EnsureSelection();
PrintQueueControl.Instance.SaveDefaultQueue();
}
private void onLibraryItemsSelected(object sender, EventArgs e)
{
List<ToolsListItem> selectedItemsList = (List<ToolsListItem>)sender;
if (selectedItemsList.Count > 0)
{
addToQueueButton.Visible = true;
deleteFromLibraryButton.Visible = true;
}
else
{
addToQueueButton.Visible = false;
deleteFromLibraryButton.Visible = false;
}
}
private void SetDisplayAttributes()
{
this.Padding = new BorderDouble(3);
this.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor;
this.AnchorAll();
}
void deleteFromQueueButton_Click(object sender, MouseEventArgs mouseEvent)
{
ToolsListControl.Instance.RemoveSelectedItems();
}
public override void OnDragEnter(FileDropEventArgs fileDropEventArgs)
{
foreach (string file in fileDropEventArgs.DroppedFiles)
{
string extension = Path.GetExtension(file).ToUpper();
if (extension == ".STL" || extension == ".GCODE")
{
fileDropEventArgs.AcceptDrop = true;
}
}
base.OnDragEnter(fileDropEventArgs);
}
public override void OnDragOver(FileDropEventArgs fileDropEventArgs)
{
foreach (string file in fileDropEventArgs.DroppedFiles)
{
string extension = Path.GetExtension(file).ToUpper();
if (extension == ".STL" || extension == ".GCODE")
{
fileDropEventArgs.AcceptDrop = true;
}
}
base.OnDragOver(fileDropEventArgs);
}
public override void OnDragDrop(FileDropEventArgs fileDropEventArgs)
{
foreach (string droppedFileName in fileDropEventArgs.DroppedFiles)
{
string extension = Path.GetExtension(droppedFileName).ToUpper();
if (extension == ".STL" || extension == ".GCODE")
{
PrintItem printItem = new PrintItem();
printItem.Name = System.IO.Path.GetFileNameWithoutExtension(droppedFileName);
printItem.FileLocation = System.IO.Path.GetFullPath(droppedFileName);
printItem.PrintItemCollectionID = ToolsListControl.Instance.LibraryCollection.Id;
printItem.Commit();
ToolsListItem queueItem = new ToolsListItem(new PrintItemWrapper(printItem));
ToolsListControl.Instance.AddChild(queueItem);
}
ToolsListControl.Instance.Invalidate();
}
ToolsListControl.Instance.SaveLibraryItems();
base.OnDragDrop(fileDropEventArgs);
}
void loadFile_Click(object sender, MouseEventArgs mouseEvent)
{
OpenFileDialogParams openParams = new OpenFileDialogParams("Select an STL file, Select a GCODE file|*.stl;*.gcode", multiSelect: true);
FileDialog.OpenFileDialog(ref openParams);
if (openParams.FileNames != null)
{
foreach (string loadedFileName in openParams.FileNames)
{
PrintItem printItem = new PrintItem();
printItem.Name = System.IO.Path.GetFileNameWithoutExtension(loadedFileName);
printItem.FileLocation = System.IO.Path.GetFullPath(loadedFileName);
printItem.PrintItemCollectionID = ToolsListControl.Instance.LibraryCollection.Id;
printItem.Commit();
ToolsListItem queueItem = new ToolsListItem(new PrintItemWrapper(printItem));
ToolsListControl.Instance.AddChild(queueItem);
}
ToolsListControl.Instance.Invalidate();
}
ToolsListControl.Instance.SaveLibraryItems();
}
}
}

View file

@ -162,8 +162,8 @@ namespace MatterHackers.MatterControl
}
static string applicationDataPath = ApplicationDataStorage.Instance.ApplicationUserDataPath;
static string defaultManifestPathAndFileName = System.IO.Path.Combine(applicationDataPath,"data", "temp", "project-assembly", "manifest.json");
static string defaultProjectPathAndFileName = System.IO.Path.Combine(applicationDataPath,"data", "default.zip");
static string defaultManifestPathAndFileName = Path.Combine(applicationDataPath, "data", "temp", "project-assembly", "manifest.json");
static string defaultProjectPathAndFileName = Path.Combine(applicationDataPath, "data", "default.zip");
public static void EmptyFolder(System.IO.DirectoryInfo directory)
{
@ -290,8 +290,8 @@ namespace MatterHackers.MatterControl
}
if (zipEntry.Name == "manifest.json"
|| System.IO.Path.GetExtension(zipEntry.Name).ToUpper() == ".STL"
|| System.IO.Path.GetExtension(zipEntry.Name).ToUpper() == ".GCODE")
|| Path.GetExtension(zipEntry.Name).ToUpper() == ".STL"
|| Path.GetExtension(zipEntry.Name).ToUpper() == ".GCODE")
{
string extractedFileName = Path.Combine(stagingFolder, zipEntry.Name);