From aff2d0d033e33eea6e83a649b32b401e8168adb9 Mon Sep 17 00:00:00 2001 From: Bachir Soussi Chiadmi Date: Thu, 25 May 2017 20:26:21 +0200 Subject: [PATCH] refactored classes in own modules files, added proto content module --- app.py | 122 ++------------------ classes/__init__.py | 0 classes/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 163 bytes classes/__pycache__/compiler.cpython-36.pyc | Bin 0 -> 993 bytes classes/__pycache__/content.cpython-36.pyc | Bin 0 -> 1395 bytes classes/__pycache__/server.cpython-36.pyc | Bin 0 -> 1030 bytes classes/__pycache__/view.cpython-36.pyc | Bin 0 -> 2672 bytes classes/compiler.py | 26 +++++ classes/content.py | 35 ++++++ classes/server.py | 34 ++++++ classes/view.py | 71 ++++++++++++ 11 files changed, 173 insertions(+), 115 deletions(-) create mode 100644 classes/__init__.py create mode 100644 classes/__pycache__/__init__.cpython-36.pyc create mode 100644 classes/__pycache__/compiler.cpython-36.pyc create mode 100644 classes/__pycache__/content.cpython-36.pyc create mode 100644 classes/__pycache__/server.cpython-36.pyc create mode 100644 classes/__pycache__/view.cpython-36.pyc create mode 100644 classes/compiler.py create mode 100644 classes/content.py create mode 100644 classes/server.py create mode 100644 classes/view.py diff --git a/app.py b/app.py index 1619c1e..0dbdbba 100755 --- a/app.py +++ b/app.py @@ -11,131 +11,23 @@ import sys, os -from socket import socket -import socketserver -import http.server -import threading - from PyQt5 import QtCore -from PyQt5.QtCore import QCoreApplication, QUrl, QFileSystemWatcher, pyqtSlot, QSettings +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.QtNetwork import QNetworkProxyFactory, QNetworkRequest from PyQt5.QtWebKit import QWebSettings from PyQt5.QtWebKitWidgets import QWebPage, QWebView, QWebInspector -import sass + +from classes import server, compiler, view, content class Core(): def __init__(self, parent=None): - self.server = Server() - self.compiler = Compiler() + self.server = server.Server() + self.compiler = compiler.Compiler() self.settings = QSettings('FiguresLibres', 'Cascade') -class Server(): - - def __init__(self, parent=None): - - # find free port - sock = socket() - sock.bind(('', 0)) - - self._port = sock.getsockname()[1] - sock.close() - - self.httpd = http.server.HTTPServer(('', self.port), http.server.SimpleHTTPRequestHandler) - self.thread = threading.Thread(target=self.httpd.serve_forever) - self.thread.daemon = True - self.thread.start() - print("serving at port", self._port) - - - @property - def port(self): - return self._port - -class Compiler(): - def __init__(self,parent=None): - paths = [ - 'assets', - 'assets/scss', - 'assets/scss/styles.scss' - ] - self.fs_watcher = QFileSystemWatcher(paths) - # self.fs_watcher.directoryChanged.connect(self.directory_changed) - self.fs_watcher.fileChanged.connect(self.compile_scss) - self.compile_scss() - - # def directory_changed(path): - # print("Directory changed : %s" % path) - - def compile_scss(path = ""): - print("compiling sass : %s" % path) - scss = sass.compile_file(b'assets/scss/main.scss') - with open('assets/scss/main.css', 'w') as fp: - fp.write(scss.decode('utf8')) - -class WebkitView(QWebView): - def __init__(self, port): - self.port = port - self.view = QWebView.__init__(self) - self.load(QUrl('http://localhost:'+str(self.port))) - self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True) - # self.settings().setAttribute(QWebSettings.PluginsEnabled, True) - - -class WebkitInspector(QWebInspector): - def __init__(self, webkitview): - super(WebkitInspector, self).__init__() - self.webkitview = webkitview - self.setPage(self.webkitview.page()) - # TODO: webkitinspector is disappearing when chaging tabs - -class CodeEditor(QPlainTextEdit): - def __init__(self): - super(CodeEditor, self).__init__() - font = QFont() - font.setFamily('Courier') - font.setFixedPitch(True) - font.setPointSize(10) - self.setFont(font) - # self.highlighter = Highlighter(self.document()) - # https://pypi.python.org/pypi/QScintilla/2.9.2 - - -class ViewTab(QWidget): - def __init__(self, core): - super(ViewTab, self).__init__() - - # self.grid = QGridLayout() - hbox = QHBoxLayout() - hbox.setContentsMargins(0,0,0,0) - self.setLayout(hbox) - - - # webviewbox = QVBoxLayout() - vsplitter = QSplitter(QtCore.Qt.Vertical) - - self.webkitview = WebkitView(core.server.port) - vsplitter.addWidget(self.webkitview) - - self.webkitinspector = WebkitInspector(self.webkitview) - vsplitter.addWidget(self.webkitinspector) - - hsplitter = QSplitter(QtCore.Qt.Horizontal) - hsplitter.addWidget(vsplitter) - - self.codeeditor = CodeEditor() - hsplitter.addWidget(self.codeeditor) - - hbox.addWidget(hsplitter) - - - def onChanged(self, text): - print("ViewTba Layout Changed") - self.lbl.setText(text) - self.lbl.adjustSize() - class MainWindow(QMainWindow): def __init__(self, core): super(MainWindow, self).__init__() @@ -169,8 +61,8 @@ class MainWindow(QMainWindow): } """) - self.viewtab = ViewTab(core) - self.contenttab = QLabel("Content (markdown editor).") + self.viewtab = view.ViewTab(core) + self.contenttab = content.ContentTab(core) self.versiontab = QLabel("Version (git).") diff --git a/classes/__init__.py b/classes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/classes/__pycache__/__init__.cpython-36.pyc b/classes/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e864d6bcdf85c8df3e4af41c8358d9933580d7c9 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/classes/__pycache__/compiler.cpython-36.pyc b/classes/__pycache__/compiler.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7efffa52562bb6fcbc51c1069faf8db6af678eb0 GIT binary patch literal 993 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