From 32feb7ef703d7113ba618160fbe30f4d980aaff4 Mon Sep 17 00:00:00 2001 From: Bachir Soussi Chiadmi Date: Fri, 26 May 2017 09:32:33 +0200 Subject: [PATCH] added create new project dialogue --- .gitignore | 1 + app.py | 80 ++++++++++++++++--- classes/__pycache__/__init__.cpython-36.pyc | Bin 163 -> 0 bytes classes/__pycache__/compiler.cpython-36.pyc | Bin 993 -> 0 bytes classes/__pycache__/content.cpython-36.pyc | Bin 1395 -> 0 bytes classes/__pycache__/server.cpython-36.pyc | Bin 1030 -> 0 bytes classes/__pycache__/view.cpython-36.pyc | Bin 2672 -> 0 bytes templates/newproject/.config/prefs.json | 4 + templates/newproject/.config/summary.json | 7 ++ templates/newproject/assets/js/script.js | 5 ++ templates/newproject/assets/scss/styles.scss | 1 + templates/newproject/contents/default.md | 5 ++ 12 files changed, 92 insertions(+), 11 deletions(-) delete mode 100644 classes/__pycache__/__init__.cpython-36.pyc delete mode 100644 classes/__pycache__/compiler.cpython-36.pyc delete mode 100644 classes/__pycache__/content.cpython-36.pyc delete mode 100644 classes/__pycache__/server.cpython-36.pyc delete mode 100644 classes/__pycache__/view.cpython-36.pyc create mode 100644 templates/newproject/.config/prefs.json create mode 100644 templates/newproject/.config/summary.json create mode 100644 templates/newproject/assets/js/script.js create mode 100644 templates/newproject/assets/scss/styles.scss create mode 100644 templates/newproject/contents/default.md diff --git a/.gitignore b/.gitignore index 78f54f0..3efcee1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ assets/scss/*.css assets/images _index.html +classes/__pycache__ diff --git a/app.py b/app.py index 0dbdbba..4f19381 100755 --- a/app.py +++ b/app.py @@ -9,16 +9,17 @@ # @Last modified time: 21-04-2017 # @License: GPL-V3 -import sys, os +import sys, os, shutil from PyQt5 import QtCore from PyQt5.QtCore import QCoreApplication, QUrl, pyqtSlot, QSettings from PyQt5.QtGui import QKeySequence, QFont, QSyntaxHighlighter -from PyQt5.QtWidgets import QMainWindow, QWidget, QApplication, QShortcut, QGridLayout, QLabel, QTabWidget, QHBoxLayout, QVBoxLayout, QSplitter, QSplitterHandle, QPlainTextEdit +from PyQt5.QtWidgets import QMainWindow, QAction, QWidget, QApplication, QShortcut, QGridLayout, QLabel, QTabWidget, QHBoxLayout, QVBoxLayout, QSplitter, QSplitterHandle, QPlainTextEdit, QInputDialog, QLineEdit, QFileDialog # from PyQt5.QtNetwork import QNetworkProxyFactory, QNetworkRequest from PyQt5.QtWebKit import QWebSettings from PyQt5.QtWebKitWidgets import QWebPage, QWebView, QWebInspector +import json from classes import server, compiler, view, content @@ -32,10 +33,15 @@ class MainWindow(QMainWindow): def __init__(self, core): super(MainWindow, self).__init__() + # load core class self.core = core - + # restore previous preferences self.restorePreferences() + self.setWindowTitle("Cascade") + + self.initMenuBar() + # self.setWindowFlags(QtCore.Qt.WindowTitleHint) # QtCore.Qt.CustomizeWindowHint # | QtCore.Qt.Tool @@ -72,12 +78,69 @@ class MainWindow(QMainWindow): self.setCentralWidget(self.tabwidget) - self.shortcut = QShortcut(QKeySequence("Ctrl+Q"), self) - self.shortcut.activated.connect(self.on_quit) + # self.shortcut = QShortcut(QKeySequence("Ctrl+Q"), self) + # self.shortcut.activated.connect(self.quit) self.show() + def initMenuBar(self): + # menu bar + bar = self.menuBar() + file = bar.addMenu("&File") + + new = QAction("&New Project",self) + new.setShortcut("Ctrl+n") + file.addAction(new) + + open = QAction("&Open",self) + open.setShortcut("Ctrl+o") + file.addAction(open) + + quit = QAction("&Quit",self) + quit.setShortcut("Ctrl+q") + file.addAction(quit) + + file.triggered[QAction].connect(self.processtrigger) + + edit = bar.addMenu("Edit") + edit.addAction("copy") + edit.addAction("paste") + + + def processtrigger(self, q): + print(q.text()+" is triggered") + if q.text() == "&New Project": + self.newprojectdialogue() + elif q.text() == "&Open": + self.opendialogue() + elif q.text() == "&Quit": + self.quit() + + def opendialogue(self): + print("open") + + def newprojectdialogue(self): + projectname = QFileDialog.getSaveFileName(self, 'Dialog Title', '') + # TODO: no file type + if not os.path.isdir(projectname[0]): + self.core.cwd = projectname[0] + self.initnewproject() + else: + print("folder already exists") + # TODO: check if is cascade folder + + def initnewproject(self): + shutil.copytree('templates/newproject', self.core.cwd) + self.core.prefs = json.loads(open(os.path.join(self.core.cwd,'.config/prefs.json')).read()) + self.core.summary = json.loads(open(os.path.join(self.core.cwd,'.config/summary.json')).read()) + # TODO: init git repos + + def quit(self): + print("Quit") + self.savePreferences() + QCoreApplication.instance().quit() + def restorePreferences(self): try: self.resize(self.core.settings.value('mainwindow/size', QtCore.QSize(1024, 768))) @@ -89,14 +152,9 @@ class MainWindow(QMainWindow): self.core.settings.beginGroup("mainwindow") self.core.settings.setValue('size', self.size()) self.core.settings.setValue('pos', self.pos()) + self.core.settings.setValue('cwd', self.core.cwd) self.core.settings.endGroup() - @pyqtSlot() - def on_quit(self): - print("Quit!") - self.savePreferences() - QCoreApplication.instance().quit() - def main(): app = QApplication(sys.argv) diff --git a/classes/__pycache__/__init__.cpython-36.pyc b/classes/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index e864d6bcdf85c8df3e4af41c8358d9933580d7c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmXr!<>ks3RgYu&=ek&P@K*9*(SAc$QUWvX-Vo9QY zQetw3zDs^`X>Mv>NwI!FQGQk`kj_mk$}TNPPApDNOv%hkFDS~)D*@8_i3J7v$vKI| j#i_;m@$s2?nI-Y@dIgoYIBatBQ%ZAE?Lama12F>t_{=J8 diff --git a/classes/__pycache__/compiler.cpython-36.pyc b/classes/__pycache__/compiler.cpython-36.pyc deleted file mode 100644 index 7efffa52562bb6fcbc51c1069faf8db6af678eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 993 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