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.Localizations; namespace MatterHackers.MatterControl.PrintQueue { public class QueueControlsWidget : GuiWidget { TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory(); public QueueControlsWidget() { SetDisplayAttributes(); textImageButtonFactory.normalTextColor = RGBA_Bytes.White; textImageButtonFactory.hoverTextColor = RGBA_Bytes.White; textImageButtonFactory.disabledTextColor = RGBA_Bytes.White; textImageButtonFactory.pressedTextColor = RGBA_Bytes.White; textImageButtonFactory.borderWidth = 0; FlowLayoutWidget allControls = new FlowLayoutWidget(FlowDirection.TopToBottom); { { // Ensure the form opens with no rows selected. //ActiveQueueList.Instance.ClearSelected(); allControls.AddChild(PrintQueueControl.Instance); } FlowLayoutWidget buttonPanel1 = new FlowLayoutWidget(); buttonPanel1.HAnchor = HAnchor.ParentLeftRight; buttonPanel1.Padding = new BorderDouble(0, 3); { Button addToQueueButton = textImageButtonFactory.Generate(new LocalizedString("Add").Translated, "icon_circle_plus.png"); buttonPanel1.AddChild(addToQueueButton); addToQueueButton.Margin = new BorderDouble(0, 0, 3, 0); addToQueueButton.Click += new ButtonBase.ButtonEventHandler(loadFile_Click); Button deleteAllFromQueueButton = textImageButtonFactory.Generate(new LocalizedString("Remove All").Translated); deleteAllFromQueueButton.Margin = new BorderDouble(3, 0); deleteAllFromQueueButton.Click += new ButtonBase.ButtonEventHandler(deleteAllFromQueueButton_Click); buttonPanel1.AddChild(deleteAllFromQueueButton); GuiWidget spacer1 = new GuiWidget(); spacer1.HAnchor = HAnchor.ParentLeftRight; buttonPanel1.AddChild(spacer1); GuiWidget spacer2 = new GuiWidget(); spacer2.HAnchor = HAnchor.ParentLeftRight; buttonPanel1.AddChild(spacer2); GuiWidget queueMenu = new PrintQueueMenu(); queueMenu.VAnchor = VAnchor.ParentTop; buttonPanel1.AddChild(queueMenu); } allControls.AddChild(buttonPanel1); } allControls.AnchorAll(); this.AddChild(allControls); } private void SetDisplayAttributes() { this.Padding = new BorderDouble(3); this.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; this.AnchorAll(); } void createPatrsSheetsButton_Click(object sender, MouseEventArgs mouseEvent) { List parts = PrintQueueControl.Instance.CreateReadOnlyPartList(); SaveFileDialogParams saveParams = new SaveFileDialogParams("Save Parts Sheet|*.pdf"); System.IO.Stream streamToSaveTo = FileDialog.SaveFileDialog(ref saveParams); if (streamToSaveTo != null) { string partFileName = saveParams.FileName; if ( !partFileName.StartsWith ("" + Path.DirectorySeparatorChar) ) { partFileName = Path.DirectorySeparatorChar + partFileName; } PartsSheet currentPartsInQueue = new PartsSheet(parts, partFileName); currentPartsInQueue.SaveSheets(); } } void exportToSDProcess_UpdateRemainingItems(object sender, EventArgs e) { ExportToFolderProcess exportToSDProcess = (ExportToFolderProcess)sender; } void exportQueueButton_Click(object sender, MouseEventArgs mouseEvent) { List partList = PrintQueueControl.Instance.CreateReadOnlyPartList(); ProjectFileHandler project = new ProjectFileHandler(partList); project.SaveAs(); } void importQueueButton_Click(object sender, MouseEventArgs mouseEvent) { ProjectFileHandler project = new ProjectFileHandler(null); List partFiles = project.OpenFromDialog(); if (partFiles != null) { PrintQueueControl.Instance.RemoveAllChildren(); foreach (PrintItem part in partFiles) { PrintQueueControl.Instance.AddChild(new PrintQueueItem(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(); } 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") { PrintQueueItem queueItem = new PrintQueueItem(System.IO.Path.GetFileNameWithoutExtension(droppedFileName), System.IO.Path.GetFullPath(droppedFileName)); PrintQueueControl.Instance.AddChild(queueItem); } PrintQueueControl.Instance.EnsureSelection(); PrintQueueControl.Instance.Invalidate(); } PrintQueueControl.Instance.SaveDefaultQueue(); base.OnDragDrop(fileDropEventArgs); } void loadFile_Click(object sender, MouseEventArgs mouseEvent) { UiThread.RunOnIdle(LoadFileOnIdle); } void LoadFileOnIdle(object state) { OpenFileDialogParams openParams = new OpenFileDialogParams("Select an STL file, Select a GCODE file|*.stl;*.gcode", multiSelect: true); openParams.ActionButtonLabel = "Add to Queue"; openParams.Title = "MatterControl: Select A File"; FileDialog.OpenFileDialog(ref openParams); if (openParams.FileNames != null) { foreach (string loadedFileName in openParams.FileNames) { PrintQueueItem queueItem = new PrintQueueItem(System.IO.Path.GetFileNameWithoutExtension(loadedFileName), System.IO.Path.GetFullPath(loadedFileName)); PrintQueueControl.Instance.AddChild(queueItem); } if (PrintQueueControl.Instance.Count > 0) { PrintQueueControl.Instance.SelectedIndex = PrintQueueControl.Instance.Count - 1; } //PrintQueueControl.Instance.EnsureSelection(); PrintQueueControl.Instance.Invalidate(); } PrintQueueControl.Instance.SaveDefaultQueue(); } } }