From 53f7ba857900d1f2fa2ced8961d7b6faa7246a8c Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Wed, 22 Jul 2015 18:30:22 -0700 Subject: [PATCH] Remvode unused config.ini Made the create folder window have the text box selected so you can type right away. Asking for more library stuff by index. Small work on HTML widget --- AboutPage/AboutWidget.cs | 4 +- AboutPage/HTMLParser/HtmlWidget.cs | 6 +- ControlElements/MHTextEditWidget.cs | 7 +- Library/CreateFolderWindow.cs | 26 ++++-- Library/LibraryDataView.cs | 6 +- Library/LibraryRowItemCollection.cs | 21 +++-- Library/LibraryRowItemPart.cs | 4 +- Library/Provider/LibraryProvider.cs | 7 +- Library/Provider/LibraryProviderFileSystem.cs | 11 ++- Library/Provider/LibraryProviderSelector.cs | 11 +-- Library/Provider/LibraryProviderSqlite.cs | 18 ++-- StaticData/Translations/Master.txt | 6 ++ Submodules/agg-sharp | 2 +- .../MatterControl/LibraryProviderTests.cs | 10 +- config.ini | 93 ------------------- 15 files changed, 81 insertions(+), 151 deletions(-) delete mode 100644 config.ini diff --git a/AboutPage/AboutWidget.cs b/AboutPage/AboutWidget.cs index e62fb1ba2..aab228995 100644 --- a/AboutPage/AboutWidget.cs +++ b/AboutPage/AboutWidget.cs @@ -72,10 +72,10 @@ namespace MatterHackers.MatterControl #if false // test { SystemWindow releaseNotes = new SystemWindow(640, 480); - string releaseNotesFile = Path.Combine("OEMSettings", "ReleaseNotesMini.html"); + string releaseNotesFile = Path.Combine("OEMSettings", "ReleaseNotes.html"); string releaseNotesContent = StaticData.Instance.ReadAllText(releaseNotesFile); HtmlWidget content = new HtmlWidget(releaseNotesContent, RGBA_Bytes.Black); - content.AddChild(new GuiWidget(HAnchor.None, VAnchor.ParentBottomTop)); + content.AddChild(new GuiWidget(HAnchor.AbsolutePosition, VAnchor.ParentBottomTop)); content.VAnchor |= VAnchor.ParentTop; content.BackgroundColor = RGBA_Bytes.White; releaseNotes.AddChild(content); diff --git a/AboutPage/HTMLParser/HtmlWidget.cs b/AboutPage/HTMLParser/HtmlWidget.cs index 002ceb3cf..ab35e9fdc 100644 --- a/AboutPage/HTMLParser/HtmlWidget.cs +++ b/AboutPage/HTMLParser/HtmlWidget.cs @@ -66,8 +66,8 @@ namespace MatterHackers.MatterControl htmlParser.ParseHtml(htmlContent, AddContent, CloseContent); - VAnchor |= VAnchor.ParentBottomTop; - HAnchor |= HAnchor.ParentLeftRight; + VAnchor = VAnchor.Max_FitToChildren_ParentHeight; + HAnchor = HAnchor.Max_FitToChildren_ParentWidth; } public class WrappingTextWidget : GuiWidget @@ -274,7 +274,7 @@ namespace MatterHackers.MatterControl break; default: - throw new NotImplementedException("Don't know what to do with {0}".FormatWith(elementState.TypeName)); + throw new NotImplementedException("Don't know what to do with '{0}'".FormatWith(elementState.TypeName)); } } diff --git a/ControlElements/MHTextEditWidget.cs b/ControlElements/MHTextEditWidget.cs index 75cc46257..5aa3bc11b 100644 --- a/ControlElements/MHTextEditWidget.cs +++ b/ControlElements/MHTextEditWidget.cs @@ -43,7 +43,7 @@ namespace MatterHackers.MatterControl { if (noContentFieldDescription != null) { - if (Text == "" && !ContainsFocus) + if (Text == "" || !ContainsFocus) { noContentFieldDescription.Visible = true; } @@ -110,6 +110,11 @@ namespace MatterHackers.MatterControl } } + public override bool Focus() + { + return actuallTextEditWidget.Focus(); + } + public bool SelectAllOnFocus { get { return actuallTextEditWidget.InternalTextEditWidget.SelectAllOnFocus; } diff --git a/Library/CreateFolderWindow.cs b/Library/CreateFolderWindow.cs index 4f0545705..0658173bc 100644 --- a/Library/CreateFolderWindow.cs +++ b/Library/CreateFolderWindow.cs @@ -12,7 +12,7 @@ namespace MatterHackers.MatterControl { private Action functionToCallToCreateNamedFolder; private TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory(); - private MHTextEditWidget textToAddWidget; + private MHTextEditWidget folderNameWidget; public CreateFolderWindow(Action functionToCallToCreateNamedFolder) : base(480, 180) @@ -62,12 +62,12 @@ namespace MatterHackers.MatterControl textBoxHeader.HAnchor = HAnchor.ParentLeft; //Adds text box and check box to the above container - textToAddWidget = new MHTextEditWidget("", pixelWidth: 300, messageWhenEmptyAndNotSelected: "Enter a Folder Name Here".Localize()); - textToAddWidget.HAnchor = HAnchor.ParentLeftRight; - textToAddWidget.Margin = new BorderDouble(5); + folderNameWidget = new MHTextEditWidget("", pixelWidth: 300, messageWhenEmptyAndNotSelected: "Enter a Folder Name Here".Localize()); + folderNameWidget.HAnchor = HAnchor.ParentLeftRight; + folderNameWidget.Margin = new BorderDouble(5); middleRowContainer.AddChild(textBoxHeader); - middleRowContainer.AddChild(textToAddWidget); + middleRowContainer.AddChild(folderNameWidget); middleRowContainer.AddChild(new HorizontalSpacer()); topToBottom.AddChild(middleRowContainer); @@ -85,7 +85,7 @@ namespace MatterHackers.MatterControl buttonRow.AddChild(createFolderButton); createFolderButton.Click += new EventHandler(createFolderButton_Click); - textToAddWidget.ActualTextEditWidget.EnterPressed += new KeyEventHandler(ActualTextEditWidget_EnterPressed); + folderNameWidget.ActualTextEditWidget.EnterPressed += new KeyEventHandler(ActualTextEditWidget_EnterPressed); //Adds Create and Close Button to button container buttonRow.AddChild(new HorizontalSpacer()); @@ -104,6 +104,18 @@ namespace MatterHackers.MatterControl ShowAsSystemWindow(); } + bool firstDraw = true; + public override void OnDraw(Graphics2D graphics2D) + { + if (firstDraw) + { + folderNameWidget.Focus(); + + firstDraw = false; + } + base.OnDraw(graphics2D); + } + private void ActualTextEditWidget_EnterPressed(object sender, KeyEventArgs keyEvent) { SubmitForm(); @@ -116,7 +128,7 @@ namespace MatterHackers.MatterControl private void SubmitForm() { - string newName = textToAddWidget.ActualTextEditWidget.Text; + string newName = folderNameWidget.ActualTextEditWidget.Text; if (newName != "") { string fileName = Path.ChangeExtension(Path.GetRandomFileName(), ".amf"); diff --git a/Library/LibraryDataView.cs b/Library/LibraryDataView.cs index 714286d3a..5ac0ef131 100644 --- a/Library/LibraryDataView.cs +++ b/Library/LibraryDataView.cs @@ -429,7 +429,7 @@ namespace MatterHackers.MatterControl.PrintLibrary { if (parentProvider == null) { - LibraryDataView.CurrentLibraryProvider = LibraryDataView.CurrentLibraryProvider.GetProviderForItem(printItemCollection); + LibraryDataView.CurrentLibraryProvider = LibraryDataView.CurrentLibraryProvider.GetProviderForCollection(printItemCollection); } else { @@ -451,14 +451,14 @@ namespace MatterHackers.MatterControl.PrintLibrary if (provider != null && provider.ProviderKey != "ProviderSelectorKey") { PrintItemCollection parent = new PrintItemCollection("..", provider.ProviderKey); - LibraryRowItem queueItem = new LibraryRowItemCollection(parent, this, provider.ParentLibraryProvider, GetThumbnailWidget(true, provider.ParentLibraryProvider, parent)); + LibraryRowItem queueItem = new LibraryRowItemCollection(parent, -1, this, provider.ParentLibraryProvider, GetThumbnailWidget(true, provider.ParentLibraryProvider, parent)); AddListItemToTopToBottom(queueItem); } for (int i = 0; i < provider.CollectionCount; i++) { PrintItemCollection item = provider.GetCollectionItem(i); - LibraryRowItem queueItem = new LibraryRowItemCollection(item, this, null, GetThumbnailWidget(false, null, item)); + LibraryRowItem queueItem = new LibraryRowItemCollection(item, i, this, null, GetThumbnailWidget(false, null, item)); AddListItemToTopToBottom(queueItem); } diff --git a/Library/LibraryRowItemCollection.cs b/Library/LibraryRowItemCollection.cs index 8722e1bed..3c57bfd2a 100644 --- a/Library/LibraryRowItemCollection.cs +++ b/Library/LibraryRowItemCollection.cs @@ -48,10 +48,12 @@ namespace MatterHackers.MatterControl.PrintLibrary { LibraryProvider parentProvider; PrintItemCollection printItemCollection; + int collectionIndex; - public LibraryRowItemCollection(PrintItemCollection collection, LibraryDataView libraryDataView, LibraryProvider parentProvider, GuiWidget thumbnailWidget) + public LibraryRowItemCollection(PrintItemCollection collection, int collectionIndex, LibraryDataView libraryDataView, LibraryProvider parentProvider, GuiWidget thumbnailWidget) : base(libraryDataView, thumbnailWidget) { + this.collectionIndex = collectionIndex; this.parentProvider = parentProvider; this.printItemCollection = collection; this.ItemName = printItemCollection.Name; @@ -63,7 +65,7 @@ namespace MatterHackers.MatterControl.PrintLibrary public override bool Protected { - get { throw new NotImplementedException(); } + get { return false; } } public override void Export() @@ -76,14 +78,15 @@ namespace MatterHackers.MatterControl.PrintLibrary throw new NotImplementedException(); } - private static string collectionNotEmtyMessage = "The collection you are trying to delete '{0}' is not empty. Would you like to delete it anyway?".Localize(); - private static string collectionNotEmtyTitle = "Collection not Empty".Localize(); + private static string collectionNotEmtyMessage = "The folder you are trying to delete '{0}' is not empty. Would you like to delete it anyway?".Localize(); + private static string collectionNotEmtyTitle = "Folder not Empty".Localize(); private static string deleteNow = "Delete".Localize(); - private static string doNotDelete = "Do NOT Delete".Localize(); + private static string doNotDelete = "Cancel".Localize(); public override void RemoveFromCollection() { - using (LibraryProvider collectionProvider = LibraryDataView.CurrentLibraryProvider.GetProviderForItem(printItemCollection)) + // TODO: make a progress display to show that we are retieving the collection content (to check if its empty). + using (LibraryProvider collectionProvider = LibraryDataView.CurrentLibraryProvider.GetProviderForCollection(printItemCollection)) { if (collectionProvider.ItemCount > 0 || collectionProvider.CollectionCount > 0) { @@ -96,7 +99,7 @@ namespace MatterHackers.MatterControl.PrintLibrary } else { - LibraryDataView.CurrentLibraryProvider.RemoveCollection(printItemCollection); + LibraryDataView.CurrentLibraryProvider.RemoveCollection(collectionIndex); } } } @@ -105,7 +108,7 @@ namespace MatterHackers.MatterControl.PrintLibrary { if (messageBoxResponse) { - LibraryDataView.CurrentLibraryProvider.RemoveCollection(printItemCollection); + LibraryDataView.CurrentLibraryProvider.RemoveCollection(collectionIndex); } } @@ -150,7 +153,7 @@ namespace MatterHackers.MatterControl.PrintLibrary { if (parentProvider == null) { - LibraryDataView.CurrentLibraryProvider = LibraryDataView.CurrentLibraryProvider.GetProviderForItem(printItemCollection); + LibraryDataView.CurrentLibraryProvider = LibraryDataView.CurrentLibraryProvider.GetProviderForCollection(printItemCollection); } else { diff --git a/Library/LibraryRowItemPart.cs b/Library/LibraryRowItemPart.cs index ab5d1bf0a..a62bffa34 100644 --- a/Library/LibraryRowItemPart.cs +++ b/Library/LibraryRowItemPart.cs @@ -211,7 +211,7 @@ namespace MatterHackers.MatterControl.PrintLibrary public async override void RemoveFromCollection() { - LibraryDataView.CurrentLibraryProvider.RemoveItem(await this.GetPrintItemWrapperAsync()); + LibraryDataView.CurrentLibraryProvider.RemoveItem(itemIndex); } protected override SlideWidget GetItemActionButtons() @@ -275,7 +275,7 @@ namespace MatterHackers.MatterControl.PrintLibrary protected async override void RemoveThisFromPrintLibrary() { // TODO: The LibraryProvider does not need a printitemwrapper to remove an item! Why not an interger like the others? - LibraryDataView.CurrentLibraryProvider.RemoveItem(await this.GetPrintItemWrapperAsync()); + LibraryDataView.CurrentLibraryProvider.RemoveItem(itemIndex); } private void ExportQueueItemWindow_Closed(object sender, EventArgs e) diff --git a/Library/Provider/LibraryProvider.cs b/Library/Provider/LibraryProvider.cs index ac1c2c6c5..ef7fe631f 100644 --- a/Library/Provider/LibraryProvider.cs +++ b/Library/Provider/LibraryProvider.cs @@ -109,11 +109,12 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider public abstract Task GetPrintItemWrapperAsync(int itemIndex, ReportProgressRatio reportProgress = null); - public abstract LibraryProvider GetProviderForItem(PrintItemCollection collection); + // TODO: make this asnyc + public abstract LibraryProvider GetProviderForCollection(PrintItemCollection collection); - public abstract void RemoveCollection(PrintItemCollection collectionToRemove); + public abstract void RemoveCollection(int collectionIndexToRemove); - public abstract void RemoveItem(PrintItemWrapper printItemWrapper); + public abstract void RemoveItem(int itemIndexToRemove); public abstract void SaveToLibrary(PrintItemWrapper printItemWrapper, List meshGroupsToSave, List providerSavePath = null); diff --git a/Library/Provider/LibraryProviderFileSystem.cs b/Library/Provider/LibraryProviderFileSystem.cs index c51eb4bf1..67de5ce7e 100644 --- a/Library/Provider/LibraryProviderFileSystem.cs +++ b/Library/Provider/LibraryProviderFileSystem.cs @@ -184,14 +184,14 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider return new PrintItemWrapper(new DataStorage.PrintItem(Path.GetFileNameWithoutExtension(fileName), fileName), this); } - public override LibraryProvider GetProviderForItem(PrintItemCollection collection) + public override LibraryProvider GetProviderForCollection(PrintItemCollection collection) { return new LibraryProviderFileSystem(Path.Combine(rootPath, collection.Key), collection.Name, this); } - public override void RemoveCollection(PrintItemCollection collectionToRemove) + public override void RemoveCollection(int collectionIndexToRemove) { - string directoryPath = collectionToRemove.Key; + string directoryPath = Path.Combine(rootPath, currentDirectoryDirectories[collectionIndexToRemove]); if (Directory.Exists(directoryPath)) { Stopwatch time = Stopwatch.StartNew(); @@ -206,9 +206,10 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider } } - public override void RemoveItem(PrintItemWrapper printItemWrapper) + public override void RemoveItem(int itemToRemoveIndex) { - File.Delete(printItemWrapper.PrintItem.FileLocation); + string filePath = currentDirectoryFiles[itemToRemoveIndex]; + File.Delete(filePath); GetFilesAndCollectionsInCurrentDirectory(); } diff --git a/Library/Provider/LibraryProviderSelector.cs b/Library/Provider/LibraryProviderSelector.cs index 9423f108b..adc2e8c7b 100644 --- a/Library/Provider/LibraryProviderSelector.cs +++ b/Library/Provider/LibraryProviderSelector.cs @@ -219,7 +219,7 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider throw new NotImplementedException("Print items are not allowed at the root level"); } - public override LibraryProvider GetProviderForItem(PrintItemCollection collection) + public override LibraryProvider GetProviderForCollection(PrintItemCollection collection) { foreach (LibraryProvider libraryProvider in visibleProviders) { @@ -232,12 +232,12 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider throw new NotImplementedException(); } - public override void RemoveCollection(PrintItemCollection collectionToRemove) + public override void RemoveCollection(int collectionIndexToRemove) { throw new NotImplementedException(); } - public override void RemoveItem(PrintItemWrapper printItemWrapper) + public override void RemoveItem(int itemToRemoveIndex) { throw new NotImplementedException(); } @@ -248,10 +248,5 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider } #endregion Overriden Abstract Methods - - public static LibraryProvider GetProviderForItem(PrintItemWrapper printItemWrapper) - { - throw new NotImplementedException(); - } } } \ No newline at end of file diff --git a/Library/Provider/LibraryProviderSqlite.cs b/Library/Provider/LibraryProviderSqlite.cs index cc64bab15..426c23d1c 100644 --- a/Library/Provider/LibraryProviderSqlite.cs +++ b/Library/Provider/LibraryProviderSqlite.cs @@ -308,7 +308,7 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider return null; } - public override LibraryProvider GetProviderForItem(PrintItemCollection collection) + public override LibraryProvider GetProviderForCollection(PrintItemCollection collection) { return new LibraryProviderSQLite(collection, this); } @@ -337,26 +337,26 @@ namespace MatterHackers.MatterControl.PrintLibrary.Provider LibraryProvider.OnDataReloaded(null); } - public override void RemoveCollection(PrintItemCollection collectionToRemove) + public override void RemoveCollection(int collectionIndexToRemove) { - collectionToRemove.Delete(); + childCollections[collectionIndexToRemove].Delete(); LoadLibraryItems(); LibraryProvider.OnDataReloaded(null); } - public override void RemoveItem(PrintItemWrapper printItemWrapper) + public override void RemoveItem(int itemToRemoveIndex) { - int index = printItems.IndexOf(printItemWrapper); - if (index < 0) + if (itemToRemoveIndex < 0) { // It may be possible to have the same item in the remove list twice. // so if it is not in the PrintItems then ignore it. return; } - printItems.RemoveAt(index); - + // and remove it from the data base - printItemWrapper.Delete(); + printItems[itemToRemoveIndex].Delete(); + + printItems.RemoveAt(itemToRemoveIndex); LibraryProvider.OnDataReloaded(null); } diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 4a42be377..951aeb9a3 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -3391,3 +3391,9 @@ Translated:3D English:Update Status Translated:Update Status +English:The folder you are trying to delete '{0}' is not empty. Would you like to delete it anyway? +Translated:The folder you are trying to delete '{0}' is not empty. Would you like to delete it anyway? + +English:Folder not Empty +Translated:Folder not Empty + diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index a97d772d0..fbe86d831 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit a97d772d07d9c8df67a47c3e368e743199c6d835 +Subproject commit fbe86d83160e7e8eac9f25dae2928f0006d7bc5a diff --git a/Tests/MatterControl.Tests/MatterControl/LibraryProviderTests.cs b/Tests/MatterControl.Tests/MatterControl/LibraryProviderTests.cs index 2bb9ec9ef..1c807fd36 100644 --- a/Tests/MatterControl.Tests/MatterControl/LibraryProviderTests.cs +++ b/Tests/MatterControl.Tests/MatterControl/LibraryProviderTests.cs @@ -81,7 +81,7 @@ namespace MatterControl.Tests PrintItemWrapper itemAtRoot = testProvider.GetPrintItemWrapperAsync(0).Result; // add an item works correctly - LibraryProvider subProvider = testProvider.GetProviderForItem(testProvider.GetCollectionItem(0)); + LibraryProvider subProvider = testProvider.GetProviderForCollection(testProvider.GetCollectionItem(0)); dataReloaded = false; //itemAdded = false; string subPathAndFile = Path.Combine(createdDirectory, meshFileName); @@ -103,14 +103,14 @@ namespace MatterControl.Tests // remove item works dataReloaded = false; Assert.IsTrue(dataReloaded == false); - subProvider.RemoveItem(subProvider.GetPrintItemWrapperAsync(0).Result); + subProvider.RemoveItem(0); Assert.IsTrue(dataReloaded == true); Assert.IsTrue(!File.Exists(subPathAndFile)); // remove collection gets rid of it dataReloaded = false; Assert.IsTrue(dataReloaded == false); - testProvider.RemoveCollection(testProvider.GetCollectionItem(0)); + testProvider.RemoveCollection(0); Assert.IsTrue(dataReloaded == true); Assert.IsTrue(testProvider.CollectionCount == 0); Assert.IsTrue(!Directory.Exists(createdDirectory)); @@ -155,14 +155,14 @@ namespace MatterControl.Tests // remove item works dataReloaded = false; Assert.IsTrue(dataReloaded == false); - testProvider.RemoveItem(testProvider.GetPrintItemWrapperAsync(1).Result); + testProvider.RemoveItem(1); Assert.IsTrue(dataReloaded == true); Assert.IsTrue(!NamedItemExists(fileNameWithExtension)); // remove collection gets rid of it dataReloaded = false; Assert.IsTrue(dataReloaded == false); - testProvider.RemoveCollection(testProvider.GetCollectionItem(0)); + testProvider.RemoveCollection(0); Assert.IsTrue(dataReloaded == true); Assert.IsTrue(testProvider.CollectionCount == 0); Assert.IsTrue(!NamedCollectionExists(collectionName)); // assert that the record does not exist in the DB diff --git a/config.ini b/config.ini deleted file mode 100644 index 15c44c3eb..000000000 --- a/config.ini +++ /dev/null @@ -1,93 +0,0 @@ -# generated by Slic3r 0.9.3 on Mon Nov 5 11:30:36 2012 -acceleration = 0 -bed_size = 200,200 -bed_temperature = 0 -bridge_fan_speed = 100 -bridge_flow_ratio = 1 -bridge_speed = 60 -brim_width = 0 -complete_objects = 0 -cooling = 0 -disable_fan_first_layers = 1 -duplicate = 1 -duplicate_distance = 6 -duplicate_grid = 1,1 -end_gcode = M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors -external_perimeter_speed = 100% -extra_perimeters = 1 -extruder_clearance_height = 20 -extruder_clearance_radius = 20 -extruder_offset = 0x0 -extrusion_axis = E -extrusion_multiplier = 1 -extrusion_width = 0 -fan_always_on = 0 -fan_below_layer_time = 60 -filament_diameter = 3 -fill_angle = 45 -fill_density = 0.4 -fill_pattern = rectilinear -first_layer_bed_temperature = 0 -first_layer_extrusion_width = 200% -first_layer_height = 100% -first_layer_speed = 30% -first_layer_temperature = 200 -g0 = 0 -gcode_arcs = 0 -gcode_comments = 0 -gcode_flavor = reprap -infill_acceleration = 50 -infill_every_layers = 1 -infill_extruder = 1 -infill_extrusion_width = 0 -infill_speed = 60 -layer_gcode = -layer_height = 0.4 -max_fan_speed = 100 -min_fan_speed = 35 -min_print_speed = 10 -notes = -nozzle_diameter = 0.5 -only_retract_when_crossing_perimeters = 0 -output_filename_format = [input_filename_base].gcode -perimeter_acceleration = 25 -perimeter_extruder = 1 -perimeter_extrusion_width = 0 -perimeter_speed = 30 -perimeters = 3 -post_process = -print_center = 100,100 -randomize_start = 1 -retract_before_travel = 2 -retract_length = 1 -retract_length_toolchange = 3 -retract_lift = 0 -retract_restart_extra = 0 -retract_restart_extra_toolchange = 0 -retract_speed = 30 -rotate = 0 -scale = 1 -skirt_distance = 6 -skirt_height = 1 -skirts = 1 -slowdown_below_layer_time = 15 -small_perimeter_speed = 30 -solid_fill_pattern = rectilinear -solid_infill_below_area = 70 -solid_infill_every_layers = 0 -solid_infill_speed = 60 -solid_layers = 3 -start_gcode = G28 ; home all axes -support_material = 0 -support_material_angle = 0 -support_material_extruder = 1 -support_material_extrusion_width = 0 -support_material_pattern = rectilinear -support_material_spacing = 2.5 -support_material_threshold = 45 -temperature = 200 -threads = 2 -top_solid_infill_speed = 50 -travel_speed = 130 -use_relative_e_distances = 0 -z_offset = 0