app.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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 sys, os, shutil
  10. from PyQt5 import QtCore
  11. from PyQt5.QtCore import QCoreApplication, QUrl, pyqtSlot, QSettings
  12. from PyQt5.QtGui import QIcon, QKeySequence, QFont, QSyntaxHighlighter
  13. from PyQt5.QtWidgets import QMainWindow, QAction, QWidget, QApplication, QShortcut, QGridLayout, QLabel, QTabWidget, QHBoxLayout, QVBoxLayout, QSplitter, QSplitterHandle, QPlainTextEdit, QInputDialog, QLineEdit, QFileDialog
  14. # from PyQt5.QtNetwork import QNetworkProxyFactory, QNetworkRequest
  15. from PyQt5.QtWebKit import QWebSettings
  16. from PyQt5.QtWebKitWidgets import QWebPage, QWebView, QWebInspector
  17. import json
  18. import git
  19. from classes import server, compiler, view, content
  20. class Core():
  21. def __init__(self, parent=None):
  22. self.server = server.Server()
  23. self.compiler = compiler.Compiler()
  24. self.settings = QSettings('FiguresLibres', 'Cascade')
  25. class MainWindow(QMainWindow):
  26. def __init__(self, core):
  27. super(MainWindow, self).__init__()
  28. # load core class
  29. self.core = core
  30. # restore previous preferences
  31. self.restorePreferences()
  32. self.setWindowTitle("Cascade")
  33. self.setWindowIcon(QIcon('assets/images/icon.png'))
  34. self.initMenuBar()
  35. # self.setWindowFlags(QtCore.Qt.WindowTitleHint)
  36. # QtCore.Qt.CustomizeWindowHint
  37. # | QtCore.Qt.Tool
  38. # | QtCore.Qt.FramelessWindowHint
  39. # | QtCore.Qt.WindowTitleHint
  40. # | QtCore.Qt.WindowStaysOnTopHint
  41. self.tabwidget = QTabWidget()
  42. # self.tabwidget.setContentsMargins(0,0,0,0)
  43. self.tabwidget.setStyleSheet("""
  44. QTabWidget::pane {
  45. border:0px solid inherted;
  46. margin:0px;
  47. padding:0px;
  48. }
  49. QTabBar::tab {
  50. padding: 4px;
  51. font-size:12px;
  52. }
  53. QTabBar::tab:selected {
  54. font-weight:bold;
  55. }
  56. """)
  57. self.viewtab = view.ViewTab(core)
  58. self.contenttab = content.ContentTab(core)
  59. self.versiontab = QLabel("Version (git).")
  60. self.tabwidget.addTab(self.viewtab, "View")
  61. self.tabwidget.addTab(self.contenttab, "Content")
  62. self.tabwidget.addTab(self.versiontab, "Version")
  63. self.setCentralWidget(self.tabwidget)
  64. # self.shortcut = QShortcut(QKeySequence("Ctrl+Q"), self)
  65. # self.shortcut.activated.connect(self.quit)
  66. self.show()
  67. def initMenuBar(self):
  68. # menu bar
  69. bar = self.menuBar()
  70. file = bar.addMenu("&File")
  71. new = QAction("&New Project",self)
  72. new.setShortcut("Ctrl+n")
  73. file.addAction(new)
  74. open = QAction("&Open",self)
  75. open.setShortcut("Ctrl+o")
  76. file.addAction(open)
  77. quit = QAction("&Quit",self)
  78. quit.setShortcut("Ctrl+q")
  79. file.addAction(quit)
  80. file.triggered[QAction].connect(self.processtrigger)
  81. edit = bar.addMenu("Edit")
  82. edit.addAction("copy")
  83. edit.addAction("paste")
  84. def processtrigger(self, q):
  85. print(q.text()+" is triggered")
  86. if q.text() == "&New Project":
  87. self.newprojectdialogue()
  88. elif q.text() == "&Open":
  89. self.opendialogue()
  90. elif q.text() == "&Quit":
  91. self.quit()
  92. def opendialogue(self):
  93. print("open")
  94. def newprojectdialogue(self):
  95. projectname = QFileDialog.getSaveFileName(self, 'Dialog Title', '')
  96. # TODO: no file type
  97. if not os.path.isdir(projectname[0]):
  98. self.core.cwd = projectname[0]
  99. self.initnewproject()
  100. else:
  101. print("folder already exists")
  102. # TODO: check if is cascade folder
  103. def initnewproject(self):
  104. shutil.copytree('templates/newproject', self.core.cwd)
  105. self.core.prefs = json.loads(open(os.path.join(self.core.cwd,'.config/prefs.json')).read())
  106. self.core.summary = json.loads(open(os.path.join(self.core.cwd,'.config/summary.json')).read())
  107. # TODO: init git repos
  108. self.core.repository = git.Repo.init(self.core.cwd)
  109. self.core.repository.index.add(['assets','contents','.config'])
  110. self.core.repository.index.commit("initial commit")
  111. # TODO: set mdtohtml compiler from project md to app index.html
  112. # TODO: embed project styles.scss to app scss frame work
  113. def quit(self):
  114. print("Quit")
  115. self.savePreferences()
  116. QCoreApplication.instance().quit()
  117. def restorePreferences(self):
  118. try:
  119. self.resize(self.core.settings.value('mainwindow/size', QtCore.QSize(1024, 768)))
  120. self.move(self.core.settings.value('mainwindow/pos', QtCore.QPoint(0, 0)))
  121. except:
  122. pass
  123. def savePreferences(self):
  124. self.core.settings.beginGroup("mainwindow")
  125. self.core.settings.setValue('size', self.size())
  126. self.core.settings.setValue('pos', self.pos())
  127. self.core.settings.setValue('cwd', self.core.cwd)
  128. self.core.settings.endGroup()
  129. def main():
  130. app = QApplication(sys.argv)
  131. core = Core()
  132. mainappwindow = MainWindow(core)
  133. sys.exit(app.exec_())
  134. if __name__ == "__main__":
  135. main()