diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/scripter.py b/plugins/extensions/pykrita/plugin/plugins/scripter/scripter.py --- a/plugins/extensions/pykrita/plugin/plugins/scripter/scripter.py +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/scripter.py @@ -1,4 +1,5 @@ from PyQt5.QtWidgets import QDialog +from PyQt5.QtCore import QSettings, QStandardPaths from krita import * from scripter import uicontroller, documentcontroller, debugcontroller @@ -13,7 +14,9 @@ action.triggered.connect(self.initialize) def initialize(self): - self.uicontroller = uicontroller.UIController(QDialog()) + configPath = QStandardPaths.writableLocation(QStandardPaths.GenericConfigLocation) + self.settings = QSettings(configPath + '/kritarc', QSettings.IniFormat) + self.uicontroller = uicontroller.UIController() self.documentcontroller = documentcontroller.DocumentController() self.debugcontroller = debugcontroller.DebugController(self) self.uicontroller.initialize(self) diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/scripterdialog.py b/plugins/extensions/pykrita/plugin/plugins/scripter/scripterdialog.py new file mode 100644 --- /dev/null +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/scripterdialog.py @@ -0,0 +1,14 @@ +from PyQt5.QtWidgets import QDialog + + +class ScripterDialog(QDialog): + + def __init__(self, uicontroller, parent=None): + super(ScripterDialog, self).__init__(parent) + + self.uicontroller = uicontroller + + def closeEvent(self, event): + self.uicontroller._writeSettings() + self.uicontroller._saveSettings() + event.accept() diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/fontscombobox.py b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/fontscombobox.py --- a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/fontscombobox.py +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/fontscombobox.py @@ -27,3 +27,12 @@ def _currentIndexChanged(self, index): self.editor.font = self.itemText(index) + + def readSettings(self, settings): + fontName = settings.value('fontName', '') + + if fontName: + self.setCurrentIndex(self.findText(fontName)) + + def writeSettings(self, settings): + settings.setValue('fontName', self.editor.font) diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/settingsaction.py b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/settingsaction.py --- a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/settingsaction.py +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/settingsaction.py @@ -11,15 +11,22 @@ self.triggered.connect(self.openSettings) + self.settingsDialog = settingsdialog.SettingsDialog(self.scripter) + self.settingsDialog.setWindowModality(Qt.WindowModal) + self.settingsDialog.setFixedSize(400, 250) + self.setText('Settings') @property def parent(self): return 'File' def openSettings(self): - self.settingsDialog = settingsdialog.SettingsDialog(self.scripter) - self.settingsDialog.setWindowModality(Qt.WindowModal) - self.settingsDialog.setFixedSize(400, 250) self.settingsDialog.show() self.settingsDialog.exec() + + def readSettings(self): + self.settingsDialog.readSettings(self.scripter.settings) + + def writeSettings(self): + self.settingsDialog.writeSettings(self.scripter.settings) diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/settingsdialog.py b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/settingsdialog.py --- a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/settingsdialog.py +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/settingsdialog.py @@ -12,3 +12,13 @@ self.mainLayout = QFormLayout(self) self.mainLayout.addRow('Syntax Highlither', syntaxstylescombobox.SyntaxStylesComboBox(self.scripter.uicontroller.highlight)) self.mainLayout.addRow('Fonts', fontscombobox.FontsComboBox(self.scripter.uicontroller.editor)) + + def readSettings(self, settings): + for index in range(self.mainLayout.rowCount()): + widget = self.mainLayout.itemAt(index, QFormLayout.FieldRole).widget() + widget.readSettings(settings) + + def writeSettings(self, settings): + for index in range(self.mainLayout.rowCount()): + widget = self.mainLayout.itemAt(index, QFormLayout.FieldRole).widget() + widget.writeSettings(settings) diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/syntaxstylescombobox.py b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/syntaxstylescombobox.py --- a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/syntaxstylescombobox.py +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/settingsaction/syntaxstylescombobox.py @@ -22,3 +22,12 @@ def _currentIndexChanged(self, index): self.highlight.setSyntaxStyle(getattr(syntaxstyles, self.itemText(index))()) self.highlight.rehighlight() + + def readSettings(self, settings): + syntaxStyle = settings.value('syntaxStyle', '') + + if syntaxStyle: + self.setCurrentIndex(self.findText(syntaxStyle)) + + def writeSettings(self, settings): + settings.setValue('syntaxStyle', type(self.highlight.getSyntaxStyle()).__name__) diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/uicontroller.py b/plugins/extensions/pykrita/plugin/plugins/scripter/uicontroller.py --- a/plugins/extensions/pykrita/plugin/plugins/scripter/uicontroller.py +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/uicontroller.py @@ -4,14 +4,15 @@ from PyQt5.QtCore import Qt, QObject from scripter.ui_scripter.syntax import syntax, syntaxstyles from scripter.ui_scripter.editor import pythoneditor +from scripter import scripterdialog import os import importlib class UIController(object): - def __init__(self, mainWidget): - self.mainWidget = mainWidget + def __init__(self): + self.mainWidget = scripterdialog.ScripterDialog(self) self.actionToolbar = QToolBar('toolBar', self.mainWidget) self.menu_bar = QMenuBar(self.mainWidget) @@ -33,6 +34,7 @@ self.loadMenus() self.loadWidgets() self.loadActions() + self._readSettings() vbox = QVBoxLayout(self.mainWidget) vbox.addWidget(self.menu_bar) @@ -141,3 +143,44 @@ def closeScripter(self): self.mainWidget.close() + + def _writeSettings(self): + """ _writeSettings is a method invoked when the scripter starts, making + control inversion. Actions can implement a writeSettings method to + save your own settings without this method to know about it. """ + + self.scripter.settings.beginGroup('scripter') + + document = self.scripter.documentcontroller.activeDocument + if document: + self.scripter.settings.setValue('activeDocumentPath', document.filePath) + + for action in self.actions: + writeSettings = getattr(action['action'], "writeSettings", None) + if callable(writeSettings): + writeSettings() + + self.scripter.settings.endGroup() + + + def _readSettings(self): + """ It's similar to _writeSettings, but reading the settings when the ScripterDialog is closed. """ + + self.scripter.settings.beginGroup('scripter') + + activeDocumentPath = self.scripter.settings.value('activeDocumentPath', '') + + if activeDocumentPath: + document = self.scripter.documentcontroller.openDocument(activeDocumentPath) + self.setStatusBar(document.filePath) + self.setDocumentEditor(document) + + for action in self.actions: + readSettings = getattr(action['action'], "readSettings", None) + if callable(readSettings): + readSettings() + + self.scripter.settings.endGroup() + + def _saveSettings(self): + self.scripter.settings.sync()