Procházet zdrojové kódy

pdf generation is working, needs debuged qt-webkit for right doc size

Bachir Soussi Chiadmi před 7 roky
rodič
revize
201bed35b8

+ 10 - 1
classes/core.py

@@ -40,6 +40,10 @@ class Core():
          self.initDeamons()
       else:
          self.initDeamons()
+         head, tail = os.path.split(self.cwd)
+         print('tail', tail)
+         self.projectname = tail
+
 
 
    def initDeamons(self):
@@ -114,10 +118,15 @@ class Core():
    def changeCWD(self, cwd):
       if not cwd == self.cwd:
          self.cwd = cwd
-         self._mw.setWindowTitle("Cascade – "+self.cwd)
          self.server.reload()
          self.sasscompiler.reload()
          self.contentcompiler.reload()
+
+      if not self.tempcwd:
+         self._mw.setWindowTitle("Cascade – "+self.cwd)
+         head, tail = os.path.split(self.cwd)
+         print('tail', projectname)
+         self.projectname = tail
          self._mw.designstack.refresh()
          self._mw.contentstack.refresh()
 

+ 45 - 16
classes/design.py

@@ -4,7 +4,7 @@
 import os, re
 # sys,
 from PyQt5 import QtCore
-from PyQt5.QtCore import QUrl, QSettings
+from PyQt5.QtCore import QUrl, QSettings, QSizeF
 from PyQt5.QtGui import QKeySequence, QFont
 from PyQt5.QtWidgets import QWidget, QTabWidget, QVBoxLayout, QHBoxLayout, QSplitter, QPlainTextEdit, QShortcut, QPushButton, QCheckBox
 from PyQt5.QtWebKit import QWebSettings
@@ -13,26 +13,54 @@ from PyQt5.QtPrintSupport import QPrintPreviewDialog, QPrinter
 
 
 class WebkitView(QWebView):
-   def __init__(self, parent, port):
-      self.port = port
+   def __init__(self, parent, core):
+      self.parent = parent
+      self.core = core
+      self.port = core.server.port
       self.view = QWebView.__init__(self, parent)
+      self.setZoomFactor(1)
       self.load(QUrl('http://localhost:'+str(self.port)))
       self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
       # self.settings().setAttribute(QWebSettings.PluginsEnabled, True)
 
-      self.printer = QPrinter()
-      self.printer.setPageSize(QPrinter.A4)
-      self.printer.setOrientation(QPrinter.Portrait)
-      self.printer.setPageMargins(10,10,10,10,QPrinter.Millimeter)
-      self.setFixedWidth(1000)
-
-
-   def onPrint(self):
-      dialog = QPrintPreviewDialog(self.printer)
+      self.initPDF()
+      # self.mainframe = self.page.mainFrame()
+      # print(self.mainframe)
+
+   def initPDF(self):
+      self.printer = QPrinter(QPrinter.HighResolution)
+      self.printer.setFullPage(True)
+      # self.printer.setPageMargins(0,0,0,0,QPrinter.Millimeter)
+      self.printer.setFontEmbeddingEnabled(True)
+      self.printer.setColorMode(QPrinter.Color)
+      # TODO: set the page size and orientation from doc settings
+      # (need to do doc settings before that)
+      # self.printer.setPageSize(QPrinter.A4)
+      self.printer.setPaperSize(QSizeF(210, 300), QPrinter.Millimeter)
+      # self.printer.setOrientation(QPrinter.Portrait)
+      self.printer.setOutputFormat(QPrinter.PdfFormat)
+      self.printer.setCreator('Cascade')
+      self.printer.setDocName(self.core.projectname)
+      self.printer.setOutputFileName(self.core.projectname+".pdf")
+      # self.setFixedWidth(1000)
+
+
+   def ongenPDF(self):
+      # QPrinter::Custom
+      # dialog = QPrintPreviewDialog(self.printer)
       # dialog.setWindowState(Qt.WindowMaximized)
-      dialog.paintRequested.connect(self.print_)
+      # dialog.paintRequested.connect(self.print_)
       # dialog.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint | Qt.WindowContextHelpButtonHint)
-      dialog.exec()
+      # dialog.exec()
+      # TODO: open a dialogue to ask where to save the pdf
+      # TODO: reload webview and wait for it before printing
+      # TODO: addd a progress bar
+      # self.webview.
+      self.print_(self.printer)
+
+   def refresh(self):
+      self.initPDF()
+      self.reload()
 
 class WebkitInspector(QWebInspector):
    def __init__(self, parent, webkitview):
@@ -149,6 +177,7 @@ class CodeEditor(QPlainTextEdit):
          self.changed = True
          i = self.tabs.currentIndex()
          self.tabs.setTabText(i, "* "+self.tabs.tabText(i))
+         # TODO: indicate that webview needs to be reloaded
 
    def save(self):
       if self.changed:
@@ -208,7 +237,7 @@ class DesignStack(QWidget):
       self.webview.setLayout(self.webview.vbox)
       self.webview.vbox.setContentsMargins(0,0,0,0)
 
-      self.webkitview = WebkitView(self, core.server.port)
+      self.webkitview = WebkitView(self, core)
 
       self.webkitinspector = WebkitInspector(self, self.webkitview)
 
@@ -267,4 +296,4 @@ class DesignStack(QWidget):
 
    def refresh(self):
       self.editor.refresh()
-      self.webkitview.reload()
+      self.webkitview.refresh()

+ 6 - 6
classes/mainwindow.py

@@ -54,7 +54,7 @@ class MainWindow(QMainWindow):
       self.save_action.setShortcut("Ctrl+Shift+s")
       file.addAction(self.save_action)
 
-      prnt = QAction("&Print",self)
+      prnt = QAction("&PDF",self)
       prnt.setShortcut("Ctrl+p")
       file.addAction(prnt)
 
@@ -109,8 +109,8 @@ class MainWindow(QMainWindow):
          self.openprojectdialogue()
       elif q.text() == "&Save Project as":
          self.saveprojectdialogue()
-      elif q.text() == "&Print":
-         self.imprim()
+      elif q.text() == "&PDF":
+         self.genPDF()
       elif q.text() == "&Quit":
          self.quit()
 
@@ -185,9 +185,9 @@ class MainWindow(QMainWindow):
          print('Exception', e)
          pass
 
-   def imprim(self):
-      print('imprim')
-      self.designstack.webkitview.onPrint()
+   def genPDF(self):
+      print('PDF')
+      self.designstack.webkitview.ongenPDF()
 
    def quit(self):
       print("Quit")

+ 4 - 4
templates/newproject/assets/css/main.scss

@@ -28,9 +28,9 @@
 /**
  * THE CODE BELOW IS REQUIRED TO MAKE HTML2PRINT WORK.
  */
-
 @function mm2pt($mm){
-  @return $mm*2.8346pt;
+  // @return $mm*2.8346pt;
+  @return $mm*1mm;
 }
 
 /**
@@ -41,8 +41,8 @@
  */
 
 /* the geometry of the page */
-$page-width: mm2pt(110);
-$page-height: mm2pt(200);
+$page-width: mm2pt(200);
+$page-height: mm2pt(287);
 
 /* the size of the crop marks based on scribus defaults */
 $crop-size: mm2pt(2);