private FlowLayoutWidget createPrinterNameContainer() { FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom); container.Margin = new BorderDouble(0, 5); BorderDouble elementMargin = new BorderDouble(top: 3); string printerNameLabelTxt = LocalizedString.Get("Printer Name"); string printerNameLabelTxtFull = string.Format ("{0}:", printerNameLabelTxt); TextWidget printerNameLabel = new TextWidget(printerNameLabelTxtFull, 0, 0, 12); printerNameLabel.TextColor = this.defaultTextColor; printerNameLabel.HAnchor = HAnchor.ParentLeftRight; printerNameLabel.Margin = new BorderDouble(0, 0, 0, 1); printerNameInput = new MHTextEditWidget(this.ActivePrinter.Name); printerNameInput.HAnchor = HAnchor.ParentLeftRight; printerNameError = new TextWidget(LocalizedString.Get("Give your printer a name."), 0, 0, 10); printerNameError.TextColor = ActiveTheme.Instance.PrimaryTextColor; printerNameError.HAnchor = HAnchor.ParentLeftRight; printerNameError.Margin = elementMargin; container.AddChild(printerNameLabel); container.AddChild(printerNameInput); container.AddChild(printerNameError); container.HAnchor = HAnchor.ParentLeftRight; return container; }
public GuiWidget GetBaudRateWidget() { FlowLayoutWidget baudRateContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); baudRateContainer.Margin = new BorderDouble(0); List <string> baudRates = new List <string> { "115200", "250000" }; BorderDouble baudRateMargin = new BorderDouble(3, 3, 5, 3); foreach (string baudRate in baudRates) { BaudRateRadioButton baudOption = new BaudRateRadioButton(baudRate); BaudRateButtonsList.Add(baudOption); baudOption.Margin = baudRateMargin; baudOption.HAnchor = HAnchor.ParentLeft; baudOption.TextColor = this.subContainerTextColor; if (this.ActivePrinter.BaudRate == baudRate) { baudOption.Checked = true; } baudRateContainer.AddChild(baudOption); } otherBaudRateRadioButton = new RadioButton(LocalizedString.Get("Other")); otherBaudRateRadioButton.Margin = baudRateMargin; otherBaudRateRadioButton.TextColor = this.subContainerTextColor; baudRateContainer.AddChild(otherBaudRateRadioButton); //See if the baud rate of the current print is in the list of displayed rates, //flag the 'other' option if it is not and prefill the rate. otherBaudRateInput = new MHTextEditWidget(""); otherBaudRateInput.Visible = false; otherBaudRateInput.HAnchor |= HAnchor.ParentLeftRight; if (this.ActivePrinter.BaudRate != null) { if (!baudRates.Contains(this.ActivePrinter.BaudRate.ToString())) { otherBaudRateRadioButton.Checked = true; otherBaudRateInput.Text = this.ActivePrinter.BaudRate.ToString(); otherBaudRateInput.Visible = true; } } baudRateContainer.AddChild(otherBaudRateInput); return(baudRateContainer); }
public override void Initialize(int tabIndex) { textEditWidget = new MHTextEditWidget("", pixelWidth: ControlWidth, tabIndex: tabIndex) { ToolTipText = this.HelpText, SelectAllOnFocus = true, Name = this.Name, }; textEditWidget.ActualTextEditWidget.EditComplete += (s, e) => { if (this.Value != textEditWidget.Text) { this.SetValue( textEditWidget.Text, userInitiated: true); } }; this.Content = textEditWidget; }
FlowLayoutWidget GetTopRow() { FlowLayoutWidget metaContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); metaContainer.HAnchor = HAnchor.ParentLeftRight; metaContainer.Padding = new BorderDouble(0, 3); FlowLayoutWidget firstRow = new FlowLayoutWidget(); firstRow.HAnchor = HAnchor.ParentLeftRight; TextWidget labelText = new TextWidget("Edit Preset:".FormatWith(windowController.filterLabel.Localize()), pointSize: 14); labelText.TextColor = ActiveTheme.Instance.PrimaryTextColor; labelText.VAnchor = VAnchor.ParentCenter; labelText.Margin = new BorderDouble(right: 4); presetNameInput = new MHTextEditWidget(windowController.ActivePresetLayer.settingsCollectionData.Name); presetNameInput.HAnchor = HAnchor.ParentLeftRight; firstRow.AddChild(labelText); firstRow.AddChild(presetNameInput); presetNameError = new TextWidget("This is an error message", 0, 0, 10); presetNameError.TextColor = RGBA_Bytes.Red; presetNameError.HAnchor = HAnchor.ParentLeftRight; presetNameError.Margin = new BorderDouble(top: 3); presetNameError.Visible = false; FlowLayoutWidget secondRow = new FlowLayoutWidget(); secondRow.HAnchor = HAnchor.ParentLeftRight; secondRow.AddChild(new GuiWidget(labelText.Width + 4, 1)); secondRow.AddChild(presetNameError); metaContainer.AddChild(firstRow); metaContainer.AddChild(secondRow); return(metaContainer); }
public void CreateFolderStarsOutWithTextFiledFocusedAndEditable() { // Run a copy of MatterControl Action <AutomationTesterHarness> testToRun = (AutomationTesterHarness resultsHarness) => { AutomationRunner testRunner = new AutomationRunner(MatterControlUITests.DefaultTestImages); // Now do the actions specific to this test. (replace this for new tests) { testRunner.ClickByName("Library Tab"); testRunner.ClickByName("Create Folder Button"); testRunner.Wait(.5); testRunner.Type("Test Text"); testRunner.Wait(.5); SystemWindow containingWindow; GuiWidget textInputWidget = testRunner.GetWidgetByName("Create Folder - Text Input", out containingWindow); MHTextEditWidget textWidgetMH = textInputWidget as MHTextEditWidget; resultsHarness.AddTestResult(textWidgetMH != null, "Found Text Widget"); resultsHarness.AddTestResult(textWidgetMH.Text == "Test Text", "Had the right text"); containingWindow.CloseOnIdle(); testRunner.Wait(.5); CloseMatterControl(testRunner); } }; #if !__ANDROID__ // Set the static data to point to the directory of MatterControl StaticData.Instance = new MatterHackers.Agg.FileSystemStaticData(Path.Combine("..", "..", "..", "..", "StaticData")); #endif bool showWindow; MatterControlApplication matterControlWindow = MatterControlApplication.CreateInstance(out showWindow); AutomationTesterHarness testHarness = AutomationTesterHarness.ShowWindowAndExectueTests(matterControlWindow, testToRun, 10); Assert.IsTrue(testHarness.AllTestsPassed); Assert.IsTrue(testHarness.TestCount == 2); // make sure we ran all our tests }
public void CreateFolderStarsOutWithTextFiledFocusedAndEditable() { // Run a copy of MatterControl Action <AutomationTesterHarness> testToRun = (AutomationTesterHarness resultsHarness) => { AutomationRunner testRunner = new AutomationRunner(MatterControlUtilities.DefaultTestImages); // Now do the actions specific to this test. (replace this for new tests) { MatterControlUtilities.PrepForTestRun(testRunner); testRunner.ClickByName("Library Tab"); MatterControlUtilities.NavigateToFolder(testRunner, "Local Library Row Item Collection"); testRunner.ClickByName("Create Folder From Library Button"); testRunner.Wait(.5); testRunner.Type("Test Text"); testRunner.Wait(.5); SystemWindow containingWindow; GuiWidget textInputWidget = testRunner.GetWidgetByName("Create Folder - Text Input", out containingWindow); MHTextEditWidget textWidgetMH = textInputWidget as MHTextEditWidget; resultsHarness.AddTestResult(textWidgetMH != null, "Found Text Widget"); resultsHarness.AddTestResult(textWidgetMH.Text == "Test Text", "Had the right text"); containingWindow.CloseOnIdle(); testRunner.Wait(.5); MatterControlUtilities.CloseMatterControl(testRunner); } }; AutomationTesterHarness testHarness = MatterControlUtilities.RunTest(testToRun); Assert.IsTrue(testHarness.AllTestsPassed); Assert.IsTrue(testHarness.TestCount == 2); // make sure we ran all our tests }
public SearchInputBox(ThemeConfig theme, string emptyText = null) { this.VAnchor = VAnchor.Center | VAnchor.Fit; this.HAnchor = HAnchor.Stretch; searchInput = new MHTextEditWidget("", theme, messageWhenEmptyAndNotSelected: emptyText ?? "Search".Localize()) { Name = "Search Library Edit", HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Center }; this.AddChild(searchInput); var resetButton = theme.CreateSmallResetButton(); resetButton.HAnchor |= HAnchor.Right; resetButton.VAnchor |= VAnchor.Center; resetButton.Name = "Close Search"; resetButton.ToolTipText = "Clear".Localize(); this.AddChild(resetButton); this.ResetButton = resetButton; }
private GuiWidget CreateSettingInfoUIControls(OrganizerSettingsData settingData, double minSettingNameWidth) { FlowLayoutWidget leftToRightLayout = new FlowLayoutWidget(); if (ActiveSliceSettings.Instance.Contains(settingData.SlicerConfigName)) { int intEditWidth = 60; int doubleEditWidth = 60; int vectorXYEditWidth = 60; int multiLineEditHeight = 60; string sliceSettingValue = ActiveSliceSettings.Instance.GetActiveValue(settingData.SlicerConfigName); leftToRightLayout.Margin = new BorderDouble(0, 5); leftToRightLayout.HAnchor |= Agg.UI.HAnchor.Max_FitToChildren_ParentWidth; if (settingData.DataEditType != OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT) { string convertedNewLines = settingData.PresentationName.Replace("\\n ", "\n"); convertedNewLines = convertedNewLines.Replace("\\n", "\n"); convertedNewLines = new LocalizedString(convertedNewLines).Translated; TextWidget settingName = new TextWidget(convertedNewLines); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.Width = minSettingNameWidth; //settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); leftToRightLayout.AddChild(settingName); } switch (settingData.DataEditType) { case OrganizerSettingsData.DataEditTypes.INT: { int currentValue = 0; int.TryParse(sliceSettingValue, out currentValue); MHNumberEdit intEditWidget = new MHNumberEdit(currentValue, pixelWidth: intEditWidth, tabIndex: tabIndexForItem++); intEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(intEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowNegatives: true, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.POSITVE_DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.OFFSET: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, allowNegatives: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE_OR_PERCENT: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 60, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { TextEditWidget textEditWidget = (TextEditWidget)sender; string text = textEditWidget.Text; text = text.Trim(); bool isPercent = text.Contains("%"); if (isPercent) { text = text.Substring(0, text.IndexOf("%")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isPercent) { text += "%"; } textEditWidget.Text = text; SaveSetting(settingData.SlicerConfigName, textEditWidget.Text); }; leftToRightLayout.AddChild(stringEdit); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.CHECK_BOX: { CheckBox checkBoxWidget = new CheckBox(""); checkBoxWidget.VAnchor = Agg.UI.VAnchor.ParentBottom; checkBoxWidget.TextColor = ActiveTheme.Instance.PrimaryTextColor; checkBoxWidget.Checked = (sliceSettingValue == "1"); checkBoxWidget.CheckedStateChanged += (sender, e) => { if (((CheckBox)sender).Checked) { SaveSetting(settingData.SlicerConfigName, "1"); } else { SaveSetting(settingData.SlicerConfigName, "0"); } }; leftToRightLayout.AddChild(checkBoxWidget); } break; case OrganizerSettingsData.DataEditTypes.STRING: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 120, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text); }; leftToRightLayout.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT: { string convertedNewLines = sliceSettingValue.Replace("\\n", "\n"); MHTextEditWidget stringEdit = new MHTextEditWidget(convertedNewLines, pixelWidth: 320, pixelHeight: multiLineEditHeight, multiLine: true, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text.Replace("\n", "\\n")); }; leftToRightLayout.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.LIST: { StyledDropDownList selectableOptions = new StyledDropDownList("None", Direction.Up); selectableOptions.Margin = new BorderDouble(); string[] listItems = settingData.ExtraSettings.Split(','); foreach (string listItem in listItems) { MenuItem newItem = selectableOptions.AddItem(listItem); if (newItem.Text == sliceSettingValue) { selectableOptions.SelectedValue = sliceSettingValue; } newItem.Selected += (sender, e) => { MenuItem menuItem = ((MenuItem)sender); SaveSetting(settingData.SlicerConfigName, menuItem.Text); }; } leftToRightLayout.AddChild(selectableOptions); } break; case OrganizerSettingsData.DataEditTypes.VECTOR2: { string[] xyValueStrings = sliceSettingValue.Split(','); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(xText); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(yText); } } break; case OrganizerSettingsData.DataEditTypes.OFFSET2: { string[] xyValueStrings = sliceSettingValue.Split('x'); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(xText); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(yText); } } break; default: TextWidget missingSetting = new TextWidget(String.Format("Missing the setting for '{0}'.", settingData.DataEditType.ToString())); missingSetting.TextColor = ActiveTheme.Instance.PrimaryTextColor; missingSetting.BackgroundColor = RGBA_Bytes.Red; leftToRightLayout.AddChild(missingSetting); break; } } else // the setting we think we are adding is not in the config.ini it may have been depricated { TextWidget settingName = new TextWidget(String.Format("Setting '{0}' not found in config.ini", settingData.SlicerConfigName)); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); leftToRightLayout.AddChild(settingName); leftToRightLayout.BackgroundColor = RGBA_Bytes.Red; } return(leftToRightLayout); }
public CloneSettingsPage() { this.WindowTitle = "Import Printer".Localize(); this.HeaderText = "Import Printer".Localize() + ":"; this.Name = "Import Printer Window"; var commonMargin = new BorderDouble(4, 2); contentRow.AddChild(new TextWidget("File Path".Localize(), pointSize: theme.DefaultFontSize, textColor: theme.TextColor)); var pathRow = new FlowLayoutWidget() { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Fit, }; contentRow.AddChild(pathRow); TextButton importButton = null; var textEditWidget = new MHTextEditWidget("", theme) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Center, Name = "Profile Path Widget" }; textEditWidget.ActualTextEditWidget.EditComplete += (s, e) => { importButton.Enabled = !string.IsNullOrEmpty(textEditWidget.Text) && File.Exists(textEditWidget.Text); }; pathRow.AddChild(textEditWidget); // Must come before pathButton.Click definition RadioButton copyAndCalibrateOption = null; var openButton = new IconButton(StaticData.Instance.LoadIcon("fa-folder-open_16.png", 16, 16, theme.InvertIcons), theme) { BackgroundColor = theme.MinimalShade, Margin = new BorderDouble(left: 8), Name = "Open File Button" }; openButton.Click += (s, e) => { AggContext.FileDialogs.OpenFileDialog( new OpenFileDialogParams("settings files|*.ini;*.printer;*.slice;*.fff"), (result) => { if (!string.IsNullOrEmpty(result.FileName) && File.Exists(result.FileName)) { textEditWidget.Text = result.FileName; } importButton.Enabled = !string.IsNullOrEmpty(textEditWidget.Text) && File.Exists(textEditWidget.Text); }); }; pathRow.AddChild(openButton); var exactCloneColumn = new FlowLayoutWidget(FlowDirection.TopToBottom) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Fit, Margin = new BorderDouble(top: 15) }; contentRow.AddChild(exactCloneColumn); var siblingList = new List <GuiWidget>(); var exactCloneOption = new RadioButton(new RadioButtonViewText("Exact clone".Localize(), theme.TextColor, fontSize: theme.DefaultFontSize)) { HAnchor = HAnchor.Left, Margin = commonMargin, Cursor = Cursors.Hand, Name = "Exact Clone Button", Checked = true, SiblingRadioButtonList = siblingList }; exactCloneColumn.AddChild(exactCloneOption); siblingList.Add(exactCloneOption); var exactCloneSummary = new WrappedTextWidget("Copy all settings including hardware calibration".Localize(), pointSize: theme.DefaultFontSize - 1, textColor: theme.TextColor) { Margin = new BorderDouble(left: 30, bottom: 10, top: 4), }; exactCloneColumn.AddChild(exactCloneSummary); var copySettingsColumn = new FlowLayoutWidget(FlowDirection.TopToBottom) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Fit }; contentRow.AddChild(copySettingsColumn); // Create export button for each plugin copyAndCalibrateOption = new RadioButton(new RadioButtonViewText("Copy and recalibrate".Localize(), theme.TextColor, fontSize: theme.DefaultFontSize)) { HAnchor = HAnchor.Left, Margin = commonMargin, Cursor = Cursors.Hand, Name = "Copy and Calibrate Button", SiblingRadioButtonList = siblingList }; copySettingsColumn.AddChild(copyAndCalibrateOption); siblingList.Add(copyAndCalibrateOption); string summary = string.Format( "{0}\r\n{1}", "Copy everything but hardware specific calibration settings".Localize(), "Ideal for cloning settings across different physical printers".Localize()); var copySummary = new WrappedTextWidget(summary, pointSize: theme.DefaultFontSize - 1, textColor: theme.TextColor) { Margin = new BorderDouble(left: 30, bottom: 10, top: 4) }; copySettingsColumn.AddChild(copySummary); importButton = theme.CreateDialogButton("Import".Localize()); importButton.Enabled = false; importButton.Name = "Import Button"; importButton.Click += (s, e) => { var filePath = textEditWidget.Text; if (ProfileManager.ImportFromExisting(filePath, copyAndCalibrateOption.Checked, out string importedName)) { string importPrinterSuccessMessage = "You have successfully imported a new printer profile. You can find '{0}' in your list of available printers.".Localize(); this.DialogWindow.ChangeToPage( new ImportSucceededPage( importPrinterSuccessMessage.FormatWith(importedName))); } else { StyledMessageBox.ShowMessageBox( string.Format( "Oops! Settings file '{0}' did not contain any settings we could import.".Localize(), Path.GetFileName(filePath)), "Unable to Import".Localize()); } }; this.AddPageAction(importButton); }
public UIFieldTestWindow(int width, int height, UIField field, ThemeConfig theme) : base(width, height) { this.BackgroundColor = new Color(56, 56, 56); GuiWidget column, row; double pixelWidth = 70; // Store this.field = field; // Initialize the field and store the generated content reference field.Initialize(0); GuiWidget widgetUnderTest = field.Content; row = new FlowLayoutWidget { VAnchor = VAnchor.Center | VAnchor.Fit, HAnchor = HAnchor.Center | HAnchor.Fit }; this.AddChild(row); column = new FlowLayoutWidget(FlowDirection.TopToBottom) { Margin = new BorderDouble(0, 10), }; row.AddChild(column); column.AddChild(new TextWidget("Input:", textColor: Color.White) { Margin = new BorderDouble(right: 10, bottom: 2), }); this.InputText = new MHTextEditWidget("", theme, pixelWidth: pixelWidth) { Margin = new BorderDouble(right: 8) }; column.AddChild(InputText); column = new FlowLayoutWidget(FlowDirection.TopToBottom) { Margin = new BorderDouble(0, 10), }; row.AddChild(column); column.AddChild(new TextWidget("Expected:", textColor: Color.White) { Margin = new BorderDouble(right: 10, bottom: 2) }); this.ExpectedText = new MHTextEditWidget("", theme, pixelWidth: pixelWidth) { Margin = new BorderDouble(right: 8) }; column.AddChild(ExpectedText); column = new FlowLayoutWidget(FlowDirection.TopToBottom) { Margin = new BorderDouble(0, 10), }; row.AddChild(column); column.AddChild(new TextWidget("Actual:", textColor: Color.White) { Margin = new BorderDouble(right: 10, bottom: 2) }); column.AddChild(widgetUnderTest); }
private FlowLayoutWidget GetTopRow() { var topRow = new FlowLayoutWidget(hAnchor: HAnchor.ParentLeftRight) { Padding = new BorderDouble(0, 3) }; // Add label topRow.AddChild(new TextWidget("Preset Name:".Localize(), pointSize: 14) { TextColor = ActiveTheme.Instance.PrimaryTextColor, VAnchor = VAnchor.ParentCenter, Margin = new BorderDouble(right: 4) }); // Add textbox initialPresetName = presetsContext.PersistenceLayer.Name; presetNameInput = new MHTextEditWidget(initialPresetName) { HAnchor = HAnchor.ParentLeftRight }; presetNameInput.ActualTextEditWidget.EditComplete += (s, e) => { ActiveSliceSettings.Instance.SetValue(SettingsKey.layer_name, presetNameInput.Text, presetsContext.PersistenceLayer); SliceSettingsWidget.SettingChanged.CallEvents(null, new StringEventArgs(SettingsKey.layer_name)); }; topRow.AddChild(presetNameInput); // Return container return topRow; }
private FlowLayoutWidget GetTopRow() { FlowLayoutWidget metaContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); metaContainer.HAnchor = HAnchor.ParentLeftRight; metaContainer.Padding = new BorderDouble(0, 3); FlowLayoutWidget firstRow = new FlowLayoutWidget(); firstRow.HAnchor = HAnchor.ParentLeftRight; TextWidget labelText = new TextWidget("Edit Preset:".FormatWith(windowController.filterLabel.Localize()), pointSize: 14); labelText.TextColor = ActiveTheme.Instance.PrimaryTextColor; labelText.VAnchor = VAnchor.ParentCenter; labelText.Margin = new BorderDouble(right: 4); presetNameInput = new MHTextEditWidget(windowController.ActivePresetLayer.settingsCollectionData.Name); presetNameInput.HAnchor = HAnchor.ParentLeftRight; firstRow.AddChild(labelText); firstRow.AddChild(presetNameInput); presetNameError = new TextWidget("This is an error message", 0, 0, 10); presetNameError.TextColor = RGBA_Bytes.Red; presetNameError.HAnchor = HAnchor.ParentLeftRight; presetNameError.Margin = new BorderDouble(top: 3); presetNameError.Visible = false; FlowLayoutWidget secondRow = new FlowLayoutWidget(); secondRow.HAnchor = HAnchor.ParentLeftRight; secondRow.AddChild(new GuiWidget(labelText.Width + 4, 1)); secondRow.AddChild(presetNameError); metaContainer.AddChild(firstRow); metaContainer.AddChild(secondRow); return metaContainer; }
private FlowLayoutWidget createPrinterMakeContainer() { FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom); container.Margin = new BorderDouble(0, 5); BorderDouble elementMargin = new BorderDouble(top: 3); TextWidget printerManufacturerLabel = new TextWidget(new LocalizedString("Printer Make").Translated, 0, 0, 10); printerManufacturerLabel.TextColor = this.defaultTextColor; printerManufacturerLabel.HAnchor = HAnchor.ParentLeftRight; printerManufacturerLabel.Margin = elementMargin; string printerMake = ""; if (this.ActivePrinter.Make != null) { printerMake = this.ActivePrinter.Make; } printerMakeInput = new MHTextEditWidget(printerMake); printerMakeInput.HAnchor |= HAnchor.ParentLeftRight; printerMakeInput.Margin = elementMargin; container.AddChild(printerManufacturerLabel); container.AddChild(printerMakeInput); container.HAnchor = HAnchor.ParentLeftRight; return container; }
public GuiWidget GetBaudRateWidget() { FlowLayoutWidget baudRateContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); baudRateContainer.Margin = new BorderDouble(0); List<string> baudRates = new List<string> { "115200", "250000" }; BorderDouble baudRateMargin = new BorderDouble(3, 3, 5, 0); foreach (string baudRate in baudRates) { BaudRateRadioButton baudOption = new BaudRateRadioButton(baudRate); BaudRateButtonsList.Add(baudOption); baudOption.Margin = baudRateMargin; baudOption.TextColor = ActiveTheme.Instance.PrimaryTextColor; if (this.ActivePrinter.BaudRate == baudRate) { baudOption.Checked = true; } baudRateContainer.AddChild(baudOption); } otherBaudRateRadioButton = new RadioButton(LocalizedString.Get("Other")); otherBaudRateRadioButton.Margin = baudRateMargin; otherBaudRateRadioButton.TextColor = ActiveTheme.Instance.PrimaryTextColor; baudRateContainer.AddChild(otherBaudRateRadioButton); //See if the baud rate of the current print is in the list of displayed rates, //flag the 'other' option if it is not and prefill the rate. otherBaudRateInput = new MHTextEditWidget(""); otherBaudRateInput.Visible = false; otherBaudRateInput.HAnchor = HAnchor.ParentLeftRight; if (this.ActivePrinter.BaudRate != null) { if (!baudRates.Contains(this.ActivePrinter.BaudRate.ToString())) { otherBaudRateRadioButton.Checked = true; otherBaudRateInput.Text = this.ActivePrinter.BaudRate.ToString(); otherBaudRateInput.Visible = true; } } baudRateContainer.AddChild(otherBaudRateInput); return baudRateContainer; }
public PrintLibraryWidget() { SetDisplayAttributes(); textImageButtonFactory.borderWidth = 0; searchButtonFactory.normalTextColor = RGBA_Bytes.White; searchButtonFactory.hoverTextColor = RGBA_Bytes.White; searchButtonFactory.disabledTextColor = RGBA_Bytes.White; searchButtonFactory.pressedTextColor = RGBA_Bytes.White; searchButtonFactory.borderWidth = 0; searchButtonFactory.FixedWidth = 80; FlowLayoutWidget allControls = new FlowLayoutWidget(FlowDirection.TopToBottom); { FlowLayoutWidget searchPanel = new FlowLayoutWidget(); searchPanel.BackgroundColor = ActiveTheme.Instance.TransparentDarkOverlay; searchPanel.HAnchor = HAnchor.ParentLeftRight; searchPanel.Padding = new BorderDouble(0); { searchInput = new MHTextEditWidget(); searchInput.Margin = new BorderDouble(6, 3, 0, 0); searchInput.HAnchor = HAnchor.ParentLeftRight; searchInput.VAnchor = VAnchor.ParentCenter; searchButton = searchButtonFactory.Generate(LocalizedString.Get("Search"),centerText:true); searchPanel.AddChild(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); addToQueueButton = textImageButtonFactory.Generate("Add to Queue"); addToQueueButton.Margin = new BorderDouble(3, 0); addToQueueButton.Click += new ButtonBase.ButtonEventHandler(addToQueueButton_Click); addToQueueButton.Visible = false; buttonPanel.AddChild(addToQueueButton); deleteFromLibraryButton = textImageButtonFactory.Generate("Remove"); deleteFromLibraryButton.Margin = new BorderDouble(3, 0); deleteFromLibraryButton.Click += new ButtonBase.ButtonEventHandler(deleteFromQueueButton_Click); deleteFromLibraryButton.Visible = false; buttonPanel.AddChild(deleteFromLibraryButton); GuiWidget spacer = new GuiWidget(); spacer.HAnchor = HAnchor.ParentLeftRight; buttonPanel.AddChild(spacer); } allControls.AddChild(searchPanel); libraryDataView = new LibraryDataView(); allControls.AddChild(libraryDataView); allControls.AddChild(buttonPanel); } allControls.AnchorAll(); this.AddChild(allControls); AddHandlers(); }
public EditConnectionWidget(ConnectionWindow windowController, GuiWidget containerWindowToClose, Printer activePrinter = null, object state = null) : base(windowController, containerWindowToClose) { textImageButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.disabledTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.borderWidth = 0; linkButtonFactory.textColor = ActiveTheme.Instance.PrimaryTextColor; linkButtonFactory.fontSize = 8; this.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; this.AnchorAll(); this.Padding = new BorderDouble(0); //To be re-enabled once native borders are turned off GuiWidget mainContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainer.AnchorAll(); mainContainer.Padding = new BorderDouble(3, 0, 3, 5); mainContainer.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; string headerTitle; if (activePrinter == null) { headerTitle = string.Format("Add a Printer"); this.addNewPrinterFlag = true; this.ActivePrinter = new Printer(); this.ActivePrinter.Name = "Default Printer"; this.ActivePrinter.BaudRate = "250000"; try { this.ActivePrinter.ComPort = FrostedSerialPort.GetPortNames()[0]; } catch { //No active COM ports } } else { this.ActivePrinter = activePrinter; string editHeaderTitleTxt = LocalizedString.Get("Edit"); headerTitle = string.Format("{1} - {0}", this.ActivePrinter.Name, editHeaderTitleTxt); if (this.ActivePrinter.BaudRate == null) { this.ActivePrinter.BaudRate = "250000"; } if (this.ActivePrinter.ComPort == null) { try { this.ActivePrinter.ComPort = FrostedSerialPort.GetPortNames()[0]; } catch { //No active COM ports } } } FlowLayoutWidget headerRow = new FlowLayoutWidget(FlowDirection.LeftToRight); headerRow.Margin = new BorderDouble(0, 3, 0, 0); headerRow.Padding = new BorderDouble(0, 3, 0, 3); headerRow.HAnchor = HAnchor.ParentLeftRight; { TextWidget headerLabel = new TextWidget(headerTitle, pointSize:14); headerLabel.TextColor = this.defaultTextColor; headerRow.AddChild(headerLabel); } ConnectionControlContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); ConnectionControlContainer.Padding = new BorderDouble(5); ConnectionControlContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; ConnectionControlContainer.HAnchor = HAnchor.ParentLeftRight; { TextWidget printerNameLabel = new TextWidget(LocalizedString.Get("Printer Name"), 0, 0, 10); printerNameLabel.TextColor = this.defaultTextColor; printerNameLabel.HAnchor = HAnchor.ParentLeftRight; printerNameLabel.Margin = new BorderDouble(0, 0, 0, 1); printerNameInput = new MHTextEditWidget(this.ActivePrinter.Name); printerNameInput.HAnchor |= HAnchor.ParentLeftRight; comPortLabelWidget = new FlowLayoutWidget(); Button refreshComPorts = linkButtonFactory.Generate(LocalizedString.Get("(refresh)")); refreshComPorts.Margin = new BorderDouble(left: 5); refreshComPorts.VAnchor = VAnchor.ParentBottom; refreshComPorts.Click += new ButtonBase.ButtonEventHandler(RefreshComPorts); TextWidget comPortLabel = new TextWidget(LocalizedString.Get("Serial Port"), 0, 0, 10); comPortLabel.TextColor = this.defaultTextColor; comPortLabelWidget.AddChild(comPortLabel); comPortLabelWidget.AddChild(refreshComPorts); comPortLabelWidget.Margin = new BorderDouble(0, 0, 0, 10); comPortLabelWidget.HAnchor = HAnchor.ParentLeftRight; FlowLayoutWidget comPortContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); comPortContainer.Margin = new BorderDouble(0); comPortContainer.HAnchor = HAnchor.ParentLeftRight; int portIndex = 0; foreach (string serialPort in FrostedSerialPort.GetPortNames()) { //Filter com port list based on usb type (applies to Mac mostly) bool looks_like_mac = serialPort.StartsWith("/dev/tty."); bool looks_like_pc = serialPort.StartsWith("COM"); if (looks_like_mac || looks_like_pc) { SerialPortIndexRadioButton comPortOption = createComPortOption(serialPort); comPortContainer.AddChild(comPortOption); portIndex++; } } //If there are no com ports in the filtered list assume we are missing something and show the unfiltered list if (portIndex == 0) { foreach (string serialPort in FrostedSerialPort.GetPortNames()) { SerialPortIndexRadioButton comPortOption = createComPortOption(serialPort); comPortContainer.AddChild(comPortOption); portIndex++; } } if (!printerComPortIsAvailable && this.ActivePrinter.ComPort != null) { SerialPortIndexRadioButton comPortOption = createComPortOption(this.ActivePrinter.ComPort); comPortOption.Enabled = false; comPortContainer.AddChild(comPortOption); portIndex++; } //If there are still no com ports show a message to that effect if (portIndex == 0) { TextWidget comPortOption = new TextWidget(LocalizedString.Get("No COM ports available")); comPortOption.Margin = new BorderDouble(3, 6, 5, 6); comPortOption.TextColor = this.subContainerTextColor; comPortContainer.AddChild(comPortOption); } TextWidget baudRateLabel = new TextWidget(LocalizedString.Get("Baud Rate"), 0, 0, 10); baudRateLabel.TextColor = this.defaultTextColor; baudRateLabel.Margin = new BorderDouble(0, 0, 0, 10); baudRateLabel.HAnchor = HAnchor.ParentLeftRight; baudRateWidget = GetBaudRateWidget(); baudRateWidget.HAnchor = HAnchor.ParentLeftRight; FlowLayoutWidget printerMakeContainer = createPrinterMakeContainer(); FlowLayoutWidget printerModelContainer = createPrinterModelContainer(); enableAutoconnect = new CheckBox(LocalizedString.Get("Auto Connect")); enableAutoconnect.TextColor = ActiveTheme.Instance.PrimaryTextColor; enableAutoconnect.Margin = new BorderDouble(top: 10); enableAutoconnect.HAnchor = HAnchor.ParentLeft; if (this.ActivePrinter.AutoConnectFlag) { enableAutoconnect.Checked = true; } if (state as StateBeforeRefresh != null) { enableAutoconnect.Checked = ((StateBeforeRefresh)state).autoConnect; } ConnectionControlContainer.VAnchor = VAnchor.ParentBottomTop; ConnectionControlContainer.AddChild(printerNameLabel); ConnectionControlContainer.AddChild(printerNameInput); ConnectionControlContainer.AddChild(printerMakeContainer); ConnectionControlContainer.AddChild(printerModelContainer); ConnectionControlContainer.AddChild(comPortLabelWidget); ConnectionControlContainer.AddChild(comPortContainer); ConnectionControlContainer.AddChild(baudRateLabel); ConnectionControlContainer.AddChild(baudRateWidget); ConnectionControlContainer.AddChild(enableAutoconnect); } FlowLayoutWidget buttonContainer = new FlowLayoutWidget(FlowDirection.LeftToRight); buttonContainer.HAnchor = HAnchor.ParentLeft | HAnchor.ParentRight; //buttonContainer.VAnchor = VAnchor.BottomTop; buttonContainer.Margin = new BorderDouble(0, 3); { //Construct buttons saveButton = textImageButtonFactory.Generate(LocalizedString.Get("Save")); //saveButton.VAnchor = VAnchor.Bottom; cancelButton = textImageButtonFactory.Generate(LocalizedString.Get("Cancel")); //cancelButton.VAnchor = VAnchor.Bottom; cancelButton.Click += new ButtonBase.ButtonEventHandler(CancelButton_Click); //Add buttons to buttonContainer buttonContainer.AddChild(saveButton); buttonContainer.AddChild(cancelButton); } //mainContainer.AddChild(new PrinterChooser()); mainContainer.AddChild(headerRow); mainContainer.AddChild(ConnectionControlContainer); mainContainer.AddChild(buttonContainer); this.AddChild(mainContainer); BindSaveButtonHandlers(); BindBaudRateHandlers(); }
public GuiWidget Create(IObject3D item, ThemeConfig theme) { var column = new FlowLayoutWidget(FlowDirection.TopToBottom) { HAnchor = HAnchor.MaxFitOrStretch }; var imageObject = item as ImageObject3D; var activeImage = imageObject.Image; var imageSection = new SectionWidget( "Image".Localize(), new FlowLayoutWidget(FlowDirection.TopToBottom), theme); theme.ApplyBoxStyle(imageSection, margin: 0); column.AddChild(imageSection); ImageBuffer thumbnailImage = SetImage(theme, imageObject); ImageWidget thumbnailWidget; imageSection.ContentPanel.AddChild(thumbnailWidget = new ImageWidget(thumbnailImage) { Margin = new BorderDouble(bottom: 5), HAnchor = HAnchor.Center }); bool addImageSearch = true; if (addImageSearch) { // add a search Google box var searchRow = new FlowLayoutWidget() { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Fit, }; imageSection.ContentPanel.AddChild(searchRow); MHTextEditWidget textToAddWidget = new MHTextEditWidget("", pixelWidth: 300, messageWhenEmptyAndNotSelected: "Search Google".Localize()); textToAddWidget.HAnchor = HAnchor.Stretch; searchRow.AddChild(textToAddWidget); textToAddWidget.ActualTextEditWidget.EnterPressed += (object sender, KeyEventArgs keyEvent) => { UiThread.RunOnIdle(() => { textToAddWidget.Unfocus(); string search = "http://www.google.com/search?q={0} silhouette&tbm=isch".FormatWith(textToAddWidget.Text); ApplicationController.Instance.LaunchBrowser(search); }); }; } // add in the invert checkbox and change image button var changeButton = new TextButton("Change".Localize(), theme) { BackgroundColor = theme.MinimalShade }; changeButton.Click += (sender, e) => { UiThread.RunOnIdle(() => { // we do this using to make sure that the stream is closed before we try and insert the Picture AggContext.FileDialogs.OpenFileDialog( new OpenFileDialogParams( "Select an image file|*.jpg;*.png;*.bmp;*.gif;*.pdf", multiSelect: false, title: "Add Image".Localize()), (openParams) => { if (!File.Exists(openParams.FileName)) { return; } imageObject.AssetPath = openParams.FileName; imageObject.Mesh = null; thumbnailWidget.Image = SetImage(theme, imageObject); column.Invalidate(); imageObject.Invalidate(new InvalidateArgs(imageObject, InvalidateType.Image)); }); }); }; var row = new FlowLayoutWidget() { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Fit, }; imageSection.ContentPanel.AddChild(row); // Invert checkbox var invertCheckbox = new CheckBox(new CheckBoxViewText("Invert".Localize(), textColor: theme.Colors.PrimaryTextColor)) { Checked = imageObject.Invert, Margin = new BorderDouble(0), }; invertCheckbox.CheckedStateChanged += (s, e) => { imageObject.Invert = invertCheckbox.Checked; }; row.AddChild(invertCheckbox); row.AddChild(new HorizontalSpacer()); row.AddChild(changeButton); imageObject.Invalidated += (s, e) => { if (e.InvalidateType == InvalidateType.Image && activeImage != imageObject.Image) { thumbnailImage = SetImage(theme, imageObject); thumbnailWidget.Image = thumbnailImage; activeImage = imageObject.Image; } }; return(column); }
public PrintLibraryWidget() { SetDisplayAttributes(); textImageButtonFactory.borderWidth = 0; searchButtonFactory.normalTextColor = RGBA_Bytes.White; searchButtonFactory.hoverTextColor = RGBA_Bytes.White; searchButtonFactory.disabledTextColor = RGBA_Bytes.White; searchButtonFactory.pressedTextColor = RGBA_Bytes.White; searchButtonFactory.borderWidth = 0; searchButtonFactory.FixedWidth = 80 * TextWidget.GlobalPointSizeScaleRatio; editButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor; editButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor; editButtonFactory.disabledTextColor = ActiveTheme.Instance.PrimaryTextColor; editButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor; editButtonFactory.borderWidth = 0; editButtonFactory.FixedWidth = 70 * TextWidget.GlobalPointSizeScaleRatio; FlowLayoutWidget allControls = new FlowLayoutWidget(FlowDirection.TopToBottom); { enterEditModeButton = editButtonFactory.Generate("Edit".Localize(), centerText: true); leaveEditModeButton = editButtonFactory.Generate("Done".Localize(), centerText: true); leaveEditModeButton.Visible = false; FlowLayoutWidget searchPanel = new FlowLayoutWidget(); searchPanel.BackgroundColor = ActiveTheme.Instance.TransparentDarkOverlay; searchPanel.HAnchor = HAnchor.ParentLeftRight; searchPanel.Padding = new BorderDouble(0); { searchInput = new MHTextEditWidget(messageWhenEmptyAndNotSelected: "Search Library".Localize()); searchInput.Margin = new BorderDouble(0, 3, 0, 0); searchInput.HAnchor = HAnchor.ParentLeftRight; searchInput.VAnchor = VAnchor.ParentCenter; searchButton = searchButtonFactory.Generate(LocalizedString.Get("Search"), centerText: true); searchPanel.AddChild(enterEditModeButton); searchPanel.AddChild(leaveEditModeButton); searchPanel.AddChild(searchInput); searchPanel.AddChild(searchButton); } FlowLayoutWidget navigationPanel = new FlowLayoutWidget(); navigationPanel.HAnchor = HAnchor.ParentLeftRight; navigationPanel.Padding = new BorderDouble(0); navigationPanel.BackgroundColor = ActiveTheme.Instance.TransparentLightOverlay; navigationLabel = new TextWidget("My Library".Localize(), pointSize: 14); navigationLabel.VAnchor = Agg.UI.VAnchor.ParentCenter; navigationLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor; navigationPanel.AddChild(new GuiWidget(50, 0)); //Add this as temporary balance to edit buttons navigationPanel.AddChild(new HorizontalSpacer()); navigationPanel.AddChild(navigationLabel); navigationPanel.AddChild(new HorizontalSpacer()); //navigationPanel.AddChild(enterEditModeButton); //navigationPanel.AddChild(leaveEditModeButton); FlowLayoutWidget buttonPanel = new FlowLayoutWidget(); buttonPanel.HAnchor = HAnchor.ParentLeftRight; buttonPanel.Padding = new BorderDouble(0, 3); buttonPanel.MinimumSize = new Vector2(0, 46); { addToLibraryButton = textImageButtonFactory.Generate(LocalizedString.Get("Import"), "icon_import_white_32x32.png"); buttonPanel.AddChild(addToLibraryButton); addToLibraryButton.Margin = new BorderDouble(0, 0, 3, 0); addToLibraryButton.Click += new EventHandler(importToLibraryloadFile_Click); addToQueueButton = textImageButtonFactory.Generate("Add to Queue".Localize()); addToQueueButton.Margin = new BorderDouble(3, 0); addToQueueButton.Click += new EventHandler(addToQueueButton_Click); addToQueueButton.Visible = false; buttonPanel.AddChild(addToQueueButton); exportItemButton = textImageButtonFactory.Generate("Export".Localize()); exportItemButton.Margin = new BorderDouble(3, 0); exportItemButton.Click += new EventHandler(exportButton_Click); exportItemButton.Visible = false; buttonPanel.AddChild(exportItemButton); editItemButton = textImageButtonFactory.Generate("Edit".Localize()); editItemButton.Margin = new BorderDouble(3, 0); editItemButton.Click += new EventHandler(editButton_Click); editItemButton.Visible = false; buttonPanel.AddChild(editItemButton); removeFromLibraryButton = textImageButtonFactory.Generate("Remove".Localize()); removeFromLibraryButton.Margin = new BorderDouble(3, 0); removeFromLibraryButton.Click += new EventHandler(deleteFromQueueButton_Click); removeFromLibraryButton.Visible = false; buttonPanel.AddChild(removeFromLibraryButton); GuiWidget spacer = new GuiWidget(); spacer.HAnchor = HAnchor.ParentLeftRight; buttonPanel.AddChild(spacer); } //allControls.AddChild(navigationPanel); allControls.AddChild(searchPanel); libraryDataView = new LibraryDataView(); allControls.AddChild(libraryDataView); allControls.AddChild(buttonPanel); } allControls.AnchorAll(); this.AddChild(allControls); AddHandlers(); }
public FormField(MHTextEditWidget textEditWidget, TextWidget errorMessageWidget, ValidationHandler[] validationHandlers) { this.FieldEditWidget = textEditWidget; this.FieldErrorMessageWidget = errorMessageWidget; this.FieldValidationHandlers = validationHandlers; }
private void DoLayout() { FlowLayoutWidget mainContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainer.AnchorAll(); FlowLayoutWidget labelContainer = new FlowLayoutWidget(); labelContainer.HAnchor = HAnchor.ParentLeftRight; TextWidget formLabel = new TextWidget("After a Print is Finished:".Localize(), pointSize: 16); formLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor; formLabel.VAnchor = VAnchor.ParentCenter; formLabel.Margin = new BorderDouble(10, 0,10, 12); labelContainer.AddChild(formLabel); mainContainer.AddChild(labelContainer); centerContainer = new GuiWidget(); centerContainer.AnchorAll(); centerContainer.Padding = new BorderDouble(10); messageContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); messageContainer.AnchorAll(); messageContainer.Visible = false; messageContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; messageContainer.Padding = new BorderDouble(10); submissionStatus = new TextWidget("Saving your settings...".Localize(), pointSize: 13); submissionStatus.AutoExpandBoundsToText = true; submissionStatus.Margin = new BorderDouble(0, 5); submissionStatus.TextColor = ActiveTheme.Instance.PrimaryTextColor; submissionStatus.HAnchor = HAnchor.ParentLeft; messageContainer.AddChild(submissionStatus); formContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); formContainer.AnchorAll(); formContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; formContainer.Padding = new BorderDouble(10); { FlowLayoutWidget smsLabelContainer = new FlowLayoutWidget(FlowDirection.LeftToRight); smsLabelContainer.Margin = new BorderDouble(0, 2, 0, 4); smsLabelContainer.HAnchor |= Agg.UI.HAnchor.ParentLeft; //Add sms notification option notifySendTextCheckbox = new CheckBox("Send an SMS notification".Localize()); notifySendTextCheckbox.Margin = new BorderDouble(0); notifySendTextCheckbox.VAnchor = Agg.UI.VAnchor.ParentBottom; notifySendTextCheckbox.TextColor = ActiveTheme.Instance.PrimaryTextColor; notifySendTextCheckbox.Cursor = Cursors.Hand; notifySendTextCheckbox.Checked = (UserSettings.Instance.get("AfterPrintFinishedSendTextMessage") == "true"); notifySendTextCheckbox.CheckedStateChanged += new CheckBox.CheckedStateChangedEventHandler(OnSendTextChanged); TextWidget experimentalLabel = new TextWidget("Experimental".Localize(), pointSize: 10); experimentalLabel.TextColor = ActiveTheme.Instance.SecondaryAccentColor; experimentalLabel.VAnchor = Agg.UI.VAnchor.ParentBottom; experimentalLabel.Margin = new BorderDouble(left:10); smsLabelContainer.AddChild(notifySendTextCheckbox); smsLabelContainer.AddChild(experimentalLabel); formContainer.AddChild(smsLabelContainer); formContainer.AddChild(LabelGenerator("Have MatterControl send you a text message after your print is finished".Localize(), 9, 14)); phoneNumberContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); phoneNumberContainer.HAnchor = Agg.UI.HAnchor.ParentLeftRight; phoneNumberLabel = LabelGenerator("Your Phone Number*".Localize()); phoneNumberHelperLabel = LabelGenerator("A U.S. or Canadian mobile phone number".Localize(), 9, 14); phoneNumberContainer.AddChild(phoneNumberLabel); phoneNumberContainer.AddChild(phoneNumberHelperLabel); phoneNumberInput = new MHTextEditWidget(); phoneNumberInput.HAnchor = HAnchor.ParentLeftRight; string phoneNumber = UserSettings.Instance.get("NotificationPhoneNumber"); if (phoneNumber != null) { phoneNumberInput.Text = phoneNumber; } phoneNumberContainer.AddChild(phoneNumberInput); phoneNumberErrorMessage = ErrorMessageGenerator(); phoneNumberContainer.AddChild(phoneNumberErrorMessage); formContainer.AddChild(phoneNumberContainer); } { //Add email notification option notifySendEmailCheckbox = new CheckBox("Send an email notification".Localize()); notifySendEmailCheckbox.Margin = new BorderDouble(0, 2, 0, 16); notifySendEmailCheckbox.HAnchor = Agg.UI.HAnchor.ParentLeft; notifySendEmailCheckbox.TextColor = ActiveTheme.Instance.PrimaryTextColor; notifySendEmailCheckbox.Cursor = Cursors.Hand; notifySendEmailCheckbox.Checked = (UserSettings.Instance.get("AfterPrintFinishedSendEmail") == "true"); notifySendEmailCheckbox.CheckedStateChanged += new CheckBox.CheckedStateChangedEventHandler(OnSendEmailChanged); formContainer.AddChild(notifySendEmailCheckbox); formContainer.AddChild(LabelGenerator("Have MatterControl send you an email message after your print is finished".Localize(), 9, 14)); emailAddressContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); emailAddressContainer.HAnchor = Agg.UI.HAnchor.ParentLeftRight; emailAddressLabel = LabelGenerator("Your Email Address*".Localize()); emailAddressHelperLabel = LabelGenerator("A valid email address".Localize(), 9, 14); emailAddressContainer.AddChild(emailAddressLabel); emailAddressContainer.AddChild(emailAddressHelperLabel); emailAddressInput = new MHTextEditWidget(); emailAddressInput.HAnchor = HAnchor.ParentLeftRight; string emailAddress = UserSettings.Instance.get("NotificationEmailAddress"); if (emailAddress != null) { emailAddressInput.Text = emailAddress; } emailAddressContainer.AddChild(emailAddressInput); emailAddressErrorMessage = ErrorMessageGenerator(); emailAddressContainer.AddChild(emailAddressErrorMessage); formContainer.AddChild(emailAddressContainer); } notifyPlaySoundCheckbox = new CheckBox("Play a Sound".Localize()); notifyPlaySoundCheckbox.Margin = new BorderDouble(0, 2, 0, 16); notifyPlaySoundCheckbox.HAnchor = Agg.UI.HAnchor.ParentLeft; notifyPlaySoundCheckbox.TextColor = ActiveTheme.Instance.PrimaryTextColor; notifyPlaySoundCheckbox.Checked = (UserSettings.Instance.get("AfterPrintFinishedPlaySound") == "true"); notifyPlaySoundCheckbox.Cursor = Cursors.Hand; formContainer.AddChild(notifyPlaySoundCheckbox); formContainer.AddChild(LabelGenerator("Play a sound after your print is finished".Localize(), 9, 14)); centerContainer.AddChild(formContainer); mainContainer.AddChild(centerContainer); FlowLayoutWidget buttonBottomPanel = GetButtonButtonPanel(); buttonBottomPanel.AddChild(saveButton); buttonBottomPanel.AddChild(cancelButton); buttonBottomPanel.AddChild(doneButton); mainContainer.AddChild(buttonBottomPanel); this.AddChild(mainContainer); SetVisibleStates(); }
public View3DTextCreator(Vector3 viewerVolume, Vector2 bedCenter, MeshViewerWidget.BedShape bedShape) { boldTypeFace = TypeFace.LoadFrom(StaticData.Instance.ReadAllText(Path.Combine("Fonts", "LiberationSans-Bold.svg"))); MeshGroupExtraData = new List <PlatingMeshGroupData>(); FlowLayoutWidget mainContainerTopToBottom = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainerTopToBottom.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth; mainContainerTopToBottom.VAnchor = Agg.UI.VAnchor.Max_FitToChildren_ParentHeight; FlowLayoutWidget centerPartPreviewAndControls = new FlowLayoutWidget(FlowDirection.LeftToRight); centerPartPreviewAndControls.AnchorAll(); GuiWidget viewArea = new GuiWidget(); viewArea.AnchorAll(); { meshViewerWidget = new MeshViewerWidget(viewerVolume, bedCenter, bedShape); meshViewerWidget.AllowBedRenderingWhenEmpty = true; meshViewerWidget.AnchorAll(); } viewArea.AddChild(meshViewerWidget); centerPartPreviewAndControls.AddChild(viewArea); mainContainerTopToBottom.AddChild(centerPartPreviewAndControls); FlowLayoutWidget buttonBottomPanel = new FlowLayoutWidget(FlowDirection.LeftToRight); buttonBottomPanel.HAnchor = HAnchor.ParentLeftRight; buttonBottomPanel.Padding = new BorderDouble(3, 3); buttonBottomPanel.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; buttonRightPanel = CreateRightButtonPanel(viewerVolume.y); // add in the plater tools { FlowLayoutWidget editToolBar = new FlowLayoutWidget(); processingProgressControl = new ProgressControl("Finding Parts:".Localize(), ActiveTheme.Instance.PrimaryTextColor, ActiveTheme.Instance.PrimaryAccentColor); processingProgressControl.VAnchor = Agg.UI.VAnchor.ParentCenter; editToolBar.AddChild(processingProgressControl); editToolBar.VAnchor |= Agg.UI.VAnchor.ParentCenter; editPlateButtonsContainer = new FlowLayoutWidget(); textToAddWidget = new MHTextEditWidget("", pixelWidth: 300, messageWhenEmptyAndNotSelected: "Enter Text Here".Localize()); textToAddWidget.VAnchor = VAnchor.ParentCenter; textToAddWidget.Margin = new BorderDouble(5); editPlateButtonsContainer.AddChild(textToAddWidget); textToAddWidget.ActualTextEditWidget.EnterPressed += (object sender, KeyEventArgs keyEvent) => { InsertTextNow(textToAddWidget.Text); }; Button insertTextButton = textImageButtonFactory.Generate("Insert".Localize()); editPlateButtonsContainer.AddChild(insertTextButton); insertTextButton.Click += (sender, e) => { InsertTextNow(textToAddWidget.Text); }; KeyDown += (sender, e) => { KeyEventArgs keyEvent = e as KeyEventArgs; if (keyEvent != null && !keyEvent.Handled) { if (keyEvent.KeyCode == Keys.Escape) { if (meshSelectInfo.downOnPart) { meshSelectInfo.downOnPart = false; ScaleRotateTranslate translated = SelectedMeshTransform; translated.translation *= transformOnMouseDown; SelectedMeshTransform = translated; Invalidate(); } } } }; editToolBar.AddChild(editPlateButtonsContainer); buttonBottomPanel.AddChild(editToolBar); } GuiWidget buttonRightPanelHolder = new GuiWidget(HAnchor.FitToChildren, VAnchor.ParentBottomTop); centerPartPreviewAndControls.AddChild(buttonRightPanelHolder); buttonRightPanelHolder.AddChild(buttonRightPanel); viewControls3D = new ViewControls3D(meshViewerWidget); viewControls3D.ResetView += (sender, e) => { SetDefaultView(); }; buttonRightPanelDisabledCover = new Cover(HAnchor.ParentLeftRight, VAnchor.ParentBottomTop); buttonRightPanelDisabledCover.BackgroundColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryBackgroundColor, 150); buttonRightPanelHolder.AddChild(buttonRightPanelDisabledCover); LockEditControls(); GuiWidget leftRightSpacer = new GuiWidget(); leftRightSpacer.HAnchor = HAnchor.ParentLeftRight; buttonBottomPanel.AddChild(leftRightSpacer); closeButton = textImageButtonFactory.Generate("Close".Localize()); buttonBottomPanel.AddChild(closeButton); mainContainerTopToBottom.AddChild(buttonBottomPanel); this.AddChild(mainContainerTopToBottom); this.AnchorAll(); meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation; AddChild(viewControls3D); SetDefaultView(); AddHandlers(); UnlockEditControls(); // but make sure we can't use the right panel yet buttonRightPanelDisabledCover.Visible = true; }
public SurfacedEditorPage(IObject3D selectedItem) { this.WindowTitle = "MatterControl - " + "Editor Selector".Localize(); this.HeaderText = "Surfaced Editor".Localize(); var tabControl = new SimpleTabs(theme, new GuiWidget()) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Stretch, }; tabControl.TabBar.BackgroundColor = theme.TabBarBackground; tabControl.TabBar.Padding = 0; contentRow.AddChild(tabControl); contentRow.Padding = 0; var editContainer = new FlowLayoutWidget(FlowDirection.TopToBottom) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Stretch, Padding = theme.DefaultContainerPadding, BackgroundColor = theme.ActiveTabColor }; editWidget = new MHTextEditWidget("", multiLine: true) { HAnchor = HAnchor.Stretch, Name = this.Name }; editWidget.DrawFromHintedCache(); editContainer.AddChild(editWidget); // add the tree view var treeView = new TreeView(theme) { Margin = new BorderDouble(left: 18), }; treeView.AfterSelect += (s, e) => { if (treeView.SelectedNode.Tag is IObject3D contextNode) { editWidget.Text = "$." + string.Join(".", contextNode.AncestorsAndSelf().TakeWhile(o => !(o is ComponentObject3D)).Select(o => $"Children<{o.GetType().Name.ToString()}>").Reverse().ToArray()); } }; treeView.ScrollArea.ChildAdded += (s, e) => { if (e is GuiWidgetEventArgs childEventArgs && childEventArgs.Child is TreeNode treeNode) { treeNode.AlwaysExpandable = true; } }; treeView.Click += (s, e) => { if (treeView.IsDoubleClick(e)) { Console.WriteLine(); } }; treeView.ScrollArea.CloseAllChildren(); var rootNode = Object3DTreeBuilder.BuildTree(selectedItem, theme); treeView.AddChild(rootNode); rootNode.TreeView = treeView; editContainer.AddChild(treeView); var dummyWidget = new GuiWidget() { BackgroundColor = Color.Red }; var editTab = new ToolTab("Edit".Localize(), tabControl, editContainer, theme, hasClose: false) { Name = "Edit Tab" }; tabControl.AddTab(editTab); var previewTab = new ToolTab("Preview".Localize(), tabControl, dummyWidget, theme, hasClose: false) { Name = "Preview Tab" }; tabControl.AddTab(previewTab); tabControl.ActiveTabChanged += (s, e) => { if (tabControl.SelectedTabIndex == 1) { // dummyWidget.Markdown = editWidget.Text; } }; tabControl.SelectedTabIndex = 0; var saveButton = theme.CreateDialogButton("Save".Localize()); saveButton.Click += (s, e) => { this.ValueChanged?.Invoke(this, null); this.DialogWindow.CloseOnIdle(); }; this.AddPageAction(saveButton); }
private GuiWidget CreateSettingInfoUIControls(OrganizerSettingsData settingData, double minSettingNameWidth, int extruderIndex) { GuiWidget container = new GuiWidget(); this.HAnchor = HAnchor.ParentLeftRight; string sliceSettingValue = ActiveSliceSettings.Instance.GetActiveValue(settingData.SlicerConfigName); var settingsRow = new SettingsRow() { SettingsKey = settingData.SlicerConfigName, SettingsValue = sliceSettingValue }; if (!ActiveSliceSettings.Instance.InBaseConfig(settingData.SlicerConfigName)) { // the setting we think we are adding is not in the config.ini it may have been deprecated TextWidget settingName = new TextWidget(String.Format("Setting '{0}' not found in config.ini", settingData.SlicerConfigName)); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); settingsRow.AddChild(settingName); settingsRow.BackgroundColor = RGBA_Bytes.Red; } else { int intEditWidth = (int)(60 * TextWidget.GlobalPointSizeScaleRatio + .5); int doubleEditWidth = (int)(60 * TextWidget.GlobalPointSizeScaleRatio + .5); if (settingData.QuickMenuSettings.Count > 0) { doubleEditWidth = (int)(35 * TextWidget.GlobalPointSizeScaleRatio + .5); } int vectorXYEditWidth = (int)(60 * TextWidget.GlobalPointSizeScaleRatio + .5); int multiLineEditHeight = (int)(60 * TextWidget.GlobalPointSizeScaleRatio + .5); if (settingData.DataEditType != OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT) { var nameHolder = new GuiWidget(HAnchor.AbsolutePosition, VAnchor.FitToChildren | VAnchor.ParentCenter) { Width = minSettingNameWidth, Padding = new BorderDouble(0, 0, 5, 0), }; nameHolder.AddChild(new WrappedTextWidget( settingData.PresentationName.Localize(), minSettingNameWidth, pointSize: 10, textColor: ActiveTheme.Instance.PrimaryTextColor)); settingsRow.AddChild(nameHolder); } switch (settingData.DataEditType) { case OrganizerSettingsData.DataEditTypes.INT: { int currentValue; int.TryParse(sliceSettingValue, out currentValue); var intEditWidget = new MHNumberEdit(currentValue, pixelWidth: intEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; intEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; settingsRow.AddChild(intEditWidget); settingsRow.AddChild(GetExtraSettingsWidget(settingData)); settingsRow.ValueChanged = (text) => intEditWidget.Text = text; } break; case OrganizerSettingsData.DataEditTypes.DOUBLE: { double currentValue; double.TryParse(sliceSettingValue, out currentValue); var doubleEditWidget = new MHNumberEdit(currentValue, allowNegatives: true, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; settingsRow.AddChild(doubleEditWidget); settingsRow.AddChild(GetExtraSettingsWidget(settingData)); settingsRow.ValueChanged = (text) => { double currentValue2 = 0; double.TryParse(text, out currentValue2); doubleEditWidget.ActuallNumberEdit.Value = currentValue2; }; } break; case OrganizerSettingsData.DataEditTypes.POSITIVE_DOUBLE: { const string multiValuesAreDiffernt = "-"; FlowLayoutWidget content = new FlowLayoutWidget(); var doubleEditWidget = new MHNumberEdit(0, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, Name = settingData.PresentationName + " Textbox", SelectAllOnFocus = true }; double currentValue; bool ChangesMultipleOtherSettings = settingData.SetSettingsOnChange.Count > 0; if (ChangesMultipleOtherSettings) { bool allTheSame = true; string setting = ActiveSliceSettings.Instance.GetActiveValue(settingData.SetSettingsOnChange[0]); for (int i = 1; i < settingData.SetSettingsOnChange.Count; i++) { string nextSetting = ActiveSliceSettings.Instance.GetActiveValue(settingData.SetSettingsOnChange[i]); if (setting != nextSetting) { allTheSame = false; break; } } if (allTheSame && setting.EndsWith("mm")) { double.TryParse(setting.Substring(0, setting.Length - 2), out currentValue); doubleEditWidget.ActuallNumberEdit.Value = currentValue; } else { doubleEditWidget.ActuallNumberEdit.InternalNumberEdit.Text = multiValuesAreDiffernt; } } else // just set the setting normally { double.TryParse(sliceSettingValue, out currentValue); doubleEditWidget.ActuallNumberEdit.Value = currentValue; } doubleEditWidget.ActuallNumberEdit.InternalTextEditWidget.MarkAsStartingState(); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { NumberEdit numberEdit = (NumberEdit)sender; // If this setting sets other settings, then do that. if (ChangesMultipleOtherSettings && numberEdit.Text != multiValuesAreDiffernt) { foreach (string setting in settingData.SetSettingsOnChange) { SaveSetting(setting, numberEdit.Value.ToString() + "mm"); } } // also always save to the local setting SaveSetting(settingData.SlicerConfigName, numberEdit.Value.ToString()); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; content.AddChild(doubleEditWidget); content.AddChild(GetExtraSettingsWidget(settingData)); if (settingData.QuickMenuSettings.Count > 0) { settingsRow.AddChild(CreateQuickMenu(settingData, content, doubleEditWidget.ActuallNumberEdit.InternalTextEditWidget)); } else { settingsRow.AddChild(content); } settingsRow.ValueChanged = (text) => { double currentValue2 = 0; double.TryParse(text, out currentValue2); doubleEditWidget.ActuallNumberEdit.Value = currentValue2; }; } break; case OrganizerSettingsData.DataEditTypes.OFFSET: { double currentValue; double.TryParse(sliceSettingValue, out currentValue); var doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, allowNegatives: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; settingsRow.AddChild(doubleEditWidget); settingsRow.AddChild(GetExtraSettingsWidget(settingData)); settingsRow.ValueChanged = (text) => { double currentValue2; double.TryParse(text, out currentValue2); doubleEditWidget.ActuallNumberEdit.Value = currentValue2; }; } break; case OrganizerSettingsData.DataEditTypes.DOUBLE_OR_PERCENT: { FlowLayoutWidget content = new FlowLayoutWidget(); var stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: doubleEditWidth - 2, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { var textEditWidget = (TextEditWidget)sender; string text = textEditWidget.Text.Trim(); bool isPercent = text.Contains("%"); if (isPercent) { text = text.Substring(0, text.IndexOf("%")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isPercent) { text += "%"; } textEditWidget.Text = text; SaveSetting(settingData.SlicerConfigName, textEditWidget.Text); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; stringEdit.ActualTextEditWidget.InternalTextEditWidget.AllSelected += (sender, e) => { // select everything up to the % (if present) InternalTextEditWidget textEditWidget = (InternalTextEditWidget)sender; int percentIndex = textEditWidget.Text.IndexOf("%"); if (percentIndex != -1) { textEditWidget.SetSelection(0, percentIndex - 1); } }; content.AddChild(stringEdit); content.AddChild(GetExtraSettingsWidget(settingData)); if (settingData.QuickMenuSettings.Count > 0) { settingsRow.AddChild(CreateQuickMenu(settingData, content, stringEdit.ActualTextEditWidget.InternalTextEditWidget)); } else { settingsRow.AddChild(content); } settingsRow.ValueChanged = (text) => stringEdit.Text = text; } break; case OrganizerSettingsData.DataEditTypes.INT_OR_MM: { FlowLayoutWidget content = new FlowLayoutWidget(); var stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: doubleEditWidth - 2, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; string startingText = stringEdit.Text; stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { TextEditWidget textEditWidget = (TextEditWidget)sender; // only validate when we lose focus if (!textEditWidget.ContainsFocus) { string text = textEditWidget.Text; text = text.Trim(); bool isMm = text.Contains("mm"); if (isMm) { text = text.Substring(0, text.IndexOf("mm")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isMm) { text += "mm"; } else { result = (int)result; text = result.ToString(); } textEditWidget.Text = text; startingText = stringEdit.Text; } SaveSetting(settingData.SlicerConfigName, textEditWidget.Text); OnSettingsChanged(settingData); // make sure we are still looking for the final validation before saving. if (textEditWidget.ContainsFocus) { UiThread.RunOnIdle(() => { string currentText = textEditWidget.Text; int cursorIndex = textEditWidget.InternalTextEditWidget.CharIndexToInsertBefore; textEditWidget.Text = startingText; textEditWidget.InternalTextEditWidget.MarkAsStartingState(); textEditWidget.Text = currentText; textEditWidget.InternalTextEditWidget.CharIndexToInsertBefore = cursorIndex; }); } }; stringEdit.ActualTextEditWidget.InternalTextEditWidget.AllSelected += (sender, e) => { // select everything up to the mm (if present) InternalTextEditWidget textEditWidget = (InternalTextEditWidget)sender; int mMIndex = textEditWidget.Text.IndexOf("mm"); if (mMIndex != -1) { textEditWidget.SetSelection(0, mMIndex - 1); } }; content.AddChild(stringEdit); content.AddChild(GetExtraSettingsWidget(settingData)); if (settingData.QuickMenuSettings.Count > 0) { settingsRow.AddChild(CreateQuickMenu(settingData, content, stringEdit.ActualTextEditWidget.InternalTextEditWidget)); } else { settingsRow.AddChild(content); } settingsRow.ValueChanged = (text) => stringEdit.Text = text; } break; case OrganizerSettingsData.DataEditTypes.CHECK_BOX: { var checkBoxWidget = new CheckBox("") { Name = settingData.PresentationName + " Checkbox", ToolTipText = settingData.HelpText, VAnchor = Agg.UI.VAnchor.ParentBottom, TextColor = ActiveTheme.Instance.PrimaryTextColor, Checked = sliceSettingValue == "1" }; checkBoxWidget.CheckedStateChanged += (sender, e) => { bool isChecked = ((CheckBox)sender).Checked; SaveSetting(settingData.SlicerConfigName, isChecked ? "1" : "0"); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; settingsRow.AddChild(checkBoxWidget); settingsRow.ValueChanged = (text) => checkBoxWidget.Checked = text == "1"; } break; case OrganizerSettingsData.DataEditTypes.STRING: { var stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 120, tabIndex: tabIndexForItem++); stringEdit.ToolTipText = settingData.HelpText; stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; settingsRow.AddChild(stringEdit); settingsRow.ValueChanged = (text) => stringEdit.Text = text; } break; case OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT: { string convertedNewLines = sliceSettingValue.Replace("\\n", "\n"); var stringEdit = new MHTextEditWidget(convertedNewLines, pixelWidth: 320, pixelHeight: multiLineEditHeight, multiLine: true, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text.Replace("\n", "\\n")); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; settingsRow.AddChild(stringEdit); settingsRow.ValueChanged = (text) => stringEdit.Text = text.Replace("\\n", "\n"); } break; case OrganizerSettingsData.DataEditTypes.LIST: { var selectableOptions = new StyledDropDownList("None", maxHeight: 200) { ToolTipText = settingData.HelpText, Margin = new BorderDouble() }; foreach (string listItem in settingData.ExtraSettings.Split(',')) { MenuItem newItem = selectableOptions.AddItem(listItem); if (newItem.Text == sliceSettingValue) { selectableOptions.SelectedLabel = sliceSettingValue; } newItem.Selected += (sender, e) => { MenuItem menuItem = ((MenuItem)sender); SaveSetting(settingData.SlicerConfigName, menuItem.Text); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; } settingsRow.AddChild(selectableOptions); settingsRow.ValueChanged = (text) => selectableOptions.SelectedLabel = text; } break; case OrganizerSettingsData.DataEditTypes.HARDWARE_PRESENT: { var checkBoxWidget = new CheckBox("") { Name = settingData.PresentationName + " Checkbox", ToolTipText = settingData.HelpText, VAnchor = Agg.UI.VAnchor.ParentBottom, TextColor = ActiveTheme.Instance.PrimaryTextColor, Checked = sliceSettingValue == "1" }; checkBoxWidget.CheckedStateChanged += (sender, e) => { bool isChecked = ((CheckBox)sender).Checked; SaveSetting(settingData.SlicerConfigName, isChecked ? "1" : "0"); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; settingsRow.AddChild(checkBoxWidget); settingsRow.ValueChanged = (text) => checkBoxWidget.Checked = text == "1"; } break; case OrganizerSettingsData.DataEditTypes.VECTOR2: { string[] xyValueStrings = sliceSettingValue.Split(','); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue; double.TryParse(xyValueStrings[0], out currentXValue); var xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, Margin = new BorderDouble(0, 0, 30 * TextWidget.GlobalPointSizeScaleRatio, 0), SelectAllOnFocus = true }; double currentYValue; double.TryParse(xyValueStrings[1], out currentYValue); var yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; settingsRow.AddChild(xEditWidget); yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; settingsRow.AddChild(yEditWidget); settingsRow.ValueChanged = (text) => { double currentValue2; string[] xyValueStrings2 = text.Split(','); if (xyValueStrings2.Length != 2) { xyValueStrings2 = new string[] { "0", "0" }; } double.TryParse(xyValueStrings2[0], out currentValue2); xEditWidget.ActuallNumberEdit.Value = currentValue2; double.TryParse(xyValueStrings2[1], out currentValue2); yEditWidget.ActuallNumberEdit.Value = currentValue2; }; } break; case OrganizerSettingsData.DataEditTypes.OFFSET2: { Vector2 offset = ActiveSliceSettings.Instance.GetOffset(extruderIndex); var xEditWidget = new MHNumberEdit(offset.x, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true, Margin = new BorderDouble(0, 0, 30 * TextWidget.GlobalPointSizeScaleRatio, 0) }; var yEditWidget = new MHNumberEdit(offset.y, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { int extruderIndexLocal = extruderIndex; SaveCommaSeparatedIndexSetting(extruderIndexLocal, settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; settingsRow.AddChild(xEditWidget); yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { int extruderIndexLocal = extruderIndex; SaveCommaSeparatedIndexSetting(extruderIndexLocal, settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; settingsRow.AddChild(yEditWidget); settingsRow.ValueChanged = (text) => { Vector2 offset2 = ActiveSliceSettings.Instance.GetOffset(extruderIndex); xEditWidget.ActuallNumberEdit.Value = offset2.x; yEditWidget.ActuallNumberEdit.Value = offset2.y; }; } break; default: var missingSetting = new TextWidget(String.Format("Missing the setting for '{0}'.", settingData.DataEditType.ToString())) { TextColor = ActiveTheme.Instance.PrimaryTextColor, BackgroundColor = RGBA_Bytes.Red }; settingsRow.AddChild(missingSetting); break; } } container.HAnchor = HAnchor.ParentLeftRight; container.VAnchor = VAnchor.FitToChildren; var restoreButton = new Button(new ButtonViewStates(new ImageWidget(restoreNormal), new ImageWidget(restoreHover), new ImageWidget(restorePressed), new ImageWidget(restoreNormal))) { Name = "Restore " + settingData.SlicerConfigName, VAnchor = VAnchor.ParentCenter, Margin = new BorderDouble(0, 0, 5, 0), ToolTipText = "Restore Default".Localize() }; restoreButton.Click += (sender, e) => { // Revert the user override if (persistenceLayer == null) { ActiveSliceSettings.Instance.ClearValue(settingData.SlicerConfigName); } else { ActiveSliceSettings.Instance.ClearValue(settingData.SlicerConfigName, persistenceLayer); } settingsRow.RefreshValue(); }; settingsRow.AddChild(new GuiWidget(HAnchor.ParentLeftRight)); settingsRow.AddChild(restoreButton); container.AddChild(settingsRow); // Define the UpdateStyle implementation settingsRow.UpdateStyle = () => { if (persistenceLayer.ContainsKey(settingData.SlicerConfigName)) { switch (this.viewFilter) { case NamedSettingsLayers.All: settingsRow.BackgroundColor = userSettingBackgroundColor; break; case NamedSettingsLayers.Material: settingsRow.BackgroundColor = materialSettingBackgroundColor; break; case NamedSettingsLayers.Quality: settingsRow.BackgroundColor = qualitySettingBackgroundColor; break; } restoreButton.Visible = true; } else if (layerFilters == null) { if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, NamedSettingsLayers.Material)) { settingsRow.BackgroundColor = materialSettingBackgroundColor; } else if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, NamedSettingsLayers.Quality)) { settingsRow.BackgroundColor = qualitySettingBackgroundColor; } else { settingsRow.BackgroundColor = RGBA_Bytes.Transparent; } restoreButton.Visible = false; } else { restoreButton.Visible = false; settingsRow.BackgroundColor = RGBA_Bytes.Transparent; } }; // Invoke the UpdateStyle implementation settingsRow.UpdateStyle(); return container; }
public CollectPrintDetailsPage(string windowTitle, PrinterConfig printer, string topMarkDown, string descriptionMarkdown, PrintTask printTask, bool collectQuality) : base("Close".Localize()) { this.WindowTitle = windowTitle; this.HeaderText = printer.Settings.GetValue(SettingsKey.printer_name) + ": " + windowTitle; this.WindowSize = new Vector2(500 * GuiWidget.DeviceScale, 440 * GuiWidget.DeviceScale); var scrollable = new ScrollableWidget(autoScroll: true) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Stretch, Margin = new BorderDouble(bottom: 10), }; scrollable.ScrollArea.HAnchor = HAnchor.Stretch; scrollable.ScrollArea.VAnchor = VAnchor.Fit; contentRow.AddChild(scrollable); var topToBottom = scrollable.AddChild(new FlowLayoutWidget(FlowDirection.TopToBottom) { HAnchor = HAnchor.Stretch }); topToBottom.AddChild(new MarkdownWidget(theme, false) { Markdown = topMarkDown, }); var reasonSection = new FlowLayoutWidget(FlowDirection.TopToBottom) { HAnchor = HAnchor.Stretch, Visible = !collectQuality }; if (collectQuality) { var qualityInput = GetQualityWidget(theme, printTask, () => { reasonSection.Visible = printTask.PrintQuality == 0; this.Descendants<ScrollableWidget>().First().ScrollPositionFromTop = new Vector2(0, 0); }, 16); qualityInput.Margin = new BorderDouble(5, 0); qualityInput.HAnchor = HAnchor.Left; topToBottom.AddChild(qualityInput); } topToBottom.AddChild(reasonSection); // Adds text box and check box to the above container var emptyText = "What went wrong?".Localize(); var initialValue = printTask.Note ?? ""; textEditWidget = new MHTextEditWidget(initialValue, theme, pixelWidth: 300, messageWhenEmptyAndNotSelected: emptyText) { Name = "InputBoxPage TextEditWidget", HAnchor = HAnchor.Stretch, Margin = new BorderDouble(5), }; textEditWidget.ActualTextEditWidget.EditComplete += (s, e) => { printTask.Note = textEditWidget.Text; printTask.CommitAndPushToServer(); }; var dropDownList = CreateDefaultOptions(textEditWidget, theme, () => { // Delay this so we wait for the text to be updated UiThread.RunOnIdle(() => { printTask.Note = textEditWidget.Text; printTask.CommitAndPushToServer(); }); }); dropDownList.Margin = new BorderDouble(5, 0); dropDownList.HAnchor |= HAnchor.Left; reasonSection.AddChild(dropDownList); reasonSection.AddChild(textEditWidget); topToBottom.AddChild(new HorizontalLine(theme.BorderColor40) { Margin = new BorderDouble(0, 5) }); topToBottom.AddChild(new MarkdownWidget(theme, false) { Markdown = descriptionMarkdown, }); var collectHistoryHidden = UserSettings.Instance.get(UserSettingsKey.CollectPrintHistoryData) == "false"; if (!collectHistoryHidden) { UiThread.RunOnIdle(() => { DialogWindow.Show(this, printTask.Id); // this will cause a layout that fixes a display issue scrollable.ScrollArea.BoundsChanged += (s, e) => { scrollable.ScrollPositionFromTop = new Vector2(0, 0); }; scrollable.ScrollPositionFromTop = new Vector2(0, 0); }); } if (printer != null) { var printAgainButton = PrintPopupMenu.CreateStartPrintButton("Print Again", printer, theme, out _); printAgainButton.Click += (s, e) => this.DialogWindow?.ClosePage(); AddPageAction(printAgainButton); } }
private static GuiWidget CreateSettingInfoUIControls(SliceSettingData settingData, List<PrinterSettingsLayer> layerCascade, PrinterSettingsLayer persistenceLayer, NamedSettingsLayers viewFilter, int extruderIndex, out bool addControl, ref int tabIndexForItem) { addControl = true; GuiWidget container = new GuiWidget(); string sliceSettingValue = GetActiveValue(settingData.SlicerConfigName, layerCascade); GuiWidget nameArea = new GuiWidget(HAnchor.ParentLeftRight, VAnchor.FitToChildren | VAnchor.ParentCenter); var dataArea = new FlowLayoutWidget(); GuiWidget unitsArea = new GuiWidget(HAnchor.AbsolutePosition, VAnchor.FitToChildren | VAnchor.ParentCenter) { Width = settingData.ShowAsOverride ? 50 * GuiWidget.DeviceScale : 5, }; GuiWidget restoreArea = new GuiWidget(HAnchor.AbsolutePosition, VAnchor.FitToChildren | VAnchor.ParentCenter) { Width = settingData.ShowAsOverride ? 30 * GuiWidget.DeviceScale : 0, }; var settingsRow = new SettingsRow(layerCascade) { SettingsKey = settingData.SlicerConfigName, SettingsValue = sliceSettingValue, }; settingsRow.AddChild(nameArea); settingsRow.AddChild(dataArea); settingsRow.AddChild(unitsArea); settingsRow.AddChild(restoreArea); settingsRow.Name = settingData.SlicerConfigName + " Edit Field"; if (!PrinterSettings.KnownSettings.Contains(settingData.SlicerConfigName)) { // the setting we think we are adding is not in the known settings it may have been deprecated TextWidget settingName = new TextWidget(String.Format("Setting '{0}' not found in known settings", settingData.SlicerConfigName)); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; //settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); nameArea.AddChild(settingName); nameArea.BackgroundColor = RGBA_Bytes.Red; } else { int intEditWidth = (int)(60 * GuiWidget.DeviceScale + .5); int doubleEditWidth = (int)(60 * GuiWidget.DeviceScale + .5); int vectorXYEditWidth = (int)(60 * GuiWidget.DeviceScale + .5); int multiLineEditHeight = (int)(120 * GuiWidget.DeviceScale + .5); if (settingData.DataEditType != SliceSettingData.DataEditTypes.MULTI_LINE_TEXT) { var nameHolder = new GuiWidget(HAnchor.ParentLeftRight, VAnchor.FitToChildren | VAnchor.ParentCenter) { Padding = new BorderDouble(0, 0, 5, 0), HAnchor = HAnchor.ParentLeftRight, }; nameHolder.AddChild(new WrappedTextWidget(settingData.PresentationName.Localize(), pointSize: 10, textColor: ActiveTheme.Instance.PrimaryTextColor)); nameArea.AddChild(nameHolder); } switch (settingData.DataEditType) { case SliceSettingData.DataEditTypes.INT: { FlowLayoutWidget content = new FlowLayoutWidget(); int currentValue; int.TryParse(sliceSettingValue, out currentValue); var intEditWidget = new MHNumberEdit(currentValue, pixelWidth: intEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true, Name = settingData.PresentationName + " Edit", }; intEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; content.AddChild(intEditWidget); unitsArea.AddChild(GetExtraSettingsWidget(settingData)); if (settingData.QuickMenuSettings.Count > 0) { dataArea.AddChild(CreateQuickMenu(settingData, persistenceLayer, content, intEditWidget.ActuallNumberEdit.InternalTextEditWidget, layerCascade)); } else { dataArea.AddChild(content); } settingsRow.ValueChanged = (text) => { intEditWidget.Text = text; }; } break; case SliceSettingData.DataEditTypes.DOUBLE: { double currentValue; double.TryParse(sliceSettingValue, out currentValue); var doubleEditWidget = new MHNumberEdit(currentValue, allowNegatives: true, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; dataArea.AddChild(doubleEditWidget); unitsArea.AddChild(GetExtraSettingsWidget(settingData)); settingsRow.ValueChanged = (text) => { double currentValue2 = 0; double.TryParse(text, out currentValue2); doubleEditWidget.ActuallNumberEdit.Value = currentValue2; }; } break; case SliceSettingData.DataEditTypes.POSITIVE_DOUBLE: { const string multiValuesAreDiffernt = "-"; FlowLayoutWidget content = new FlowLayoutWidget(); var doubleEditWidget = new MHNumberEdit(0, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, Name = settingData.PresentationName + " Textbox", SelectAllOnFocus = true }; double currentValue; bool ChangesMultipleOtherSettings = settingData.SetSettingsOnChange.Count > 0; if (ChangesMultipleOtherSettings) { bool allTheSame = true; string setting = GetActiveValue(settingData.SetSettingsOnChange[0], layerCascade); for (int i = 1; i < settingData.SetSettingsOnChange.Count; i++) { string nextSetting = GetActiveValue(settingData.SetSettingsOnChange[i], layerCascade); if (setting != nextSetting) { allTheSame = false; break; } } if (allTheSame && setting.EndsWith("mm")) { double.TryParse(setting.Substring(0, setting.Length - 2), out currentValue); doubleEditWidget.ActuallNumberEdit.Value = currentValue; } else { doubleEditWidget.ActuallNumberEdit.InternalNumberEdit.Text = multiValuesAreDiffernt; } } else // just set the setting normally { double.TryParse(sliceSettingValue, out currentValue); doubleEditWidget.ActuallNumberEdit.Value = currentValue; } doubleEditWidget.ActuallNumberEdit.InternalTextEditWidget.MarkAsStartingState(); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { NumberEdit numberEdit = (NumberEdit)sender; // If this setting sets other settings, then do that. if (ChangesMultipleOtherSettings && numberEdit.Text != multiValuesAreDiffernt) { foreach (string setting in settingData.SetSettingsOnChange) { ActiveSliceSettings.Instance.SetValue(setting, numberEdit.Value.ToString() + "mm", persistenceLayer); } } // also always save to the local setting ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, numberEdit.Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; content.AddChild(doubleEditWidget); unitsArea.AddChild(GetExtraSettingsWidget(settingData)); if (settingData.QuickMenuSettings.Count > 0) { dataArea.AddChild(CreateQuickMenu(settingData, persistenceLayer, content, doubleEditWidget.ActuallNumberEdit.InternalTextEditWidget, layerCascade)); } else { dataArea.AddChild(content); } settingsRow.ValueChanged = (text) => { double currentValue2 = 0; double.TryParse(text, out currentValue2); doubleEditWidget.ActuallNumberEdit.Value = currentValue2; }; } break; case SliceSettingData.DataEditTypes.OFFSET: { double currentValue; double.TryParse(sliceSettingValue, out currentValue); var doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, allowNegatives: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; dataArea.AddChild(doubleEditWidget); unitsArea.AddChild(GetExtraSettingsWidget(settingData)); settingsRow.ValueChanged = (text) => { double currentValue2; double.TryParse(text, out currentValue2); doubleEditWidget.ActuallNumberEdit.Value = currentValue2; }; } break; case SliceSettingData.DataEditTypes.DOUBLE_OR_PERCENT: { FlowLayoutWidget content = new FlowLayoutWidget(); var stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: doubleEditWidth - 2, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { var textEditWidget = (TextEditWidget)sender; string text = textEditWidget.Text.Trim(); bool isPercent = text.Contains("%"); if (isPercent) { text = text.Substring(0, text.IndexOf("%")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isPercent) { text += "%"; } textEditWidget.Text = text; ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, textEditWidget.Text, persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; stringEdit.ActualTextEditWidget.InternalTextEditWidget.AllSelected += (sender, e) => { // select everything up to the % (if present) InternalTextEditWidget textEditWidget = (InternalTextEditWidget)sender; int percentIndex = textEditWidget.Text.IndexOf("%"); if (percentIndex != -1) { textEditWidget.SetSelection(0, percentIndex - 1); } }; content.AddChild(stringEdit); unitsArea.AddChild(GetExtraSettingsWidget(settingData)); if (settingData.QuickMenuSettings.Count > 0) { dataArea.AddChild(CreateQuickMenu(settingData, persistenceLayer, content, stringEdit.ActualTextEditWidget.InternalTextEditWidget, layerCascade)); } else { dataArea.AddChild(content); } settingsRow.ValueChanged = (text) => { stringEdit.Text = text; }; } break; case SliceSettingData.DataEditTypes.INT_OR_MM: { FlowLayoutWidget content = new FlowLayoutWidget(); var stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: doubleEditWidth - 2, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; string startingText = stringEdit.Text; stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { TextEditWidget textEditWidget = (TextEditWidget)sender; // only validate when we lose focus if (!textEditWidget.ContainsFocus) { string text = textEditWidget.Text; text = text.Trim(); bool isMm = text.Contains("mm"); if (isMm) { text = text.Substring(0, text.IndexOf("mm")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isMm) { text += "mm"; } else { result = (int)result; text = result.ToString(); } textEditWidget.Text = text; startingText = stringEdit.Text; } ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, textEditWidget.Text, persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); // make sure we are still looking for the final validation before saving. if (textEditWidget.ContainsFocus) { UiThread.RunOnIdle(() => { string currentText = textEditWidget.Text; int cursorIndex = textEditWidget.InternalTextEditWidget.CharIndexToInsertBefore; textEditWidget.Text = startingText; textEditWidget.InternalTextEditWidget.MarkAsStartingState(); textEditWidget.Text = currentText; textEditWidget.InternalTextEditWidget.CharIndexToInsertBefore = cursorIndex; }); } }; stringEdit.ActualTextEditWidget.InternalTextEditWidget.AllSelected += (sender, e) => { // select everything up to the mm (if present) InternalTextEditWidget textEditWidget = (InternalTextEditWidget)sender; int mMIndex = textEditWidget.Text.IndexOf("mm"); if (mMIndex != -1) { textEditWidget.SetSelection(0, mMIndex - 1); } }; content.AddChild(stringEdit); unitsArea.AddChild(GetExtraSettingsWidget(settingData)); if (settingData.QuickMenuSettings.Count > 0) { dataArea.AddChild(CreateQuickMenu(settingData, persistenceLayer, content, stringEdit.ActualTextEditWidget.InternalTextEditWidget, layerCascade)); } else { dataArea.AddChild(content); } settingsRow.ValueChanged = (text) => { stringEdit.Text = text; }; } break; case SliceSettingData.DataEditTypes.CHECK_BOX: { var checkBoxWidget = new CheckBox("") { Name = settingData.PresentationName + " Checkbox", ToolTipText = settingData.HelpText, VAnchor = Agg.UI.VAnchor.ParentBottom, TextColor = ActiveTheme.Instance.PrimaryTextColor, Checked = sliceSettingValue == "1" }; checkBoxWidget.Click += (sender, e) => { bool isChecked = ((CheckBox)sender).Checked; ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, isChecked ? "1" : "0", persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; dataArea.AddChild(checkBoxWidget); settingsRow.ValueChanged = (text) => { checkBoxWidget.Checked = text == "1"; }; } break; case SliceSettingData.DataEditTypes.STRING: { var stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: settingData.ShowAsOverride ? 120 : 200, tabIndex: tabIndexForItem++) { Name = settingData.PresentationName + " Edit", }; stringEdit.ToolTipText = settingData.HelpText; stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, ((TextEditWidget)sender).Text, persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; dataArea.AddChild(stringEdit); settingsRow.ValueChanged = (text) => { stringEdit.Text = text; }; } break; case SliceSettingData.DataEditTypes.MULTI_LINE_TEXT: { string convertedNewLines = sliceSettingValue.Replace("\\n", "\n"); var stringEdit = new MHTextEditWidget(convertedNewLines, pixelWidth: 320, pixelHeight: multiLineEditHeight, multiLine: true, tabIndex: tabIndexForItem++, typeFace: ApplicationController.MonoSpacedTypeFace) { HAnchor = HAnchor.ParentLeftRight, }; stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, ((TextEditWidget)sender).Text.Replace("\n", "\\n"), persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; nameArea.HAnchor = HAnchor.AbsolutePosition; nameArea.Width = 0; dataArea.AddChild(stringEdit); dataArea.HAnchor = HAnchor.ParentLeftRight; settingsRow.ValueChanged = (text) => { stringEdit.Text = text.Replace("\\n", "\n"); }; } break; case SliceSettingData.DataEditTypes.COM_PORT: { #if __ANDROID__ addControl = false; #endif // The COM_PORT control is unique in its approach to the SlicerConfigName. It uses "com_port" settings name to // bind to a context that will place it in the SliceSetting view but it binds its values to a machine // specific dictionary key that is not exposed in the UI. At runtime we lookup and store to '<machinename>_com_port' // ensuring that a single printer can be shared across different devices and we'll select the correct com port in each case var selectableOptions = new DropDownList("None", maxHeight: 200) { ToolTipText = settingData.HelpText, Margin = new BorderDouble(), Name = "Com Port Dropdown" }; selectableOptions.Click += (s, e) => { AddComMenuItems(settingData, persistenceLayer, settingsRow, selectableOptions); }; AddComMenuItems(settingData, persistenceLayer, settingsRow, selectableOptions); dataArea.AddChild(selectableOptions); settingsRow.ValueChanged = (text) => { // Lookup the machine specific comport value rather than the passed in text value selectableOptions.SelectedLabel = ActiveSliceSettings.Instance.Helpers.ComPort(); }; } break; case SliceSettingData.DataEditTypes.LIST: { var selectableOptions = new DropDownList("None", maxHeight: 200) { ToolTipText = settingData.HelpText, Margin = new BorderDouble() }; foreach (string listItem in settingData.ExtraSettings.Split(',')) { MenuItem newItem = selectableOptions.AddItem(listItem); if (newItem.Text == sliceSettingValue) { selectableOptions.SelectedLabel = sliceSettingValue; } newItem.Selected += (sender, e) => { MenuItem menuItem = ((MenuItem)sender); ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, menuItem.Text, persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; } dataArea.AddChild(selectableOptions); settingsRow.ValueChanged = (text) => { selectableOptions.SelectedLabel = text; }; } break; case SliceSettingData.DataEditTypes.HARDWARE_PRESENT: { var checkBoxWidget = new CheckBox("") { Name = settingData.PresentationName + " Checkbox", ToolTipText = settingData.HelpText, VAnchor = Agg.UI.VAnchor.ParentBottom, TextColor = ActiveTheme.Instance.PrimaryTextColor, Checked = sliceSettingValue == "1" }; checkBoxWidget.Click += (sender, e) => { bool isChecked = ((CheckBox)sender).Checked; ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, isChecked ? "1" : "0", persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; dataArea.AddChild(checkBoxWidget); settingsRow.ValueChanged = (text) => { checkBoxWidget.Checked = text == "1"; }; } break; case SliceSettingData.DataEditTypes.VECTOR2: { string[] xyValueStrings = sliceSettingValue.Split(','); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue; double.TryParse(xyValueStrings[0], out currentXValue); var xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true }; double currentYValue; double.TryParse(xyValueStrings[1], out currentYValue); var yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true, Margin = new BorderDouble(20, 0, 0, 0), }; xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; dataArea.AddChild(xEditWidget); dataArea.AddChild(new TextWidget("X", pointSize: 10, textColor: ActiveTheme.Instance.PrimaryTextColor) { VAnchor = VAnchor.ParentCenter, Margin = new BorderDouble(5, 0), }); yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { ActiveSliceSettings.Instance.SetValue(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; dataArea.AddChild(yEditWidget); var yLabel = new GuiWidget(HAnchor.ParentLeftRight, VAnchor.FitToChildren | VAnchor.ParentCenter) { Padding = new BorderDouble(5, 0), HAnchor = HAnchor.ParentLeftRight, }; yLabel.AddChild(new WrappedTextWidget("Y", pointSize: 9, textColor: ActiveTheme.Instance.PrimaryTextColor)); unitsArea.AddChild(yLabel); settingsRow.ValueChanged = (text) => { double currentValue2; string[] xyValueStrings2 = text.Split(','); if (xyValueStrings2.Length != 2) { xyValueStrings2 = new string[] { "0", "0" }; } double.TryParse(xyValueStrings2[0], out currentValue2); xEditWidget.ActuallNumberEdit.Value = currentValue2; double.TryParse(xyValueStrings2[1], out currentValue2); yEditWidget.ActuallNumberEdit.Value = currentValue2; }; } break; case SliceSettingData.DataEditTypes.OFFSET2: { Vector2 offset = ActiveSliceSettings.Instance.Helpers.ExtruderOffset(extruderIndex); var xEditWidget = new MHNumberEdit(offset.x, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true, }; var yEditWidget = new MHNumberEdit(offset.y, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++) { ToolTipText = settingData.HelpText, SelectAllOnFocus = true, Margin = new BorderDouble(20, 0, 0, 0), }; xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { int extruderIndexLocal = extruderIndex; SaveCommaSeparatedIndexSetting(extruderIndexLocal, layerCascade, settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; dataArea.AddChild(xEditWidget); dataArea.AddChild(new TextWidget("X", pointSize: 10, textColor: ActiveTheme.Instance.PrimaryTextColor) { VAnchor = VAnchor.ParentCenter, Margin = new BorderDouble(5, 0), }); yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { int extruderIndexLocal = extruderIndex; SaveCommaSeparatedIndexSetting(extruderIndexLocal, layerCascade, settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString(), persistenceLayer); settingsRow.UpdateStyle(); OnSettingsChanged(settingData); }; dataArea.AddChild(yEditWidget); var yLabel = new GuiWidget(HAnchor.ParentLeftRight, VAnchor.FitToChildren | VAnchor.ParentCenter) { Padding = new BorderDouble(5, 0), HAnchor = HAnchor.ParentLeftRight, }; yLabel.AddChild(new WrappedTextWidget("Y", pointSize: 9, textColor: ActiveTheme.Instance.PrimaryTextColor)); unitsArea.AddChild(yLabel); settingsRow.ValueChanged = (text) => { Vector2 offset2 = ActiveSliceSettings.Instance.Helpers.ExtruderOffset(extruderIndex); xEditWidget.ActuallNumberEdit.Value = offset2.x; yEditWidget.ActuallNumberEdit.Value = offset2.y; }; } break; default: var missingSetting = new TextWidget(String.Format("Missing the setting for '{0}'.", settingData.DataEditType.ToString())) { TextColor = ActiveTheme.Instance.PrimaryTextColor, BackgroundColor = RGBA_Bytes.Red }; dataArea.AddChild(missingSetting); break; } } container.HAnchor = HAnchor.ParentLeftRight; container.VAnchor = VAnchor.FitToChildren; Button restoreButton = null; if (settingData.ShowAsOverride) { restoreButton = new Button(new ButtonViewStates(new ImageWidget(restoreNormal), new ImageWidget(restoreHover), new ImageWidget(restorePressed), new ImageWidget(restoreNormal))) { Name = "Restore " + settingData.SlicerConfigName, VAnchor = VAnchor.ParentCenter, Margin = new BorderDouble(0, 0, 5, 0), ToolTipText = "Restore Default".Localize() }; restoreButton.Click += (sender, e) => { // Revert the user override if (persistenceLayer == null) { ActiveSliceSettings.Instance.ClearValue(settingData.SlicerConfigName); } else { ActiveSliceSettings.Instance.ClearValue(settingData.SlicerConfigName, persistenceLayer); } settingsRow.RefreshValue(layerCascade); OnSettingsChanged(settingData); }; restoreArea.AddChild(restoreButton); } container.AddChild(settingsRow); // Define the UpdateStyle implementation settingsRow.UpdateStyle = () => { if (persistenceLayer.ContainsKey(settingData.SlicerConfigName)) { switch (viewFilter) { case NamedSettingsLayers.All: if (settingData.ShowAsOverride) { settingsRow.BackgroundColor = userSettingBackgroundColor; } break; case NamedSettingsLayers.Material: settingsRow.BackgroundColor = materialSettingBackgroundColor; break; case NamedSettingsLayers.Quality: settingsRow.BackgroundColor = qualitySettingBackgroundColor; break; } if(restoreButton != null) restoreButton.Visible = true; } else if (layerCascade == null) { if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, NamedSettingsLayers.Material)) { settingsRow.BackgroundColor = materialSettingBackgroundColor; } else if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, NamedSettingsLayers.Quality)) { settingsRow.BackgroundColor = qualitySettingBackgroundColor; } else { settingsRow.BackgroundColor = RGBA_Bytes.Transparent; } if (restoreButton != null) restoreButton.Visible = false; } else { if (restoreButton != null) restoreButton.Visible = false; settingsRow.BackgroundColor = RGBA_Bytes.Transparent; } }; // Invoke the UpdateStyle implementation settingsRow.UpdateStyle(); return container; }
private GuiWidget CreateSettingInfoUIControls(OrganizerSettingsData settingData, double minSettingNameWidth, int extruderIndex) { GuiWidget container = new GuiWidget(); FlowLayoutWidget leftToRightLayout = new FlowLayoutWidget(); bool addQualityOverlay = false; bool addMaterialOverlay = false; RGBA_Bytes qualityOverlayColor = new RGBA_Bytes(255, 255, 0, 40); RGBA_Bytes materialOverlayColor = new RGBA_Bytes(255, 127, 0, 40); if (ActiveSliceSettings.Instance.Contains(settingData.SlicerConfigName)) { int intEditWidth = (int)(60 * TextWidget.GlobalPointSizeScaleRatio + .5); int doubleEditWidth = (int)(60 * TextWidget.GlobalPointSizeScaleRatio + .5); if (settingData.QuickMenuSettings.Count > 0) { doubleEditWidth = (int)(35 * TextWidget.GlobalPointSizeScaleRatio + .5); } int vectorXYEditWidth = (int)(60 * TextWidget.GlobalPointSizeScaleRatio + .5); int multiLineEditHeight = (int)(60 * TextWidget.GlobalPointSizeScaleRatio + .5); string sliceSettingValue = ActiveSliceSettings.Instance.GetActiveValue(settingData.SlicerConfigName); leftToRightLayout.Margin = new BorderDouble(0, 2); leftToRightLayout.Padding = new BorderDouble(3); leftToRightLayout.HAnchor = Agg.UI.HAnchor.ParentLeftRight; if (settingData.DataEditType != OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT) { string convertedNewLines = settingData.PresentationName.Replace("\\n ", "\n"); convertedNewLines = convertedNewLines.Replace("\\n", "\n"); convertedNewLines = LocalizedString.Get(convertedNewLines); TextWidget settingName = new TextWidget(convertedNewLines, pointSize: 10); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.VAnchor = Agg.UI.VAnchor.ParentCenter; #if DO_IN_PLACE_EDIT if (SettingsIndexBeingEdited != 0) { if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, SettingsIndexBeingEdited)) { CheckBox removeFromSettingCheckBox = new CheckBox(""); removeFromSettingCheckBox.Checked = true; removeFromSettingCheckBox.VAnchor = VAnchor.ParentCenter; leftToRightLayout.AddChild(removeFromSettingCheckBox); } else { CheckBox addToSettingCheckBox = new CheckBox(""); addToSettingCheckBox.VAnchor = VAnchor.ParentCenter; leftToRightLayout.AddChild(addToSettingCheckBox); } } #endif settingName.Width = minSettingNameWidth; //settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); leftToRightLayout.AddChild(settingName); } if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, 3)) { addMaterialOverlay = true; } else if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, 2)) { addQualityOverlay = true; } switch (settingData.DataEditType) { case OrganizerSettingsData.DataEditTypes.INT: { int currentValue = 0; int.TryParse(sliceSettingValue, out currentValue); MHNumberEdit intEditWidget = new MHNumberEdit(currentValue, pixelWidth: intEditWidth, tabIndex: tabIndexForItem++); intEditWidget.ToolTipText = settingData.HelpText; intEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); CallEventsOnSettingsChange(settingData); }; intEditWidget.SelectAllOnFocus = true; leftToRightLayout.AddChild(intEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowNegatives: true, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ToolTipText = settingData.HelpText; doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); CallEventsOnSettingsChange(settingData); }; doubleEditWidget.SelectAllOnFocus = true; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.POSITIVE_DOUBLE: { const string multiValuesAreDiffernt = "-"; FlowLayoutWidget content = new FlowLayoutWidget(); MHNumberEdit doubleEditWidget = new MHNumberEdit(0, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ToolTipText = settingData.HelpText; double currentValue = 0; bool ChangesMultipleOtherSettings = settingData.SetSettingsOnChange.Count > 0; if (ChangesMultipleOtherSettings) { bool allTheSame = true; string setting = ActiveSliceSettings.Instance.GetActiveValue(settingData.SetSettingsOnChange[0]); for (int i = 1; i < settingData.SetSettingsOnChange.Count; i++) { string nextSetting = ActiveSliceSettings.Instance.GetActiveValue(settingData.SetSettingsOnChange[i]); if (setting != nextSetting) { allTheSame = false; break; } } if (allTheSame && setting.EndsWith("mm")) { double.TryParse(setting.Substring(0, setting.Length-2), out currentValue); doubleEditWidget.ActuallNumberEdit.Value = currentValue; } else { doubleEditWidget.ActuallNumberEdit.InternalNumberEdit.Text = multiValuesAreDiffernt; } } else // just set the setting nomrmaly { double.TryParse(sliceSettingValue, out currentValue); doubleEditWidget.ActuallNumberEdit.Value = currentValue; } doubleEditWidget.ActuallNumberEdit.InternalTextEditWidget.MarkAsStartingState(); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { NumberEdit numberEdit = (NumberEdit)sender; // If this setting sets other settings, then do that. if (ChangesMultipleOtherSettings && numberEdit.Text != multiValuesAreDiffernt) { foreach (string setting in settingData.SetSettingsOnChange) { SaveSetting(setting, numberEdit.Value.ToString() + "mm"); } } // also always save to the local setting SaveSetting(settingData.SlicerConfigName, numberEdit.Value.ToString()); CallEventsOnSettingsChange(settingData); }; doubleEditWidget.SelectAllOnFocus = true; content.AddChild(doubleEditWidget); content.AddChild(getSettingInfoData(settingData)); if (settingData.QuickMenuSettings.Count > 0) { leftToRightLayout.AddChild(CreateQuickMenu(settingData, content, doubleEditWidget.ActuallNumberEdit.InternalTextEditWidget)); } else { leftToRightLayout.AddChild(content); } } break; case OrganizerSettingsData.DataEditTypes.OFFSET: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, allowNegatives: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ToolTipText = settingData.HelpText; doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); CallEventsOnSettingsChange(settingData); }; doubleEditWidget.SelectAllOnFocus = true; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE_OR_PERCENT: { FlowLayoutWidget content = new FlowLayoutWidget(); MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: doubleEditWidth - 2, tabIndex: tabIndexForItem++); stringEdit.ToolTipText = settingData.HelpText; stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { TextEditWidget textEditWidget = (TextEditWidget)sender; string text = textEditWidget.Text; text = text.Trim(); bool isPercent = text.Contains("%"); if (isPercent) { text = text.Substring(0, text.IndexOf("%")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isPercent) { text += "%"; } textEditWidget.Text = text; SaveSetting(settingData.SlicerConfigName, textEditWidget.Text); CallEventsOnSettingsChange(settingData); }; stringEdit.SelectAllOnFocus = true; stringEdit.ActualTextEditWidget.InternalTextEditWidget.AllSelected += (sender, e) => { // select evrything up to the % (if present) InternalTextEditWidget textEditWidget = (InternalTextEditWidget)sender; int percentIndex = textEditWidget.Text.IndexOf("%"); if (percentIndex != -1) { textEditWidget.SetSelection(0, percentIndex-1); } }; content.AddChild(stringEdit); content.AddChild(getSettingInfoData(settingData)); if (settingData.QuickMenuSettings.Count > 0) { leftToRightLayout.AddChild(CreateQuickMenu(settingData, content, stringEdit.ActualTextEditWidget.InternalTextEditWidget)); } else { leftToRightLayout.AddChild(content); } } break; case OrganizerSettingsData.DataEditTypes.INT_OR_MM: { FlowLayoutWidget content = new FlowLayoutWidget(); MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: doubleEditWidth - 2, tabIndex: tabIndexForItem++); stringEdit.ToolTipText = settingData.HelpText; stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { TextEditWidget textEditWidget = (TextEditWidget)sender; string text = textEditWidget.Text; text = text.Trim(); bool isMm = text.Contains("mm"); if (isMm) { text = text.Substring(0, text.IndexOf("mm")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isMm) { text += "mm"; } else { result = (int)result; text = result.ToString(); } textEditWidget.Text = text; SaveSetting(settingData.SlicerConfigName, textEditWidget.Text); CallEventsOnSettingsChange(settingData); }; stringEdit.SelectAllOnFocus = true; stringEdit.ActualTextEditWidget.InternalTextEditWidget.AllSelected += (sender, e) => { // select evrything up to the mm (if present) InternalTextEditWidget textEditWidget = (InternalTextEditWidget)sender; int mMIndex = textEditWidget.Text.IndexOf("mm"); if (mMIndex != -1) { textEditWidget.SetSelection(0, mMIndex-1); } }; content.AddChild(stringEdit); content.AddChild(getSettingInfoData(settingData)); if (settingData.QuickMenuSettings.Count > 0) { leftToRightLayout.AddChild(CreateQuickMenu(settingData, content, stringEdit.ActualTextEditWidget.InternalTextEditWidget)); } else { leftToRightLayout.AddChild(content); } } break; case OrganizerSettingsData.DataEditTypes.CHECK_BOX: { CheckBox checkBoxWidget = new CheckBox(""); checkBoxWidget.ToolTipText = settingData.HelpText; checkBoxWidget.VAnchor = Agg.UI.VAnchor.ParentBottom; checkBoxWidget.TextColor = ActiveTheme.Instance.PrimaryTextColor; checkBoxWidget.Checked = (sliceSettingValue == "1"); checkBoxWidget.CheckedStateChanged += (sender, e) => { if (((CheckBox)sender).Checked) { SaveSetting(settingData.SlicerConfigName, "1"); } else { SaveSetting(settingData.SlicerConfigName, "0"); } CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(checkBoxWidget); } break; case OrganizerSettingsData.DataEditTypes.STRING: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 120, tabIndex: tabIndexForItem++); stringEdit.ToolTipText = settingData.HelpText; stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT: { string convertedNewLines = sliceSettingValue.Replace("\\n", "\n"); MHTextEditWidget stringEdit = new MHTextEditWidget(convertedNewLines, pixelWidth: 320, pixelHeight: multiLineEditHeight, multiLine: true, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text.Replace("\n", "\\n")); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.LIST: { StyledDropDownList selectableOptions = new StyledDropDownList("None", maxHeight: 200); selectableOptions.ToolTipText = settingData.HelpText; selectableOptions.Margin = new BorderDouble(); string[] listItems = settingData.ExtraSettings.Split(','); foreach (string listItem in listItems) { MenuItem newItem = selectableOptions.AddItem(listItem); if (newItem.Text == sliceSettingValue) { selectableOptions.SelectedLabel = sliceSettingValue; } newItem.Selected += (sender, e) => { MenuItem menuItem = ((MenuItem)sender); SaveSetting(settingData.SlicerConfigName, menuItem.Text); CallEventsOnSettingsChange(settingData); }; } leftToRightLayout.AddChild(selectableOptions); } break; case OrganizerSettingsData.DataEditTypes.HARDWARE_PRESENT: { CheckBox checkBoxWidget = new CheckBox(""); checkBoxWidget.ToolTipText = settingData.HelpText; checkBoxWidget.VAnchor = Agg.UI.VAnchor.ParentBottom; checkBoxWidget.TextColor = ActiveTheme.Instance.PrimaryTextColor; checkBoxWidget.Checked = (sliceSettingValue == "1"); checkBoxWidget.CheckedStateChanged += (sender, e) => { if (((CheckBox)sender).Checked) { SaveSetting(settingData.SlicerConfigName, "1"); // Now show all of the settings that this control is associated with. } else { SaveSetting(settingData.SlicerConfigName, "0"); // Now hide all of the settings that this control is associated with. } CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(checkBoxWidget); } break; case OrganizerSettingsData.DataEditTypes.VECTOR2: { string[] xyValueStrings = sliceSettingValue.Split(','); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); xEditWidget.ToolTipText = settingData.HelpText; double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); yEditWidget.ToolTipText = settingData.HelpText; xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); CallEventsOnSettingsChange(settingData); }; xEditWidget.SelectAllOnFocus = true; leftToRightLayout.AddChild(xEditWidget); leftToRightLayout.AddChild(new HorizontalSpacer()); yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); CallEventsOnSettingsChange(settingData); }; yEditWidget.SelectAllOnFocus = true; leftToRightLayout.AddChild(yEditWidget); } break; case OrganizerSettingsData.DataEditTypes.OFFSET2: { Vector2 offset = ActiveSliceSettings.Instance.GetOffset(extruderIndex); MHNumberEdit xEditWidget = new MHNumberEdit(offset.x, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); xEditWidget.ToolTipText = settingData.HelpText; MHNumberEdit yEditWidget = new MHNumberEdit(offset.y, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); yEditWidget.ToolTipText = settingData.HelpText; { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { int extruderIndexLocal = extruderIndex; SaveCommaSeparatedIndexSetting(extruderIndexLocal, settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); CallEventsOnSettingsChange(settingData); }; xEditWidget.SelectAllOnFocus = true; leftToRightLayout.AddChild(xEditWidget); leftToRightLayout.AddChild(new HorizontalSpacer()); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { int extruderIndexLocal = extruderIndex; SaveCommaSeparatedIndexSetting(extruderIndexLocal, settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); CallEventsOnSettingsChange(settingData); }; yEditWidget.SelectAllOnFocus = true; leftToRightLayout.AddChild(yEditWidget); } } break; default: TextWidget missingSetting = new TextWidget(String.Format("Missing the setting for '{0}'.", settingData.DataEditType.ToString())); missingSetting.TextColor = ActiveTheme.Instance.PrimaryTextColor; missingSetting.BackgroundColor = RGBA_Bytes.Red; leftToRightLayout.AddChild(missingSetting); break; } } else // the setting we think we are adding is not in the config.ini it may have been depricated { TextWidget settingName = new TextWidget(String.Format("Setting '{0}' not found in config.ini", settingData.SlicerConfigName)); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); leftToRightLayout.AddChild(settingName); leftToRightLayout.BackgroundColor = RGBA_Bytes.Red; } container.HAnchor = HAnchor.ParentLeftRight; container.VAnchor = VAnchor.FitToChildren; container.AddChild(leftToRightLayout); if (addQualityOverlay || addMaterialOverlay) { SettingPresetOverlay overlay = new SettingPresetOverlay(); overlay.HAnchor = HAnchor.ParentLeftRight; overlay.VAnchor = Agg.UI.VAnchor.ParentBottomTop; SettingPresetClick clickToEdit = new SettingPresetClick(); clickToEdit.HAnchor = HAnchor.ParentLeftRight; clickToEdit.VAnchor = Agg.UI.VAnchor.ParentBottomTop; clickToEdit.Visible = false; Button editButton = buttonFactory.Generate("Edit Preset".Localize().ToUpper()); editButton.HAnchor = Agg.UI.HAnchor.ParentCenter; editButton.VAnchor = Agg.UI.VAnchor.ParentCenter; clickToEdit.AddChild(editButton); if (addQualityOverlay) { overlay.OverlayColor = qualityOverlayColor; clickToEdit.OverlayColor = qualityOverlayColor; editButton.Click += (sender, e) => { if (ApplicationController.Instance.EditQualityPresetsWindow == null) { ApplicationController.Instance.EditQualityPresetsWindow = new SlicePresetsWindow(ReloadOptions, "Quality", "quality", false, ActivePrinterProfile.Instance.ActiveQualitySettingsID); ApplicationController.Instance.EditQualityPresetsWindow.Closed += (popupWindowSender, popupWindowSenderE) => { ApplicationController.Instance.EditQualityPresetsWindow = null; }; } else { ApplicationController.Instance.EditQualityPresetsWindow.ChangeToSlicePresetFromID(ActivePrinterProfile.Instance.ActiveQualitySettingsID); ApplicationController.Instance.EditQualityPresetsWindow.BringToFront(); } }; } else if (addMaterialOverlay) { overlay.OverlayColor = materialOverlayColor; clickToEdit.OverlayColor = materialOverlayColor; editButton.Click += (sender, e) => { if (ApplicationController.Instance.EditMaterialPresetsWindow == null) { ApplicationController.Instance.EditMaterialPresetsWindow = new SlicePresetsWindow(ReloadOptions, "Material", "material", false, ActivePrinterProfile.Instance.GetMaterialSetting(1)); ApplicationController.Instance.EditMaterialPresetsWindow.Closed += (popupWindowSender, popupWindowSenderE) => { ApplicationController.Instance.EditMaterialPresetsWindow = null; }; } else { ApplicationController.Instance.EditMaterialPresetsWindow.ChangeToSlicePresetFromID(ActivePrinterProfile.Instance.GetMaterialSetting(1)); ApplicationController.Instance.EditMaterialPresetsWindow.BringToFront(); } }; } container.MouseEnterBounds += (sender, e) => { UiThread.RunOnIdle(() => { overlay.Visible = false; clickToEdit.Visible = true; }); }; container.MouseLeaveBounds += (sender, e) => { UiThread.RunOnIdle(() => { overlay.Visible = true; clickToEdit.Visible = false; }); }; container.AddChild(overlay); container.AddChild(clickToEdit); } return container; }
public View3DBrailleBuilder(Vector3 viewerVolume, Vector2 bedCenter, BedShape bedShape) { monoSpacedTypeFace = ApplicationController.MonoSpacedTypeFace; brailTypeFace = TypeFace.LoadFrom(StaticData.Instance.ReadAllText(Path.Combine("Fonts", "Braille.svg"))); MeshGroupExtraData = new List<PlatingMeshGroupData>(); FlowLayoutWidget mainContainerTopToBottom = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainerTopToBottom.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth; mainContainerTopToBottom.VAnchor = Agg.UI.VAnchor.Max_FitToChildren_ParentHeight; FlowLayoutWidget centerPartPreviewAndControls = new FlowLayoutWidget(FlowDirection.LeftToRight); centerPartPreviewAndControls.AnchorAll(); GuiWidget viewArea = new GuiWidget(); viewArea.AnchorAll(); { meshViewerWidget = new MeshViewerWidget(viewerVolume, bedCenter, bedShape); meshViewerWidget.AllowBedRenderingWhenEmpty = true; meshViewerWidget.AnchorAll(); } viewArea.AddChild(meshViewerWidget); centerPartPreviewAndControls.AddChild(viewArea); mainContainerTopToBottom.AddChild(centerPartPreviewAndControls); FlowLayoutWidget buttonBottomPanel = new FlowLayoutWidget(FlowDirection.LeftToRight); buttonBottomPanel.HAnchor = HAnchor.ParentLeftRight; buttonBottomPanel.Padding = new BorderDouble(3, 3); buttonBottomPanel.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; buttonRightPanel = CreateRightButtonPanel(viewerVolume.y); // add in the plater tools { FlowLayoutWidget editToolBar = new FlowLayoutWidget(); processingProgressControl = new ProgressControl("Finding Parts:".Localize(), ActiveTheme.Instance.PrimaryTextColor, ActiveTheme.Instance.PrimaryAccentColor); processingProgressControl.VAnchor = Agg.UI.VAnchor.ParentCenter; editToolBar.AddChild(processingProgressControl); editToolBar.VAnchor |= Agg.UI.VAnchor.ParentCenter; editPlateButtonsContainer = new FlowLayoutWidget(); textToAddWidget = new MHTextEditWidget("", pixelWidth: 300, messageWhenEmptyAndNotSelected: "Enter Text Here".Localize()); textToAddWidget.VAnchor = VAnchor.ParentCenter; textToAddWidget.Margin = new BorderDouble(5); editPlateButtonsContainer.AddChild(textToAddWidget); textToAddWidget.ActualTextEditWidget.EnterPressed += (object sender, KeyEventArgs keyEvent) => { InsertTextNow(textToAddWidget.Text); }; Button insertTextButton = textImageButtonFactory.Generate("Insert".Localize()); editPlateButtonsContainer.AddChild(insertTextButton); insertTextButton.Click += (sender, e) => { InsertTextNow(textToAddWidget.Text); }; editToolBar.AddChild(editPlateButtonsContainer); buttonBottomPanel.AddChild(editToolBar); } GuiWidget buttonRightPanelHolder = new GuiWidget(HAnchor.FitToChildren, VAnchor.ParentBottomTop); centerPartPreviewAndControls.AddChild(buttonRightPanelHolder); buttonRightPanelHolder.AddChild(buttonRightPanel); viewControls3D = new ViewControls3D(meshViewerWidget); viewControls3D.ResetView += (sender, e) => { meshViewerWidget.ResetView(); }; buttonRightPanelDisabledCover = new Cover(HAnchor.ParentLeftRight, VAnchor.ParentBottomTop); buttonRightPanelDisabledCover.BackgroundColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryBackgroundColor, 150); buttonRightPanelHolder.AddChild(buttonRightPanelDisabledCover); LockEditControls(); GuiWidget leftRightSpacer = new GuiWidget(); leftRightSpacer.HAnchor = HAnchor.ParentLeftRight; buttonBottomPanel.AddChild(leftRightSpacer); closeButton = textImageButtonFactory.Generate("Close".Localize()); buttonBottomPanel.AddChild(closeButton); mainContainerTopToBottom.AddChild(buttonBottomPanel); this.AddChild(mainContainerTopToBottom); this.AnchorAll(); meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation; AddChild(viewControls3D); // set the view to be a good angle and distance meshViewerWidget.ResetView(); AddHandlers(); UnlockEditControls(); // but make sure we can't use the right panel yet buttonRightPanelDisabledCover.Visible = true; //meshViewerWidget.RenderType = RenderTypes.Outlines; viewControls3D.PartSelectVisible = false; meshViewerWidget.ResetView(); }
private FlowLayoutWidget GetSettingsRow(OrganizerSettingsData settingData, string sliceSettingValue = null) { FlowLayoutWidget container = new FlowLayoutWidget(); container.HAnchor = HAnchor.ParentLeftRight; double minSettingNameWidth = 400; if (ActiveSliceSettings.Instance.Contains(settingData.SlicerConfigName)) { int intEditWidth = 60; int doubleEditWidth = 60; int vectorXYEditWidth = 60; int multiLineEditHeight = 60; //Get the current value as a default value if (sliceSettingValue == null) { sliceSettingValue = ActiveSliceSettings.Instance.GetActiveValue(settingData.SlicerConfigName); } //Get the presentation name from the SettingNameLookup TextWidget settingName = new TextWidget(SettingNameLookup[settingData.SlicerConfigName], pointSize: 10); settingName.AutoExpandBoundsToText = false; settingName.EllipsisIfClipped = true; settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.VAnchor = Agg.UI.VAnchor.ParentCenter; settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.Height); settingName.Width = minSettingNameWidth; container.AddChild(settingName); switch (settingData.DataEditType) { case OrganizerSettingsData.DataEditTypes.INT: { int currentValue = 0; int.TryParse(sliceSettingValue, out currentValue); MHNumberEdit intEditWidget = new MHNumberEdit(currentValue, pixelWidth: intEditWidth, tabIndex: tabIndexForItem++); intEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; container.AddChild(intEditWidget); container.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowNegatives: true, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; container.AddChild(doubleEditWidget); container.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.POSITIVE_DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; container.AddChild(doubleEditWidget); container.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.OFFSET: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, allowNegatives: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; container.AddChild(doubleEditWidget); container.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE_OR_PERCENT: { FlowLayoutWidget content = new FlowLayoutWidget(); MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: doubleEditWidth - 2, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { TextEditWidget textEditWidget = (TextEditWidget)sender; string text = textEditWidget.Text; text = text.Trim(); bool isPercent = text.Contains("%"); if (isPercent) { text = text.Substring(0, text.IndexOf("%")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isPercent) { text += "%"; } textEditWidget.Text = text; SaveSetting(settingData.SlicerConfigName, textEditWidget.Text); }; stringEdit.SelectAllOnFocus = true; stringEdit.ActualTextEditWidget.InternalTextEditWidget.AllSelected += (sender, e) => { // select evrything up to the % (if present) InternalTextEditWidget textEditWidget = (InternalTextEditWidget)sender; int percentIndex = textEditWidget.Text.IndexOf("%"); if (percentIndex != -1) { textEditWidget.SetSelection(0, percentIndex - 1); } }; content.AddChild(stringEdit); content.AddChild(getSettingInfoData(settingData)); container.AddChild(content); } break; case OrganizerSettingsData.DataEditTypes.INT_OR_MM: { FlowLayoutWidget content = new FlowLayoutWidget(); MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: doubleEditWidth - 2, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { TextEditWidget textEditWidget = (TextEditWidget)sender; string text = textEditWidget.Text; text = text.Trim(); bool isMm = text.Contains("mm"); if (isMm) { text = text.Substring(0, text.IndexOf("mm")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isMm) { text += "mm"; } else { result = (int)result; text = result.ToString(); } textEditWidget.Text = text; SaveSetting(settingData.SlicerConfigName, textEditWidget.Text); }; stringEdit.SelectAllOnFocus = true; stringEdit.ActualTextEditWidget.InternalTextEditWidget.AllSelected += (sender, e) => { // select evrything up to the mm (if present) InternalTextEditWidget textEditWidget = (InternalTextEditWidget)sender; int mMIndex = textEditWidget.Text.IndexOf("mm"); if (mMIndex != -1) { textEditWidget.SetSelection(0, mMIndex - 1); } }; content.AddChild(stringEdit); content.AddChild(getSettingInfoData(settingData)); container.AddChild(content); } break; case OrganizerSettingsData.DataEditTypes.CHECK_BOX: { CheckBox checkBoxWidget = new CheckBox(""); checkBoxWidget.VAnchor = Agg.UI.VAnchor.ParentBottom; checkBoxWidget.TextColor = ActiveTheme.Instance.PrimaryTextColor; checkBoxWidget.Checked = (sliceSettingValue == "1"); checkBoxWidget.CheckedStateChanged += (sender, e) => { if (((CheckBox)sender).Checked) { SaveSetting(settingData.SlicerConfigName, "1"); } else { SaveSetting(settingData.SlicerConfigName, "0"); } }; container.AddChild(checkBoxWidget); } break; case OrganizerSettingsData.DataEditTypes.STRING: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 120, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text); }; container.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT: { string convertedNewLines = sliceSettingValue.Replace("\\n", "\n"); MHTextEditWidget stringEdit = new MHTextEditWidget(convertedNewLines, pointSize: 10, pixelWidth: 280, pixelHeight: multiLineEditHeight, multiLine: true, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text.Replace("\n", "\\n")); }; container.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.LIST: { StyledDropDownList selectableOptions = new StyledDropDownList("None", Direction.Down); selectableOptions.Margin = new BorderDouble(); string[] listItems = settingData.ExtraSettings.Split(','); foreach (string listItem in listItems) { MenuItem newItem = selectableOptions.AddItem(listItem); if (newItem.Text == sliceSettingValue) { selectableOptions.SelectedLabel = sliceSettingValue; } newItem.Selected += (sender, e) => { MenuItem menuItem = ((MenuItem)sender); SaveSetting(settingData.SlicerConfigName, menuItem.Text); }; } container.AddChild(selectableOptions); } break; case OrganizerSettingsData.DataEditTypes.HARDWARE_PRESENT: // this is not editable for a detail setting (quality or material) break; case OrganizerSettingsData.DataEditTypes.VECTOR2: { string[] xyValueStrings = sliceSettingValue.Split(','); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); }; container.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); container.AddChild(xText); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); }; container.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); container.AddChild(yText); } } break; case OrganizerSettingsData.DataEditTypes.OFFSET2: { string[] xyValueStrings = sliceSettingValue.Split('x'); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); }; container.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); container.AddChild(xText); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); }; container.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); container.AddChild(yText); } } break; default: TextWidget missingSetting = new TextWidget(String.Format("Missing the setting for '{0}'.", settingData.DataEditType.ToString())); missingSetting.TextColor = ActiveTheme.Instance.PrimaryTextColor; missingSetting.BackgroundColor = RGBA_Bytes.Red; container.AddChild(missingSetting); break; } } else // the setting we think we are adding is not in the config.ini it may have been depricated { TextWidget settingName = new TextWidget(String.Format("Setting '{0}' not found in config.ini", settingData.SlicerConfigName)); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); container.AddChild(settingName); container.BackgroundColor = RGBA_Bytes.Red; } container.AddChild(new HorizontalSpacer()); Button removeLink = linkButtonFactory.Generate("remove"); removeLink.Click += (sender, e) => { RemoveSetting(settingData.SlicerConfigName); }; removeLink.VAnchor = Agg.UI.VAnchor.ParentCenter; container.AddChild(removeLink); return container; }
private void DoLayout(string subjectText, string bodyText) { FlowLayoutWidget mainContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainer.AnchorAll(); GuiWidget labelContainer = new GuiWidget(); labelContainer.HAnchor = HAnchor.ParentLeftRight; labelContainer.Height = 30; TextWidget formLabel = new TextWidget(LocalizedString.Get("How can we help?"), pointSize: 16); formLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor; formLabel.VAnchor = VAnchor.ParentTop; formLabel.HAnchor = HAnchor.ParentLeft; formLabel.Margin = new BorderDouble(6, 3,6,6); labelContainer.AddChild(formLabel); mainContainer.AddChild(labelContainer); centerContainer = new GuiWidget(); centerContainer.AnchorAll(); centerContainer.Padding = new BorderDouble(3,0,3,3); messageContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); messageContainer.AnchorAll(); messageContainer.Visible = false; messageContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; messageContainer.Padding = new BorderDouble(10); submissionStatus = new TextWidget(LocalizedString.Get("Submitting your information..."), pointSize: 13); submissionStatus.AutoExpandBoundsToText = true; submissionStatus.Margin = new BorderDouble(0, 5); submissionStatus.TextColor = ActiveTheme.Instance.PrimaryTextColor; submissionStatus.HAnchor = HAnchor.ParentLeft; messageContainer.AddChild(submissionStatus); formContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); formContainer.AnchorAll(); formContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; formContainer.Padding = new BorderDouble(10); formContainer.AddChild(LabelGenerator(LocalizedString.Get("Question*"))); formContainer.AddChild(LabelGenerator(LocalizedString.Get("Briefly describe your question"), 9, 14)); questionInput = new MHTextEditWidget(subjectText); questionInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(questionInput); questionErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(questionErrorMessage); formContainer.AddChild(LabelGenerator(LocalizedString.Get("Details*"))); formContainer.AddChild(LabelGenerator(LocalizedString.Get("Fill in the details here"), 9, 14)); detailInput = new MHTextEditWidget(bodyText, pixelHeight: 120, multiLine: true); detailInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(detailInput); detailErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(detailErrorMessage); formContainer.AddChild(LabelGenerator(LocalizedString.Get("Your Email Address*"))); emailInput = new MHTextEditWidget(); emailInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(emailInput); emailErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(emailErrorMessage); formContainer.AddChild(LabelGenerator(LocalizedString.Get("Your Name*"))); nameInput = new MHTextEditWidget(); nameInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(nameInput); nameErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(nameErrorMessage); centerContainer.AddChild(formContainer); mainContainer.AddChild(centerContainer); FlowLayoutWidget buttonBottomPanel = GetButtonButtonPanel(); buttonBottomPanel.AddChild(submitButton); buttonBottomPanel.AddChild(cancelButton); buttonBottomPanel.AddChild(doneButton); mainContainer.AddChild(buttonBottomPanel); this.AddChild(mainContainer); }
public View3DBrailleBuilder(Vector3 viewerVolume, Vector2 bedCenter, MeshViewerWidget.BedShape bedShape) { boldTypeFace = TypeFace.LoadFrom(StaticData.Instance.ReadAllText(Path.Combine("Fonts", "LiberationMono.svg"))); brailTypeFace = TypeFace.LoadFrom(StaticData.Instance.ReadAllText(Path.Combine("Fonts", "Braille.svg"))); MeshGroupExtraData = new List <PlatingMeshGroupData>(); FlowLayoutWidget mainContainerTopToBottom = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainerTopToBottom.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth; mainContainerTopToBottom.VAnchor = Agg.UI.VAnchor.Max_FitToChildren_ParentHeight; FlowLayoutWidget centerPartPreviewAndControls = new FlowLayoutWidget(FlowDirection.LeftToRight); centerPartPreviewAndControls.AnchorAll(); GuiWidget viewArea = new GuiWidget(); viewArea.AnchorAll(); { meshViewerWidget = new MeshViewerWidget(viewerVolume, bedCenter, bedShape); meshViewerWidget.AllowBedRenderingWhenEmpty = true; meshViewerWidget.AnchorAll(); } viewArea.AddChild(meshViewerWidget); centerPartPreviewAndControls.AddChild(viewArea); mainContainerTopToBottom.AddChild(centerPartPreviewAndControls); FlowLayoutWidget buttonBottomPanel = new FlowLayoutWidget(FlowDirection.LeftToRight); buttonBottomPanel.HAnchor = HAnchor.ParentLeftRight; buttonBottomPanel.Padding = new BorderDouble(3, 3); buttonBottomPanel.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; buttonRightPanel = CreateRightButtonPanel(viewerVolume.y); // add in the plater tools { FlowLayoutWidget editToolBar = new FlowLayoutWidget(); processingProgressControl = new ProgressControl("Finding Parts:".Localize(), ActiveTheme.Instance.PrimaryTextColor, ActiveTheme.Instance.PrimaryAccentColor); processingProgressControl.VAnchor = Agg.UI.VAnchor.ParentCenter; editToolBar.AddChild(processingProgressControl); editToolBar.VAnchor |= Agg.UI.VAnchor.ParentCenter; editPlateButtonsContainer = new FlowLayoutWidget(); textToAddWidget = new MHTextEditWidget("", pixelWidth: 300, messageWhenEmptyAndNotSelected: "Enter Text Here".Localize()); textToAddWidget.VAnchor = VAnchor.ParentCenter; textToAddWidget.Margin = new BorderDouble(5); editPlateButtonsContainer.AddChild(textToAddWidget); textToAddWidget.ActualTextEditWidget.EnterPressed += (object sender, KeyEventArgs keyEvent) => { InsertTextNow(textToAddWidget.Text); }; Button insertTextButton = textImageButtonFactory.Generate("Insert".Localize()); editPlateButtonsContainer.AddChild(insertTextButton); insertTextButton.Click += (sender, e) => { InsertTextNow(textToAddWidget.Text); }; editToolBar.AddChild(editPlateButtonsContainer); buttonBottomPanel.AddChild(editToolBar); } GuiWidget buttonRightPanelHolder = new GuiWidget(HAnchor.FitToChildren, VAnchor.ParentBottomTop); centerPartPreviewAndControls.AddChild(buttonRightPanelHolder); buttonRightPanelHolder.AddChild(buttonRightPanel); viewControls3D = new ViewControls3D(meshViewerWidget); buttonRightPanelDisabledCover = new Cover(HAnchor.ParentLeftRight, VAnchor.ParentBottomTop); buttonRightPanelDisabledCover.BackgroundColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryBackgroundColor, 150); buttonRightPanelHolder.AddChild(buttonRightPanelDisabledCover); LockEditControls(); GuiWidget leftRightSpacer = new GuiWidget(); leftRightSpacer.HAnchor = HAnchor.ParentLeftRight; buttonBottomPanel.AddChild(leftRightSpacer); closeButton = textImageButtonFactory.Generate("Close".Localize()); buttonBottomPanel.AddChild(closeButton); mainContainerTopToBottom.AddChild(buttonBottomPanel); this.AddChild(mainContainerTopToBottom); this.AnchorAll(); meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation; AddChild(viewControls3D); // set the view to be a good angle and distance meshViewerWidget.TrackballTumbleWidget.TrackBallController.Scale = .06; meshViewerWidget.TrackballTumbleWidget.TrackBallController.Rotate(Quaternion.FromEulerAngles(new Vector3(-MathHelper.Tau * .02, 0, 0))); meshViewerWidget.TrackballTumbleWidget.TrackBallController.Translate(-new Vector3(bedCenter)); AddHandlers(); UnlockEditControls(); // but make sure we can't use the right panel yet buttonRightPanelDisabledCover.Visible = true; //meshViewerWidget.RenderType = RenderTypes.Outlines; viewControls3D.PartSelectVisible = false; }
private GuiWidget CreateSearchPannel() { GuiWidget searchPanel = new FlowLayoutWidget(); searchPanel.BackgroundColor = ActiveTheme.Instance.TransparentDarkOverlay; searchPanel.HAnchor = HAnchor.ParentLeftRight; searchPanel.Padding = new BorderDouble(0); { searchInput = new MHTextEditWidget(messageWhenEmptyAndNotSelected: "Search Library".Localize()); searchInput.Name = "Search Library Edit"; searchInput.Margin = new BorderDouble(0, 3, 0, 0); searchInput.HAnchor = HAnchor.ParentLeftRight; searchInput.VAnchor = VAnchor.ParentCenter; searchInput.ActualTextEditWidget.EnterPressed += new KeyEventHandler(searchInputEnterPressed); double oldWidth = editButtonFactory.FixedWidth; editButtonFactory.FixedWidth = 0; Button searchButton = editButtonFactory.Generate(LocalizedString.Get("Search"), centerText: true); searchButton.Name = "Search Library Button"; searchButton.Click += searchButtonClick; editButtonFactory.FixedWidth = oldWidth; searchPanel.AddChild(enterEditModeButton); searchPanel.AddChild(leaveEditModeButton); searchPanel.AddChild(searchInput); searchPanel.AddChild(searchButton); } return searchPanel; }
public PrintLibraryWidget() { currentPrintLibraryWidget = this; SetDisplayAttributes(); textImageButtonFactory.borderWidth = 0; editButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor; editButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor; editButtonFactory.disabledTextColor = ActiveTheme.Instance.TabLabelUnselected; editButtonFactory.disabledFillColor = new RGBA_Bytes(); editButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor; editButtonFactory.borderWidth = 0; editButtonFactory.Margin = new BorderDouble(10, 0); FlowLayoutWidget allControls = new FlowLayoutWidget(FlowDirection.TopToBottom); { enterEditModeButton = editButtonFactory.Generate("Edit".Localize(), centerText: true); enterEditModeButton.Click += enterEditModeButtonClick; leaveEditModeButton = editButtonFactory.Generate("Done".Localize(), centerText: true); leaveEditModeButton.Click += leaveEditModeButtonClick; // make sure the buttons are the same size even when localized if (leaveEditModeButton.Width < enterEditModeButton.Width) { editButtonFactory.FixedWidth = enterEditModeButton.Width; leaveEditModeButton = editButtonFactory.Generate("Done".Localize(), centerText: true); leaveEditModeButton.Click += leaveEditModeButtonClick; } else { editButtonFactory.FixedWidth = leaveEditModeButton.Width; enterEditModeButton = editButtonFactory.Generate("Edit".Localize(), centerText: true); enterEditModeButton.Click += enterEditModeButtonClick; } enterEditModeButton.Name = "Library Edit Button"; leaveEditModeButton.Visible = false; searchPanel = new FlowLayoutWidget(); searchPanel.BackgroundColor = ActiveTheme.Instance.TransparentDarkOverlay; searchPanel.HAnchor = HAnchor.ParentLeftRight; searchPanel.Padding = new BorderDouble(0); { searchInput = new MHTextEditWidget(messageWhenEmptyAndNotSelected: "Search Library".Localize()); searchInput.Name = "Search Library Edit"; searchInput.Margin = new BorderDouble(0, 3, 0, 0); searchInput.HAnchor = HAnchor.ParentLeftRight; searchInput.VAnchor = VAnchor.ParentCenter; searchInput.ActualTextEditWidget.EnterPressed += new KeyEventHandler(searchInputEnterPressed); double oldWidth = editButtonFactory.FixedWidth; editButtonFactory.FixedWidth = 0; Button searchButton = editButtonFactory.Generate(LocalizedString.Get("Search"), centerText: true); searchButton.Name = "Search Library Button"; searchButton.Click += searchButtonClick; editButtonFactory.FixedWidth = oldWidth; searchPanel.AddChild(enterEditModeButton); searchPanel.AddChild(leaveEditModeButton); searchPanel.AddChild(searchInput); searchPanel.AddChild(searchButton); } searchPanel.Visible = false; FlowLayoutWidget navigationPanel = new FlowLayoutWidget(); navigationPanel.HAnchor = HAnchor.ParentLeftRight; navigationPanel.Padding = new BorderDouble(0); navigationPanel.BackgroundColor = ActiveTheme.Instance.TransparentLightOverlay; navigationLabel = new TextWidget("My Library".Localize(), pointSize: 14); navigationLabel.VAnchor = Agg.UI.VAnchor.ParentCenter; navigationLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor; navigationPanel.AddChild(new GuiWidget(50, 0)); //Add this as temporary balance to edit buttons navigationPanel.AddChild(new HorizontalSpacer()); navigationPanel.AddChild(navigationLabel); navigationPanel.AddChild(new HorizontalSpacer()); buttonPanel = new FlowLayoutWidget(); buttonPanel.HAnchor = HAnchor.ParentLeftRight; buttonPanel.Padding = new BorderDouble(0, 3); buttonPanel.MinimumSize = new Vector2(0, 46); AddLibraryButtonElements(); CreateEditBarButtons(); //allControls.AddChild(navigationPanel); allControls.AddChild(searchPanel); allControls.AddChild(itemOperationButtons); libraryDataView = new LibraryDataView(); breadCrumbWidget = new FolderBreadCrumbWidget(libraryDataView.SetCurrentLibraryProvider, libraryDataView.CurrentLibraryProvider); libraryDataView.ChangedCurrentLibraryProvider += breadCrumbWidget.SetBreadCrumbs; libraryDataView.ChangedCurrentLibraryProvider += LibraryProviderChanged; allControls.AddChild(breadCrumbWidget); allControls.AddChild(libraryDataView); allControls.AddChild(buttonPanel); } allControls.AnchorAll(); this.AddChild(allControls); AddHandlers(); }
private void DoLayout(string subjectText, string bodyText) { FlowLayoutWidget mainContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainer.AnchorAll(); GuiWidget labelContainer = new GuiWidget(); labelContainer.HAnchor = HAnchor.ParentLeftRight; labelContainer.Height = 30; TextWidget formLabel = new TextWidget("How can we improve?".Localize(), pointSize: 16); formLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor; formLabel.VAnchor = VAnchor.ParentTop; formLabel.HAnchor = HAnchor.ParentLeft; formLabel.Margin = new BorderDouble(6, 3, 6, 6); labelContainer.AddChild(formLabel); mainContainer.AddChild(labelContainer); centerContainer = new GuiWidget(); centerContainer.AnchorAll(); centerContainer.Padding = new BorderDouble(3, 0, 3, 3); messageContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); messageContainer.AnchorAll(); messageContainer.Visible = false; messageContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; messageContainer.Padding = new BorderDouble(10); submissionStatus = new TextWidget("Submitting your information...".Localize(), pointSize: 13); submissionStatus.AutoExpandBoundsToText = true; submissionStatus.Margin = new BorderDouble(0, 5); submissionStatus.TextColor = ActiveTheme.Instance.PrimaryTextColor; submissionStatus.HAnchor = HAnchor.ParentLeft; messageContainer.AddChild(submissionStatus); formContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); formContainer.AnchorAll(); formContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; formContainer.Padding = new BorderDouble(10); formContainer.AddChild(LabelGenerator("Subject*".Localize())); questionInput = new MHTextEditWidget(subjectText); questionInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(questionInput); questionErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(questionErrorMessage); formContainer.AddChild(LabelGenerator("Message*".Localize())); detailInput = new MHTextEditWidget(bodyText, pixelHeight: 120, multiLine: true); detailInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(detailInput); detailErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(detailErrorMessage); formContainer.AddChild(LabelGenerator("Email Address*".Localize())); emailInput = new MHTextEditWidget(); emailInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(emailInput); emailErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(emailErrorMessage); formContainer.AddChild(LabelGenerator("Name*".Localize())); nameInput = new MHTextEditWidget(); nameInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(nameInput); nameErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(nameErrorMessage); centerContainer.AddChild(formContainer); mainContainer.AddChild(centerContainer); FlowLayoutWidget buttonBottomPanel = GetButtonButtonPanel(); buttonBottomPanel.AddChild(submitButton); buttonBottomPanel.AddChild(cancelButton); buttonBottomPanel.AddChild(doneButton); mainContainer.AddChild(buttonBottomPanel); this.AddChild(mainContainer); }
public PrintLibraryWidget() { currentPrintLibraryWidget = this; SetDisplayAttributes(); textImageButtonFactory.borderWidth = 0; editButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor; editButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor; editButtonFactory.disabledTextColor = ActiveTheme.Instance.TabLabelUnselected; editButtonFactory.disabledFillColor = new RGBA_Bytes(); editButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor; editButtonFactory.borderWidth = 0; editButtonFactory.Margin = new BorderDouble(10, 0); FlowLayoutWidget allControls = new FlowLayoutWidget(FlowDirection.TopToBottom); { enterEditModeButton = editButtonFactory.Generate("Edit".Localize(), centerText: true); enterEditModeButton.Click += enterEditModeButtonClick; leaveEditModeButton = editButtonFactory.Generate("Done".Localize(), centerText: true); leaveEditModeButton.Click += leaveEditModeButtonClick; // make sure the buttons are the same size even when localized if (leaveEditModeButton.Width < enterEditModeButton.Width) { editButtonFactory.FixedWidth = enterEditModeButton.Width; leaveEditModeButton = editButtonFactory.Generate("Done".Localize(), centerText: true); leaveEditModeButton.Click += leaveEditModeButtonClick; } else { editButtonFactory.FixedWidth = leaveEditModeButton.Width; enterEditModeButton = editButtonFactory.Generate("Edit".Localize(), centerText: true); enterEditModeButton.Click += enterEditModeButtonClick; } leaveEditModeButton.Visible = false; FlowLayoutWidget searchPanel = new FlowLayoutWidget(); searchPanel.BackgroundColor = ActiveTheme.Instance.TransparentDarkOverlay; searchPanel.HAnchor = HAnchor.ParentLeftRight; searchPanel.Padding = new BorderDouble(0); { searchInput = new MHTextEditWidget(messageWhenEmptyAndNotSelected: "Search Library".Localize()); searchInput.Margin = new BorderDouble(0, 3, 0, 0); searchInput.HAnchor = HAnchor.ParentLeftRight; searchInput.VAnchor = VAnchor.ParentCenter; searchInput.ActualTextEditWidget.EnterPressed += new KeyEventHandler(searchInputEnterPressed); double oldWidth = editButtonFactory.FixedWidth; editButtonFactory.FixedWidth = 0; Button searchButton = editButtonFactory.Generate(LocalizedString.Get("Search"), centerText: true); searchButton.Click += searchButtonClick; editButtonFactory.FixedWidth = oldWidth; searchPanel.AddChild(enterEditModeButton); searchPanel.AddChild(leaveEditModeButton); searchPanel.AddChild(searchInput); searchPanel.AddChild(searchButton); } FlowLayoutWidget navigationPanel = new FlowLayoutWidget(); navigationPanel.HAnchor = HAnchor.ParentLeftRight; navigationPanel.Padding = new BorderDouble(0); navigationPanel.BackgroundColor = ActiveTheme.Instance.TransparentLightOverlay; navigationLabel = new TextWidget("My Library".Localize(), pointSize: 14); navigationLabel.VAnchor = Agg.UI.VAnchor.ParentCenter; navigationLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor; navigationPanel.AddChild(new GuiWidget(50, 0)); //Add this as temporary balance to edit buttons navigationPanel.AddChild(new HorizontalSpacer()); navigationPanel.AddChild(navigationLabel); navigationPanel.AddChild(new HorizontalSpacer()); buttonPanel = new FlowLayoutWidget(); buttonPanel.HAnchor = HAnchor.ParentLeftRight; buttonPanel.Padding = new BorderDouble(0, 3); buttonPanel.MinimumSize = new Vector2(0, 46); AddLibraryButtonElements(); CreateEditBarButtons(); //allControls.AddChild(navigationPanel); allControls.AddChild(searchPanel); allControls.AddChild(itemOperationButtons); libraryDataView = new LibraryDataView(); breadCrumbWidget = new FolderBreadCrumbWidget(libraryDataView.SetCurrentLibraryProvider, libraryDataView.CurrentLibraryProvider); libraryDataView.ChangedCurrentLibraryProvider += breadCrumbWidget.SetBreadCrumbs; libraryDataView.ChangedCurrentLibraryProvider += ClearSearchWidget; allControls.AddChild(breadCrumbWidget); allControls.AddChild(libraryDataView); allControls.AddChild(buttonPanel); } allControls.AnchorAll(); this.AddChild(allControls); AddHandlers(); }
private GuiWidget CreateSettingInfoUIControls(OrganizerSettingsData settingData, double minSettingNameWidth) { FlowLayoutWidget leftToRightLayout = new FlowLayoutWidget(); if (ActiveSliceSettings.Instance.Contains(settingData.SlicerConfigName)) { int intEditWidth = 60; int doubleEditWidth = 60; int vectorXYEditWidth = 60; int multiLineEditHeight = 60; string sliceSettingValue = ActiveSliceSettings.Instance.GetActiveValue(settingData.SlicerConfigName); leftToRightLayout.Margin = new BorderDouble(0, 5); leftToRightLayout.HAnchor |= Agg.UI.HAnchor.Max_FitToChildren_ParentWidth; if (settingData.DataEditType != OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT) { string convertedNewLines = settingData.PresentationName.Replace("\\n ", "\n"); convertedNewLines = convertedNewLines.Replace("\\n", "\n"); convertedNewLines = new LocalizedString (convertedNewLines).Translated; TextWidget settingName = new TextWidget(convertedNewLines); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.Width = minSettingNameWidth; //settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); leftToRightLayout.AddChild(settingName); } switch (settingData.DataEditType) { case OrganizerSettingsData.DataEditTypes.INT: { int currentValue = 0; int.TryParse(sliceSettingValue, out currentValue); MHNumberEdit intEditWidget = new MHNumberEdit(currentValue, pixelWidth: intEditWidth, tabIndex: tabIndexForItem++); intEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(intEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowNegatives: true, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.POSITVE_DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.OFFSET: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, allowNegatives: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE_OR_PERCENT: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 60, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { TextEditWidget textEditWidget = (TextEditWidget)sender; string text = textEditWidget.Text; text = text.Trim(); bool isPercent = text.Contains("%"); if(isPercent) { text = text.Substring(0, text.IndexOf("%")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isPercent) { text += "%"; } textEditWidget.Text = text; SaveSetting(settingData.SlicerConfigName, textEditWidget.Text); }; leftToRightLayout.AddChild(stringEdit); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.CHECK_BOX: { CheckBox checkBoxWidget = new CheckBox(""); checkBoxWidget.VAnchor = Agg.UI.VAnchor.ParentBottom; checkBoxWidget.TextColor = ActiveTheme.Instance.PrimaryTextColor; checkBoxWidget.Checked = (sliceSettingValue == "1"); checkBoxWidget.CheckedStateChanged += (sender, e) => { if (((CheckBox)sender).Checked) { SaveSetting(settingData.SlicerConfigName, "1"); } else { SaveSetting(settingData.SlicerConfigName, "0"); } }; leftToRightLayout.AddChild(checkBoxWidget); } break; case OrganizerSettingsData.DataEditTypes.STRING: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 120, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text); }; leftToRightLayout.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT: { string convertedNewLines = sliceSettingValue.Replace("\\n", "\n"); MHTextEditWidget stringEdit = new MHTextEditWidget(convertedNewLines, pixelWidth: 320, pixelHeight: multiLineEditHeight, multiLine: true, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text.Replace("\n", "\\n")); }; leftToRightLayout.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.LIST: { StyledDropDownList selectableOptions = new StyledDropDownList("None", Direction.Up); selectableOptions.Margin = new BorderDouble(); string[] listItems = settingData.ExtraSettings.Split(','); foreach (string listItem in listItems) { MenuItem newItem = selectableOptions.AddItem(listItem); if (newItem.Text == sliceSettingValue) { selectableOptions.SelectedValue = sliceSettingValue; } newItem.Selected += (sender, e) => { MenuItem menuItem = ((MenuItem)sender); SaveSetting(settingData.SlicerConfigName, menuItem.Text); }; } leftToRightLayout.AddChild(selectableOptions); } break; case OrganizerSettingsData.DataEditTypes.VECTOR2: { string[] xyValueStrings = sliceSettingValue.Split(','); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(xText); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(yText); } } break; case OrganizerSettingsData.DataEditTypes.OFFSET2: { string[] xyValueStrings = sliceSettingValue.Split('x'); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(xText); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(yText); } } break; default: TextWidget missingSetting = new TextWidget(String.Format("Missing the setting for '{0}'.", settingData.DataEditType.ToString())); missingSetting.TextColor = ActiveTheme.Instance.PrimaryTextColor; missingSetting.BackgroundColor = RGBA_Bytes.Red; leftToRightLayout.AddChild(missingSetting); break; } } else // the setting we think we are adding is not in the config.ini it may have been depricated { TextWidget settingName = new TextWidget(String.Format("Setting '{0}' not found in config.ini", settingData.SlicerConfigName)); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); leftToRightLayout.AddChild(settingName); leftToRightLayout.BackgroundColor = RGBA_Bytes.Red; } return leftToRightLayout; }
public EditConnectionWidget(ConnectionWindow windowController, GuiWidget containerWindowToClose, Printer activePrinter = null, object state = null) : base(windowController, containerWindowToClose) { textImageButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.disabledTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.borderWidth = 0; linkButtonFactory.textColor = ActiveTheme.Instance.PrimaryTextColor; linkButtonFactory.fontSize = 8; this.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; this.AnchorAll(); this.Padding = new BorderDouble(0); //To be re-enabled once native borders are turned off GuiWidget mainContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainer.AnchorAll(); mainContainer.Padding = new BorderDouble(3, 3, 3, 5); mainContainer.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; string headerTitle; if (activePrinter == null) { headerTitle = string.Format("Add a Printer"); this.addNewPrinterFlag = true; this.ActivePrinter = new Printer(); this.ActivePrinter.Name = "Default Printer"; this.ActivePrinter.BaudRate = "250000"; try { this.ActivePrinter.ComPort = FrostedSerialPort.GetPortNames().FirstOrDefault(); } catch { //No active COM ports } } else { this.ActivePrinter = activePrinter; string editHeaderTitleTxt = LocalizedString.Get("Edit"); headerTitle = string.Format("{1} - {0}", this.ActivePrinter.Name, editHeaderTitleTxt); if (this.ActivePrinter.BaudRate == null) { this.ActivePrinter.BaudRate = "250000"; } if (this.ActivePrinter.ComPort == null) { try { this.ActivePrinter.ComPort = FrostedSerialPort.GetPortNames().FirstOrDefault(); } catch { //No active COM ports } } } FlowLayoutWidget headerRow = new FlowLayoutWidget(FlowDirection.LeftToRight); headerRow.Margin = new BorderDouble(0, 3, 0, 0); headerRow.Padding = new BorderDouble(0, 3, 0, 3); headerRow.HAnchor = HAnchor.ParentLeftRight; { TextWidget headerLabel = new TextWidget(headerTitle, pointSize: 14); headerLabel.TextColor = this.defaultTextColor; headerRow.AddChild(headerLabel); } ConnectionControlContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); ConnectionControlContainer.Padding = new BorderDouble(5); ConnectionControlContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; ConnectionControlContainer.HAnchor = HAnchor.ParentLeftRight; { TextWidget printerNameLabel = new TextWidget(LocalizedString.Get("Printer Name"), 0, 0, 10); printerNameLabel.TextColor = this.defaultTextColor; printerNameLabel.HAnchor = HAnchor.ParentLeftRight; printerNameLabel.Margin = new BorderDouble(0, 0, 0, 1); printerNameInput = new MHTextEditWidget(this.ActivePrinter.Name); printerNameInput.HAnchor |= HAnchor.ParentLeftRight; comPortLabelWidget = new FlowLayoutWidget(); Button refreshComPorts = linkButtonFactory.Generate(LocalizedString.Get("(refresh)")); refreshComPorts.Margin = new BorderDouble(left: 5); refreshComPorts.VAnchor = VAnchor.ParentBottom; refreshComPorts.Click += new EventHandler(RefreshComPorts); FlowLayoutWidget comPortContainer = null; #if !__ANDROID__ TextWidget comPortLabel = new TextWidget(LocalizedString.Get("Serial Port"), 0, 0, 10); comPortLabel.TextColor = this.defaultTextColor; comPortLabelWidget.AddChild(comPortLabel); comPortLabelWidget.AddChild(refreshComPorts); comPortLabelWidget.Margin = new BorderDouble(0, 0, 0, 10); comPortLabelWidget.HAnchor = HAnchor.ParentLeftRight; comPortContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); comPortContainer.Margin = new BorderDouble(0); comPortContainer.HAnchor = HAnchor.ParentLeftRight; int portIndex = 0; foreach (string serialPort in FrostedSerialPort.GetPortNames()) { //Filter com port list based on usb type (applies to Mac mostly) bool looks_like_mac = serialPort.StartsWith("/dev/tty."); bool looks_like_pc = serialPort.StartsWith("COM"); if (looks_like_mac || looks_like_pc) { SerialPortIndexRadioButton comPortOption = createComPortOption(serialPort); comPortContainer.AddChild(comPortOption); portIndex++; } } //If there are no com ports in the filtered list assume we are missing something and show the unfiltered list if (portIndex == 0) { foreach (string serialPort in FrostedSerialPort.GetPortNames()) { SerialPortIndexRadioButton comPortOption = createComPortOption(serialPort); comPortContainer.AddChild(comPortOption); portIndex++; } } if (!printerComPortIsAvailable && this.ActivePrinter.ComPort != null) { SerialPortIndexRadioButton comPortOption = createComPortOption(this.ActivePrinter.ComPort); comPortOption.Enabled = false; comPortContainer.AddChild(comPortOption); portIndex++; } //If there are still no com ports show a message to that effect if (portIndex == 0) { TextWidget comPortOption = new TextWidget(LocalizedString.Get("No COM ports available")); comPortOption.Margin = new BorderDouble(3, 6, 5, 6); comPortOption.TextColor = this.subContainerTextColor; comPortContainer.AddChild(comPortOption); } #endif TextWidget baudRateLabel = new TextWidget(LocalizedString.Get("Baud Rate"), 0, 0, 10); baudRateLabel.TextColor = this.defaultTextColor; baudRateLabel.Margin = new BorderDouble(0, 0, 0, 10); baudRateLabel.HAnchor = HAnchor.ParentLeftRight; baudRateWidget = GetBaudRateWidget(); baudRateWidget.HAnchor = HAnchor.ParentLeftRight; FlowLayoutWidget printerMakeContainer = createPrinterMakeContainer(); FlowLayoutWidget printerModelContainer = createPrinterModelContainer(); enableAutoconnect = new CheckBox(LocalizedString.Get("Auto Connect")); enableAutoconnect.TextColor = ActiveTheme.Instance.PrimaryTextColor; enableAutoconnect.Margin = new BorderDouble(top: 10); enableAutoconnect.HAnchor = HAnchor.ParentLeft; if (this.ActivePrinter.AutoConnectFlag) { enableAutoconnect.Checked = true; } if (state as StateBeforeRefresh != null) { enableAutoconnect.Checked = ((StateBeforeRefresh)state).autoConnect; } SerialPortControl serialPortScroll = new SerialPortControl(); if (comPortContainer != null) { serialPortScroll.AddChild(comPortContainer); } ConnectionControlContainer.VAnchor = VAnchor.ParentBottomTop; ConnectionControlContainer.AddChild(printerNameLabel); ConnectionControlContainer.AddChild(printerNameInput); ConnectionControlContainer.AddChild(printerMakeContainer); ConnectionControlContainer.AddChild(printerModelContainer); ConnectionControlContainer.AddChild(comPortLabelWidget); ConnectionControlContainer.AddChild(serialPortScroll); ConnectionControlContainer.AddChild(baudRateLabel); ConnectionControlContainer.AddChild(baudRateWidget); #if !__ANDROID__ ConnectionControlContainer.AddChild(enableAutoconnect); #endif } FlowLayoutWidget buttonContainer = new FlowLayoutWidget(FlowDirection.LeftToRight); buttonContainer.HAnchor = HAnchor.ParentLeft | HAnchor.ParentRight; //buttonContainer.VAnchor = VAnchor.BottomTop; buttonContainer.Margin = new BorderDouble(0, 5, 0, 3); { //Construct buttons saveButton = textImageButtonFactory.Generate(LocalizedString.Get("Save")); //saveButton.VAnchor = VAnchor.Bottom; cancelButton = textImageButtonFactory.Generate(LocalizedString.Get("Cancel")); //cancelButton.VAnchor = VAnchor.Bottom; cancelButton.Click += new EventHandler(CancelButton_Click); //Add buttons to buttonContainer buttonContainer.AddChild(saveButton); buttonContainer.AddChild(new HorizontalSpacer()); buttonContainer.AddChild(cancelButton); } //mainContainer.AddChild(new PrinterChooser()); mainContainer.AddChild(headerRow); mainContainer.AddChild(ConnectionControlContainer); mainContainer.AddChild(buttonContainer); this.AddChild(mainContainer); BindSaveButtonHandlers(); BindBaudRateHandlers(); }
public EditConnectionWidget(ConnectionWindow windowController, GuiWidget containerWindowToClose, Printer activePrinter = null, object state = null) : base(windowController, containerWindowToClose) { textImageButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.disabledTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.borderWidth = 0; linkButtonFactory.textColor = ActiveTheme.Instance.PrimaryTextColor; linkButtonFactory.fontSize = 8; this.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; this.AnchorAll(); this.Padding = new BorderDouble(0); //To be re-enabled once native borders are turned off GuiWidget mainContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainer.AnchorAll(); mainContainer.Padding = new BorderDouble(3, 3, 3, 5); mainContainer.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; string headerTitle; if (activePrinter == null) { headerTitle = string.Format("Add a Printer"); this.addNewPrinterFlag = true; this.ActivePrinter = new Printer(); this.ActivePrinter.Name = "Default Printer"; this.ActivePrinter.BaudRate = "250000"; try { this.ActivePrinter.ComPort = FrostedSerialPort.GetPortNames().FirstOrDefault(); } catch (Exception e) { Debug.Print(e.Message); GuiWidget.BreakInDebugger(); //No active COM ports } } else { this.ActivePrinter = activePrinter; string editHeaderTitleTxt = LocalizedString.Get("Edit"); headerTitle = string.Format("{1} - {0}", this.ActivePrinter.Name, editHeaderTitleTxt); if (this.ActivePrinter.BaudRate == null) { this.ActivePrinter.BaudRate = "250000"; } if (this.ActivePrinter.ComPort == null) { try { this.ActivePrinter.ComPort = FrostedSerialPort.GetPortNames().FirstOrDefault(); } catch (Exception e) { Debug.Print(e.Message); GuiWidget.BreakInDebugger(); //No active COM ports } } } FlowLayoutWidget headerRow = new FlowLayoutWidget(FlowDirection.LeftToRight); headerRow.Margin = new BorderDouble(0, 3, 0, 0); headerRow.Padding = new BorderDouble(0, 3, 0, 3); headerRow.HAnchor = HAnchor.ParentLeftRight; { TextWidget headerLabel = new TextWidget(headerTitle, pointSize: 14); headerLabel.TextColor = this.defaultTextColor; headerRow.AddChild(headerLabel); } ConnectionControlContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); ConnectionControlContainer.Padding = new BorderDouble(5); ConnectionControlContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; ConnectionControlContainer.HAnchor = HAnchor.ParentLeftRight; { TextWidget printerNameLabel = new TextWidget(LocalizedString.Get("Printer Name"), 0, 0, 10); printerNameLabel.TextColor = this.defaultTextColor; printerNameLabel.HAnchor = HAnchor.ParentLeftRight; printerNameLabel.Margin = new BorderDouble(0, 0, 0, 1); printerNameInput = new MHTextEditWidget(this.ActivePrinter.Name); printerNameInput.HAnchor |= HAnchor.ParentLeftRight; comPortLabelWidget = new FlowLayoutWidget(); Button refreshComPorts = linkButtonFactory.Generate(LocalizedString.Get("(refresh)")); refreshComPorts.Margin = new BorderDouble(left: 5); refreshComPorts.VAnchor = VAnchor.ParentBottom; refreshComPorts.Click += new EventHandler(RefreshComPorts); FlowLayoutWidget comPortContainer = null; #if !__ANDROID__ TextWidget comPortLabel = new TextWidget(LocalizedString.Get("Serial Port"), 0, 0, 10); comPortLabel.TextColor = this.defaultTextColor; comPortLabelWidget.AddChild(comPortLabel); comPortLabelWidget.AddChild(refreshComPorts); comPortLabelWidget.Margin = new BorderDouble(0, 0, 0, 10); comPortLabelWidget.HAnchor = HAnchor.ParentLeftRight; comPortContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); comPortContainer.Margin = new BorderDouble(0); comPortContainer.HAnchor = HAnchor.ParentLeftRight; CreateSerialPortControls(comPortContainer, this.ActivePrinter.ComPort); #endif TextWidget baudRateLabel = new TextWidget(LocalizedString.Get("Baud Rate"), 0, 0, 10); baudRateLabel.TextColor = this.defaultTextColor; baudRateLabel.Margin = new BorderDouble(0, 0, 0, 10); baudRateLabel.HAnchor = HAnchor.ParentLeftRight; baudRateWidget = GetBaudRateWidget(); baudRateWidget.HAnchor = HAnchor.ParentLeftRight; FlowLayoutWidget printerMakeContainer = createPrinterMakeContainer(); FlowLayoutWidget printerModelContainer = createPrinterModelContainer(); enableAutoconnect = new CheckBox(LocalizedString.Get("Auto Connect")); enableAutoconnect.TextColor = ActiveTheme.Instance.PrimaryTextColor; enableAutoconnect.Margin = new BorderDouble(top: 10); enableAutoconnect.HAnchor = HAnchor.ParentLeft; if (this.ActivePrinter.AutoConnectFlag) { enableAutoconnect.Checked = true; } if (state as StateBeforeRefresh != null) { enableAutoconnect.Checked = ((StateBeforeRefresh)state).autoConnect; } SerialPortControl serialPortScroll = new SerialPortControl(); if (comPortContainer != null) { serialPortScroll.AddChild(comPortContainer); } ConnectionControlContainer.VAnchor = VAnchor.ParentBottomTop; ConnectionControlContainer.AddChild(printerNameLabel); ConnectionControlContainer.AddChild(printerNameInput); ConnectionControlContainer.AddChild(printerMakeContainer); ConnectionControlContainer.AddChild(printerModelContainer); ConnectionControlContainer.AddChild(comPortLabelWidget); ConnectionControlContainer.AddChild(serialPortScroll); ConnectionControlContainer.AddChild(baudRateLabel); ConnectionControlContainer.AddChild(baudRateWidget); #if !__ANDROID__ ConnectionControlContainer.AddChild(enableAutoconnect); #endif } FlowLayoutWidget buttonContainer = new FlowLayoutWidget(FlowDirection.LeftToRight); buttonContainer.HAnchor = HAnchor.ParentLeft | HAnchor.ParentRight; //buttonContainer.VAnchor = VAnchor.BottomTop; buttonContainer.Margin = new BorderDouble(0, 5, 0, 3); { //Construct buttons saveButton = textImageButtonFactory.Generate(LocalizedString.Get("Save")); //saveButton.VAnchor = VAnchor.Bottom; cancelButton = textImageButtonFactory.Generate(LocalizedString.Get("Cancel")); //cancelButton.VAnchor = VAnchor.Bottom; cancelButton.Click += new EventHandler(CancelButton_Click); //Add buttons to buttonContainer buttonContainer.AddChild(saveButton); buttonContainer.AddChild(new HorizontalSpacer()); buttonContainer.AddChild(cancelButton); } //mainContainer.AddChild(new PrinterChooser()); mainContainer.AddChild(headerRow); mainContainer.AddChild(ConnectionControlContainer); mainContainer.AddChild(buttonContainer); #if __ANDROID__ this.AddChild(new SoftKeyboardContentOffset(mainContainer, SoftKeyboardContentOffset.AndroidKeyboardOffset)); #else this.AddChild(mainContainer); #endif BindSaveButtonHandlers(); BindBaudRateHandlers(); }
private FlowLayoutWidget createPrinterNameContainer() { TextWidget printerNameLabel = new TextWidget("Name".Localize() + ":", 0, 0, 12) { TextColor = ActiveTheme.Instance.PrimaryTextColor, HAnchor = HAnchor.ParentLeftRight, Margin = new BorderDouble(0, 4, 0, 1) }; printerNameInput = new MHTextEditWidget("") { HAnchor = HAnchor.ParentLeftRight, }; printerNameInput.KeyPressed += (s, e) => this.usingDefaultName = false; printerNameError = new TextWidget("", 0, 0, 10) { TextColor = ActiveTheme.Instance.PrimaryTextColor, HAnchor = HAnchor.ParentLeftRight, Margin = new BorderDouble(top: 3) }; FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom); container.Margin = new BorderDouble(0, 5); container.AddChild(printerNameLabel); container.AddChild(printerNameInput); container.AddChild(printerNameError); container.HAnchor = HAnchor.ParentLeftRight; return container; }
public AddPrinterWidget(ThemeConfig theme, Action <bool> nextButtonEnabled) : base(theme) { this.nextButtonEnabled = nextButtonEnabled; this.ExistingPrinterNames = new HashSet <string>(ProfileManager.Instance.ActiveProfiles.Select(p => p.Name)); this.Name = "AddPrinterWidget"; horizontalSplitter.Panel2.Padding = theme.DefaultContainerPadding; treeView.AfterSelect += this.TreeView_AfterSelect; UiThread.RunOnIdle(() => { foreach (var oem in OemSettings.Instance.OemProfiles.OrderBy(o => o.Key)) { var rootNode = this.CreateTreeNode(oem); rootNode.Expandable = true; rootNode.TreeView = treeView; rootNode.Load += (s, e) => { var image = OemSettings.Instance.GetIcon(oem.Key); SetImage(rootNode, image); }; contentPanel.AddChild(rootNode); } this.TreeLoaded = true; }); var container = new FlowLayoutWidget(FlowDirection.TopToBottom) { HAnchor = HAnchor.Stretch, Margin = new BorderDouble(theme.DefaultContainerPadding).Clone(top: 0) }; var panel2Column = new FlowLayoutWidget(FlowDirection.TopToBottom) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Stretch }; panel2Column.AddChild(new TextWidget("Select a printer to continue".Localize(), pointSize: theme.DefaultFontSize, textColor: theme.TextColor)); nameSection = new SectionWidget("New Printer Name".Localize(), container, theme, expandingContent: false) { HAnchor = HAnchor.Stretch, Padding = theme.ToolbarPadding, Enabled = false }; theme.ApplyBoxStyle(nameSection); // Reset right margin nameSection.Margin = nameSection.Margin.Clone(right: theme.DefaultContainerPadding); printerInfo = new FlowLayoutWidget() { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Fit }; nameSection.BackgroundColor = theme.MinimalShade; nameSection.Margin = new BorderDouble(theme.DefaultContainerPadding).Clone(left: 0); panel2Column.AddChild(nameSection); panel2Column.AddChild(PrinterNameError = new TextWidget("", 0, 0, 10) { TextColor = Color.Red, HAnchor = HAnchor.Stretch, Margin = new BorderDouble(top: 3) }); var scrollable = new ScrollableWidget(autoScroll: true) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Stretch, }; scrollable.ScrollArea.HAnchor = HAnchor.Stretch; // Padding allows space for scrollbar printerInfo.Padding = new BorderDouble(right: theme.DefaultContainerPadding + 2); scrollable.AddChild(printerInfo); panel2Column.AddChild(scrollable); horizontalSplitter.Panel2.Padding = horizontalSplitter.Panel2.Padding.Clone(right: 0, bottom: 0); horizontalSplitter.Panel2.AddChild(panel2Column); printerNameInput = new MHTextEditWidget("", theme) { HAnchor = HAnchor.Stretch, }; printerNameInput.ActualTextEditWidget.EditComplete += (s, e) => { this.ValidateControls(); this.usingDefaultName = false; }; container.AddChild(printerNameInput); }
private void DoLayout(string subjectText, string bodyText) { FlowLayoutWidget mainContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainer.AnchorAll(); GuiWidget labelContainer = new GuiWidget(); labelContainer.HAnchor = HAnchor.ParentLeftRight; labelContainer.Height = 30; TextWidget formLabel = new TextWidget(new LocalizedString("How can we help?").Translated, pointSize: 16); formLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor; formLabel.VAnchor = VAnchor.ParentTop; formLabel.HAnchor = HAnchor.ParentLeft; formLabel.Margin = new BorderDouble(10, 10); labelContainer.AddChild(formLabel); mainContainer.AddChild(labelContainer); centerContainer = new GuiWidget(); centerContainer.AnchorAll(); centerContainer.Padding = new BorderDouble(10); messageContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); messageContainer.AnchorAll(); messageContainer.Visible = false; messageContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; messageContainer.Padding = new BorderDouble(10); submissionStatus = new TextWidget(new LocalizedString("Submitting your information...").Translated, pointSize: 13); submissionStatus.AutoExpandBoundsToText = true; submissionStatus.Margin = new BorderDouble(0, 5); submissionStatus.TextColor = RGBA_Bytes.White; submissionStatus.HAnchor = HAnchor.ParentLeft; messageContainer.AddChild(submissionStatus); formContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); formContainer.AnchorAll(); formContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; formContainer.Padding = new BorderDouble(10); formContainer.AddChild(LabelGenerator(new LocalizedString("Question*").Translated)); formContainer.AddChild(LabelGenerator(new LocalizedString("Briefly describe your question").Translated, 9, 14)); questionInput = new MHTextEditWidget(subjectText); questionInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(questionInput); questionErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(questionErrorMessage); formContainer.AddChild(LabelGenerator(new LocalizedString("Details*").Translated)); formContainer.AddChild(LabelGenerator(new LocalizedString("Fill in the details here").Translated, 9, 14)); detailInput = new MHTextEditWidget(bodyText, pixelHeight: 120, multiLine: true); detailInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(detailInput); detailErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(detailErrorMessage); formContainer.AddChild(LabelGenerator(new LocalizedString("Your Email Address*").Translated)); emailInput = new MHTextEditWidget(); emailInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(emailInput); emailErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(emailErrorMessage); formContainer.AddChild(LabelGenerator(new LocalizedString("Your Name*").Translated)); nameInput = new MHTextEditWidget(); nameInput.HAnchor = HAnchor.ParentLeftRight; formContainer.AddChild(nameInput); nameErrorMessage = ErrorMessageGenerator(); formContainer.AddChild(nameErrorMessage); centerContainer.AddChild(formContainer); mainContainer.AddChild(centerContainer); FlowLayoutWidget buttonBottomPanel = GetButtonButtonPanel(); buttonBottomPanel.AddChild(submitButton); buttonBottomPanel.AddChild(cancelButton); buttonBottomPanel.AddChild(doneButton); mainContainer.AddChild(buttonBottomPanel); this.AddChild(mainContainer); }
private GuiWidget CreateSettingInfoUIControls(OrganizerSettingsData settingData, double minSettingNameWidth) { GuiWidget container = new GuiWidget(); FlowLayoutWidget leftToRightLayout = new FlowLayoutWidget(); bool addQualityOverlay = false; bool addMaterialOverlay = false; RGBA_Bytes qualityOverlayColor = new RGBA_Bytes(255, 255, 0, 40); RGBA_Bytes materialOverlayColor = new RGBA_Bytes(255, 127, 0, 40); if (ActiveSliceSettings.Instance.Contains(settingData.SlicerConfigName)) { int intEditWidth = 60; int doubleEditWidth = 60; int vectorXYEditWidth = 60; int multiLineEditHeight = 60; string sliceSettingValue = ActiveSliceSettings.Instance.GetActiveValue(settingData.SlicerConfigName); leftToRightLayout.Margin = new BorderDouble(0, 2); leftToRightLayout.Padding = new BorderDouble(3); leftToRightLayout.HAnchor = Agg.UI.HAnchor.ParentLeftRight; if (settingData.DataEditType != OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT) { string convertedNewLines = settingData.PresentationName.Replace("\\n ", "\n"); convertedNewLines = convertedNewLines.Replace("\\n", "\n"); convertedNewLines = LocalizedString.Get(convertedNewLines); TextWidget settingName = new TextWidget(convertedNewLines); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, 3)) { addMaterialOverlay = true; } else if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, 2)) { addQualityOverlay = true; } settingName.Width = minSettingNameWidth; //settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); leftToRightLayout.AddChild(settingName); } switch (settingData.DataEditType) { case OrganizerSettingsData.DataEditTypes.INT: { int currentValue = 0; int.TryParse(sliceSettingValue, out currentValue); MHNumberEdit intEditWidget = new MHNumberEdit(currentValue, pixelWidth: intEditWidth, tabIndex: tabIndexForItem++); intEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(intEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowNegatives: true, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.POSITIVE_DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.OFFSET: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, allowNegatives: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE_OR_PERCENT: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 60, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { TextEditWidget textEditWidget = (TextEditWidget)sender; string text = textEditWidget.Text; text = text.Trim(); bool isPercent = text.Contains("%"); if (isPercent) { text = text.Substring(0, text.IndexOf("%")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isPercent) { text += "%"; } textEditWidget.Text = text; SaveSetting(settingData.SlicerConfigName, textEditWidget.Text); }; leftToRightLayout.AddChild(stringEdit); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.CHECK_BOX: { CheckBox checkBoxWidget = new CheckBox(""); checkBoxWidget.VAnchor = Agg.UI.VAnchor.ParentBottom; checkBoxWidget.TextColor = ActiveTheme.Instance.PrimaryTextColor; checkBoxWidget.Checked = (sliceSettingValue == "1"); checkBoxWidget.CheckedStateChanged += (sender, e) => { if (((CheckBox)sender).Checked) { SaveSetting(settingData.SlicerConfigName, "1"); } else { SaveSetting(settingData.SlicerConfigName, "0"); } }; leftToRightLayout.AddChild(checkBoxWidget); } break; case OrganizerSettingsData.DataEditTypes.STRING: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 120, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text); }; leftToRightLayout.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT: { string convertedNewLines = sliceSettingValue.Replace("\\n", "\n"); MHTextEditWidget stringEdit = new MHTextEditWidget(convertedNewLines, pixelWidth: 320, pixelHeight: multiLineEditHeight, multiLine: true, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text.Replace("\n", "\\n")); }; leftToRightLayout.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.LIST: { StyledDropDownList selectableOptions = new StyledDropDownList("None", maxHeight: 200); selectableOptions.Margin = new BorderDouble(); string[] listItems = settingData.ExtraSettings.Split(','); foreach (string listItem in listItems) { MenuItem newItem = selectableOptions.AddItem(listItem); if (newItem.Text == sliceSettingValue) { selectableOptions.SelectedLabel = sliceSettingValue; } newItem.Selected += (sender, e) => { MenuItem menuItem = ((MenuItem)sender); SaveSetting(settingData.SlicerConfigName, menuItem.Text); }; } leftToRightLayout.AddChild(selectableOptions); } break; case OrganizerSettingsData.DataEditTypes.VECTOR2: { string[] xyValueStrings = sliceSettingValue.Split(','); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(xText); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(yText); } } break; case OrganizerSettingsData.DataEditTypes.OFFSET2: { string[] xyValueStrings = sliceSettingValue.Split('x'); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(xText); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); }; leftToRightLayout.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(yText); } } break; default: TextWidget missingSetting = new TextWidget(String.Format("Missing the setting for '{0}'.", settingData.DataEditType.ToString())); missingSetting.TextColor = ActiveTheme.Instance.PrimaryTextColor; missingSetting.BackgroundColor = RGBA_Bytes.Red; leftToRightLayout.AddChild(missingSetting); break; } } else // the setting we think we are adding is not in the config.ini it may have been depricated { TextWidget settingName = new TextWidget(String.Format("Setting '{0}' not found in config.ini", settingData.SlicerConfigName)); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); leftToRightLayout.AddChild(settingName); leftToRightLayout.BackgroundColor = RGBA_Bytes.Red; } container.HAnchor = HAnchor.ParentLeftRight; container.VAnchor = VAnchor.FitToChildren; container.AddChild(leftToRightLayout); if (addQualityOverlay || addMaterialOverlay) { SettingPresetOverlay overlay = new SettingPresetOverlay(); overlay.HAnchor = HAnchor.ParentLeftRight; overlay.VAnchor = Agg.UI.VAnchor.ParentBottomTop; SettingPresetClick clickToEdit = new SettingPresetClick(); clickToEdit.HAnchor = HAnchor.ParentLeftRight; clickToEdit.VAnchor = Agg.UI.VAnchor.ParentBottomTop; clickToEdit.Visible = false; Button editButton = buttonFactory.Generate("Edit Preset".Localize().ToUpper()); editButton.HAnchor = Agg.UI.HAnchor.ParentCenter; editButton.VAnchor = Agg.UI.VAnchor.ParentCenter; clickToEdit.AddChild(editButton); if (addQualityOverlay) { overlay.OverlayColor = qualityOverlayColor; clickToEdit.OverlayColor = qualityOverlayColor; editButton.Click += (sender, e) => { if (ApplicationWidget.Instance.EditSlicePresetsWindow == null) { ApplicationWidget.Instance.EditSlicePresetsWindow = new SlicePresetsWindow(ReloadOptions, "Quality", "quality", false, ActivePrinterProfile.Instance.ActiveQualitySettingsID); ApplicationWidget.Instance.EditSlicePresetsWindow.Closed += (popupWindowSender, popupWindowSenderE) => { ApplicationWidget.Instance.EditSlicePresetsWindow = null; }; } else { ApplicationWidget.Instance.EditSlicePresetsWindow.ChangeToSlicePresetFromID(ActivePrinterProfile.Instance.ActiveQualitySettingsID); ApplicationWidget.Instance.EditSlicePresetsWindow.BringToFront(); } }; } else if (addMaterialOverlay) { overlay.OverlayColor = materialOverlayColor; clickToEdit.OverlayColor = materialOverlayColor; editButton.Click += (sender, e) => { if (ApplicationWidget.Instance.EditSlicePresetsWindow == null) { ApplicationWidget.Instance.EditSlicePresetsWindow = new SlicePresetsWindow(ReloadOptions, "Material", "material", false, ActivePrinterProfile.Instance.GetMaterialSetting(1)); ApplicationWidget.Instance.EditSlicePresetsWindow.Closed += (popupWindowSender, popupWindowSenderE) => { ApplicationWidget.Instance.EditSlicePresetsWindow = null; }; } else { ApplicationWidget.Instance.EditSlicePresetsWindow.ChangeToSlicePresetFromID(ActivePrinterProfile.Instance.GetMaterialSetting(1)); ApplicationWidget.Instance.EditSlicePresetsWindow.BringToFront(); } }; } container.MouseEnterBounds += (sender, e) => { UiThread.RunOnIdle((state) => { overlay.Visible = false; clickToEdit.Visible = true; }); }; container.MouseLeaveBounds += (sender, e) => { UiThread.RunOnIdle((state) => { overlay.Visible = true; clickToEdit.Visible = false; }); }; container.AddChild(overlay); container.AddChild(clickToEdit); } return(container); }
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(new LocalizedString("Import").Translated, "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(new LocalizedString("Delete").Translated); deleteFromLibraryButton.Margin = new BorderDouble(3, 0); deleteFromLibraryButton.Click += new ButtonBase.ButtonEventHandler(deleteFromQueueButton_Click); deleteFromLibraryButton.Visible = false; buttonPanel.AddChild(deleteFromLibraryButton); addToQueueButton = textImageButtonFactory.Generate(new LocalizedString("Add to Queue").Translated); 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(); }
public View3DTextCreator(Vector3 viewerVolume, Vector2 bedCenter, MeshViewerWidget.BedShape bedShape) { boldTypeFace = TypeFace.LoadFrom(StaticData.Instance.ReadAllText(Path.Combine("Fonts", "LiberationSans-Bold.svg"))); MeshGroupExtraData = new List<PlatingMeshGroupData>(); FlowLayoutWidget mainContainerTopToBottom = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainerTopToBottom.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth; mainContainerTopToBottom.VAnchor = Agg.UI.VAnchor.Max_FitToChildren_ParentHeight; FlowLayoutWidget centerPartPreviewAndControls = new FlowLayoutWidget(FlowDirection.LeftToRight); centerPartPreviewAndControls.AnchorAll(); GuiWidget viewArea = new GuiWidget(); viewArea.AnchorAll(); { meshViewerWidget = new MeshViewerWidget(viewerVolume, bedCenter, bedShape); meshViewerWidget.AllowBedRenderingWhenEmpty = true; meshViewerWidget.AnchorAll(); } viewArea.AddChild(meshViewerWidget); centerPartPreviewAndControls.AddChild(viewArea); mainContainerTopToBottom.AddChild(centerPartPreviewAndControls); FlowLayoutWidget buttonBottomPanel = new FlowLayoutWidget(FlowDirection.LeftToRight); buttonBottomPanel.HAnchor = HAnchor.ParentLeftRight; buttonBottomPanel.Padding = new BorderDouble(3, 3); buttonBottomPanel.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; buttonRightPanel = CreateRightButtonPanel(viewerVolume.y); // add in the plater tools { FlowLayoutWidget editToolBar = new FlowLayoutWidget(); processingProgressControl = new ProgressControl("Finding Parts:".Localize(), ActiveTheme.Instance.PrimaryTextColor, ActiveTheme.Instance.PrimaryAccentColor); processingProgressControl.VAnchor = Agg.UI.VAnchor.ParentCenter; editToolBar.AddChild(processingProgressControl); editToolBar.VAnchor |= Agg.UI.VAnchor.ParentCenter; editPlateButtonsContainer = new FlowLayoutWidget(); MHTextEditWidget textToAddWidget = new MHTextEditWidget("", pixelWidth: 300, messageWhenEmptyAndNotSelected: "Enter Text Here".Localize()); textToAddWidget.VAnchor = VAnchor.ParentCenter; textToAddWidget.Margin = new BorderDouble(5); editPlateButtonsContainer.AddChild(textToAddWidget); textToAddWidget.ActualTextEditWidget.EnterPressed += (object sender, KeyEventArgs keyEvent) => { InsertTextNow(textToAddWidget.Text); }; Button insertTextButton = textImageButtonFactory.Generate("Insert".Localize()); editPlateButtonsContainer.AddChild(insertTextButton); insertTextButton.Click += (sender, e) => { InsertTextNow(textToAddWidget.Text); }; KeyDown += (sender, e) => { KeyEventArgs keyEvent = e as KeyEventArgs; if (keyEvent != null && !keyEvent.Handled) { if (keyEvent.KeyCode == Keys.Escape) { if (meshSelectInfo.downOnPart) { meshSelectInfo.downOnPart = false; ScaleRotateTranslate translated = SelectedMeshTransform; translated.translation *= transformOnMouseDown; SelectedMeshTransform = translated; Invalidate(); } } } }; editToolBar.AddChild(editPlateButtonsContainer); buttonBottomPanel.AddChild(editToolBar); } GuiWidget buttonRightPanelHolder = new GuiWidget(HAnchor.FitToChildren, VAnchor.ParentBottomTop); centerPartPreviewAndControls.AddChild(buttonRightPanelHolder); buttonRightPanelHolder.AddChild(buttonRightPanel); viewControls3D = new ViewControls3D(meshViewerWidget); buttonRightPanelDisabledCover = new Cover(HAnchor.ParentLeftRight, VAnchor.ParentBottomTop); buttonRightPanelDisabledCover.BackgroundColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryBackgroundColor, 150); buttonRightPanelHolder.AddChild(buttonRightPanelDisabledCover); LockEditControls(); GuiWidget leftRightSpacer = new GuiWidget(); leftRightSpacer.HAnchor = HAnchor.ParentLeftRight; buttonBottomPanel.AddChild(leftRightSpacer); closeButton = textImageButtonFactory.Generate("Close".Localize()); buttonBottomPanel.AddChild(closeButton); mainContainerTopToBottom.AddChild(buttonBottomPanel); this.AddChild(mainContainerTopToBottom); this.AnchorAll(); meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation; AddChild(viewControls3D); // set the view to be a good angle and distance meshViewerWidget.TrackballTumbleWidget.TrackBallController.Scale = .06; meshViewerWidget.TrackballTumbleWidget.TrackBallController.Rotate(Quaternion.FromEulerAngles(new Vector3(-MathHelper.Tau * .02, 0, 0))); AddHandlers(); UnlockEditControls(); // but make sure we can't use the right panel yet buttonRightPanelDisabledCover.Visible = true; }
public PrintLibraryWidget() { 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(new LocalizedString("Search").Translated); 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(new LocalizedString("Import").Translated, "icon_import_white_32x32.png"); buttonPanel.AddChild(addToLibrary); addToLibrary.Margin = new BorderDouble(0, 0, 3, 0); addToLibrary.Click += new ButtonBase.ButtonEventHandler(loadFile_Click); Button runCreator = textImageButtonFactory.Generate(new LocalizedString("Create").Translated, "icon_creator_white_32x32.png"); buttonPanel.AddChild(runCreator); runCreator.Margin = new BorderDouble(0, 0, 3, 0); runCreator.Click += (sender, e) => { OpenPluginChooserWindow(); }; addToQueueButton = textImageButtonFactory.Generate("Add to Queue"); addToQueueButton.Margin = new BorderDouble(3, 0); addToQueueButton.Click += new ButtonBase.ButtonEventHandler(addToQueueButton_Click); addToQueueButton.Visible = false; buttonPanel.AddChild(addToQueueButton); deleteFromLibraryButton = textImageButtonFactory.Generate("Remove"); deleteFromLibraryButton.Margin = new BorderDouble(3, 0); deleteFromLibraryButton.Click += new ButtonBase.ButtonEventHandler(deleteFromQueueButton_Click); deleteFromLibraryButton.Visible = false; buttonPanel.AddChild(deleteFromLibraryButton); GuiWidget spacer = new GuiWidget(); spacer.HAnchor = HAnchor.ParentLeftRight; buttonPanel.AddChild(spacer); } allControls.AddChild(searchPanel); allControls.AddChild(PrintLibraryListControl.Instance); allControls.AddChild(buttonPanel); } allControls.AnchorAll(); this.AddChild(allControls); AddHandlers(); }
private FlowLayoutWidget createPrinterModelContainer() { FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom); container.Margin = new BorderDouble(0, 5); BorderDouble elementMargin = new BorderDouble(top: 3); TextWidget printerModelLabel = new TextWidget(LocalizedString.Get("Printer Model"), 0, 0, 10); printerModelLabel.TextColor = this.defaultTextColor; printerModelLabel.HAnchor = HAnchor.ParentLeftRight; printerModelLabel.Margin = elementMargin; string printerModel = ""; if (this.ActivePrinter.Model != null) { printerModel = this.ActivePrinter.Model; } printerModelInput = new MHTextEditWidget(printerModel); printerModelInput.HAnchor |= HAnchor.ParentLeftRight; printerModelInput.Margin = elementMargin; container.AddChild(printerModelLabel); container.AddChild(printerModelInput); container.HAnchor = HAnchor.ParentLeftRight; return container; }
public ContactFormPage() { this.WindowTitle = "MatterControl : " + "Submit Feedback".Localize(); this.HeaderText = "How can we improve?".Localize(); contentRow.Padding = theme.DefaultContainerPadding; submitButton = theme.CreateDialogButton("Submit".Localize()); submitButton.Click += (sender, eventArgs) => { if (ValidateContactForm()) { ContactFormRequest postRequest = new ContactFormRequest(questionInput.Text, detailInput.Text, emailInput.Text, nameInput.Text, ""); contentRow.RemoveChildren(); contentRow.AddChild(messageContainer); submitButton.Visible = false; postRequest.RequestSucceeded += (s, e) => { submissionStatus.Text = "Thank you! Your information has been submitted.".Localize(); this.SetCancelButtonText("Done".Localize()); }; postRequest.RequestFailed += (s, e) => { submissionStatus.Text = "Sorry! We weren't able to submit your request.".Localize(); }; postRequest.Request(); } }; this.AddPageAction(submitButton); messageContainer = new FlowLayoutWidget(FlowDirection.TopToBottom) { HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Stretch }; submissionStatus = new TextWidget("Submitting your information...".Localize(), pointSize: 13) { AutoExpandBoundsToText = true, Margin = new BorderDouble(0, 5), TextColor = theme.TextColor, HAnchor = HAnchor.Left }; messageContainer.AddChild(submissionStatus); // Default sizing results in too much top whitespace, revise Subject row to only be as big as content var subjectRow = CreateLabelRow("Subject".Localize()); subjectRow.VAnchor = VAnchor.Fit; contentRow.AddChild(subjectRow); contentRow.AddChild(questionInput = new MHTextEditWidget("", theme) { HAnchor = HAnchor.Stretch }); contentRow.AddChild(questionErrorMessage = CreateErrorRow()); contentRow.AddChild(CreateLabelRow("Message".Localize())); contentRow.AddChild(detailInput = new MHTextEditWidget("", theme, pixelHeight: 120, multiLine: true) { HAnchor = HAnchor.Stretch }); contentRow.AddChild(detailErrorMessage = CreateErrorRow()); contentRow.AddChild(CreateLabelRow("Email Address".Localize())); contentRow.AddChild(emailInput = new MHTextEditWidget("", theme) { HAnchor = HAnchor.Stretch }); contentRow.AddChild(emailErrorMessage = CreateErrorRow()); contentRow.AddChild(CreateLabelRow("Name".Localize())); contentRow.AddChild(nameInput = new MHTextEditWidget("", theme) { HAnchor = HAnchor.Stretch }); contentRow.AddChild(nameErrorMessage = CreateErrorRow()); }
public EditConnectionWidget(ConnectionWindow windowController, GuiWidget containerWindowToClose, Printer activePrinter = null, object state = null) : base(windowController, containerWindowToClose) { textImageButtonFactory.normalTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.disabledTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor; textImageButtonFactory.borderWidth = 0; linkButtonFactory.textColor = ActiveTheme.Instance.PrimaryTextColor; linkButtonFactory.fontSize = 8; this.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; this.AnchorAll(); this.Padding = new BorderDouble(0); //To be re-enabled once native borders are turned off GuiWidget mainContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainer.AnchorAll(); mainContainer.Padding = new BorderDouble(3, 3, 3, 5); mainContainer.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; string headerTitle; if (activePrinter == null) { headerTitle = string.Format("Add a Printer"); this.addNewPrinterFlag = true; this.ActivePrinter = new Printer(); this.ActivePrinter.Name = "Default Printer"; this.ActivePrinter.BaudRate = "250000"; try { this.ActivePrinter.ComPort = FrostedSerialPort.GetPortNames().FirstOrDefault(); } catch(Exception e) { Debug.Print(e.Message); GuiWidget.BreakInDebugger(); //No active COM ports } } else { this.ActivePrinter = activePrinter; string editHeaderTitleTxt = LocalizedString.Get("Edit"); headerTitle = string.Format("{1} - {0}", this.ActivePrinter.Name, editHeaderTitleTxt); if (this.ActivePrinter.BaudRate == null) { this.ActivePrinter.BaudRate = "250000"; } if (this.ActivePrinter.ComPort == null) { try { this.ActivePrinter.ComPort = FrostedSerialPort.GetPortNames().FirstOrDefault(); } catch(Exception e) { Debug.Print(e.Message); GuiWidget.BreakInDebugger(); //No active COM ports } } } FlowLayoutWidget headerRow = new FlowLayoutWidget(FlowDirection.LeftToRight); headerRow.Margin = new BorderDouble(0, 3, 0, 0); headerRow.Padding = new BorderDouble(0, 3, 0, 3); headerRow.HAnchor = HAnchor.ParentLeftRight; { TextWidget headerLabel = new TextWidget(headerTitle, pointSize: 14); headerLabel.TextColor = this.defaultTextColor; headerRow.AddChild(headerLabel); } ConnectionControlContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); ConnectionControlContainer.Padding = new BorderDouble(5); ConnectionControlContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; ConnectionControlContainer.HAnchor = HAnchor.ParentLeftRight; { TextWidget printerNameLabel = new TextWidget(LocalizedString.Get("Printer Name"), 0, 0, 10); printerNameLabel.TextColor = this.defaultTextColor; printerNameLabel.HAnchor = HAnchor.ParentLeftRight; printerNameLabel.Margin = new BorderDouble(0, 0, 0, 1); printerNameInput = new MHTextEditWidget(this.ActivePrinter.Name); printerNameInput.HAnchor |= HAnchor.ParentLeftRight; comPortLabelWidget = new FlowLayoutWidget(); Button refreshComPorts = linkButtonFactory.Generate(LocalizedString.Get("(refresh)")); refreshComPorts.Margin = new BorderDouble(left: 5); refreshComPorts.VAnchor = VAnchor.ParentBottom; refreshComPorts.Click += new EventHandler(RefreshComPorts); FlowLayoutWidget comPortContainer = null; #if !__ANDROID__ TextWidget comPortLabel = new TextWidget(LocalizedString.Get("Serial Port"), 0, 0, 10); comPortLabel.TextColor = this.defaultTextColor; comPortLabelWidget.AddChild(comPortLabel); comPortLabelWidget.AddChild(refreshComPorts); comPortLabelWidget.Margin = new BorderDouble(0, 0, 0, 10); comPortLabelWidget.HAnchor = HAnchor.ParentLeftRight; comPortContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); comPortContainer.Margin = new BorderDouble(0); comPortContainer.HAnchor = HAnchor.ParentLeftRight; CreateSerialPortControls(comPortContainer, this.ActivePrinter.ComPort); #endif TextWidget baudRateLabel = new TextWidget(LocalizedString.Get("Baud Rate"), 0, 0, 10); baudRateLabel.TextColor = this.defaultTextColor; baudRateLabel.Margin = new BorderDouble(0, 0, 0, 10); baudRateLabel.HAnchor = HAnchor.ParentLeftRight; baudRateWidget = GetBaudRateWidget(); baudRateWidget.HAnchor = HAnchor.ParentLeftRight; FlowLayoutWidget printerMakeContainer = createPrinterMakeContainer(); FlowLayoutWidget printerModelContainer = createPrinterModelContainer(); enableAutoconnect = new CheckBox(LocalizedString.Get("Auto Connect")); enableAutoconnect.TextColor = ActiveTheme.Instance.PrimaryTextColor; enableAutoconnect.Margin = new BorderDouble(top: 10); enableAutoconnect.HAnchor = HAnchor.ParentLeft; if (this.ActivePrinter.AutoConnectFlag) { enableAutoconnect.Checked = true; } if (state as StateBeforeRefresh != null) { enableAutoconnect.Checked = ((StateBeforeRefresh)state).autoConnect; } SerialPortControl serialPortScroll = new SerialPortControl(); if (comPortContainer != null) { serialPortScroll.AddChild(comPortContainer); } ConnectionControlContainer.VAnchor = VAnchor.ParentBottomTop; ConnectionControlContainer.AddChild(printerNameLabel); ConnectionControlContainer.AddChild(printerNameInput); ConnectionControlContainer.AddChild(printerMakeContainer); ConnectionControlContainer.AddChild(printerModelContainer); ConnectionControlContainer.AddChild(comPortLabelWidget); ConnectionControlContainer.AddChild(serialPortScroll); ConnectionControlContainer.AddChild(baudRateLabel); ConnectionControlContainer.AddChild(baudRateWidget); #if !__ANDROID__ ConnectionControlContainer.AddChild(enableAutoconnect); #endif } FlowLayoutWidget buttonContainer = new FlowLayoutWidget(FlowDirection.LeftToRight); buttonContainer.HAnchor = HAnchor.ParentLeft | HAnchor.ParentRight; //buttonContainer.VAnchor = VAnchor.BottomTop; buttonContainer.Margin = new BorderDouble(0, 5, 0, 3); { //Construct buttons saveButton = textImageButtonFactory.Generate(LocalizedString.Get("Save")); //saveButton.VAnchor = VAnchor.Bottom; cancelButton = textImageButtonFactory.Generate(LocalizedString.Get("Cancel")); //cancelButton.VAnchor = VAnchor.Bottom; cancelButton.Click += new EventHandler(CancelButton_Click); //Add buttons to buttonContainer buttonContainer.AddChild(saveButton); buttonContainer.AddChild(new HorizontalSpacer()); buttonContainer.AddChild(cancelButton); } //mainContainer.AddChild(new PrinterChooser()); mainContainer.AddChild(headerRow); mainContainer.AddChild(ConnectionControlContainer); mainContainer.AddChild(buttonContainer); this.AddChild(mainContainer); BindSaveButtonHandlers(); BindBaudRateHandlers(); }
private FlowLayoutWidget GetSettingsRow(OrganizerSettingsData settingData, string sliceSettingValue = null) { FlowLayoutWidget container = new FlowLayoutWidget(); container.HAnchor = HAnchor.ParentLeftRight; double minSettingNameWidth = 400; if (ActiveSliceSettings.Instance.Contains(settingData.SlicerConfigName)) { int intEditWidth = 60; int doubleEditWidth = 60; int vectorXYEditWidth = 60; int multiLineEditHeight = 60; //Get the current value as a default value if (sliceSettingValue == null) { sliceSettingValue = ActiveSliceSettings.Instance.GetActiveValue(settingData.SlicerConfigName); } //Get the presentation name from the SettingNameLookup TextWidget settingName = new TextWidget(SettingNameLookup[settingData.SlicerConfigName], pointSize: 10); settingName.AutoExpandBoundsToText = false; settingName.EllipsisIfClipped = true; settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.VAnchor = Agg.UI.VAnchor.ParentCenter; settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.Height); settingName.Width = minSettingNameWidth; container.AddChild(settingName); switch (settingData.DataEditType) { case OrganizerSettingsData.DataEditTypes.INT: { int currentValue = 0; int.TryParse(sliceSettingValue, out currentValue); MHNumberEdit intEditWidget = new MHNumberEdit(currentValue, pixelWidth: intEditWidth, tabIndex: tabIndexForItem++); intEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; container.AddChild(intEditWidget); container.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowNegatives: true, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; container.AddChild(doubleEditWidget); container.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.POSITIVE_DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; container.AddChild(doubleEditWidget); container.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.OFFSET: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, allowNegatives: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); }; container.AddChild(doubleEditWidget); container.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE_OR_PERCENT: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 60, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { TextEditWidget textEditWidget = (TextEditWidget)sender; string text = textEditWidget.Text; text = text.Trim(); bool isPercent = text.Contains("%"); if (isPercent) { text = text.Substring(0, text.IndexOf("%")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isPercent) { text += "%"; } textEditWidget.Text = text; SaveSetting(settingData.SlicerConfigName, textEditWidget.Text); }; container.AddChild(stringEdit); container.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.CHECK_BOX: { CheckBox checkBoxWidget = new CheckBox(""); checkBoxWidget.VAnchor = Agg.UI.VAnchor.ParentBottom; checkBoxWidget.TextColor = ActiveTheme.Instance.PrimaryTextColor; checkBoxWidget.Checked = (sliceSettingValue == "1"); checkBoxWidget.CheckedStateChanged += (sender, e) => { if (((CheckBox)sender).Checked) { SaveSetting(settingData.SlicerConfigName, "1"); } else { SaveSetting(settingData.SlicerConfigName, "0"); } }; container.AddChild(checkBoxWidget); } break; case OrganizerSettingsData.DataEditTypes.STRING: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 120, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text); }; container.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT: { string convertedNewLines = sliceSettingValue.Replace("\\n", "\n"); MHTextEditWidget stringEdit = new MHTextEditWidget(convertedNewLines, pointSize: 10, pixelWidth: 280, pixelHeight: multiLineEditHeight, multiLine: true, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text.Replace("\n", "\\n")); }; container.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.LIST: { StyledDropDownList selectableOptions = new StyledDropDownList("None", Direction.Down); selectableOptions.Margin = new BorderDouble(); string[] listItems = settingData.ExtraSettings.Split(','); foreach (string listItem in listItems) { MenuItem newItem = selectableOptions.AddItem(listItem); if (newItem.Text == sliceSettingValue) { selectableOptions.SelectedLabel = sliceSettingValue; } newItem.Selected += (sender, e) => { MenuItem menuItem = ((MenuItem)sender); SaveSetting(settingData.SlicerConfigName, menuItem.Text); }; } container.AddChild(selectableOptions); } break; case OrganizerSettingsData.DataEditTypes.VECTOR2: { string[] xyValueStrings = sliceSettingValue.Split(','); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); }; container.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); container.AddChild(xText); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); }; container.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); container.AddChild(yText); } } break; case OrganizerSettingsData.DataEditTypes.OFFSET2: { string[] xyValueStrings = sliceSettingValue.Split('x'); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); }; container.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); container.AddChild(xText); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); }; container.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); container.AddChild(yText); } } break; default: TextWidget missingSetting = new TextWidget(String.Format("Missing the setting for '{0}'.", settingData.DataEditType.ToString())); missingSetting.TextColor = ActiveTheme.Instance.PrimaryTextColor; missingSetting.BackgroundColor = RGBA_Bytes.Red; container.AddChild(missingSetting); break; } } else // the setting we think we are adding is not in the config.ini it may have been depricated { TextWidget settingName = new TextWidget(String.Format("Setting '{0}' not found in config.ini", settingData.SlicerConfigName)); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); container.AddChild(settingName); container.BackgroundColor = RGBA_Bytes.Red; } container.AddChild(new HorizontalSpacer()); Button removeLink = linkButtonFactory.Generate("remove"); removeLink.Click += (sender, e) => { RemoveSetting(settingData.SlicerConfigName); }; removeLink.VAnchor = Agg.UI.VAnchor.ParentCenter; container.AddChild(removeLink); return(container); }
private GuiWidget CreateSettingInfoUIControls(OrganizerSettingsData settingData, double minSettingNameWidth) { GuiWidget container = new GuiWidget(); FlowLayoutWidget leftToRightLayout = new FlowLayoutWidget(); bool addQualityOverlay = false; bool addMaterialOverlay = false; RGBA_Bytes qualityOverlayColor = new RGBA_Bytes(255, 255, 0, 40); RGBA_Bytes materialOverlayColor = new RGBA_Bytes(255, 127, 0, 40); if (ActiveSliceSettings.Instance.Contains(settingData.SlicerConfigName)) { int intEditWidth = 60; int doubleEditWidth = 60; int vectorXYEditWidth = 60; int multiLineEditHeight = 60; string sliceSettingValue = ActiveSliceSettings.Instance.GetActiveValue(settingData.SlicerConfigName); leftToRightLayout.Margin = new BorderDouble(0, 2); leftToRightLayout.Padding = new BorderDouble(3); leftToRightLayout.HAnchor = Agg.UI.HAnchor.ParentLeftRight; if (settingData.DataEditType != OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT) { string convertedNewLines = settingData.PresentationName.Replace("\\n ", "\n"); convertedNewLines = convertedNewLines.Replace("\\n", "\n"); convertedNewLines = LocalizedString.Get(convertedNewLines); TextWidget settingName = new TextWidget(convertedNewLines); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, 3)) { addMaterialOverlay = true; } else if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, 2)) { addQualityOverlay = true; } settingName.Width = minSettingNameWidth; //settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); leftToRightLayout.AddChild(settingName); } switch (settingData.DataEditType) { case OrganizerSettingsData.DataEditTypes.INT: { int currentValue = 0; int.TryParse(sliceSettingValue, out currentValue); MHNumberEdit intEditWidget = new MHNumberEdit(currentValue, pixelWidth: intEditWidth, tabIndex: tabIndexForItem++); intEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(intEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowNegatives: true, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.POSITIVE_DOUBLE: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.OFFSET: { double currentValue = 0; double.TryParse(sliceSettingValue, out currentValue); MHNumberEdit doubleEditWidget = new MHNumberEdit(currentValue, allowDecimals: true, allowNegatives: true, pixelWidth: doubleEditWidth, tabIndex: tabIndexForItem++); doubleEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((NumberEdit)sender).Value.ToString()); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(doubleEditWidget); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.DOUBLE_OR_PERCENT: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 60, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { TextEditWidget textEditWidget = (TextEditWidget)sender; string text = textEditWidget.Text; text = text.Trim(); bool isPercent = text.Contains("%"); if (isPercent) { text = text.Substring(0, text.IndexOf("%")); } double result; double.TryParse(text, out result); text = result.ToString(); if (isPercent) { text += "%"; } textEditWidget.Text = text; SaveSetting(settingData.SlicerConfigName, textEditWidget.Text); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(stringEdit); leftToRightLayout.AddChild(getSettingInfoData(settingData)); } break; case OrganizerSettingsData.DataEditTypes.CHECK_BOX: { CheckBox checkBoxWidget = new CheckBox(""); checkBoxWidget.VAnchor = Agg.UI.VAnchor.ParentBottom; checkBoxWidget.TextColor = ActiveTheme.Instance.PrimaryTextColor; checkBoxWidget.Checked = (sliceSettingValue == "1"); checkBoxWidget.CheckedStateChanged += (sender, e) => { if (((CheckBox)sender).Checked) { SaveSetting(settingData.SlicerConfigName, "1"); } else { SaveSetting(settingData.SlicerConfigName, "0"); } CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(checkBoxWidget); } break; case OrganizerSettingsData.DataEditTypes.STRING: { MHTextEditWidget stringEdit = new MHTextEditWidget(sliceSettingValue, pixelWidth: 120, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.MULTI_LINE_TEXT: { string convertedNewLines = sliceSettingValue.Replace("\\n", "\n"); MHTextEditWidget stringEdit = new MHTextEditWidget(convertedNewLines, pixelWidth: 320, pixelHeight: multiLineEditHeight, multiLine: true, tabIndex: tabIndexForItem++); stringEdit.ActualTextEditWidget.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, ((TextEditWidget)sender).Text.Replace("\n", "\\n")); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(stringEdit); } break; case OrganizerSettingsData.DataEditTypes.LIST: { StyledDropDownList selectableOptions = new StyledDropDownList("None", maxHeight: 200); selectableOptions.Margin = new BorderDouble(); string[] listItems = settingData.ExtraSettings.Split(','); foreach (string listItem in listItems) { MenuItem newItem = selectableOptions.AddItem(listItem); if (newItem.Text == sliceSettingValue) { selectableOptions.SelectedLabel = sliceSettingValue; } newItem.Selected += (sender, e) => { MenuItem menuItem = ((MenuItem)sender); SaveSetting(settingData.SlicerConfigName, menuItem.Text); CallEventsOnSettingsChange(settingData); }; } leftToRightLayout.AddChild(selectableOptions); } break; case OrganizerSettingsData.DataEditTypes.HARDWARE_PRESENT: { CheckBox checkBoxWidget = new CheckBox(""); checkBoxWidget.VAnchor = Agg.UI.VAnchor.ParentBottom; checkBoxWidget.TextColor = ActiveTheme.Instance.PrimaryTextColor; checkBoxWidget.Checked = (sliceSettingValue == "1"); checkBoxWidget.CheckedStateChanged += (sender, e) => { if (((CheckBox)sender).Checked) { SaveSetting(settingData.SlicerConfigName, "1"); // Now show all of the settings that this control is associated with. } else { SaveSetting(settingData.SlicerConfigName, "0"); // Now hide all of the settings that this control is associated with. } CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(checkBoxWidget); } break; case OrganizerSettingsData.DataEditTypes.VECTOR2: { string[] xyValueStrings = sliceSettingValue.Split(','); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(xText); yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "," + yEditWidget.ActuallNumberEdit.Value.ToString()); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(yText); } break; case OrganizerSettingsData.DataEditTypes.OFFSET2: { string[] xyValueStrings = sliceSettingValue.Split('x'); if (xyValueStrings.Length != 2) { xyValueStrings = new string[] { "0", "0" }; } double currentXValue = 0; double.TryParse(xyValueStrings[0], out currentXValue); MHNumberEdit xEditWidget = new MHNumberEdit(currentXValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); double currentYValue = 0; double.TryParse(xyValueStrings[1], out currentYValue); MHNumberEdit yEditWidget = new MHNumberEdit(currentYValue, allowDecimals: true, allowNegatives: true, pixelWidth: vectorXYEditWidth, tabIndex: tabIndexForItem++); { xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(xEditWidget); TextWidget xText = new TextWidget("x"); xText.TextColor = ActiveTheme.Instance.PrimaryTextColor; xText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(xText); } { yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) => { SaveSetting(settingData.SlicerConfigName, xEditWidget.ActuallNumberEdit.Value.ToString() + "x" + yEditWidget.ActuallNumberEdit.Value.ToString()); CallEventsOnSettingsChange(settingData); }; leftToRightLayout.AddChild(yEditWidget); TextWidget yText = new TextWidget("y"); yText.TextColor = ActiveTheme.Instance.PrimaryTextColor; yText.Margin = new BorderDouble(5, 0); leftToRightLayout.AddChild(yText); } } break; default: TextWidget missingSetting = new TextWidget(String.Format("Missing the setting for '{0}'.", settingData.DataEditType.ToString())); missingSetting.TextColor = ActiveTheme.Instance.PrimaryTextColor; missingSetting.BackgroundColor = RGBA_Bytes.Red; leftToRightLayout.AddChild(missingSetting); break; } } else // the setting we think we are adding is not in the config.ini it may have been depricated { TextWidget settingName = new TextWidget(String.Format("Setting '{0}' not found in config.ini", settingData.SlicerConfigName)); settingName.TextColor = ActiveTheme.Instance.PrimaryTextColor; settingName.MinimumSize = new Vector2(minSettingNameWidth, settingName.MinimumSize.y); leftToRightLayout.AddChild(settingName); leftToRightLayout.BackgroundColor = RGBA_Bytes.Red; } container.HAnchor = HAnchor.ParentLeftRight; container.VAnchor = VAnchor.FitToChildren; container.AddChild(leftToRightLayout); if (addQualityOverlay || addMaterialOverlay) { SettingPresetOverlay overlay = new SettingPresetOverlay(); overlay.HAnchor = HAnchor.ParentLeftRight; overlay.VAnchor = Agg.UI.VAnchor.ParentBottomTop; SettingPresetClick clickToEdit = new SettingPresetClick(); clickToEdit.HAnchor = HAnchor.ParentLeftRight; clickToEdit.VAnchor = Agg.UI.VAnchor.ParentBottomTop; clickToEdit.Visible = false; Button editButton = buttonFactory.Generate("Edit Preset".Localize().ToUpper()); editButton.HAnchor = Agg.UI.HAnchor.ParentCenter; editButton.VAnchor = Agg.UI.VAnchor.ParentCenter; clickToEdit.AddChild(editButton); if (addQualityOverlay) { overlay.OverlayColor = qualityOverlayColor; clickToEdit.OverlayColor = qualityOverlayColor; editButton.Click += (sender, e) => { if (ApplicationWidget.Instance.EditQualityPresetsWindow == null) { ApplicationWidget.Instance.EditQualityPresetsWindow = new SlicePresetsWindow(ReloadOptions, "Quality", "quality", false, ActivePrinterProfile.Instance.ActiveQualitySettingsID); ApplicationWidget.Instance.EditQualityPresetsWindow.Closed += (popupWindowSender, popupWindowSenderE) => { ApplicationWidget.Instance.EditQualityPresetsWindow = null; }; } else { ApplicationWidget.Instance.EditQualityPresetsWindow.ChangeToSlicePresetFromID(ActivePrinterProfile.Instance.ActiveQualitySettingsID); ApplicationWidget.Instance.EditQualityPresetsWindow.BringToFront(); } }; } else if (addMaterialOverlay) { overlay.OverlayColor = materialOverlayColor; clickToEdit.OverlayColor = materialOverlayColor; editButton.Click += (sender, e) => { if (ApplicationWidget.Instance.EditMaterialPresetsWindow == null) { ApplicationWidget.Instance.EditMaterialPresetsWindow = new SlicePresetsWindow(ReloadOptions, "Material", "material", false, ActivePrinterProfile.Instance.GetMaterialSetting(1)); ApplicationWidget.Instance.EditMaterialPresetsWindow.Closed += (popupWindowSender, popupWindowSenderE) => { ApplicationWidget.Instance.EditMaterialPresetsWindow = null; }; } else { ApplicationWidget.Instance.EditMaterialPresetsWindow.ChangeToSlicePresetFromID(ActivePrinterProfile.Instance.GetMaterialSetting(1)); ApplicationWidget.Instance.EditMaterialPresetsWindow.BringToFront(); } }; } container.MouseEnterBounds += (sender, e) => { UiThread.RunOnIdle((state) => { overlay.Visible = false; clickToEdit.Visible = true; }); }; container.MouseLeaveBounds += (sender, e) => { UiThread.RunOnIdle((state) => { overlay.Visible = true; clickToEdit.Visible = false; }); }; container.AddChild(overlay); container.AddChild(clickToEdit); } return container; }