Can now open and save documents.
This commit is contained in:
+7
-9
@@ -26,15 +26,13 @@ class GuiDocEditor(QWidget):
|
||||
|
||||
logger.debug("Initialising DocEditor ...")
|
||||
self.mainConf = nw.CONFIG
|
||||
|
||||
self.outerBox = QVBoxLayout()
|
||||
self.guiEditor = QTextEdit()
|
||||
|
||||
# self.outerBox.addWidget(self.guiEditor)
|
||||
self.setLayout(self.outerBox)
|
||||
|
||||
# self.editPane = QFrame()
|
||||
# self.editPane.setFrameShape(QFrame.StyledPanel)
|
||||
self.metaPane = QFrame()
|
||||
self.metaPane = QFrame()
|
||||
self.metaPane.setFrameShape(QFrame.StyledPanel)
|
||||
self.splitEdit = QSplitter(Qt.Horizontal)
|
||||
self.splitEdit.addWidget(self.guiEditor)
|
||||
@@ -53,13 +51,13 @@ class GuiDocEditor(QWidget):
|
||||
|
||||
return
|
||||
|
||||
def setText(self, docHtml):
|
||||
self.guiEditor.setHtml(docHtml)
|
||||
return True
|
||||
|
||||
def getText(self):
|
||||
|
||||
theText = self.guiEditor.toHtml()
|
||||
print(theText)
|
||||
print(self.guiEditor.toPlainText())
|
||||
|
||||
return
|
||||
return theText
|
||||
|
||||
def _buildTabToolBar(self):
|
||||
toolBar = self.editToolBar
|
||||
|
||||
+19
-11
@@ -14,7 +14,7 @@ import logging
|
||||
import nw
|
||||
|
||||
from os import path
|
||||
from PyQt5.QtWidgets import qApp, QWidget, QMainWindow, QHBoxLayout, QVBoxLayout, QFrame, QSplitter, QAction, QToolBar, QFileDialog
|
||||
from PyQt5.QtWidgets import qApp, QWidget, QMainWindow, QHBoxLayout, QVBoxLayout, QFrame, QSplitter, QAction, QToolBar, QFileDialog, QStackedWidget
|
||||
from PyQt5.QtCore import Qt, QSize
|
||||
from PyQt5.QtGui import QIcon, QStandardItemModel
|
||||
|
||||
@@ -23,6 +23,7 @@ from nw.gui.doceditor import GuiDocEditor
|
||||
from nw.gui.projecteditor import GuiProjectEditor
|
||||
from nw.project.project import NWProject
|
||||
from nw.project.item import NWItem
|
||||
from nw.project.document import NWDoc
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -32,8 +33,9 @@ class GuiMain(QMainWindow):
|
||||
QWidget.__init__(self)
|
||||
|
||||
logger.debug("Initialising GUI ...")
|
||||
self.mainConf = nw.CONFIG
|
||||
self.theProject = NWProject()
|
||||
self.mainConf = nw.CONFIG
|
||||
self.theProject = NWProject()
|
||||
self.theDocument = NWDoc(self.theProject)
|
||||
|
||||
self.resize(*self.mainConf.winGeometry)
|
||||
self._setWindowTitle()
|
||||
@@ -45,7 +47,12 @@ class GuiMain(QMainWindow):
|
||||
self.treePane.setFrameShape(QFrame.StyledPanel)
|
||||
self.splitMain = QSplitter(Qt.Horizontal)
|
||||
self.splitMain.addWidget(self.treePane)
|
||||
self.splitMain.addWidget(self.docEditor)
|
||||
|
||||
self.stackPane = QStackedWidget()
|
||||
self.stackNone = self.stackPane.addWidget(QWidget())
|
||||
self.stackDoc = self.stackPane.addWidget(self.docEditor)
|
||||
self.splitMain.addWidget(self.stackPane)
|
||||
self.stackPane.setCurrentIndex(self.stackNone)
|
||||
|
||||
self.treeBox = QVBoxLayout()
|
||||
self.treeView = GuiDocTree(self.theProject)
|
||||
@@ -124,8 +131,14 @@ class GuiMain(QMainWindow):
|
||||
# Document Actions
|
||||
#
|
||||
|
||||
def openDocument(self, tHandle):
|
||||
self.stackPane.setCurrentIndex(self.stackDoc)
|
||||
self.docEditor.setText(self.theDocument.openDocument(tHandle))
|
||||
return
|
||||
|
||||
def saveDocument(self):
|
||||
self.docEditor.getText()
|
||||
docHtml = self.docEditor.getText()
|
||||
self.theDocument.saveDocument(docHtml)
|
||||
return
|
||||
|
||||
#
|
||||
@@ -138,6 +151,7 @@ class GuiMain(QMainWindow):
|
||||
nwItem = self.theProject.getItem(tHandle)
|
||||
if nwItem.itemType == NWItem.TYPE_FILE:
|
||||
logger.verbose("Requested item %s is a file" % tHandle)
|
||||
self.openDocument(tHandle)
|
||||
else:
|
||||
logger.verbose("Requested item %s is a folder" % tHandle)
|
||||
return
|
||||
@@ -233,12 +247,6 @@ class GuiMain(QMainWindow):
|
||||
menuNew.setStatusTip("Create new document")
|
||||
fileMenu.addAction(menuNew)
|
||||
|
||||
# File > Open
|
||||
menuOpen = QAction(QIcon.fromTheme("document-open"), "&Open", menuBar)
|
||||
menuOpen.setShortcut("Ctrl+O")
|
||||
menuOpen.setStatusTip("Open document")
|
||||
fileMenu.addAction(menuOpen)
|
||||
|
||||
# File > Save
|
||||
menuSave = QAction(QIcon.fromTheme("document-save"), "&Save", menuBar)
|
||||
menuSave.setShortcut("Ctrl+S")
|
||||
|
||||
+46
-2
@@ -13,14 +13,58 @@
|
||||
import logging
|
||||
import nw
|
||||
|
||||
from os import path
|
||||
from os import path, mkdir
|
||||
from lxml import etree, html
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class NWDoc():
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, theProject):
|
||||
|
||||
self.mainConf = nw.CONFIG
|
||||
self.theProject = theProject
|
||||
self.docHandle = None
|
||||
|
||||
return
|
||||
|
||||
def openDocument(self, tHandle):
|
||||
self.docHandle = tHandle
|
||||
docDir, docFile = self._assemblePath("main.htm")
|
||||
logger.debug("Opening document %s" % path.join(docDir,docFile))
|
||||
dataDir = path.join(self.theProject.projPath, docDir)
|
||||
docPath = path.join(dataDir, docFile)
|
||||
if path.isfile(docPath):
|
||||
with open(docPath,mode="r") as inFile:
|
||||
return inFile.read()
|
||||
else:
|
||||
logger.debug("Document does not exist.")
|
||||
return ""
|
||||
return None
|
||||
|
||||
def saveDocument(self, docHtml):
|
||||
if self.docHandle is None: return False
|
||||
docDir, docFile = self._assemblePath("main.htm")
|
||||
logger.debug("Saving document %s" % path.join(docDir,docFile))
|
||||
dataDir = path.join(self.theProject.projPath, docDir)
|
||||
docPath = path.join(dataDir, docFile)
|
||||
if not path.isdir(dataDir):
|
||||
mkdir(dataDir)
|
||||
logger.debug("Created folder %s" % dataDir)
|
||||
with open(docPath,mode="wb") as outFile:
|
||||
docData = html.fromstring(docHtml)
|
||||
outFile.write(html.tostring(
|
||||
docData,
|
||||
pretty_print = True,
|
||||
encoding = "utf-8",
|
||||
method = "html",
|
||||
))
|
||||
return True
|
||||
|
||||
def _assemblePath(self, docExt):
|
||||
if self.docHandle is None: return None
|
||||
docDir = "data_"+self.docHandle[0]
|
||||
docFile = self.docHandle[1:13]+"_"+docExt
|
||||
return docDir, docFile
|
||||
|
||||
# END Class NWDoc
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta name="qrichtext" content="1">
|
||||
<style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style>
|
||||
</head>
|
||||
<body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:15px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; background-color:#ffffff;"><span style=" font-family:'Open Sans,Arial,sans-serif'; font-size:14px; color:#000000; background-color:#ffffff;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vitae nisi augue. Sed elementum lacus risus, eu lobortis ipsum malesuada rutrum. Nam egestas elit id commodo porta. Ut eget lacinia ipsum, non interdum mi. Sed tincidunt commodo metus, at faucibus nisi finibus eget. In malesuada egestas nulla et tempor. Nulla eu sem vel mi sollicitudin cursus. Nullam ultricies ex eu dui scelerisque, ut venenatis turpis ultricies.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:15px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; background-color:#ffffff;"><span style=" font-family:'Open Sans,Arial,sans-serif'; font-size:14px; color:#000000; background-color:#ffffff;">Nunc in ex molestie, efficitur diam semper, pellentesque eros. Morbi vel lacus quis turpis sagittis iaculis. Sed rhoncus tortor et finibus lobortis. Suspendisse non ultrices odio, at venenatis mi. Sed congue congue tortor, et egestas neque malesuada ac. Nulla facilisi. Maecenas finibus elementum vestibulum. Nam id rhoncus mauris, vel ullamcorper neque.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:15px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; background-color:#ffffff;"><span style=" font-family:'Open Sans,Arial,sans-serif'; font-size:14px; color:#000000; background-color:#ffffff;">Quisque mattis magna purus, vel ultricies sem feugiat pellentesque. Nam mi nisl, consectetur vel facilisis nec, condimentum at libero. Sed dolor lacus, fermentum vel nisi sed, auctor pretium urna. Nulla accumsan arcu ut ligula faucibus, non facilisis mi tempor. Nam consectetur dui dapibus lectus cursus, sed laoreet nisl maximus. Maecenas eleifend sapien eu porttitor placerat. Maecenas quis massa non tortor imperdiet porta. Nunc non tristique magna. Vivamus ornare quam convallis metus vestibulum, id molestie quam pretium. Maecenas tincidunt tincidunt tortor lobortis suscipit. Vivamus tempor dolor quis auctor sollicitudin. Integer imperdiet urna dui, at vehicula dui consequat vitae. Donec aliquet feugiat tellus sed dignissim. Nulla pretium libero ut elit porta sagittis. Praesent commodo vulputate lacinia.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:15px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; background-color:#ffffff;"><span style=" font-family:'Open Sans,Arial,sans-serif'; font-size:14px; color:#000000; background-color:#ffffff;">Proin cursus augue nec dignissim tincidunt. Nunc tincidunt efficitur sapien, ac dictum ligula varius eu. In pretium tristique volutpat. Aenean efficitur enim ut eros finibus, nec gravida neque vestibulum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam fermentum sit amet libero vel placerat. Nunc in nunc vulputate, elementum nisl vitae, dignissim leo. Nunc felis augue, dapibus sit amet orci et, fermentum posuere velit. Curabitur eros purus, pretium ac magna non, tempor gravida justo. Vivamus in ipsum magna.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:15px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; background-color:#ffffff;"><span style=" font-family:'Open Sans,Arial,sans-serif'; font-size:14px; color:#000000; background-color:#ffffff;">Sed quis felis ante. Sed rhoncus turpis risus, ac malesuada velit dictum eget. Curabitur malesuada justo a augue lacinia dictum. Cras hendrerit lorem turpis, et ultrices lectus fermentum at. Quisque volutpat dignissim felis id commodo. Mauris convallis arcu id tempor tincidunt. Cras porttitor ut erat non bibendum. Cras non velit ac libero tincidunt suscipit. Aliquam at neque lacus.</span></p>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user