diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/document_scripter/document.py b/plugins/extensions/pykrita/plugin/plugins/scripter/document_scripter/document.py new file mode 100644 index 0000000000..9b87a35983 --- /dev/null +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/document_scripter/document.py @@ -0,0 +1,24 @@ +from PyQt5.QtCore import QFile, QIODevice, QTextStream + + +class Document(object): + + def __init__(self, filePath): + self._document = [] + self._filePath = filePath + + def open(self, filePath=''): + if filePath: + self._filePath = filePath + _file = QFile(self._filePath) + + if _file.open(QIODevice.ReadOnly | QIODevice.Text): + out = QTextStream(_file) + while not out.atEnd(): + line = out.readLine() + self._document.append(line) + + _file.close() + + def data(self): + return self._document diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/documentcontroller.py b/plugins/extensions/pykrita/plugin/plugins/scripter/documentcontroller.py new file mode 100644 index 0000000000..890b6aa46c --- /dev/null +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/documentcontroller.py @@ -0,0 +1,18 @@ +from scripter.document_scripter import document + + +class DocumentController(object): + + def __init__(self): + self._activeDocument = None + + @property + def activeDocument(self): + return self._activeDocument + + def openDocument(self, filePath): + if filePath: + newDocument = document.Document(filePath) + newDocument.open() + self._activeDocument = newDocument + return newDocument diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/scripter.py b/plugins/extensions/pykrita/plugin/plugins/scripter/scripter.py index dd7a074cec..e01d9b2f2f 100644 --- a/plugins/extensions/pykrita/plugin/plugins/scripter/scripter.py +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/scripter.py @@ -1,22 +1,23 @@ from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * from krita import * from scripter import uicontroller - +from scripter import documentcontroller class ScripterViewExtension(ViewExtension): def __init__(self, parent): super().__init__(parent) def setup(self): print("Scripter setup") action = Krita.instance().createAction("Scripter") action.triggered.connect(self.initialize) def initialize(self): self.uicontroller = uicontroller.UIController(QDialog()) + self.documentcontroller = documentcontroller.DocumentController() self.uicontroller.initialize(self) Krita.instance().addViewExtension(ScripterViewExtension(Krita.instance())) diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/openaction/openaction.py b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/openaction/openaction.py index 31205ca44f..113a9ee61d 100644 --- a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/openaction/openaction.py +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/actions/openaction/openaction.py @@ -1,19 +1,33 @@ -from PyQt5.QtWidgets import QAction - +from PyQt5.QtWidgets import QAction, QFileDialog, QMessageBox class OpenAction(QAction): def __init__(self, scripter, parent=None): super(OpenAction, self).__init__(parent) self.scripter = scripter self.triggered.connect(self.open) self.setText('Open') @property def parent(self): return 'File' def open(self): - print('opening file') + dialog = QFileDialog(self.scripter.uicontroller.mainWidget) + dialog.setNameFilter('Python files (*.py)') + + if dialog.exec(): + try: + selectedFile = dialog.selectedFiles()[0] + fileExtension = selectedFile.rsplit('.', maxsplit=1)[1] + + if fileExtension=='py': + document = self.scripter.documentcontroller.openDocument(selectedFile) + self.scripter.uicontroller.setDocumentEditor(document) + + except: + QMessageBox.information(self.scripter.uicontroller.mainWidget, + 'Invalid File', + 'Open files with .py extension') diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/uicontroller.py b/plugins/extensions/pykrita/plugin/plugins/scripter/uicontroller.py index 672e1f2f74..725dda4a46 100644 --- a/plugins/extensions/pykrita/plugin/plugins/scripter/uicontroller.py +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/uicontroller.py @@ -1,83 +1,87 @@ from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * from scripter.ui_scripter.syntax import syntax, syntaxstyles from scripter.ui_scripter.editor import pythoneditor import os import importlib class UIController(object): def __init__(self, mainWidget): self.mainWidget = mainWidget self.actionToolbar = QToolBar('toolBar', self.mainWidget) self.menu_bar = QMenuBar(self.mainWidget) self.actionToolbar.setObjectName('toolBar') self.menu_bar.setObjectName('menuBar') self.actions = [] self.mainWidget.setWindowModality(Qt.NonModal) self.editor = pythoneditor.CodeEditor() self.output = QPlainTextEdit() self.highlight = syntax.PythonHighlighter(self.editor.document(), syntaxstyles.DefaultSyntaxStyle()) def initialize(self, scripter): self.scripter = scripter self.loadMenus() self.loadActions() vbox = QVBoxLayout(self.mainWidget) vbox.addWidget(self.menu_bar) vbox.addWidget(self.editor) vbox.addWidget(self.actionToolbar) vbox.addWidget(self.output) self.mainWidget.resize(400, 500) self.mainWidget.setWindowTitle("Scripter") self.mainWidget.setSizeGripEnabled(True) self.mainWidget.show() self.mainWidget.activateWindow() def loadMenus(self): self.addMenu('File', 'File') self.addMenu('Edit', 'Edit') def addMenu(self, menuName, parentName): parent = self.menu_bar.findChild(QObject, parentName) self.newMenu = None if parent: self.newMenu = parent.addMenu(menuName) else: self.newMenu = self.menu_bar.addMenu(menuName) self.newMenu.setObjectName(menuName) return self.newMenu def loadActions(self): module_path = 'scripter.ui_scripter.actions' actions_module = importlib.import_module(module_path) - print(actions_module) modules = [] for class_path in actions_module.action_classes: _module, _klass = class_path.rsplit('.', maxsplit=1) - print(_module, _klass) modules.append(dict(module='{0}.{1}'.format(module_path, _module), klass=_klass)) for module in modules: m = importlib.import_module(module['module']) action_class = getattr(m, module['klass']) obj = action_class(self.scripter) parent = self.mainWidget.findChild(QObject, obj.parent) self.actions.append(dict(action=obj, parent=parent)) for action in self.actions: action['parent'].addAction(action['action']) + + def setDocumentEditor(self, document): + self.editor.clear() + + for line in document.data(): + self.editor.appendPlainText(line)