mainwindow.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. # @Author: Bachir Soussi Chiadmi <bach>
  4. # @Date: 23-05-2017
  5. # @Email: bachir@figureslibres.io
  6. # @Last modified by: bach
  7. # @Last modified time: 21-04-2017
  8. # @License: GPL-V3
  9. import os
  10. from PyQt5.QtGui import QIcon
  11. from PyQt5.QtWidgets import QMainWindow, QAction, QWidget, QLabel, QStackedWidget, QFileDialog, QMessageBox
  12. from classes import design, content
  13. class MainWindow(QMainWindow):
  14. def __init__(self, core):
  15. super(MainWindow, self).__init__()
  16. # load core class
  17. self.core = core
  18. self.setWindowTitle("Cascade")
  19. self.setWindowIcon(QIcon(os.path.join(self.core.appcwd,'assets/images/icon.png')))
  20. self.resize(self.core.mw_size)
  21. self.move(self.core.mw_pos)
  22. self.initMenuBar()
  23. self.initMainStack()
  24. self.show()
  25. def initMenuBar(self):
  26. # menu bar
  27. bar = self.menuBar()
  28. file = bar.addMenu("&File")
  29. new = QAction("&New Project",self)
  30. new.setShortcut("Ctrl+n")
  31. file.addAction(new)
  32. open = QAction("&Open",self)
  33. open.setShortcut("Ctrl+o")
  34. file.addAction(open)
  35. self.save_action = QAction("&Save Project as",self)
  36. self.save_action.setShortcut("Ctrl+Shift+s")
  37. file.addAction(self.save_action)
  38. prnt = QAction("&PDF",self)
  39. prnt.setShortcut("Ctrl+p")
  40. file.addAction(prnt)
  41. quit = QAction("&Quit",self)
  42. quit.setShortcut("Ctrl+q")
  43. file.addAction(quit)
  44. file.triggered[QAction].connect(self.onfilemenutrigger)
  45. # edit menu
  46. edit = bar.addMenu("&Edit")
  47. # edit.addAction("&copy")
  48. # edit.addAction("&paste")
  49. edit.addAction("&build")
  50. self.reload_action = QAction("&Reload",self)
  51. self.reload_action.setShortcut("Ctrl+r")
  52. edit.addAction(self.reload_action)
  53. edit.addAction("&preferences")
  54. edit.triggered[QAction].connect(self.oneditmenutrigger)
  55. # view menu
  56. view = bar.addMenu("&View")
  57. designview = QAction("&Design",self)
  58. designview.setShortcut("F1")
  59. view.addAction(designview)
  60. contentview = QAction("&Content",self)
  61. contentview.setShortcut("F2")
  62. view.addAction(contentview)
  63. versionview = QAction("&Version",self)
  64. versionview.setShortcut("F3")
  65. view.addAction(versionview)
  66. view.triggered[QAction].connect(self.onviewmenutrigger)
  67. # about menu
  68. about = bar.addMenu("About")
  69. about.addAction("&Website")
  70. def onfilemenutrigger(self, q):
  71. print(q.text()+" is triggered")
  72. if q.text() == "&New Project":
  73. self.newprojectdialogue()
  74. elif q.text() == "&Open":
  75. self.openprojectdialogue()
  76. elif q.text() == "&Save Project as":
  77. self.saveprojectdialogue()
  78. elif q.text() == "&PDF":
  79. self.genPDF()
  80. elif q.text() == "&Quit":
  81. self.quit()
  82. def openprojectdialogue(self):
  83. print("open")
  84. dialog = QFileDialog()
  85. dialog.setFileMode(QFileDialog.Directory)
  86. dialog.setAcceptMode(QFileDialog.AcceptOpen)
  87. options = QFileDialog.DontResolveSymlinks | QFileDialog.ShowDirsOnly
  88. folder = dialog.getExistingDirectory(
  89. self,
  90. 'Open Project',
  91. self.core.dialog_path,
  92. options
  93. )
  94. try:
  95. head, tail = os.path.split(folder)
  96. self.core.dialog_path = head
  97. # TODO: check if is cascade folder
  98. print(folder)
  99. if os.path.isdir(folder):
  100. self.core.openproject(folder)
  101. else:
  102. print("folder doesn't exists")
  103. except Exception as e:
  104. print('Exception', e)
  105. pass
  106. def newprojectdialogue(self):
  107. dialog = QFileDialog()
  108. dialog.setFileMode(QFileDialog.Directory)
  109. dialog.setAcceptMode(QFileDialog.AcceptOpen)
  110. projectname = dialog.getSaveFileName(
  111. self,
  112. 'New Project',
  113. self.core.dialog_path
  114. )[0]
  115. # TODO: no file type
  116. try:
  117. head, tail = os.path.split(projectname)
  118. self.core.dialog_path = head
  119. if not os.path.isdir(projectname):
  120. self.core.initnewproject(projectname)
  121. else:
  122. print("folder already exists")
  123. # TODO: check if is cascade folder
  124. except Exception as e:
  125. print('Exception', e)
  126. pass
  127. def saveprojectdialogue(self, quit=False):
  128. dialog = QFileDialog()
  129. dialog.setFileMode(QFileDialog.Directory)
  130. dialog.setAcceptMode(QFileDialog.AcceptOpen)
  131. projectname = dialog.getSaveFileName(
  132. self,
  133. 'Save Project',
  134. self.core.dialog_path
  135. )[0]
  136. # TODO: no file type
  137. try:
  138. head, tail = os.path.split(projectname)
  139. self.core.dialog_path = head
  140. if not os.path.isdir(projectname):
  141. self.core.saveproject(projectname)
  142. if quit:
  143. self.quit()
  144. else:
  145. print("folder already exists")
  146. # TODO: check if is cascade folder
  147. except Exception as e:
  148. print('Exception', e)
  149. pass
  150. def genPDF(self):
  151. print('PDF')
  152. self.designstack.webkitview.ongenPDF()
  153. def quit(self):
  154. print("Quit")
  155. if self.core.tempcwd:
  156. buttonReply = QMessageBox.question(self, 'Project Not Saved', "Do you want to save your current project before quiting?", QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel, QMessageBox.Cancel)
  157. if buttonReply == QMessageBox.Yes:
  158. self.saveprojectdialogue(quit=True)
  159. if buttonReply == QMessageBox.No:
  160. self.core.quit()
  161. else:
  162. self.core.quit()
  163. def oneditmenutrigger(self, q):
  164. print(q.text()+" is triggered")
  165. if q.text() == "&Reload":
  166. self.designstack.webkitview.reload()
  167. def onviewmenutrigger(self, q):
  168. print(q.text()+" is triggered")
  169. if q.text() == "&Design":
  170. self.mainstack.setCurrentIndex(0)
  171. elif q.text() == "&Content":
  172. self.mainstack.setCurrentIndex(1)
  173. elif q.text() == "&Version":
  174. self.mainstack.setCurrentIndex(2)
  175. def initMainStack(self):
  176. self.mainstack = QStackedWidget()
  177. self.designstack = design.DesignStack(self.core)
  178. self.contentstack = content.ContentStack(self.core)
  179. self.versionstack = QLabel("Version (git).")
  180. self.mainstack.addWidget(self.designstack)
  181. self.mainstack.addWidget(self.contentstack)
  182. self.mainstack.addWidget(self.versionstack)
  183. self.mainstack.setCurrentIndex(self.core.mw_curstack)
  184. self.setCentralWidget(self.mainstack)