From e8cf3241decee0f3f7b33d6f90fa0c413231a37a Mon Sep 17 00:00:00 2001 From: Jeremy Mack Wright Date: Mon, 24 Dec 2018 11:20:07 -0500 Subject: [PATCH] Added a settings dialog. --- CQGui/Command.py | 21 ++++++++++++ Init.py | 2 +- InitGui.py | 2 ++ SettingsDialog.py | 81 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 SettingsDialog.py diff --git a/CQGui/Command.py b/CQGui/Command.py index a10dcc8..63dca94 100644 --- a/CQGui/Command.py +++ b/CQGui/Command.py @@ -16,6 +16,7 @@ import module_locator import Shared from random import random from contextlib import contextmanager +from SettingsDialog import SettingsDialog from cadquery import cqgi from Helpers import show @@ -460,3 +461,23 @@ class CadQueryValidateScript: parameters = cqModel.metadata.parameters Shared.populateParameterEditor(parameters) + +class CadQuerySettings: + """Opens a settings dialog, allowing the user to change the settings for this workbench""" + + def GetResources(self): + return {"MenuText": "Settings", + "Accel": "", + "ToolTip": "Opens the settings dialog", + "Pixmap": ":/icons/preferences-general.svg"} + + def IsActive(self): + return True + + def Activated(self): + win = SettingsDialog() + + win.exec_() + + # if win.exec_() == QtGui.QDialog.Accepted: + # print("Settings finished") diff --git a/Init.py b/Init.py index 9914c11..24a2510 100644 --- a/Init.py +++ b/Init.py @@ -40,7 +40,7 @@ if not has_run_before: FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").SetString("executeKeybinding", "F9") FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").SetBool("executeOnSave", True) FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").SetBool("showLineNumbers", True) - # FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").SetBool("useExternalEditor", False) + FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").SetBool("allowReload", True) # Make sure we don't overwrite someone's existing settings FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").SetBool("runBefore", True) \ No newline at end of file diff --git a/InitGui.py b/InitGui.py index 6435a86..6b5e636 100644 --- a/InitGui.py +++ b/InitGui.py @@ -36,6 +36,7 @@ class CadQueryWorkbench (Workbench): 'CadQuerySaveAsScript', 'CadQueryCloseScript']) self.appendMenu(['CadQuery', 'Examples'], submenu) self.appendMenu('CadQuery', ['Separator', 'CadQueryExecuteScript', 'CadQueryValidateScript', 'ToggleVariablesEditor', 'CadQueryClearOutput']) + self.appendMenu('CadQuery', ['Separator', 'CadQuerySettings']) def Activated(self): import os @@ -121,6 +122,7 @@ FreeCADGui.addCommand('CadQueryValidateScript', CadQueryValidateScript()) FreeCADGui.addCommand('CadQueryCloseScript', CadQueryCloseScript()) FreeCADGui.addCommand('ToggleVariablesEditor', ToggleParametersEditor()) FreeCADGui.addCommand('CadQueryClearOutput', CadQueryClearOutput()) +FreeCADGui.addCommand('CadQuerySettings', CadQuerySettings()) # Step through and add an Examples submenu item for each example dirs = CadQueryWorkbench.ListExamples() diff --git a/SettingsDialog.py b/SettingsDialog.py new file mode 100644 index 0000000..548d0ef --- /dev/null +++ b/SettingsDialog.py @@ -0,0 +1,81 @@ +import FreeCAD +from PySide import QtGui, QtCore + +class SettingsDialog(QtGui.QDialog): + def __init__(self, parent=None): + super(SettingsDialog, self).__init__(parent) + self.resize(200, 150) + self.setWindowTitle('Settings') + self.initUI() + + def initUI(self): + fontSize = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").GetInt("fontSize") + keybinding = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").GetString("executeKeybinding") + executeOnSave = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").GetBool("executeOnSave") + showLineNumbers = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").GetBool("showLineNumbers") + allowReload = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").GetBool("allowReload") + + font_size = QtGui.QLabel('Font Size') + self.ui_font_size = QtGui.QSpinBox() + self.ui_font_size.setValue(fontSize) + + key_binding = QtGui.QLabel('Execute Key-binding') + self.ui_key_binding = QtGui.QLineEdit() + self.ui_key_binding.setText(keybinding) + + execute_on_save = QtGui.QLabel('Execute on Save') + self.execute_on_save = QtGui.QCheckBox() + self.execute_on_save.setChecked(executeOnSave) + + show_line_numbers = QtGui.QLabel('Show Line Numbers') + self.show_line_numbers = QtGui.QCheckBox() + self.show_line_numbers.setChecked(showLineNumbers) + + allow_reload = QtGui.QLabel('Allow Reload') + self.allow_reload = QtGui.QCheckBox() + self.allow_reload.setChecked(allowReload) + + self.buttons = QtGui.QDialogButtonBox(); + self.buttons.setOrientation(QtCore.Qt.Horizontal) + self.buttons.setStandardButtons(QtGui.QDialogButtonBox.Ok|QtGui.QDialogButtonBox.Cancel) + self.buttons.layout().setDirection(QtGui.QBoxLayout.LeftToRight) + self.buttons.accepted.connect(self.acceptSettings) + self.buttons.rejected.connect(self.reject) + + grid = QtGui.QGridLayout() + grid.setContentsMargins(10, 10, 10, 10) + grid.addWidget(font_size, 0, 0) + grid.addWidget(self.ui_font_size, 0, 1) + grid.addWidget(key_binding, 1, 0) + grid.addWidget(self.ui_key_binding, 1, 1) + grid.addWidget(execute_on_save, 2, 0) + grid.addWidget(self.execute_on_save, 2, 1) + grid.addWidget(show_line_numbers, 3, 0) + grid.addWidget(self.show_line_numbers, 3, 1) + grid.addWidget(allow_reload, 4, 0) + grid.addWidget(self.allow_reload, 4, 1) + grid.addWidget(self.buttons, 5, 1) + + self.setLayout(grid) + + @QtCore.Slot(int) + def acceptSettings(self): + FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").SetInt("fontSize", self.ui_font_size.value()) + FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").SetString("executeKeybinding", self.ui_key_binding.text()) + FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").SetBool("executeOnSave", self.execute_on_save.checkState()) + FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").SetBool("showLineNumbers", self.show_line_numbers.checkState()) + FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/cadquery-freecad-module").SetBool("allowReload", self.show_line_numbers.checkState()) + + self.accept() + + # def getValues(self): + # return { + # 'max': self.ui_max.value(), + # 'min': self.ui_min.value(), + # 'count': self.ui_count.value(), + # } + + # def setValues(self, settings): + # self.ui_max.setValue(settings['max']) + # self.ui_min.setValue(settings['min']) + # self.ui_count.setValue(settings['count'])