summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorBlaine2020-06-05 12:14:26 +0530
committerBlaine2020-06-05 12:14:26 +0530
commite07d2d7bfdb2b67a0776d42a3d54f29ac91d8db6 (patch)
tree852ab71750e73adfb96877db8a34ea9be4ac45b5 /src/main
parent3f166c0f07ea8bc064ac8362ce5bb80bd042c893 (diff)
downloadChemical-PFD-e07d2d7bfdb2b67a0776d42a3d54f29ac91d8db6.tar.gz
Chemical-PFD-e07d2d7bfdb2b67a0776d42a3d54f29ac91d8db6.tar.bz2
Chemical-PFD-e07d2d7bfdb2b67a0776d42a3d54f29ac91d8db6.zip
json file format + qsettings
Diffstat (limited to 'src/main')
-rw-r--r--src/main/python/main.py46
-rw-r--r--src/main/python/utils/app.py3
-rw-r--r--src/main/python/utils/canvas.py14
-rw-r--r--src/main/python/utils/fileWindow.py26
4 files changed, 57 insertions, 32 deletions
diff --git a/src/main/python/main.py b/src/main/python/main.py
index 3ebb2b9..025961b 100644
--- a/src/main/python/main.py
+++ b/src/main/python/main.py
@@ -1,8 +1,9 @@
import pickle
+import json
import sys
from fbs_runtime.application_context.PyQt5 import ApplicationContext
-from PyQt5.QtCore import QObject, Qt, pyqtSignal
+from PyQt5.QtCore import QObject, Qt, pyqtSignal, QSize, QPoint
from PyQt5.QtGui import QBrush, QColor, QImage, QPainter, QPalette, QPen
from PyQt5.QtWidgets import (QComboBox, QFileDialog, QFormLayout, QVBoxLayout,
QHBoxLayout, QLabel, QMainWindow, QMenu,
@@ -13,7 +14,7 @@ from utils.fileWindow import fileWindow
from utils.data import ppiList, sheetDimensionList
from utils import dialogs
from utils.toolbar import toolbar
-from utils.app import app
+from utils.app import app, settings
import shapes
@@ -58,7 +59,8 @@ class appWindow(QMainWindow):
#declare main window layout
self.setCentralWidget(self.mdi)
- self.resize(1280, 720) #set collapse dim
+ # self.resize(1280, 720) #set collapse dim
+ self.readSettings()
self.mdi.subWindowActivated.connect(self.tabSwitched)
def updateMenuBar(self):
@@ -91,7 +93,7 @@ class appWindow(QMainWindow):
self.mdi.addSubWindow(project)
if not project.tabList: # important when unpickling a file instead
project.newDiagram() #create a new tab in the new file
- project.resizeHandler()
+ # project.resizeHandler()
project.fileCloseEvent.connect(self.fileClosed) #closed file signal to switch to sub window view
project.tabChangeEvent.connect(self.updateMenuBar)
if self.count > 1: #switch to tab view if needed
@@ -103,12 +105,15 @@ class appWindow(QMainWindow):
name = QFileDialog.getOpenFileNames(self, 'Open File(s)', '', 'Process Flow Diagram (*pfd)')
if name:
for files in name[0]:
- with open(files,'rb') as file:
- project = pickle.load(file)
+ with open(files,'r') as file:
+ projectData = json.load(file)
+ project = fileWindow(self.mdi)
self.mdi.addSubWindow(project)
- project.show()
+ project.__setstate__(projectData)
project.resizeHandler()
- project.fileCloseEvent.connect(self.fileClosed)
+ project.fileCloseEvent.connect(self.fileClosed)
+ project.tabChangeEvent.connect(self.updateMenuBar)
+ project.show()
if self.count > 1:
# self.tabSpace.setVisible(True)
self.mdi.setViewMode(QMdiArea.TabbedView)
@@ -133,7 +138,7 @@ class appWindow(QMainWindow):
def tabSwitched(self, window):
#handle window switched edge case
- if window:
+ if window and window.tabCount:
window.resizeHandler()
def resizeEvent(self, event):
@@ -148,13 +153,30 @@ class appWindow(QMainWindow):
if len(self.activeFiles) and not dialogs.saveEvent(self):
event.ignore()
else:
- event.accept()
+ event.accept()
+ self.writeSettings()
def fileClosed(self, index):
#checks if the file tab menu needs to be removed
if self.count <= 2 :
self.mdi.setViewMode(QMdiArea.SubWindowView)
-
+
+ def writeSettings(self):
+ settings.beginGroup("MainWindow")
+ settings.setValue("maximized", self.isMaximized())
+ if not self.isMaximized():
+ settings.setValue("size", self.size())
+ settings.setValue("pos", self.pos())
+ settings.endGroup()
+
+ def readSettings(self):
+ settings.beginGroup("MainWindow")
+ self.resize(settings.value("size", QSize(1280, 720)))
+ self.move(settings.value("pos", QPoint(320, 124)))
+ if settings.value("maximized", False, type=bool):
+ self.showMaximized()
+ settings.endGroup()
+
@property
def activeFiles(self):
return [i for i in self.mdi.subWindowList() if i.tabCount]
@@ -166,7 +188,7 @@ class appWindow(QMainWindow):
@property
def activeScene(self):
return self.mdi.currentSubWindow().tabber.currentWidget()
-
+
#Key input handler
def keyPressEvent(self, event):
#overload key press event for custom keyboard shortcuts
diff --git a/src/main/python/utils/app.py b/src/main/python/utils/app.py
index 4540a43..4ee11c3 100644
--- a/src/main/python/utils/app.py
+++ b/src/main/python/utils/app.py
@@ -3,7 +3,10 @@ Declare fbs application so that it can be imported in other modules.
"""
from fbs_runtime.application_context.PyQt5 import ApplicationContext
+from PyQt5.QtCore import QSettings
+
app = ApplicationContext()
+settings = QSettings(QSettings.IniFormat, QSettings.UserScope ,"FOSSEE", "Chemical-PFD")
def fileImporter(file):
# Helper function to fetch files from src/main/resources
diff --git a/src/main/python/utils/canvas.py b/src/main/python/utils/canvas.py
index 2332087..5da4487 100644
--- a/src/main/python/utils/canvas.py
+++ b/src/main/python/utils/canvas.py
@@ -15,7 +15,7 @@ class canvas(QWidget):
for context menu and dialogs.
"""
- def __init__(self, parent=None, size= 'A4', ppi= '72'):
+ def __init__(self, parent=None, size= 'A4', ppi= '72' , parentMdiArea = None, parentFileWindow = None):
super(canvas, self).__init__(parent)
#Store values for the canvas dimensions for ease of access, these are here just to be
@@ -38,11 +38,11 @@ class canvas(QWidget):
self.setLayout(self.layout)
#set initial paper size for the scene
- self.painter.setSceneRect(0, 0, *paperSizes[self.canvasSize][self.ppi])
-
- #set pointers to necessary parents for ease of reference
- self.parentMdiArea = self.parent().parentWidget().parentWidget().parentWidget().parentWidget()
- self.parentFileWindow = self.parent().parentWidget().parentWidget()
+ self.painter.setSceneRect(0, 0, *paperSizes[self._canvasSize][self._ppi])
+ # self.parentMdiArea = self.parent().parentWidget().parentWidget().parentWidget().parentWidget()
+ # self.parentFileWindow = self.parent().parentWidget().parentWidget()
+ self.parentMdiArea = parentMdiArea
+ self.parentFileWindow = parentFileWindow
def resizeView(self, w, h):
#helper function to resize canvas
@@ -95,6 +95,7 @@ class canvas(QWidget):
def dimensions(self):
#returns the dimension of the current scene
return self.painter.sceneRect().width(), self.painter.sceneRect().height()
+
@property
def items(self):
# generator to filter out certain items
@@ -132,7 +133,6 @@ class canvas(QWidget):
}
def __setstate__(self, dict):
- self.__init__()
self._ppi = dict['ppi']
self._canvasSize = dict['canvasSize']
self.setObjectName(dict['ObjectName'])
diff --git a/src/main/python/utils/fileWindow.py b/src/main/python/utils/fileWindow.py
index ebe509b..3cf0e8c 100644
--- a/src/main/python/utils/fileWindow.py
+++ b/src/main/python/utils/fileWindow.py
@@ -1,4 +1,5 @@
import pickle
+import json
from PyQt5.QtCore import Qt, pyqtSignal, QPoint
from PyQt5.QtGui import QIcon
@@ -24,8 +25,8 @@ class fileWindow(QMdiSubWindow):
def __init__(self, parent = None, title = 'New Project', size = 'A4', ppi = '72'):
super(fileWindow, self).__init__(parent)
self._sideViewTab = None
- self.index = None
-
+ self.index = None
+
self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
#Uses a custom QTabWidget that houses a custom new Tab Button, used to house the seperate
# diagrams inside a file
@@ -210,19 +211,20 @@ class fileWindow(QMdiSubWindow):
self.tabber.widget(currentIndex).deleteLater()
self.tabber.removeTab(currentIndex)
- def newDiagram(self):
+ def newDiagram(self, objectName = "New"):
# helper function to add a new tab on pressing new tab button, using the add tab method on QTabWidget
- diagram = canvas(self.tabber)
- diagram.setObjectName("New")
- index = self.tabber.addTab(diagram, "New")
+ diagram = canvas(self.tabber, parentMdiArea = self.mdiArea(), parentFileWindow = self)
+ diagram.setObjectName(objectName)
+ index = self.tabber.addTab(diagram, objectName)
self.tabber.setCurrentIndex(index)
+ return diagram
def saveProject(self, name = None):
# called by dialog.saveEvent, saves the current file
name = QFileDialog.getSaveFileName(self, 'Save File', f'New Diagram', 'Process Flow Diagram (*.pfd)') if not name else name
if name[0]:
- with open(name[0],'wb') as file:
- pickle.dump(self, file)
+ with open(name[0],'w') as file:
+ json.dump(self.__getstate__(), file, indent=4)
return True
else:
return False
@@ -242,14 +244,12 @@ class fileWindow(QMdiSubWindow):
return {
"_classname_": self.__class__.__name__,
"ObjectName": self.objectName(),
- "ppi": self._ppi,
- "canvasSize": self._canvasSize,
"tabs": [i.__getstate__() for i in self.tabList]
}
def __setstate__(self, dict):
- self.__init__(title = dict['ObjectName'])
+ self.setObjectName = dict['ObjectName']
+ self.setWindowTitle = dict['ObjectName']
for i in dict['tabs']:
- diagram = canvas(self.tabber, size = dict['canvasSize'], ppi = dict['ppi'], fileWindow = self)
+ diagram = self.newDiagram(i['ObjectName'])
diagram.__setstate__(i)
- self.tabber.addTab(diagram, i['ObjectName'])