Browse Source

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

Bachir Soussi Chiadmi 7 years ago
parent
commit
201bed35b8
4 changed files with 65 additions and 27 deletions
  1. 10 1
      classes/core.py
  2. 45 16
      classes/design.py
  3. 6 6
      classes/mainwindow.py
  4. 4 4
      templates/newproject/assets/css/main.scss

+ 10 - 1
classes/core.py

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

+ 45 - 16
classes/design.py

@@ -4,7 +4,7 @@
 import os, re
 import os, re
 # sys,
 # sys,
 from PyQt5 import QtCore
 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.QtGui import QKeySequence, QFont
 from PyQt5.QtWidgets import QWidget, QTabWidget, QVBoxLayout, QHBoxLayout, QSplitter, QPlainTextEdit, QShortcut, QPushButton, QCheckBox
 from PyQt5.QtWidgets import QWidget, QTabWidget, QVBoxLayout, QHBoxLayout, QSplitter, QPlainTextEdit, QShortcut, QPushButton, QCheckBox
 from PyQt5.QtWebKit import QWebSettings
 from PyQt5.QtWebKit import QWebSettings
@@ -13,26 +13,54 @@ from PyQt5.QtPrintSupport import QPrintPreviewDialog, QPrinter
 
 
 
 
 class WebkitView(QWebView):
 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.view = QWebView.__init__(self, parent)
+      self.setZoomFactor(1)
       self.load(QUrl('http://localhost:'+str(self.port)))
       self.load(QUrl('http://localhost:'+str(self.port)))
       self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
       self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
       # self.settings().setAttribute(QWebSettings.PluginsEnabled, 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.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.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):
 class WebkitInspector(QWebInspector):
    def __init__(self, parent, webkitview):
    def __init__(self, parent, webkitview):
@@ -149,6 +177,7 @@ class CodeEditor(QPlainTextEdit):
          self.changed = True
          self.changed = True
          i = self.tabs.currentIndex()
          i = self.tabs.currentIndex()
          self.tabs.setTabText(i, "* "+self.tabs.tabText(i))
          self.tabs.setTabText(i, "* "+self.tabs.tabText(i))
+         # TODO: indicate that webview needs to be reloaded
 
 
    def save(self):
    def save(self):
       if self.changed:
       if self.changed:
@@ -208,7 +237,7 @@ class DesignStack(QWidget):
       self.webview.setLayout(self.webview.vbox)
       self.webview.setLayout(self.webview.vbox)
       self.webview.vbox.setContentsMargins(0,0,0,0)
       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)
       self.webkitinspector = WebkitInspector(self, self.webkitview)
 
 
@@ -267,4 +296,4 @@ class DesignStack(QWidget):
 
 
    def refresh(self):
    def refresh(self):
       self.editor.refresh()
       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")
       self.save_action.setShortcut("Ctrl+Shift+s")
       file.addAction(self.save_action)
       file.addAction(self.save_action)
 
 
-      prnt = QAction("&Print",self)
+      prnt = QAction("&PDF",self)
       prnt.setShortcut("Ctrl+p")
       prnt.setShortcut("Ctrl+p")
       file.addAction(prnt)
       file.addAction(prnt)
 
 
@@ -109,8 +109,8 @@ class MainWindow(QMainWindow):
          self.openprojectdialogue()
          self.openprojectdialogue()
       elif q.text() == "&Save Project as":
       elif q.text() == "&Save Project as":
          self.saveprojectdialogue()
          self.saveprojectdialogue()
-      elif q.text() == "&Print":
-         self.imprim()
+      elif q.text() == "&PDF":
+         self.genPDF()
       elif q.text() == "&Quit":
       elif q.text() == "&Quit":
          self.quit()
          self.quit()
 
 
@@ -185,9 +185,9 @@ class MainWindow(QMainWindow):
          print('Exception', e)
          print('Exception', e)
          pass
          pass
 
 
-   def imprim(self):
-      print('imprim')
-      self.designstack.webkitview.onPrint()
+   def genPDF(self):
+      print('PDF')
+      self.designstack.webkitview.ongenPDF()
 
 
    def quit(self):
    def quit(self):
       print("Quit")
       print("Quit")

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

@@ -28,9 +28,9 @@
 /**
 /**
  * THE CODE BELOW IS REQUIRED TO MAKE HTML2PRINT WORK.
  * THE CODE BELOW IS REQUIRED TO MAKE HTML2PRINT WORK.
  */
  */
-
 @function mm2pt($mm){
 @function mm2pt($mm){
-  @return $mm*2.8346pt;
+  // @return $mm*2.8346pt;
+  @return $mm*1mm;
 }
 }
 
 
 /**
 /**
@@ -41,8 +41,8 @@
  */
  */
 
 
 /* the geometry of the page */
 /* 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 */
 /* the size of the crop marks based on scribus defaults */
 $crop-size: mm2pt(2);
 $crop-size: mm2pt(2);