diff options
-rw-r--r-- | Bin_Phase_env.py | 63 | ||||
m--------- | Chemical-Simulator-GUI | 6 | ||||
-rw-r--r-- | ComponentSelector.py (renamed from component_selector.py) | 19 | ||||
-rw-r--r-- | ComponentSelector.ui (renamed from comp_selector.ui) | 15 | ||||
-rw-r--r-- | DockWidget.txt | 636 | ||||
-rw-r--r-- | DockWidgetCompoundSeparator.py | 99 | ||||
-rw-r--r-- | DockWidgetCompoundSeparator.ui | 45 | ||||
-rw-r--r-- | DockWidgetDistillationColumn.py | 120 | ||||
-rw-r--r-- | DockWidgetDistillationColumn.ui | 270 | ||||
-rw-r--r-- | DockWidgetFlash.py | 74 | ||||
-rw-r--r-- | DockWidgetFlash.ui | 161 | ||||
-rw-r--r-- | DockWidgetMaterialStream.py (renamed from DockWidgetMatStm.py) | 16 | ||||
-rw-r--r-- | DockWidgetMaterialStream.ui (renamed from DockWidgetMatStm.ui) | 0 | ||||
-rw-r--r-- | DockWidgetMixer.py | 61 | ||||
-rw-r--r-- | DockWidgetMixer.ui | 137 | ||||
-rw-r--r-- | DockWidgetShortcutColumn.py | 97 | ||||
-rw-r--r-- | DockWidgetShortcutColumn.ui | 295 | ||||
-rw-r--r-- | DockWidgetSplitter.py | 78 | ||||
-rw-r--r-- | DockWidgetSplitter.ui | 200 | ||||
-rw-r--r-- | Graphics.py | 164 | ||||
-rw-r--r-- | OMChem/ConvReactor.py | 4 | ||||
-rw-r--r-- | Simulator/Databases/Databases.py | 29 | ||||
-rw-r--r-- | Streams.py | 388 | ||||
-rw-r--r-- | Undo.dat | bin | 39600 -> 11013 bytes | |||
-rw-r--r-- | UnitOperations.py | 314 | ||||
-rw-r--r-- | container.py | 15 | ||||
-rw-r--r-- | dockWidget.py | 62 | ||||
-rw-r--r-- | dockWidget.ui | 5 | ||||
-rw-r--r-- | icon/AdiabaticCompressor.png | bin | 0 -> 643 bytes | |||
-rw-r--r-- | icon/AdiabaticExpander.png | bin | 0 -> 565 bytes | |||
-rw-r--r-- | icon/CompoundSeparator.png (renamed from icons/CompSep.png) | bin | 1521 -> 1521 bytes | |||
-rw-r--r-- | icon/Cooler.png | bin | 0 -> 2334 bytes | |||
-rw-r--r-- | icon/DistillationColumn.png (renamed from icons/DistCol.png) | bin | 6006 -> 6006 bytes | |||
-rw-r--r-- | icon/Equation.png (renamed from icons/Equation.png) | bin | 3889 -> 3889 bytes | |||
-rw-r--r-- | icon/Flash.png | bin | 0 -> 2079 bytes | |||
-rw-r--r-- | icon/Heater.png | bin | 0 -> 2088 bytes | |||
-rw-r--r-- | icon/MaterialStream.png | bin | 0 -> 452 bytes | |||
-rw-r--r-- | icon/Mixer.png | bin | 0 -> 911 bytes | |||
-rw-r--r-- | icon/Pump.png | bin | 0 -> 1348 bytes | |||
-rw-r--r-- | icon/Sequential.png (renamed from icons/Sequential.png) | bin | 5827 -> 5827 bytes | |||
-rw-r--r-- | icon/ShortcutColumn.png (renamed from icons/ShortCol.png) | bin | 6006 -> 6006 bytes | |||
-rw-r--r-- | icon/Splitter.png | bin | 0 -> 937 bytes | |||
-rw-r--r-- | icon/Valve.png | bin | 0 -> 1195 bytes | |||
-rw-r--r-- | icon/compoundSelector.png (renamed from icons/compoundSelector.png) | bin | 1249 -> 1249 bytes | |||
-rw-r--r-- | icon/icon_1.svg | 732 | ||||
-rw-r--r-- | icon/logo.png | bin | 0 -> 9457 bytes | |||
-rw-r--r-- | icon/new.svg (renamed from icons/new.svg) | 0 | ||||
-rw-r--r-- | icon/package-icon.svg (renamed from icons/package-icon.svg) | 0 | ||||
-rw-r--r-- | icon/plus.png (renamed from icons/plus.png) | bin | 3337 -> 3337 bytes | |||
-rw-r--r-- | icon/zoomIn.png (renamed from icons/zoomIn.png) | bin | 32456 -> 32456 bytes | |||
-rw-r--r-- | icon/zoomOut.png (renamed from icons/zoomOut.png) | bin | 31836 -> 31836 bytes | |||
-rw-r--r-- | icon/zoomReset.png (renamed from icons/zoomReset.png) | bin | 48307 -> 48307 bytes | |||
-rw-r--r-- | icons/AdiabaticCompressor.png | bin | 643 -> 740 bytes | |||
-rw-r--r-- | icons/AdiabaticExpander.png | bin | 565 -> 741 bytes | |||
-rw-r--r-- | icons/Column.png | bin | 0 -> 4681 bytes | |||
-rw-r--r-- | icons/CompoundSeparator.png | bin | 0 -> 1708 bytes | |||
-rw-r--r-- | icons/Cooler.png | bin | 2334 -> 3042 bytes | |||
-rw-r--r-- | icons/DistillationColumn.png | bin | 0 -> 4361 bytes | |||
-rw-r--r-- | icons/Flash.png | bin | 2079 -> 2431 bytes | |||
-rw-r--r-- | icons/Heater.png | bin | 2088 -> 2750 bytes | |||
-rw-r--r-- | icons/MaterialStream.png | bin | 452 -> 527 bytes | |||
-rw-r--r-- | icons/Mixer.png | bin | 911 -> 1008 bytes | |||
-rw-r--r-- | icons/Pump.png | bin | 1348 -> 1620 bytes | |||
-rw-r--r-- | icons/ShortcutColumn.png | bin | 0 -> 4361 bytes | |||
-rw-r--r-- | icons/Splitter.png | bin | 937 -> 1068 bytes | |||
-rw-r--r-- | icons/Valve.png | bin | 1195 -> 1498 bytes | |||
-rw-r--r-- | icons/compound.png | bin | 0 -> 4849 bytes | |||
-rw-r--r-- | icons/eq.png | bin | 0 -> 5162 bytes | |||
-rw-r--r-- | icons/icon_1.svg | 868 | ||||
-rw-r--r-- | icons/images.png | bin | 0 -> 2938 bytes | |||
-rw-r--r-- | icons/logo.png | bin | 9457 -> 1391 bytes | |||
-rw-r--r-- | icons/new.png | bin | 0 -> 2812 bytes | |||
-rw-r--r-- | icons/sq.png | bin | 0 -> 8725 bytes | |||
-rw-r--r-- | icons/zoo.png | bin | 0 -> 6707 bytes | |||
-rw-r--r-- | icons/zoom_in.png | bin | 0 -> 4908 bytes | |||
-rw-r--r-- | icons/zoom_out.png | bin | 0 -> 4865 bytes | |||
-rw-r--r-- | icons/zoom_reset.png | bin | 0 -> 5052 bytes | |||
-rw-r--r-- | main.ui | 10 | ||||
-rw-r--r-- | main2.ui | 415 | ||||
-rw-r--r-- | main3.ui | 2112 | ||||
-rw-r--r-- | mainApp.py | 90 | ||||
-rw-r--r-- | umlet.uxf | 1448 |
82 files changed, 8385 insertions, 663 deletions
diff --git a/Bin_Phase_env.py b/Bin_Phase_env.py index a02c0e2..b9228b2 100644 --- a/Bin_Phase_env.py +++ b/Bin_Phase_env.py @@ -17,8 +17,6 @@ import PyQt5.QtWidgets as QtWidgets import pyqtgraph as pg import pyqtgraph.exporters - - ui_dialog,_ = loadUiType('Binary_Phase_Env.ui') class Bin_Phase_env(QWidget,ui_dialog): @@ -46,18 +44,12 @@ class Bin_Phase_env(QWidget,ui_dialog): self.radioButton_2.setChecked(False) self.button_handler() - self.counter = 1 - - - - def button_handler(self): self.radioButton.clicked.connect(lambda:self.T_xy()) self.radioButton_2.clicked.connect(lambda:self.P_xy()) self.pushButton_2.clicked.connect(lambda:self.plot()) - def T_xy(self): self.radioButton.setChecked(True) @@ -90,6 +82,7 @@ class Bin_Phase_env(QWidget,ui_dialog): self.formLayout.addRow(QLabel("T(K)"),self.first) self.formLayout.addRow(QLabel("Number of data points"),self.points) #print("") + def get_omc_path(self): try: self.omhome = os.environ.get('OPENMODELICAHOME') @@ -104,8 +97,6 @@ class Bin_Phase_env(QWidget,ui_dialog): print("The OpenModelica compiler is missing in the System path please install it" ) raise - - def plot(self): #print(self.type) @@ -153,10 +144,8 @@ class Bin_Phase_env(QWidget,ui_dialog): mosFile.write("loadFile(\"Graph.mo\");\n") mosFile.write("simulate(Graph, outputFormat=\"csv\", stopTime=1.0, numberOfIntervals=1);\n") - print(self.data) - self.resdata = [] self.omc_path = self.get_omc_path() simpath = self.plot_mos_path @@ -185,34 +174,24 @@ class Bin_Phase_env(QWidget,ui_dialog): print("SIMULATION DONE") - - - - if self.type=='T': for k in range(len(self.rows[0])): if self.rows[0][k][0]=='P': self.datay.append(float(self.rows[1][k])) #print(col) length = len(self.rows[0][k]) - if self.rows[0][k][0]=='x' and self.rows[0][k][length-2]=='1': self.datax1.append(float(self.rows[1][k])) # k+=1 - if self.rows[0][k][0]=='y' and self.rows[0][k][length-2]=='1': self.datax2.append(float(self.rows[1][k])) #k+=1 - #k+=1 - - else: - + else: for k in range(len(self.rows[0])): if self.rows[0][k][0]=='T': self.datay.append(float(self.rows[1][k])) #print(col) - #print(self.rows[0][k]) length = len(self.rows[0][k]) if self.rows[0][k][0]=='x' and self.rows[0][k][length-2]=='1': @@ -229,28 +208,20 @@ class Bin_Phase_env(QWidget,ui_dialog): plt.addLegend() plt.setXRange(0,1) - # print("SIZE UP AHEAD") # print(len(self.datay)) # print(len(self.datax1)) # print(len(self.datax2)) # print("SIZES DONE") - c1 = plt.plot(self.datax1, self.datay,pen=pg.mkPen('b',width = 1), name='dew points') c2 = plt.plot(self.datax2, self.datay,pen=pg.mkPen('r',width = 1), name='bubble points') - - view_box = plt.plotItem.vb - self.tool_tip = "" - def pressEvent(evt): #print("HELLO") a = 10 pos = evt - - mousepoint = view_box.mapSceneToView(pos) roi = pg.ROI(pos) find_color = plt.mapToGlobal(pos.toPoint()) @@ -270,9 +241,7 @@ class Bin_Phase_env(QWidget,ui_dialog): self.lineEdit_y.setText("") self.tool_tip = "" QApplication.setOverrideCursor(QCursor(QtCore.Qt.ArrowCursor)) - - - + #self.prev = None def entered(items): for i in items: @@ -283,20 +252,13 @@ class Bin_Phase_env(QWidget,ui_dialog): QApplication.setOverrideCursor(QCursor(QtCore.Qt.ArrowCursor)) else: i.setToolTip(self.tool_tip) - - - # print(items) - + # print(items) #proxy = pg.SignalProxy(plt.scene().sigMouseMoved, rateLimit = 60, slot = pressEvent) plt.scene().sigMouseMoved.connect(pressEvent) plt.scene().sigMouseHover.connect(entered) #c1.setAcceptHoverEvents(True) #c2.setAcceptHoverEvents(True) - - - - # def hoverEnterEvent(c1,event): # print("Object ZONE") @@ -306,7 +268,6 @@ class Bin_Phase_env(QWidget,ui_dialog): #c1.hoverMoveEvent.connect(item) #c2.hoverMoveEvent.connect(item) - plt.setLabel('left',self.other+self.otherunit,units = '') plt.setLabel('bottom',self.comp1+'(mol. frac.)',units = '') @@ -315,19 +276,3 @@ class Bin_Phase_env(QWidget,ui_dialog): self.tabWidget.addTab(self.new_tab,"Plot "+str(self.counter)) self.counter+=1 - - - - - - - - - - - - - - - - diff --git a/Chemical-Simulator-GUI b/Chemical-Simulator-GUI deleted file mode 160000 -Subproject 79c81eaa67a545db570c083c3852e09b26e5bf8 diff --git a/component_selector.py b/ComponentSelector.py index 600b5f2..4860c4c 100644 --- a/component_selector.py +++ b/ComponentSelector.py @@ -4,17 +4,15 @@ from PyQt5.QtGui import * from PyQt5.uic import loadUiType import pandas as pd from Simulator.Databases.Databases import ChemsepDatabase -ui_dialog,_ = loadUiType('comp_selector.ui') +ui_dialog,_ = loadUiType('ComponentSelector.ui') #df = pd.read_csv("compoundsDatabase.csv") compound_selected = [] #list storing components that are selected inintialised as empty -class componentSelector(QDialog,ui_dialog): - def __init__(self,parent=None): - #super(componentSelector,self).__init__(parent) - +class ComponentSelector(QDialog,ui_dialog): + def __init__(self,parent=None): QDialog.__init__(self,parent) self.setupUi(self) @@ -43,6 +41,7 @@ class componentSelector(QDialog,ui_dialog): self.completer = QCompleter() self.completer.setCaseSensitivity(Qt.CaseInsensitive) self.completer.setModel(self.model) + #QCompleter completes the text written in lineedit self.lineEdit.setCompleter(self.completer) @@ -52,7 +51,6 @@ class componentSelector(QDialog,ui_dialog): self.pushButton_2.clicked.connect(self.cancel) self.pushButton_3.clicked.connect(self.removeItems) - def final_list(self,*list_name): self.list_final=[] #add multiple lists @@ -171,11 +169,4 @@ class componentSelector(QDialog,ui_dialog): self.f_mo.write('\n') self.f_mo.write('\nend database;') self.f_mo.close() - - - - - - - - +
\ No newline at end of file diff --git a/comp_selector.ui b/ComponentSelector.ui index 09d8c78..7a43206 100644 --- a/comp_selector.ui +++ b/ComponentSelector.ui @@ -27,8 +27,9 @@ <widget class="QLabel" name="label"> <property name="font"> <font> - <family>Comic Sans MS</family> - <pointsize>12</pointsize> + <pointsize>9</pointsize> + <weight>75</weight> + <bold>true</bold> </font> </property> <property name="text"> @@ -43,11 +44,6 @@ </item> <item> <widget class="QPushButton" name="compoundSelectButton"> - <property name="font"> - <font> - <family>Comic Sans MS</family> - </font> - </property> <property name="text"> <string>Select</string> </property> @@ -58,11 +54,6 @@ </item> <item> <widget class="QPushButton" name="pushButton_3"> - <property name="font"> - <font> - <family>Comic Sans MS</family> - </font> - </property> <property name="text"> <string>Remove</string> </property> diff --git a/DockWidget.txt b/DockWidget.txt new file mode 100644 index 0000000..b14eef8 --- /dev/null +++ b/DockWidget.txt @@ -0,0 +1,636 @@ +from PyQt5.QtCore import * +from PyQt5.QtWidgets import * +from PyQt5.QtGui import * +from PyQt5.uic import loadUiType +import pandas as pd +from functools import partial +from component_selector import * +from collections import defaultdict +from Graphics import * + +ui_dialog,_ = loadUiType('DockWidget.ui') + +class DockWidget(QDockWidget,ui_dialog): + + def __init__(self,name,comptype,obj,container,parent=None): + QDockWidget.__init__(self,parent) + self.setupUi(self) + self.setWindowTitle(obj.name) + self.name=name + self.obj=obj + self.type = comptype + self.inputdict = {} + self.x_pclist = [] + self.modes() + self.comboBox.currentIndexChanged.connect(self.modeSelection) + + print("constructor ", self.inputdict) + self.pushButton_2.clicked.connect(self.param) + self.dict = {} + + self.nameType = None + self.container = container + + header = QTreeWidgetItem(['Compound','Value','Unit']) + self.mTreeWidget.setHeaderItem(header) + self.lTreeWidget.setHeaderItem(header) + self.vTreeWidget.setHeaderItem(header) + + self.mTreeWidget.itemClicked.connect(lambda : self.printer(self.mTreeWidget.currentItem())) + self.lTreeWidget.itemClicked.connect(lambda : self.printer(self.lTreeWidget.currentItem())) + self.vTreeWidget.itemClicked.connect(lambda : self.printer(self.vTreeWidget.currentItem())) + + def printer(self, treeItem ): + foldername = treeItem.text(0) + comment = treeItem.text(1) + data = treeItem.text(2) + print(foldername , ': ' , comment , ' (' + data + ')') + + # input data tab + def modes(self): + modesList = self.obj.modesList + if(modesList): + for j in modesList: + self.comboBox.addItem(str(self.obj.variables[j]['name'])) + self.modeSelection() + else: + self.comboBox.setDisabled(True) + self.inputdict= {} + self.inputdict = self.obj.paramgetter() + self.inputparamslist() + + def modeSelection(self): + self.inputdict= {} + for i in reversed(range(self.formLayout.count())): + self.formLayout.removeRow(i) + print(self.comboBox.currentText()) + for i in self.obj.variables: + if self.obj.variables[i]['name'] == self.comboBox.currentText(): + currentText = i + break + self.inputdict = self.obj.paramgetter(currentText) + print('mode selection ', self.inputdict) + self.inputparamslist() + + def inputparamslist(self): + try: + print("inputparamslist ", self.inputdict) + for c,i in enumerate(self.inputdict): + if i == None: + continue + if(i=="thermoPackage"): + print("thermo1") + combo = QComboBox() + self.lines = [line.rstrip('\n') for line in open('thermopackage.txt')] + print("thermo2") + for j in self.lines: + combo.addItem(str(j)) + combo.setMinimumContentsLength(15) + lay = QGridLayout() + lay.addWidget(QLabel(i+":"), 0,0, alignment=Qt.AlignLeft) + lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(''), 0, 2, alignment = Qt.AlignCenter) + self.formLayout.addRow(lay) + self.inputdict[i] = combo + print("thermo") + elif(i=="Ctype"): + combo = QComboBox() + self.lines = ["Total","Partial"] + for j in self.lines: + combo.addItem(str(j)) + combo.setMinimumContentsLength(15) + lay = QGridLayout() + lay.addWidget(QLabel("Condensor Type :"), 0, 0, alignment=Qt.AlignLeft) + lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(''), 0, 2, alignment = Qt.AlignCenter) + self.formLayout.addRow(lay) + self.inputdict[i] = combo + elif(i=="x_pc"): + noc = len(compound_selected) + print(noc) + self.x_pclist.clear() + gp = QGroupBox("Compounds") + lay = QGridLayout() + for j in range(noc): + l = QLineEdit() + self.inputdict[i] = "x_pc" + lay.addWidget(QLabel(str(compound_selected[j])+":"),j,0, alignment=Qt.AlignLeft) + lay.addWidget(l,j,1, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(self.obj.variables[i]['unit']),j,2, alignment=Qt.AlignCenter) + self.x_pclist.append(l) + gp.setLayout(lay) + self.formLayout.addRow(gp) + elif (self.obj.type == 'Mixer' and i == 'Pout'): + combo = QComboBox() + print("Mixer combo") + for j in self.obj.Pout_modes: + combo.addItem(str(j)) + combo.setMinimumContentsLength(15) + lay = QGridLayout() + lay.addWidget(QLabel(self.obj.variables[i]['name']+":"), 0,0, alignment=Qt.AlignLeft) + lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(self.obj.variables[i]['unit']),0,2, alignment=Qt.AlignCenter) + self.formLayout.addRow(lay) + self.inputdict[i] = combo + elif (self.obj.type == 'Splitter' and i == 'CalcType'): + combo = QComboBox() + print("Splitter combo") + for j in self.obj.CalcType_modes: + combo.addItem(str(j)) + combo.setMinimumContentsLength(15) + stream1 = QLineEdit() + stream2 = QLineEdit() + unit = QLabel('') + lay = QGridLayout() + lay.addWidget(QLabel(self.obj.variables[i]['name']+":"), 0,0, alignment=Qt.AlignLeft) + lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(self.obj.variables[i]['unit']),0,2, alignment=Qt.AlignCenter) + + lay.addWidget(QLabel("Stream 1 : "), 1,0, alignment = Qt.AlignLeft) + lay.addWidget(stream1, 1,1, alignment = Qt.AlignCenter) + lay.addWidget(unit, 1,2, alignment = Qt.AlignRight) + + lay.addWidget(QLabel("Stream 2 : "), 2,0, alignment = Qt.AlignLeft) + lay.addWidget(stream2, 2,1, alignment = Qt.AlignCenter) + lay.addWidget(unit, 2,2, alignment = Qt.AlignRight) + self.formLayout.addRow(lay) + print("daf ", self.formLayout) + #combo.currentIndexChanged.connect(lambda:self.SplitterStreams(combo, lay, unit)) + lst = [combo, stream1, stream2] + #lst = [combo.currentText(), stream1.text(), stream2.text()] + self.inputdict[i] = lst + # self.inputdict[i] = stream1 + # self.inputdict[i] = stream2 + print(self.inputdict[i]) + elif i == 'HKey' or i == 'LKey': + combo = QComboBox() + print("ShortcutColumn combo") + for j in self.obj.compounds: + combo.addItem(str(j)) + combo.setMinimumContentsLength(15) + lay = QGridLayout() + lay.addWidget(QLabel(self.obj.variables[i]['name']+":"), 0,0, alignment=Qt.AlignLeft) + lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(self.obj.variables[i]['unit']),0,2, alignment=Qt.AlignCenter) + self.formLayout.addRow(lay) + self.inputdict[i] = combo + elif self.obj.type == 'CompoundSeparator' and i == 'SepStrm': + print(i) + rlay = QHBoxLayout() + r1 = QRadioButton('Stream 1') + r1.setChecked(True) + r2 = QRadioButton('Stream 2') + r2.setChecked(False) + rlay.addWidget(r1) + rlay.addWidget(r2) + self.formLayout.addRow(rlay) + + lst = [r1, r2] + + lay = QGridLayout() + for k,val in enumerate(self.obj.compounds): + combo = QComboBox() + print("CompoundSeparator combo") + for j in self.obj.SepFact_modes: + combo.addItem(str(j)) + l = QLineEdit() + lay.addWidget(QLabel(val+" :"), k,0, alignment=Qt.AlignLeft) + lay.addWidget(combo, k, 1, alignment=Qt.AlignCenter) + lay.addWidget(l,k,2, alignment=Qt.AlignCenter) + lst.append(combo) + lst.append(l) + self.inputdict[i] = lst + self.formLayout.addRow(lay) + elif self.obj.type == 'Flash' and i == 'Bdef': + print(i) + # rlay = QHBoxLayout() + r1 = QCheckBox() + r1.setChecked(False) + r2 = QCheckBox() + r2.setChecked(False) + # rlay.addWidget(r1) + # rlay.addWidget(r2) + # self.formLayout.addRow(rlay) + + l1 = QLineEdit() + l1.setText(str(self.obj.variables['Tdef']['value'])) + l2 = QLineEdit() + l2.setText(str(self.obj.variables['Pdef']['value'])) + lay = QGridLayout() + lay.addWidget(r1, 0,0, alignment = Qt.AlignLeft) + lay.addWidget(QLabel(self.obj.variables['Tdef']['name']+":"), 0,1, alignment=Qt.AlignLeft) + lay.addWidget(l1, 0, 2, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(self.obj.variables['Tdef']['unit']),0,3, alignment=Qt.AlignRight) + l1.setDisabled(True) + + lay.addWidget(r2, 2,0, alignment = Qt.AlignLeft) + lay.addWidget(QLabel(self.obj.variables['Pdef']['name']+":"), 2,1, alignment=Qt.AlignLeft) + lay.addWidget(l2, 2, 2, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(self.obj.variables['Pdef']['unit']),2,3, alignment=Qt.AlignRight) + self.formLayout.addRow(lay) + l2.setDisabled(True) + r1.toggled.connect(lambda:l1.setDisabled(not r1.isChecked())) + r2.toggled.connect(lambda:l2.setDisabled(not r2.isChecked())) + + self.inputdict[i] = [r1, r2, l1, l2] + else: + print("elseloop") + print(i) + if i == None: + continue + l = QLineEdit() + if self.inputdict[i] != None: + l.setText(str(self.inputdict[i])) + print('before lay') + lay = QGridLayout() + lay.addWidget(QLabel(self.obj.variables[i]['name']+":"),0,0, alignment=Qt.AlignLeft) #self.obj.variables[i]['name'] + lay.addWidget(l,0,1, alignment=Qt.AlignCenter) + print('after lay') + if(i != 'MolFlow'): + lay.addWidget(QLabel(self.obj.variables[i]['unit']),0,2, alignment=Qt.AlignCenter) + else: + lay.addWidget(QLabel('mol/s'),0,2, alignment=Qt.AlignCenter) + print('after all') + self.formLayout.addRow(lay) + self.inputdict[i] = l + + + except Exception as e: + print(e) + + def Show_Error(self): + QMessageBox.about(self, 'Important', "Please fill all fields with data") + + def param(self): + try: + self.dict={} + print("param.inputdict ", self.inputdict) + for i in self.inputdict: + if (self.inputdict[i] == None): + continue + + if(i=="thermoPackage"): + if (self.inputdict[i].currentText()): + self.dict[i] = self.inputdict[i].currentText() + else: + self.Show_Error() + break + elif(i=="Ctype"): + if (self.inputdict[i].currentText()): + self.dict[i] = self.inputdict[i].currentText() + else: + self.Show_Error() + break + elif(i =="x_pc"): + l=[] + mf = [] + total_moles = 0 + for mol_frac in self.x_pclist: + if (mol_frac.text()): + l.append(mol_frac.text()) + total_moles += float(l[-1]) + else: + self.Show_Error() + break + for c in range(len(compound_selected)): + mf.append(str(float(l[c])/total_moles)) + self.x_pclist[c].setText(mf[-1]) + self.dict[i] = ",".join(mf) + elif(i == 'Pout' and self.obj.type == 'Mixer' or i == '' or i == 'HKey' or i == 'LKey'): + self.dict[i] = self.inputdict[i].currentText() + elif i == 'CalcType' and self.obj.type == 'Splitter': + self.dict[i] = [self.inputdict[i][0].currentText(), self.inputdict[i][1].text(), self.inputdict[i][2].text()] + elif self.obj.type == 'Flash' and i == 'Bdef': + self.dict[i] = [self.inputdict[i][0].isChecked(), self.inputdict[i][1].isChecked(), self.inputdict[i][2].text(), self.inputdict[i][3].text()] + elif self.obj.type == 'CompoundSeparator': + self.dict[i] = [self.inputdict[i][0].isChecked(),self.inputdict[i][1].isChecked()] + j = 2 + for comp in self.obj.compounds: + self.dict[i].append(self.inputdict[i][j].currentText()) + self.dict[i].append(self.inputdict[i][j+1].text()) + j += 2 + else: + print(self.inputdict[i], i, self.obj.type) + if (self.inputdict[i].text()): + self.dict[i] = self.inputdict[i].text() + else: + print(self.inputdict[i].text()) + self.Show_Error() + break + + print("param ", self.dict) + self.obj.paramsetter(self.dict) + self.hide() + + except Exception as e: + print(e) + + + @staticmethod + def showResult(lst): + #DockWidget1.flag = True + for i in lst: + i.resultsCategory(i.name) + #i.show() + + # result data tab + def resultsCategory(self,name): + flag = True + try: + print("Under result category name ", name) + result=self.container.result + obj = self.container.fetchObject(name) + + d = {"Mole Fraction":"x_pc", "Mass Fraction":"xm_pc", "Mole Flow":"F_pc", "Mass Flow":"Fm_pc"} + lst = list(d.keys()) + klst = list(d.values()) + + p = {"Pressure":"P", "Temperature":"T","Vapour Phase Mole Fraction":"xvap", "Phase Molar Enthalpy":"H_p", + "Phase Molar Entropy":"S_p", "Molar Flow Rate":"F_p"} + + # Amounts Tab + if obj.type == 'MaterialStream': + l = [] # list for basis names + for basis in d: + propertyname = name + '.' + d[basis] + print("basis ", basis, propertyname) + for i in result[0]: + if (propertyname in i): + l.append(i) + print(l) + + j = 0 + t = 0 + namee = klst[j] + print("namee ", namee) + + for i,k in enumerate(l): + ind = result[0].index(k) + print("index ", ind) + print("str ", k) + resultval = str(result[-1][ind]) + print("######Resultsfetch####",resultval) + print(k[k.find(".")+1:k.find("[")]) + obj.variables[k.split('.')[1]]['value'] = resultval + if namee in k: + if i%3 == 0: + if(flag): + mroot = QTreeWidgetItem(self.mTreeWidget, [lst[j]]) + child = QTreeWidgetItem(mroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) + elif i%3 == 1: + if(flag): + lroot = QTreeWidgetItem(self.lTreeWidget, [lst[j]]) + child = QTreeWidgetItem(lroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) + elif i%3 == 2: + if (flag): + vroot = QTreeWidgetItem(self.vTreeWidget, [lst[j]]) + child = QTreeWidgetItem(vroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) + t += 1 + flag = False + else: + j += 1 + t = 0 + namee = klst[j] + flag = True + if i%3 == 0: + if (flag): + mroot = QTreeWidgetItem(self.mTreeWidget, [lst[j]]) + child = QTreeWidgetItem(mroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) + elif i%3 == 1: + if (flag): + lroot = QTreeWidgetItem(self.lTreeWidget, [lst[j]]) + child = QTreeWidgetItem(lroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) + elif i%3 == 2: + if (flag): + vroot = QTreeWidgetItem(self.vTreeWidget, [lst[j]]) + child = QTreeWidgetItem(vroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) + t += 1 + flag = False + #print(obj.variables) + + # Phase Properties Tab + phaseResLst = [] + for phase in p: + propertyname = name + '.' + p[phase] + print("phase ", phase, propertyname) + for i in result[0]: + if i.find('['): + if (propertyname == i[0:i.find('[')]): + phaseResLst.append(i) + if propertyname == i: + phaseResLst.append(i) + print(phaseResLst) + + self.mTableWidget.setRowCount(0) + self.lTableWidget.setRowCount(0) + self.vTableWidget.setRowCount(0) + + for i,val in enumerate(phaseResLst): + ind = result[0].index(val) + resultval = str(result[-1][ind]) + print(resultval, i, val) + obj.variables[val.split('.')[1]]['value'] = resultval + if '[' in val: + print(val) + temp = val[val.find('.')+1:val.find('[')] + print(temp) + if '1' in val.split('.')[1]: + print(obj.variables[val.split('.')[1]]['name']) + mrowPosition = self.mTableWidget.rowCount() + self.mTableWidget.insertRow(mrowPosition) + self.mTableWidget.setItem(mrowPosition , 0, QTableWidgetItem(obj.variables[val.split('.')[1]]['name'])) + self.mTableWidget.setItem(mrowPosition , 1, QTableWidgetItem(resultval)) + self.mTableWidget.setItem(mrowPosition , 2, QTableWidgetItem(obj.variables[val.split('.')[1]]['unit'])) + self.mTableWidget.resizeColumnsToContents() + + if '2' in val.split('.')[1]: + lrowPosition = self.lTableWidget.rowCount() + self.lTableWidget.insertRow(lrowPosition) + self.lTableWidget.setItem(lrowPosition , 0, QTableWidgetItem(obj.variables[val.split('.')[1]]['name'])) + self.lTableWidget.setItem(lrowPosition , 1, QTableWidgetItem(resultval)) + self.lTableWidget.setItem(lrowPosition , 2, QTableWidgetItem(obj.variables[val.split('.')[1]]['unit'])) + self.lTableWidget.resizeColumnsToContents() + if '3' in val.split('.')[1]: + vrowPosition = self.vTableWidget.rowCount() + self.vTableWidget.insertRow(vrowPosition) + self.vTableWidget.setItem(vrowPosition , 0, QTableWidgetItem(obj.variables[val.split('.')[1]]['name'])) + self.vTableWidget.setItem(vrowPosition , 1, QTableWidgetItem(resultval)) + self.vTableWidget.setItem(vrowPosition , 2, QTableWidgetItem(obj.variables[val.split('.')[1]]['unit'])) + self.vTableWidget.resizeColumnsToContents() + if not '[' in val: + #print(p[val.split('.')[1]]) + print(obj.variables[val.split('.')[1]]['name']) + mrowPosition = self.mTableWidget.rowCount() + self.mTableWidget.insertRow(mrowPosition) + self.mTableWidget.setItem(mrowPosition , 0, QTableWidgetItem(obj.variables[val.split('.')[1]]['name'])) + self.mTableWidget.setItem(mrowPosition , 1, QTableWidgetItem(resultval)) + self.mTableWidget.setItem(mrowPosition , 2, QTableWidgetItem(obj.variables[val.split('.')[1]]['unit'])) + self.mTableWidget.resizeColumnsToContents() + + print(obj.variables) + + except Exception as e: + print(e) + + +class DockWidgetFlash(DockWidget): + + def __init__(self,name,comptype,obj,container,parent=None): + DockWidget.__init__(self,name,comptype,obj,container,parent=None) + + def inputparamslist(self): + try: + print("inputparamslist ", self.inputdict) + for c,i in enumerate(self.inputdict): + if i == None: + continue + if(i=="thermoPackage"): + print("thermo1") + combo = QComboBox() + self.lines = [line.rstrip('\n') for line in open('thermopackage.txt')] + print("thermo2") + for j in self.lines: + combo.addItem(str(j)) + combo.setMinimumContentsLength(15) + lay = QGridLayout() + lay.addWidget(QLabel(i+":"), 0,0, alignment=Qt.AlignLeft) + lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(''), 0, 2, alignment = Qt.AlignCenter) + self.formLayout.addRow(lay) + self.inputdict[i] = combo + print("thermo") + elif self.obj.type == 'Flash' and i == 'Bdef': + print(i) + r1 = QCheckBox() + r1.setChecked(False) + r2 = QCheckBox() + r2.setChecked(False) + + l1 = QLineEdit() + l1.setText(str(self.obj.variables['Tdef']['value'])) + l2 = QLineEdit() + l2.setText(str(self.obj.variables['Pdef']['value'])) + lay = QGridLayout() + lay.addWidget(r1, 0,0, alignment = Qt.AlignLeft) + lay.addWidget(QLabel(self.obj.variables['Tdef']['name']+":"), 0,1, alignment=Qt.AlignLeft) + lay.addWidget(l1, 0, 2, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(self.obj.variables['Tdef']['unit']),0,3, alignment=Qt.AlignRight) + l1.setDisabled(True) + + lay.addWidget(r2, 2,0, alignment = Qt.AlignLeft) + lay.addWidget(QLabel(self.obj.variables['Pdef']['name']+":"), 2,1, alignment=Qt.AlignLeft) + lay.addWidget(l2, 2, 2, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(self.obj.variables['Pdef']['unit']),2,3, alignment=Qt.AlignRight) + self.formLayout.addRow(lay) + l2.setDisabled(True) + r1.toggled.connect(lambda:l1.setDisabled(not r1.isChecked())) + r2.toggled.connect(lambda:l2.setDisabled(not r2.isChecked())) + + self.inputdict[i] = [r1, r2, l1, l2] + except Exception as e: + print(e) + + def param(self): + try: + self.dict={} + print("param.inputdict ", self.inputdict) + for i in self.inputdict: + if (self.inputdict[i] == None): + continue + + if(i=="thermoPackage"): + if (self.inputdict[i].currentText()): + self.dict[i] = self.inputdict[i].currentText() + else: + self.Show_Error() + break + elif self.obj.type == 'Flash' and i == 'Bdef': + self.dict[i] = [self.inputdict[i][0].isChecked(), self.inputdict[i][1].isChecked(), self.inputdict[i][2].text(), self.inputdict[i][3].text()] + + print("param ", self.dict) + self.obj.paramsetter(self.dict) + self.hide() + + except Exception as e: + print(e) + +class DockWidgetFlash(DockWidget): + + def __init__(self,name,comptype,obj,container,parent=None): + DockWidget.__init__(self,name,comptype,obj,container,parent=None) + + def inputparamslist(self): + try: + print("inputparamslist ", self.inputdict) + for c,i in enumerate(self.inputdict): + if i == None: + continue + if(i=="thermoPackage"): + print("thermo1") + combo = QComboBox() + self.lines = [line.rstrip('\n') for line in open('thermopackage.txt')] + print("thermo2") + for j in self.lines: + combo.addItem(str(j)) + combo.setMinimumContentsLength(15) + lay = QGridLayout() + lay.addWidget(QLabel(i+":"), 0,0, alignment=Qt.AlignLeft) + lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(''), 0, 2, alignment = Qt.AlignCenter) + self.formLayout.addRow(lay) + self.inputdict[i] = combo + print("thermo") + elif self.obj.type == 'Flash' and i == 'Bdef': + print(i) + r1 = QCheckBox() + r1.setChecked(False) + r2 = QCheckBox() + r2.setChecked(False) + + l1 = QLineEdit() + l1.setText(str(self.obj.variables['Tdef']['value'])) + l2 = QLineEdit() + l2.setText(str(self.obj.variables['Pdef']['value'])) + lay = QGridLayout() + lay.addWidget(r1, 0,0, alignment = Qt.AlignLeft) + lay.addWidget(QLabel(self.obj.variables['Tdef']['name']+":"), 0,1, alignment=Qt.AlignLeft) + lay.addWidget(l1, 0, 2, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(self.obj.variables['Tdef']['unit']),0,3, alignment=Qt.AlignRight) + l1.setDisabled(True) + + lay.addWidget(r2, 2,0, alignment = Qt.AlignLeft) + lay.addWidget(QLabel(self.obj.variables['Pdef']['name']+":"), 2,1, alignment=Qt.AlignLeft) + lay.addWidget(l2, 2, 2, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(self.obj.variables['Pdef']['unit']),2,3, alignment=Qt.AlignRight) + self.formLayout.addRow(lay) + l2.setDisabled(True) + r1.toggled.connect(lambda:l1.setDisabled(not r1.isChecked())) + r2.toggled.connect(lambda:l2.setDisabled(not r2.isChecked())) + + self.inputdict[i] = [r1, r2, l1, l2] + except Exception as e: + print(e) + + def param(self): + try: + self.dict={} + print("param.inputdict ", self.inputdict) + for i in self.inputdict: + if (self.inputdict[i] == None): + continue + + if(i=="thermoPackage"): + if (self.inputdict[i].currentText()): + self.dict[i] = self.inputdict[i].currentText() + else: + self.Show_Error() + break + elif self.obj.type == 'Flash' and i == 'Bdef': + self.dict[i] = [self.inputdict[i][0].isChecked(), self.inputdict[i][1].isChecked(), self.inputdict[i][2].text(), self.inputdict[i][3].text()] + + print("param ", self.dict) + self.obj.paramsetter(self.dict) + self.hide() + + except Exception as e: + print(e)
\ No newline at end of file diff --git a/DockWidgetCompoundSeparator.py b/DockWidgetCompoundSeparator.py new file mode 100644 index 0000000..24cdbc7 --- /dev/null +++ b/DockWidgetCompoundSeparator.py @@ -0,0 +1,99 @@ +from PyQt5.QtCore import * +from PyQt5.QtWidgets import * +from PyQt5.QtGui import * +from PyQt5.uic import loadUiType +import pandas as pd +from functools import partial +from ComponentSelector import * +from collections import defaultdict +from Graphics import * + +ui_dialog,_ = loadUiType('DockWidgetCompoundSeparator.ui') + +class DockWidgetCompoundSeparator(QDockWidget,ui_dialog): + + def __init__(self,name,comptype,obj,container,parent=None): + QDockWidget.__init__(self,parent) + self.setupUi(self) + self.setWindowTitle(obj.name) + self.name=name + self.obj=obj + self.type = comptype + self.inputdict = [] + + print("constructor ", self.inputdict) + self.inputparamslist() + self.dict = [] + + def inputparamslist(self): + try: + print("inputparamslist ", self.inputdict) + if self.type == 'CompoundSeparator': + + # self.gridLayout = QGridLayout() + calculationGroupBox = QGroupBox('Calculation Parameters') + + calculationLayout = QGridLayout() + + r1 = QRadioButton('Stream 1') + r1.setChecked(True) + r1.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + r2 = QRadioButton('Stream 2') + r2.setChecked(False) + r2.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + + lst = [r1, r2] + calculationLayout.addWidget(r1, 0, 1) + calculationLayout.addWidget(r2, 0, 2) + + for k,val in enumerate(self.obj.compounds): + combo = QComboBox() + print("CompoundSeparator combo") + for j in self.obj.SepFact_modes: + combo.addItem(str(j)) + combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + l = QLineEdit() + l.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + calculationLayout.addWidget(QLabel(val+" :"), k+1,0, alignment=Qt.AlignLeft) + calculationLayout.addWidget(combo, k+1, 1, alignment=Qt.AlignCenter) + calculationLayout.addWidget(l,k+1,2, alignment=Qt.AlignCenter) + lst.append(combo) + lst.append(l) + + calculationLayout.setColumnStretch(3, len(self.obj.compounds)+1) + calculationGroupBox.setLayout(calculationLayout) + + btn = QPushButton('Submit') + btn.clicked.connect(self.param) + + self.gridLayout.setVerticalSpacing(5) + self.gridLayout.addWidget(calculationGroupBox,0,0) + self.gridLayout.addWidget(btn,1,0) + + self.inputdict = lst + + except Exception as e: + print(e) + + def Show_Error(self): + QMessageBox.about(self, 'Important', "Please fill all fields with data") + + def param(self): + try: + self.dict=[] + print("param.inputdict ", self.inputdict) + + self.dict = [self.inputdict[0].isChecked(), self.inputdict[1].isChecked()] + j = 2 + for i in range(len(self.obj.compounds)): + print(j+i) + self.dict.append(self.inputdict[j+i].currentText()) + self.dict.append(self.inputdict[j+i+1].text()) + j += 1 + + print("param ", self.dict) + self.obj.paramsetter(self.dict) + self.hide() + + except Exception as e: + print(e) diff --git a/DockWidgetCompoundSeparator.ui b/DockWidgetCompoundSeparator.ui new file mode 100644 index 0000000..2d9a4b2 --- /dev/null +++ b/DockWidgetCompoundSeparator.ui @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>form</class> + <widget class="QWidget" name="form"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>392</width> + <height>700</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>3200</width> + <height>5000</height> + </size> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <widget class="QWidget" name="gridLayoutWidget"> + <property name="geometry"> + <rect> + <x>10</x> + <y>40</y> + <width>331</width> + <height>191</height> + </rect> + </property> + <layout class="QGridLayout" name="gridLayout"/> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/DockWidgetDistillationColumn.py b/DockWidgetDistillationColumn.py new file mode 100644 index 0000000..ca2da9c --- /dev/null +++ b/DockWidgetDistillationColumn.py @@ -0,0 +1,120 @@ +from PyQt5.QtCore import * +from PyQt5.QtWidgets import * +from PyQt5.QtGui import * +from PyQt5.uic import loadUiType +import pandas as pd +from functools import partial +from ComponentSelector import * +from collections import defaultdict +from Graphics import * + +ui_dialog,_ = loadUiType('DockWidgetDistillationColumn.ui') + +class DockWidgetDistillationColumn(QDockWidget,ui_dialog): + + def __init__(self,name,comptype,obj,container,parent=None): + QDockWidget.__init__(self,parent) + self.setupUi(self) + self.setWindowTitle(obj.name) + self.name=name + self.obj=obj + self.type = comptype + self.inputdict = [] + print("constructor ", self.inputdict) + self.pushButton_2.clicked.connect(self.param) + self.dict = [] + self.inputparamslist() + self.nameType = None + self.container = container + + # input data tab + + def inputparamslist(self): + try: + print("inputparamslist ", self.inputdict) + + # tab 1 + self.l1.setText(self.obj.variables['Nt']['name']+":") + self.le1.setText(str(self.obj.variables['Nt']['value'])) + self.l2.setText(self.obj.variables['In_s']['name']+":") + self.l3.setText(self.obj.variables['InT_s']['name']+":") + + # tab 2 + self.l4.setText(self.obj.variables['Ctype']['name']+":") + self.u1.setText(self.obj.variables['Ctype']['unit']) + self.l5.setText(self.obj.variables['Pcond']['name']+":") + self.le5.setText(str(self.obj.variables['Pcond']['value'])) + self.u2.setText(self.obj.variables['Pcond']['unit']) + self.l6.setText(self.obj.variables['C_Spec']['name']+":") + self.l7.setText("Compounds :") + + self.cb5.addItem("Total") + self.cb5.addItem("Partial") + for j in self.obj.Cspec_list: + self.cb1.addItem(str(j)) + for j in self.obj.compounds: + self.cb2.addItem(str(j)) + self.cb2.setDisabled(True) + self.cb1.currentIndexChanged.connect(self.fun2) + + + # tab3 + self.l8.setText(self.obj.variables['Preb']['name']+":") + self.le7.setText(str(self.obj.variables['Preb']['value'])) + self.u3.setText(self.obj.variables['Preb']['unit']) + self.l9.setText(self.obj.variables['R_Spec']['name']+":") + self.l10.setText('Compounds') + + for j in self.obj.Rspec_list: + self.cb3.addItem(str(j)) + for j in self.obj.compounds: + self.cb4.addItem(str(j)) + self.cb4.setDisabled(True) + self.cb3.currentIndexChanged.connect(self.fun3) + + self.inputdict = [self.le1, self.le2, self.le3, self.cb5, self.le5, self.cb1, self.cb2, self.le6, self.le7, self.cb3, self.cb4, self.le8] + + except Exception as e: + print(e) + + def fun2(self): + if self.cb1.currentText() == 'Compound Molar Fraction' or self.cb1.currentText() == 'Compound Molar Flow (mol/s)': + self.cb2.setDisabled(False) + else: + self.cb2.setDisabled(True) + + def fun3(self): + if self.cb3.currentText() == 'Compound Molar Fraction' or self.cb3.currentText() == 'Compound Molar Flow (mol/s)': + self.cb4.setDisabled(False) + else: + self.cb4.setDisabled(True) + + def Show_Error(self): + QMessageBox.about(self, 'Important', "Please fill all fields with data") + + def param(self): + try: + self.dict= [] + print("param.inputdict ", self.inputdict) + self.dict = [self.inputdict[0].text(),self.inputdict[1].text(), self.inputdict[2].text(), self.inputdict[3].currentText(), + self.inputdict[4].text(), self.inputdict[5].currentText(), self.inputdict[6].currentText(), self.inputdict[7].text(), + self.inputdict[8].text(), self.inputdict[9].currentText(), self.inputdict[10].currentText(), self.inputdict[11].text()] + + print("param ", self.dict) + self.obj.paramsetter(self.dict) + self.hide() + + except Exception as e: + print(e) + + + @staticmethod + def showResult(lst): + #DockWidget1.flag = True + for i in lst: + i.resultsCategory(i.name) + #i.show() + + # result data tab + def resultsCategory(self,name): + pass
\ No newline at end of file diff --git a/DockWidgetDistillationColumn.ui b/DockWidgetDistillationColumn.ui new file mode 100644 index 0000000..0cb1043 --- /dev/null +++ b/DockWidgetDistillationColumn.ui @@ -0,0 +1,270 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>392</width> + <height>700</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>3200</width> + <height>5000</height> + </size> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <widget class="QTabWidget" name="tabWidget"> + <property name="geometry"> + <rect> + <x>10</x> + <y>30</y> + <width>361</width> + <height>621</height> + </rect> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="tab"> + <attribute name="title"> + <string>Input Data</string> + </attribute> + <widget class="QGroupBox" name="groupBox_2"> + <property name="geometry"> + <rect> + <x>10</x> + <y>10</y> + <width>331</width> + <height>204</height> + </rect> + </property> + <property name="title"> + <string>Parameter Selection</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_10"> + <item> + <widget class="QTabWidget" name="tabWidget_5"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="tab1"> + <attribute name="title"> + <string>General</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_6"> + <item> + <layout class="QGridLayout" name="lay1"> + <item row="1" column="0"> + <widget class="QLabel" name="l2"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QLineEdit" name="le1"/> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="l1"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QLineEdit" name="le2"/> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="l3"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QLineEdit" name="le3"/> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab2"> + <attribute name="title"> + <string>Condensor</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_5"> + <item> + <layout class="QGridLayout" name="lay2"> + <item row="3" column="0"> + <widget class="QLabel" name="l7"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="l4"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="l5"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QComboBox" name="cb1"/> + </item> + <item row="1" column="2"> + <widget class="QLineEdit" name="le5"/> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="l6"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="3" column="2"> + <widget class="QComboBox" name="cb2"> + <property name="enabled"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="QLabel" name="u1"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="QLabel" name="u2"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="4" column="2"> + <widget class="QLineEdit" name="le6"/> + </item> + <item row="0" column="2"> + <widget class="QComboBox" name="cb5"/> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab3"> + <attribute name="title"> + <string>Reboiler</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_7"> + <item> + <layout class="QGridLayout" name="lay3"> + <item row="4" column="0"> + <widget class="QLabel" name="l9"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="l8"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="l10"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="5" column="2"> + <widget class="QComboBox" name="cb4"> + <property name="enabled"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="3" column="2"> + <widget class="QLineEdit" name="le7"/> + </item> + <item row="4" column="2"> + <widget class="QComboBox" name="cb3"/> + </item> + <item row="6" column="2"> + <widget class="QLineEdit" name="le8"/> + </item> + <item row="3" column="3"> + <widget class="QLabel" name="u3"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + <widget class="QPushButton" name="pushButton_2"> + <property name="geometry"> + <rect> + <x>10</x> + <y>220</y> + <width>331</width> + <height>21</height> + </rect> + </property> + <property name="text"> + <string>Submit</string> + </property> + </widget> + </widget> + <widget class="QWidget" name="tab_2"> + <attribute name="title"> + <string>Results</string> + </attribute> + <layout class="QHBoxLayout" name="horizontalLayout_3"/> + </widget> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/DockWidgetFlash.py b/DockWidgetFlash.py new file mode 100644 index 0000000..f0fa511 --- /dev/null +++ b/DockWidgetFlash.py @@ -0,0 +1,74 @@ +from PyQt5.QtCore import * +from PyQt5.QtWidgets import * +from PyQt5.QtGui import * +from PyQt5.uic import loadUiType +import pandas as pd +from functools import partial +from ComponentSelector import * +from collections import defaultdict +from Graphics import * + +ui_dialog,_ = loadUiType('DockWidgetFlash.ui') + +class DockWidgetFlash(QDockWidget,ui_dialog): + + def __init__(self,name,comptype,obj,container,parent=None): + QDockWidget.__init__(self,parent) + self.setupUi(self) + self.setWindowTitle(obj.name) + self.name=name + self.obj=obj + self.type = comptype + self.inputdict = [] + print("constructor ", self.inputdict) + self.inputparamslist() + self.btn.clicked.connect(self.param) + self.dict = [] + + def inputparamslist(self): + try: + print("inputparamslist ", self.inputdict) + + self.l1.setText(self.obj.variables['thermoPackage']['name']+":") + self.lines = [line.rstrip('\n') for line in open('thermopackage.txt')] + for j in self.lines: + self.cb1.addItem(str(j)) + + self.check1.setText(self.obj.variables['Tdef']['name']+":") + self.le2.setText(str(self.obj.variables['Tdef']['value'])) + self.u2.setText(self.obj.variables['Tdef']['unit']) + self.check1.toggled.connect(self.fun) + self.check2.setText(self.obj.variables['Pdef']['name']+":") + self.le3.setText(str(self.obj.variables['Pdef']['value'])) + self.u3.setText(self.obj.variables['Pdef']['unit']) + self.check2.toggled.connect(self.fun) + + self.inputdict = [self.cb1, self.check1, self.le2, self.check2, self.le3] + + except Exception as e: + print(e) + + def fun(self): + if self.check1.isChecked(): + self.le2.setDisabled(False) + else: + self.le2.setDisabled(True) + if self.check2.isChecked(): + self.le3.setDisabled(False) + else: + self.le3.setDisabled(True) + + def Show_Error(self): + QMessageBox.about(self, 'Important', "Please fill all fields with data") + + def param(self): + try: + self.dict={} + print("param.inputdict ", self.inputdict) + self.dict = [self.inputdict[0].currentText(),self.inputdict[1].isChecked(), float(self.inputdict[2].text()), self.inputdict[3].isChecked(), float(self.inputdict[4].text())] + print("param ", self.dict) + self.obj.paramsetter(self.dict) + self.hide() + + except Exception as e: + print(e)
\ No newline at end of file diff --git a/DockWidgetFlash.ui b/DockWidgetFlash.ui new file mode 100644 index 0000000..c781aa6 --- /dev/null +++ b/DockWidgetFlash.ui @@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>392</width> + <height>700</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>3200</width> + <height>5000</height> + </size> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <widget class="QGroupBox" name="groupBox"> + <property name="geometry"> + <rect> + <x>10</x> + <y>40</y> + <width>341</width> + <height>141</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="styleSheet"> + <string notr="true">Q</string> + </property> + <property name="title"> + <string>Calculation Parameters</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <layout class="QGridLayout" name="gridLayout"> + <item row="2" column="2"> + <widget class="QLineEdit" name="le3"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="2" column="3"> + <widget class="QLabel" name="u3"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QLineEdit" name="le2"> + <property name="enabled"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="QLabel" name="u2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="l1"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QCheckBox" name="check2"> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QComboBox" name="cb1"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QCheckBox" name="check1"> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QPushButton" name="btn"> + <property name="geometry"> + <rect> + <x>10</x> + <y>190</y> + <width>341</width> + <height>23</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Submit</string> + </property> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/DockWidgetMatStm.py b/DockWidgetMaterialStream.py index 76ecb11..5fd6261 100644 --- a/DockWidgetMatStm.py +++ b/DockWidgetMaterialStream.py @@ -4,13 +4,13 @@ from PyQt5.QtGui import * from PyQt5.uic import loadUiType import pandas as pd from functools import partial -from component_selector import * +from ComponentSelector import * from collections import defaultdict from Graphics import * -ui_dialog,_ = loadUiType('DockWidgetMatStm.ui') +ui_dialog,_ = loadUiType('DockWidgetMaterialStream.ui') -class DockWidgetMatStm(QDockWidget,ui_dialog): +class DockWidgetMaterialStream(QDockWidget,ui_dialog): def __init__(self,name,comptype,obj,container,parent=None): QDockWidget.__init__(self,parent) @@ -41,11 +41,11 @@ class DockWidgetMatStm(QDockWidget,ui_dialog): self.vTreeWidget.itemClicked.connect(lambda : self.printer(self.vTreeWidget.currentItem())) - def printer(self, treeItem ): - foldername = treeItem.text(0) - comment = treeItem.text(1) - data = treeItem.text(2) - print(foldername , ': ' , comment , ' (' + data + ')') + # def printer(self, treeItem ): + # foldername = treeItem.text(0) + # comment = treeItem.text(1) + # data = treeItem.text(2) + # print(foldername , ': ' , comment , ' (' + data + ')') # input data tab def modes(self): diff --git a/DockWidgetMatStm.ui b/DockWidgetMaterialStream.ui index 8995ba6..8995ba6 100644 --- a/DockWidgetMatStm.ui +++ b/DockWidgetMaterialStream.ui diff --git a/DockWidgetMixer.py b/DockWidgetMixer.py new file mode 100644 index 0000000..8a00dcd --- /dev/null +++ b/DockWidgetMixer.py @@ -0,0 +1,61 @@ +from PyQt5.QtCore import * +from PyQt5.QtWidgets import * +from PyQt5.QtGui import * +from PyQt5.uic import loadUiType +import pandas as pd +from functools import partial +from ComponentSelector import * +from collections import defaultdict +from Graphics import * + +ui_dialog,_ = loadUiType('DockWidgetMixer.ui') + +class DockWidgetMixer(QDockWidget,ui_dialog): + + def __init__(self,name,comptype,obj,container,parent=None): + QDockWidget.__init__(self,parent) + self.setupUi(self) + self.setWindowTitle(obj.name) + self.name=name + self.obj=obj + self.type = comptype + self.inputdict = [] + self.x_pclist = [] + print("constructor ", self.inputdict) + self.inputparamslist() + self.btn.clicked.connect(self.param) + self.dict = {} + + # input data tab + def inputparamslist(self): + try: + print("inputparamslist ", self.inputdict) + + self.l1.setText(self.obj.variables['NOI']['name']+":") + self.le1.setText(str(self.obj.variables['NOI']['value'])) + self.u1.setText(self.obj.variables['NOI']['unit']) + for i in self.obj.Pout_modes: + self.cb2.addItem(str(i)) + + self.l2.setText(self.obj.variables['Pout']['name']+":") + + + self.inputdict = [self.le1, self.cb2] + + except Exception as e: + print(e) + + def Show_Error(self): + QMessageBox.about(self, 'Important', "Please fill all fields with data") + + def param(self): + try: + self.dict={} + print("param.inputdict ", self.inputdict) + self.dict = [int(self.inputdict[0].text()),self.inputdict[1].currentText()] + print("param ", self.dict) + self.obj.paramsetter(self.dict) + self.hide() + + except Exception as e: + print(e)
\ No newline at end of file diff --git a/DockWidgetMixer.ui b/DockWidgetMixer.ui new file mode 100644 index 0000000..e039490 --- /dev/null +++ b/DockWidgetMixer.ui @@ -0,0 +1,137 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>392</width> + <height>700</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>3200</width> + <height>5000</height> + </size> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <widget class="QGroupBox" name="groupBox"> + <property name="geometry"> + <rect> + <x>10</x> + <y>40</y> + <width>341</width> + <height>101</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="title"> + <string>Calculation Parameters</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="3"> + <widget class="QLabel" name="u1"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QComboBox" name="cb2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="l1"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QLineEdit" name="le1"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="l2"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QPushButton" name="btn"> + <property name="geometry"> + <rect> + <x>10</x> + <y>150</y> + <width>341</width> + <height>23</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Submit</string> + </property> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/DockWidgetShortcutColumn.py b/DockWidgetShortcutColumn.py new file mode 100644 index 0000000..570cdd1 --- /dev/null +++ b/DockWidgetShortcutColumn.py @@ -0,0 +1,97 @@ +from PyQt5.QtCore import * +from PyQt5.QtWidgets import * +from PyQt5.QtGui import * +from PyQt5.uic import loadUiType +import pandas as pd +from functools import partial +from ComponentSelector import * +from collections import defaultdict +from Graphics import * + +ui_dialog,_ = loadUiType('DockWidgetShortcutColumn.ui') + +class DockWidgetShortcutColumn(QDockWidget,ui_dialog): + + def __init__(self,name,comptype,obj,container,parent=None): + QDockWidget.__init__(self,parent) + self.setupUi(self) + self.setWindowTitle(obj.name) + self.name=name + self.obj=obj + self.type = comptype + self.inputdict = [] + print("constructor ", self.inputdict) + self.inputparamslist() + self.btn.clicked.connect(self.param) + self.dict = [] + + self.nameType = None + self.container = container + + # input data tab + def inputparamslist(self): + try: + print("inputparamslist ", self.inputdict) + + self.l1.setText(self.obj.variables['HKey']['name']+":") + print(self.obj.compounds) + for i in self.obj.compounds: + self.cb1.addItem(str(i)) + self.cb2.addItem(str(i)) + + self.l2.setText(self.obj.variables['LKey']['name']+":") + + self.l3.setText(self.obj.variables['HKey_x_pc']['name']+":") + self.le3.setText(str(self.obj.variables['HKey_x_pc']['value'])) + self.u3.setText(self.obj.variables['HKey_x_pc']['unit']) + self.l4.setText(self.obj.variables['LKey_x_pc']['name']+":") + self.u4.setText(self.obj.variables['LKey_x_pc']['unit']) + self.le4.setText(str(self.obj.variables['LKey_x_pc']['value'])) + + self.l5.setText(self.obj.variables['Ctype']['name']+":") + self.cb5.addItem('Total') + self.cb5.addItem('Partial') + + self.l6.setText(self.obj.variables['Pcond']['name']+":") + self.le6.setText(str(self.obj.variables['Pcond']['value'])) + self.u6.setText(self.obj.variables['Pcond']['unit']) + self.l7.setText(self.obj.variables['Preb']['name']+":") + self.u7.setText(self.obj.variables['Preb']['unit']) + self.le7.setText(str(self.obj.variables['Preb']['value'])) + + self.l8.setText(self.obj.variables['RR']['name']+":") + self.le8.setText(str(self.obj.variables['RR']['value'])) + + self.inputdict = [self.cb1, self.cb2, self.le3, self.le4, self.cb5, self.le6, self.le7, self.le8] + + except Exception as e: + print(e) + + def Show_Error(self): + QMessageBox.about(self, 'Important', "Please fill all fields with data") + + def param(self): + try: + self.dict=[] + print("param.inputdict ", self.inputdict) + self.dict = [self.inputdict[0].currentText(),self.inputdict[1].currentText(),float(self.inputdict[2].text()), float(self.inputdict[3].text()), + self.inputdict[4].currentText(), float(self.inputdict[5].text()), float(self.inputdict[6].text()), float(self.inputdict[7].text())] + + print("param ", self.dict) + self.obj.paramsetter(self.dict) + self.hide() + + except Exception as e: + print(e) + + + @staticmethod + def showResult(lst): + #DockWidget1.flag = True + for i in lst: + i.resultsCategory(i.name) + #i.show() + + # result data tab + def resultsCategory(self,name): + pass
\ No newline at end of file diff --git a/DockWidgetShortcutColumn.ui b/DockWidgetShortcutColumn.ui new file mode 100644 index 0000000..c66e699 --- /dev/null +++ b/DockWidgetShortcutColumn.ui @@ -0,0 +1,295 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>392</width> + <height>700</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>3200</width> + <height>5000</height> + </size> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <widget class="QTabWidget" name="tabWidget"> + <property name="geometry"> + <rect> + <x>10</x> + <y>40</y> + <width>351</width> + <height>321</height> + </rect> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="tab"> + <attribute name="title"> + <string>Input Data</string> + </attribute> + <widget class="QGroupBox" name="groupBox"> + <property name="geometry"> + <rect> + <x>8</x> + <y>13</y> + <width>331</width> + <height>237</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Calculation Parameters</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <layout class="QGridLayout" name="gridLayout"> + <item row="4" column="2"> + <widget class="QComboBox" name="cb5"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="l4"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="3" column="3"> + <widget class="QLabel" name="u4"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="l1"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="2" column="3"> + <widget class="QLabel" name="u3"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="l3"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QLineEdit" name="le3"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="l5"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="l6"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="l2"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="5" column="2"> + <widget class="QLineEdit" name="le6"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="6" column="0"> + <widget class="QLabel" name="l7"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="6" column="3"> + <widget class="QLabel" name="u7"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QComboBox" name="cb2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="3" column="2"> + <widget class="QLineEdit" name="le4"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="5" column="3"> + <widget class="QLabel" name="u6"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="6" column="2"> + <widget class="QLineEdit" name="le7"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="7" column="0"> + <widget class="QLabel" name="l8"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="7" column="2"> + <widget class="QLineEdit" name="le8"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QComboBox" name="cb1"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QPushButton" name="btn"> + <property name="geometry"> + <rect> + <x>10</x> + <y>250</y> + <width>331</width> + <height>23</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Submit</string> + </property> + </widget> + </widget> + <widget class="QWidget" name="tab_2"> + <attribute name="title"> + <string>Results</string> + </attribute> + </widget> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/DockWidgetSplitter.py b/DockWidgetSplitter.py new file mode 100644 index 0000000..9327e16 --- /dev/null +++ b/DockWidgetSplitter.py @@ -0,0 +1,78 @@ +from PyQt5.QtCore import * +from PyQt5.QtWidgets import * +from PyQt5.QtGui import * +from PyQt5.uic import loadUiType +import pandas as pd +from functools import partial +from ComponentSelector import * +from collections import defaultdict +from Graphics import * + +ui_dialog,_ = loadUiType('DockWidgetSplitter.ui') + +class DockWidgetSplitter(QDockWidget,ui_dialog): + + def __init__(self,name,comptype,obj,container,parent=None): + QDockWidget.__init__(self,parent) + self.setupUi(self) + self.setWindowTitle(obj.name) + self.name=name + self.obj=obj + self.type = comptype + self.inputdict = [] + print("constructor ", self.inputdict) + self.inputparamslist() + self.btn.clicked.connect(self.param) + self.dict = {} + + # input data tab + def inputparamslist(self): + try: + print("inputparamslist ", self.inputdict) + + self.l1.setText(self.obj.variables['NOO']['name']+":") + self.le1.setText(str(self.obj.variables['NOO']['value'])) + self.u1.setText(self.obj.variables['NOO']['unit']) + + for i in self.obj.CalcType_modes: + self.cb2.addItem(str(i)) + + self.l2.setText(self.obj.variables['CalcType']['name']+":") + + self.l3.setText("Stream 1 :") + self.u3.setText('') + self.l4.setText("Stream 2 :") + self.u4.setText('') + self.cb2.currentIndexChanged.connect(self.fun) + + + self.inputdict = [self.le1, self.cb2, self.le3, self.le4] + + except Exception as e: + print(e) + + def fun(self): + if self.cb2.currentText() == 'Mole Flow Specs': + self.u3.setText('mol/s') + self.u4.setText('mol/s') + elif self.cb2.currentText() == 'Mass Flow Specs': + self.u3.setText('kg/s') + self.u4.setText('kg/s') + else: + self.u3.setText('') + self.u4.setText('') + + def Show_Error(self): + QMessageBox.about(self, 'Important', "Please fill all fields with data") + + def param(self): + try: + self.dict={} + print("param.inputdict ", self.inputdict) + self.dict = [int(self.inputdict[0].text()),self.inputdict[1].currentText(), float(self.inputdict[2].text()), float(self.inputdict[3].text())] + print("param ", self.dict) + self.obj.paramsetter(self.dict) + self.hide() + + except Exception as e: + print(e) diff --git a/DockWidgetSplitter.ui b/DockWidgetSplitter.ui new file mode 100644 index 0000000..02a865e --- /dev/null +++ b/DockWidgetSplitter.ui @@ -0,0 +1,200 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>392</width> + <height>700</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>3200</width> + <height>5000</height> + </size> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <widget class="QGroupBox" name="groupBox"> + <property name="geometry"> + <rect> + <x>10</x> + <y>40</y> + <width>341</width> + <height>161</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="styleSheet"> + <string notr="true">Q</string> + </property> + <property name="title"> + <string>Calculation Parameters</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <layout class="QGridLayout" name="gridLayout"> + <item row="1" column="0"> + <widget class="QLabel" name="l2"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="l1"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QLineEdit" name="le1"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="l3"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QLineEdit" name="le3"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QComboBox" name="cb2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="QLabel" name="u1"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="l4"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="3" column="2"> + <widget class="QLineEdit" name="le4"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="2" column="3"> + <widget class="QLabel" name="u3"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item row="3" column="3"> + <widget class="QLabel" name="u4"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QPushButton" name="btn"> + <property name="geometry"> + <rect> + <x>10</x> + <y>210</y> + <width>341</width> + <height>23</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Submit</string> + </property> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/Graphics.py b/Graphics.py index 467b628..07dd43e 100644 --- a/Graphics.py +++ b/Graphics.py @@ -14,15 +14,22 @@ from PyQt5.QtGui import QBrush ,QTransform ,QMouseEvent import PyQt5.QtGui as QtGui import PyQt5.QtCore as QtCore import PyQt5.QtWidgets as QtWidgets -from component_selector import * +from ComponentSelector import * from DockWidget import * -from DockWidgetMatStm import * +from DockWidgetMaterialStream import * +from DockWidgetDistillationColumn import * +from DockWidgetShortcutColumn import * +from DockWidgetMixer import * +from DockWidgetSplitter import * +from DockWidgetFlash import * +from DockWidgetCompoundSeparator import * + import datetime -from container import * -import container +from Container import * +import Container from Streams import * from UnitOperations import * @@ -40,10 +47,10 @@ class Graphics(QDialog, QtWidgets.QGraphicsItem): return self.scene def getComponentSelector(self): - return componentSelector(self) + return ComponentSelector(self) - def createNodeItem(self,unitOpr, container): - return NodeItem(unitOpr, container) + def createNodeItem(self,unitOpr, container, graphicsView): + return NodeItem(unitOpr, container, graphicsView) def boundingRect(self): return QtCore.QRectF(self.rect) @@ -53,14 +60,14 @@ class Graphics(QDialog, QtWidgets.QGraphicsItem): compounds = obj[-1] obj.pop() - componentSelector.setCompounds(compounds) + ComponentSelector.setCompounds(compounds) for i in obj: if(i in self.unitOp): pass else: self.unitOp.append(i) - new_box = self.createNodeItem(i, self) + new_box = self.createNodeItem(i, self.grphicsView) new_box.setPos(i.pos.toPoint().x(), i.pos.toPoint().y()) self.scene.addItem(new_box) @@ -118,11 +125,11 @@ class NodeLine(QtWidgets.QGraphicsPathItem): self._source = None self._target = None self.setZValue(-1) - self.setBrush(QtGui.QColor(0,0,255,255)) + self.setBrush(QtGui.QColor(0,70,70,120)) self.pen = QtGui.QPen() self.pen.setStyle(QtCore.Qt.SolidLine) self.pen.setWidth(1) - self.pen.setColor(QtGui.QColor(0,0,255,255)) + self.pen.setColor(QtGui.QColor(0,70,70,220)) self.setPen(self.pen) def updatePath(self): @@ -270,12 +277,12 @@ class NodeSocket(QtWidgets.QGraphicsItem): # Brush. self.brush = QtGui.QBrush() self.brush.setStyle(QtCore.Qt.SolidPattern) - self.brush.setColor(QtGui.QColor(180,20,90,255)) + self.brush.setColor(QtGui.QColor(220,220,220,220)) #180,20,90,255 # Pen. self.pen = QtGui.QPen() self.pen.setStyle(QtCore.Qt.SolidLine) self.pen.setWidth(1) - self.pen.setColor(QtGui.QColor(20,20,20,255)) + self.pen.setColor(QtGui.QColor(0,70,70,255)) #20,20,20,255 # Lines. self.outLines = [] @@ -295,6 +302,9 @@ class NodeSocket(QtWidgets.QGraphicsItem): painter.drawEllipse(self.rect) def mousePressEvent(self, event): + cursor = QCursor( Qt.PointingHandCursor ) + QApplication.instance().setOverrideCursor(cursor) + if self.type == 'op': rect = self.boundingRect() pointA = QtCore.QPointF(rect.x() + rect.width()/2, rect.y() + rect.height()/2) @@ -315,6 +325,7 @@ class NodeSocket(QtWidgets.QGraphicsItem): super(NodeSocket, self).mousePressEvent(event) def mouseMoveEvent(self, event): + if self.type == 'op': pointB = self.mapToScene(event.pos()) self.newLine.pointB = pointB @@ -329,6 +340,9 @@ class NodeSocket(QtWidgets.QGraphicsItem): super(NodeSocket, self).mouseMoveEvent(event) def mouseReleaseEvent(self, event): + cursor = QCursor( Qt.ArrowCursor ) + QApplication.instance().setOverrideCursor(cursor) + item = self.scene().itemAt(event.scenePos().toPoint(),QtGui.QTransform()) stm = ['MaterialStream','EngStm'] item.otherLine=self.newLine @@ -341,6 +355,7 @@ class NodeSocket(QtWidgets.QGraphicsItem): self.newLine.source.parent.obj.add_connection(0,self.newLine.target.parent.obj) if self.newLine.target.parent.obj.type not in stm: self.newLine.target.parent.obj.add_connection(1,self.newLine.source.parent.obj) # Input stream if flag is 1 + elif (self.type =='in') and (item.type == 'op'): self.newLine.source = item self.newLine.target = self @@ -351,6 +366,7 @@ class NodeSocket(QtWidgets.QGraphicsItem): if self.newLine.target.parent.obj.type not in stm: self.newLine.target.parent.obj.add_connection(1,self.newLine.source.parent.obj) + else: self.scene().removeItem(self.newLine) if(self.newLine in self.inLines): @@ -379,11 +395,21 @@ class NodeSocket(QtWidgets.QGraphicsItem): center = QtCore.QPointF(rect.x() + rect.width()/2, rect.y() + rect.height()/2) center = self.mapToScene(center) return center + + def hoverEnterEvent(self, event): + print("in hover enter") + cursor = QCursor( Qt.CrossCursor ) + QApplication.instance().setOverrideCursor(cursor) + + def hoverLeaveEvent(self, event): + cursor = QCursor( Qt.ArrowCursor ) + QApplication.instance().setOverrideCursor(cursor) # all created node items will be put inside this list # it is used for recreating the node lines by returning the node item object based on unit operation object's name lst = [] dockWidgetLst = [] +stack = [] class NodeItem(QtWidgets.QGraphicsItem): @@ -397,57 +423,74 @@ class NodeItem(QtWidgets.QGraphicsItem): def getDockWidget(): return dockWidgetLst - def __init__(self,unitOpr, container): - l = ['Mixer','Splitter'] + def __init__(self,unitOpr, container, graphicsView): + l = ['Splitter','Mixer', 'DistillationColumn', 'Flash', 'CompoundSeparator', 'ShortcutColumn'] stm = ['MaterialStream', 'EnergyStream'] super(NodeItem, self).__init__() self.obj = unitOpr self.container = container + self.graphicsView = graphicsView self.name = self.obj.name self.type = self.obj.type - default_tooltip = f"{self.name}\n\n" - default_tooltip_dict = self.obj.paramgetter(self.obj.modesList[0]) - for i, j in default_tooltip_dict.items(): - if j is not None: - default_tooltip = default_tooltip + f" {i} : {j}\n" - self.setToolTip(default_tooltip) + if (self.obj.modesList): + default_tooltip = f"{self.name}\n\n" + default_tooltip_dict = self.obj.paramgetter(self.obj.modesList[0]) + for i, j in default_tooltip_dict.items(): + if j is not None: + default_tooltip = default_tooltip + f" {i} : {j}\n" + self.setToolTip(default_tooltip) self.nin = self.obj.no_of_inputs self.nop = self.obj.no_of_outputs + if self.obj.type == 'Mixer': + text, ok = QInputDialog.getText(self.container.graphicsView, 'Mixer', 'Enter number of input:') + if ok and text: + self.nin = int(text) + self.obj.no_of_inputs = self.nin + self.obj.variables['NOI']['value'] = self.nin + elif self.obj.type == 'Splitter': + text, ok = QInputDialog.getText(self.container.graphicsView, 'Splitter', 'Enter number of output:') + if ok and text: + self.nop = int(text) + self.obj.no_of_outputs = self.nop + self.obj.variables['NOO']['value'] = self.nop + self.dockWidget = None lst.append(self) - if(self.obj.type not in l): - if (self.obj.type in stm): - self.dockWidget = DockWidgetMatStm(self.obj.name,self.obj.type,self.obj,self.container) - else: - self.dockWidget = DockWidget(self.obj.name,self.obj.type,self.obj,self.container) - dockWidgetLst.append(self.dockWidget) - self.mainwindow= findMainWindow(self) - self.dockWidget.setFixedWidth(360) - self.dockWidget.setFixedHeight(640) - self.dockWidget.DockWidgetFeature(QDockWidget.AllDockWidgetFeatures) - self.mainwindow.addDockWidget(Qt.LeftDockWidgetArea, self.dockWidget) - self.dockWidget.hide() - - self.pic=QtGui.QPixmap("icons/"+self.type+".png") + if self.obj.type in l: + self.dockWidget = eval("DockWidget"+self.obj.type)(self.obj.name,self.obj.type,self.obj,self.container) + elif self.obj.type in stm: + self.dockWidget = eval("DockWidget"+self.obj.type)(self.obj.name,self.obj.type,self.obj,self.container) + else: + self.dockWidget = DockWidget(self.obj.name,self.obj.type,self.obj,self.container) + + dockWidgetLst.append(self.dockWidget) + self.mainwindow= findMainWindow(self) + self.dockWidget.setFixedWidth(360) + self.dockWidget.setFixedHeight(640) + self.dockWidget.DockWidgetFeature(QDockWidget.AllDockWidgetFeatures) + self.mainwindow.addDockWidget(Qt.LeftDockWidgetArea, self.dockWidget) + self.dockWidget.hide() + + + self.pic=QtGui.QPixmap("Icons/"+self.type+".png") self.rect = QtCore.QRect(0,0,self.pic.width(),self.pic.height()) self.text = QGraphicsTextItem(self) f = QFont() f.setPointSize(8) self.text.setFont(f) - self.text.setDefaultTextColor(QtGui.QColor(73,36,73,255)) + self.text.setDefaultTextColor(QtGui.QColor(0,70,70,220)) self.text.setParentItem(self) - self.text.setPos(-2.5, self.rect.height()-15) + self.text.setPos(self.rect.width()-(self.rect.width()*0.9), self.rect.height()) self.text.setPlainText(self.name) self.setFlag(QtWidgets.QGraphicsPixmapItem.ItemIsMovable) self.setFlag(QtWidgets.QGraphicsPixmapItem.ItemIsSelectable) - self.initUi() # Brush self.brush = QtGui.QBrush() @@ -461,10 +504,10 @@ class NodeItem(QtWidgets.QGraphicsItem): self.selPen = QtGui.QPen() self.selPen.setStyle(QtCore.Qt.SolidLine) - self.selPen.setWidth(2) - self.selPen.setColor(QtGui.QColor(222,192,222)) + self.selPen.setWidth(1) + self.selPen.setColor(QtGui.QColor(220,220,220,255)) - def initUi(self): + # initializing the node sockets self.Input , self.Output = self.initializeSockets(self.type) def shape(self): @@ -484,29 +527,30 @@ class NodeItem(QtWidgets.QGraphicsItem): painter.drawPixmap(self.rect,self.pic) def initializeSockets(self,type): - if(self.type=="Flash" or self.type=="CompSep"): - Input = [NodeSocket(QtCore.QRect(-2.5+5.5,(self.rect.height()*x/(self.nin+1))-8,4,4), self, 'in') for x in range(1,self.nin+1) ] - Output = [NodeSocket(QtCore.QRect(self.rect.width()-7.5,(self.rect.height()*x*0.90/(self.nop+1))-4,4,4), self, 'op') for x in range(1,self.nop+1)] + print("inside initialization") + if(self.type=="Flash" or self.type=="CompoundSeparator"): + Input = [NodeSocket(QtCore.QRect(5,(self.rect.height()*x/(self.nin+1)-2),4,4), self, 'in') for x in range(1,self.nin+1) ] + Output = [NodeSocket(QtCore.QRect(self.rect.width()-9,(self.rect.height()*x*1/(self.nop+1)),4,4), self, 'op') for x in range(1,self.nop+1)] return Input,Output elif(self.type=="AdiabaticCompressor" or self.type=="AdiabaticExpander" or self.type =="Mixer" or self.type =="Splitter" or self.type =="Valve" ): - Input = [NodeSocket(QtCore.QRect(-3.5,(self.rect.height()*x/(self.nin+1))-6,4,4), self, 'in') for x in range(1,self.nin+1) ] - Output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,(self.rect.height()*x/(self.nop+1))-6,4,4), self, 'op') for x in range(1,self.nop+1)] + Input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1))-2,4,4), self, 'in') for x in range(1,self.nin+1) ] + Output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,(self.rect.height()*x/(self.nop+1))-2,4,4), self, 'op') for x in range(1,self.nop+1)] return Input,Output elif(self.type=="Cooler" or self.type=="Heater"): - Input = [NodeSocket(QtCore.QRect(3.5,(self.rect.height()*x/(self.nin+1))-4,4,4), self, 'in') for x in range(1,self.nin+1) ] - Output = [NodeSocket(QtCore.QRect(self.rect.width()-8.0,(self.rect.height()*x/(self.nop+1))-4,4,4), self, 'op') for x in range(1,self.nop+1)] + Input = [NodeSocket(QtCore.QRect(3.5,(self.rect.height()*x/(self.nin+1))-2,4,4), self, 'in') for x in range(1,self.nin+1) ] + Output = [NodeSocket(QtCore.QRect(self.rect.width()-8.0,(self.rect.height()*x/(self.nop+1))-2,4,4), self, 'op') for x in range(1,self.nop+1)] return Input,Output elif(self.type=="Pump"): - Input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1))-10,4,4), self, 'in') for x in range(1,self.nin+1) ] - Output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,-2.5,4,4), self, 'op') for x in range(1,self.nop+1)] + Input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1))-7, 4,4), self, 'in') for x in range(1,self.nin+1) ] + Output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,-1.5,4,4), self, 'op') for x in range(1,self.nop+1)] return Input,Output - elif(self.type=="DistCol" or self.type=="ShortCol"): - Input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1))-12,5,5), self, 'in') for x in range(1,self.nin+1) ] - Output = [NodeSocket(QtCore.QRect(self.rect.width()-5.5,(self.rect.height()*1.44*x/(self.nop+1))-67,5,5), self, 'op') for x in range(1,self.nop+1)] + elif(self.type=="DistillationColumn" or self.type=="ShortcutColumn"): + Input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1)),5,5), self, 'in') for x in range(1,self.nin+1) ] + Output = [NodeSocket(QtCore.QRect(self.rect.width()-5.5,(self.rect.height()*1.44*x/(self.nop+1))-55,5,5), self, 'op') for x in range(1,self.nop+1)] return Input,Output elif(self.type=="MaterialStream"): - Input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1))-1,4,4), self, 'in') for x in range(1,self.nin+1) ] - Output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,(self.rect.height()*x/(self.nin+1))-1,4,4), self, 'op') for x in range(1,self.nop+1)] + Input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1)-2),4,4), self, 'in') for x in range(1,self.nin+1) ] + Output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,(self.rect.height()*x/(self.nin+1)-2),4,4), self, 'op') for x in range(1,self.nop+1)] return Input,Output def mouseMoveEvent(self, event): @@ -524,10 +568,14 @@ class NodeItem(QtWidgets.QGraphicsItem): #print(self.name, self.pos) def mouseDoubleClickEvent(self, event): - self.setPos(event.scenePos().x()-250,event.scenePos().y()) - temp = self.obj.pos + + self.graphicsView.setInteractive(False) + if len(stack): + print(stack) + stack[-1].hide() self.dockWidget.show() - self.setPos(temp) + stack.append(self.dockWidget) + self.graphicsView.setInteractive(True) def findMainWindow(self): diff --git a/OMChem/ConvReactor.py b/OMChem/ConvReactor.py index 9ad35da..9061294 100644 --- a/OMChem/ConvReactor.py +++ b/OMChem/ConvReactor.py @@ -8,12 +8,12 @@ class ConvReactor(): self.Z = str(Z) self.a = json.dumps(a).replace('[','{').replace(']','}') self.operation = str(operation) - self.Tdef = str(Tdef) self.name = name self.OM_data_eqn = '' self.OM_data_init = '' self.InputStms = [] - self.OutputStms = [] + self.OutputStms = [] self.Tdef = str(Tdef) + self.type = 'ConvReactor' self.EngStms = EngStms(name="EngStm") diff --git a/Simulator/Databases/Databases.py b/Simulator/Databases/Databases.py index d7dc797..4b3a4c6 100644 --- a/Simulator/Databases/Databases.py +++ b/Simulator/Databases/Databases.py @@ -17,16 +17,12 @@ class ChemsepDatabase(): self.name = 'chemsep' for comp in compound: self.compName=comp.getElementsByTagName('CompoundID')[0].getAttribute('value') - self.comp_name_list.append(self.compName+'(' + self.name + ')') - - self.comp_prop_list=list() - + self.comp_name_list.append(self.compName+'(' + self.name + ')') + self.comp_prop_list=list() def get_comp_name_list(self): return self.comp_name_list - - #attrib: #CAS fro CAS Number #CompoundID for Name @@ -35,9 +31,7 @@ class ChemsepDatabase(): #GETTING 'ATTRIBUTE''S VALUE OF THE COMPOUND 'COMPS' -#COMP IS AN ITERATING VALUE IN THE XML TAG COMPOUND - - +#COMP IS AN ITERATING VALUE IN THE XML TAG COMPOUND def get_value(self,comps,attrib): self.comps=comps self.x='' @@ -47,8 +41,7 @@ class ChemsepDatabase(): try: self.x=comp.getElementsByTagName(attrib)[0].getAttribute("value") except IndexError: - self.x = "-" - + self.x = "-" return (self.x) #CREATING comp_prop_list LIST OF THE COMPOUND SELECTED @@ -58,9 +51,7 @@ class ChemsepDatabase(): self.comps = comps for comp in compound: compName = comp.getElementsByTagName("CompoundID")[0].getAttribute("value") - if compName==self.comps: - - + if compName==self.comps: CompName = compName.replace(" ","") CompName = CompName.replace("-","") CompName = CompName.replace(",","") @@ -140,8 +131,7 @@ class ChemsepDatabase(): RacketParam = comp.getElementsByTagName("RacketParameter")[0].getAttribute("value") except IndexError: RacketParam = "0" - - + try: LiqDen = comp.getElementsByTagName("LiquidDensity")[0] LiqDenEqn = LiqDen.getElementsByTagName("eqno")[0].getAttribute("value") @@ -358,8 +348,6 @@ class ChemsepDatabase(): except IndexError: ChaoSeadLV = 0 - - #f.write('Package database') self.comp_prop_list.append('model '+CompName) #f.write('\n') @@ -440,7 +428,4 @@ class ChemsepDatabase(): #return self.comp_prop_list return self.comp_prop_list - - - -
\ No newline at end of file +
\ No newline at end of file @@ -355,391 +355,3 @@ class MaterialStream(): for key,value in self.eqnDict.items(): self.OM_data_eqn = self.OM_data_eqn + self.name + '.'+ key + ' = ' + str(value) + ';\n' return self.OM_data_eqn - - -''' -from OMPython import OMCSession -from PyQt5.QtCore import * -import json -import sys -from collections import defaultdict - -class MaterialStream(): - counter = 1 - def __init__(self,CompNames = [],Temperature=300,Pressure=101325,xvap=None,xmvap=None,xliq=None,xmliq=None,x_pc = [1.0], xm_pc = [], MolFlow=100, MasFlow=None,**kwargs): - self.name = 'MaterialStream' + str(MaterialStream.counter) - self.type = 'MaterialStream' - self.T = Temperature - self.P = Pressure - self.xvap = xvap - self.xmvap = xmvap - self.xliq = xliq - self.xmliq = xmliq - self.CompNames = CompNames - self.x_pc = x_pc - self.xm_pc = xm_pc - self.MolFlow = MolFlow - self.MasFlow = MasFlow - self.OM_data_init = '' - self.OM_data_eqn = '' - self.count = MaterialStream.counter - self.thermoPackage ="RaoultsLaw" - self.mode1 = "P" - self.mode1val = "" - self.mode2 = "T" - self.mode2val = "" - self.no_of_inputs = 1 - self.no_of_outputs = 1 - self.x = 2500-30 - self.y = 2500-30 - self.pos = QPointF(self.x, self.y) - MaterialStream.counter+=1 - self.startDict = {} - self.eqnDict = {} - self.modesList = ["PT","PH","PVF","TVF","PS"] - - self.Prop = { - - self.mode1:self.mode1val, - self.mode2:self.mode2val, - 'xliq':xliq, - 'xmliq':xmliq, - 'xvap':xvap, - 'xmvap':xmvap, - 'F_p[1]':MolFlow, - 'Fm_p[1]':MasFlow, - 'MW_p[1]':None, - 'MW_p[2]':None, - 'MW_p[3]':None, - 'Cp_p[1]':None, - 'H_p[1]':None, - 'S_p[1]':None, - 'Cp_p[2]':None, - 'H_p[2]':None, - 'S_p[2]':None, - 'Cp_p[3]':None, - 'H_p[3]':None, - 'S_p[3]':None, - 'F_p[2]':None, - 'Fm_p[2]':None, - 'F_p[3]':None, - 'Fm_p[3]':None - - } - - self.Prop1 = { - self.mode1:self.mode1val, - self.mode2:self.mode2val, - 'xliq':xliq, - 'xmliq':xmliq, - 'xvap':xvap, - 'xmvap':xmvap, - 'F_p[1]':MolFlow, - 'Fm_p[1]':MasFlow, - 'MW_p[1]':None, - 'MW_p[2]':None, - 'MW_p[3]':None, - 'Cp_p[1]':None, - 'H_p[1]':None, - 'S_p[1]':None, - 'Cp_p[2]':None, - 'H_p[2]':None, - 'S_p[2]':None, - 'Cp_p[3]':None, - 'H_p[3]':None, - 'S_p[3]':None, - 'F_p[2]':None, - 'Fm_p[2]':None, - 'F_p[3]':None, - 'Fm_p[3]':None - - } - - def paramgetter(self,mode): - dict = {} - # print("Hello hello ", mode) - # if(mode == None): - # mode = self.modesList[0] - if(mode=="PT"): - self.mode1 = 'P' - self.mode2 = 'T' - dict = {self.mode2:self.T,self.mode1:self.P,"x_pc":self.x_pc,"MolFlow":self.MolFlow,"thermoPackage":self.thermoPackage} - elif(mode=="PH"): - self.mode1 = 'P' - self.mode2 = 'H_p[1]' - dict = {self.mode1:self.P,self.mode2:self.Prop['H_p[1]'],"x_pc":self.x_pc,"MolFlow":self.MolFlow,"thermoPackage":self.thermoPackage} - elif(mode=="PVF"): - self.mode1 = 'P' - self.mode2 = 'xvap' - dict = {self.mode1:self.P,self.mode2:self.xvap,"x_pc":self.x_pc,"MolFlow":self.MolFlow,"thermoPackage":self.thermoPackage} - elif(mode=="TVF"): - self.mode1 = 'T' - self.mode2 = 'xvap' - dict = {self.mode1:self.T,self.mode2:self.xvap,"x_pc":self.x_pc,"MolFlow":self.MolFlow,"thermoPackage":self.thermoPackage} - elif(mode=="PS"): - self.mode1 = 'P' - self.mode2 = 'S_p[1]' - dict = {self.mode1:self.P,self.mode2:self.Prop['S_p[1]'],"x_pc":self.x_pc,"MolFlow":self.MolFlow,"thermoPackage":self.thermoPackage} - - return dict - - def paramsetter(self,dict): - self.mode1val = dict[self.mode1] - self.mode2val = dict[self.mode2] - self.MolFlow = dict['MolFlow'] - self.x_pc = dict['x_pc'].split(",") - self.thermoPackage = dict['thermoPackage'] - self.Prop['F_p[1]'] = self.MolFlow - self.Prop[self.mode2] = dict[self.mode2] - self.Prop[self.mode1] = dict[self.mode1] - for i in range(len(self.CompNames)): - print('####### x_pc #########\n',self.x_pc[i]) - if self.x_pc: - self.Prop['x_pc[1,'+str(i+1)+']'] = self.x_pc[i] - else: - self.Prop['x_pc[1,'+str(i+1)+']'] = None - - if self.xm_pc: - self.Prop['xm_pc[1,'+str(i+1)+']'] = self.xm_pc[i] - else: - self.Prop['xm_pc[1,'+str(i+1)+']'] = None - - self.Prop['F_pc[1,'+str(i+1)+']'] = None - self.Prop['Fm_pc[1,'+str(i+1)+']'] = None - for i in range(0,len(self.CompNames)): - self.Prop['x_pc[2,'+str(i+1)+']'] = None - self.Prop['xm_pc[2,'+str(i+1)+']'] = None - self.Prop['F_pc[2,'+str(i+1)+']'] = None - self.Prop['Fm_pc[2,'+str(i+1)+']'] = None - self.Prop['x_pc[3,'+str(i+1)+']'] = None - self.Prop['xm_pc[3,'+str(i+1)+']'] = None - self.Prop['F_pc[3,'+str(i+1)+']'] = None - self.Prop['Fm_pc[3,'+str(i+1)+']'] = None - - def setPos(self,pos): - self.pos = pos - - def GetMinEqnValues(self): - x_pclist = [] - for i in range(0,len(self.CompNames)): - print(self.Prop['x_pc[1,'+str(i+1)+']']) - x_pclist.append(self.Prop['x_pc[1,'+str(i+1)+']']) - print(x_pclist) - #x_pclist = list(self.Prop(x_pc[1,1)]) - x_pc = json.dumps(x_pclist) - print(x_pc) - x_pc = x_pc.replace('[','{') - x_pc = x_pc.replace(']','}') - x_pc = x_pc.replace('"','') - - # x_pcstr = json.dumps(self.x_pc) - # x_pcstr = x_pcstr.replace('[','{') - # x_pcstr = x_pcstr.replace(']','}') - # x_pcstr = x_pcstr.replace('"','') - - if self.Prop[self.mode1]: - self.eqnDict[self.mode1] = self.Prop[self.mode1] - if self.Prop[self.mode2]: - self.eqnDict[self.mode2] = self.Prop[self.mode2] - if self.x_pc: - self.eqnDict['x_pc[1,:]'] = x_pc - if self.MolFlow: - self.eqnDict['F_p[1]'] = self.Prop['F_p[1]']#self.MolFlow - - print("##############$GetMinVEqnValuesStart$##################") - print("P:",self.Prop[self.mode1]) - print("T:",self.Prop[self.mode2]) - print("x_pc",x_pc) - print("F_p",self.Prop['F_p[1]']) - print("##############$GetMinVEqnValuesEnd$##################") - - # def GetEquationValues(self): # Not being called anywhere - # if self.Prop[self.mode1]: - # self.eqnDict[self.mode1] = self.Prop[self.mode1] - - # if self.Prop[self.mode2]: - # self.eqnDict[self.mode2] = self.Prop[self.mode2] - - # if self.Prop['x_pc[1,1]']: - # cfa = [] - # for i in range(1,len(self.CompNames)+1): - # cfa.append(self.Prop['x_pc[1,'+str(i)+']']) - # cmpMolFracstr = json.dumps(cfa) - # cmpMolFracstr = cmpMolFracstr.replace('[','{') - # cmpMolFracstr = cmpMolFracstr.replace(']','}') - # cmpMolFracstr = cmpMolFracstr.replace('"','') - # self.eqnDict['x_pc[1,:]'] = cmpMolFracstr - - # if self.Prop['F_p[1]']: - # self.eqnDict['F_p[1]'] = self.Prop['F_p[1]'] - - - def GetStartValues(self): - try: - if self.Prop[self.mode1]: - self.startDict[self.mode1] = self.Prop[self.mode1] - - if self.Prop[self.mode2]: - self.startDict[self.mode2] = self.Prop[self.mode2] - - - if self.Prop['x_pc[2,1]'] != None: - x_pcarr = [] - for i in range(1,4): - cmf = [] - for j in range(1,len(self.CompNames)+1): - cmf.append(str(self.Prop['x_pc['+str(i)+','+str(j)+']'])) - x_pcarr.append(cmf) - x_pcstr = json.dumps(x_pcarr) - x_pcstr = x_pcstr.replace('[','{') - x_pcstr = x_pcstr.replace(']','}') - x_pcstr = x_pcstr.replace('"','') - self.startDict['x_pc'] = x_pcstr - - if self.Prop['xm_pc[2,1]'] != None: - xm_pcarr = [] - for i in range(1,4): - cmf = [] - for j in range(1,len(self.CompNames)+1): - cmf.append(str(self.Prop['xm_pc['+str(i)+','+str(j)+']'])) - xm_pcarr.append(cmf) - xm_pcstr = json.dumps(x_pcarr) - xm_pcstr = xm_pcstr.replace('[','{') - xm_pcstr = xm_pcstr.replace(']','}') - xm_pcstr = xm_pcstr.replace('"','') - self.startDict['xm_pc'] = xm_pcstr - - if self.Prop['Fm_pc[2,1]'] != None: - Fm_pcarr = [] - for i in range(1,4): - cmf = [] - for j in range(1,len(self.CompNames)+1): - cmf.append(str(self.Prop['Fm_pc['+str(i)+','+str(j)+']'])) - Fm_pcarr.append(cmf) - Fm_pcstr = json.dumps(x_pcarr) - Fm_pcstr = Fm_pcstr.replace('[','{') - Fm_pcstr = Fm_pcstr.replace(']','}') - Fm_pcstr = Fm_pcstr.replace('"','') - self.startDict['Fm_pc'] = Fm_pcstr - - if self.Prop['F_pc[2,1]'] != None: - F_pcarr = [] - for i in range(1,4): - cmf = [] - for j in range(1,len(self.CompNames)+1): - cmf.append(str(self.Prop['F_pc['+str(i)+','+str(j)+']'])) - F_pcarr.append(cmf) - F_pcstr = json.dumps(F_pcarr) - F_pcstr = F_pcstr.replace('[','{') - F_pcstr = F_pcstr.replace(']','}') - F_pcstr = F_pcstr.replace('"','') - self.startDict['F_pc'] = F_pcstr - - if self.Prop['MW_p[2]'] != None: - MW_pArr = [] - for i in range(1,4): - MW_pArr.append(self.Prop['MW_p['+str(i)+']']) - MW_pStr = json.dumps(MW_pArr) - MW_pStr = MW_pStr.replace('[','{') - MW_pStr = MW_pStr.replace(']','}') - MW_pStr = MW_pStr.replace('"','') - self.startDict['MW_p'] = MW_pStr - - if self.Prop['F_p[2]'] != None: - F_pArr = [] - for i in range(1,4): - F_pArr.append(self.Prop['F_p['+str(i)+']']) - F_pStr = json.dumps(F_pArr) - F_pStr = F_pStr.replace('[','{') - F_pStr = F_pStr.replace(']','}') - F_pStr = F_pStr.replace('"','') - self.startDict['F_p'] = F_pStr - - if self.Prop['Cp_p[2]'] != None: - Cp_pArr = [] - for i in range(1,4): - Cp_pArr.append(self.Prop['Cp_p['+str(i)+']']) - Cp_pStr = json.dumps(Cp_pArr) - Cp_pStr = Cp_pStr.replace('[','{') - Cp_pStr = Cp_pStr.replace(']','}') - Cp_pStr = Cp_pStr.replace('"','') - self.startDict['Cp_p'] = Cp_pStr - - if self.Prop['H_p[2]'] != None: - H_pArr = [] - for i in range(1,4): - H_pArr.append(self.Prop['H_p['+str(i)+']']) - H_pStr = json.dumps(H_pArr) - H_pStr = H_pStr.replace('[','{') - H_pStr = H_pStr.replace(']','}') - H_pStr = H_pStr.replace('"','') - self.startDict['H_p'] = H_pStr - - - if self.Prop['S_p[2]'] != None: - S_pArr = [] - for i in range(1,4): - S_pArr.append(self.Prop['S_p['+str(i)+']']) - S_pStr = json.dumps(S_pArr) - S_pStr = S_pStr.replace('[','{') - S_pStr = S_pStr.replace(']','}') - S_pStr = S_pStr.replace('"','') - self.startDict['S_p'] = S_pStr - - if self.Prop['Fm_p[2]'] != None: - Fm_pArr = [] - for i in range(1,4): - Fm_pArr.append(self.Prop['Fm_p['+str(i)+']']) - Fm_pStr = json.dumps(Fm_pArr) - Fm_pStr = Fm_pStr.replace('[','{') - Fm_pStr = Fm_pStr.replace(']','}') - Fm_pStr = Fm_pStr.replace('"','') - self.startDict['Fm_p'] = Fm_pStr - - except Exception as e: - exc_type, exc_obj, exc_tb = sys.exc_info() - print(exc_type,exc_tb.tb_lineno) - print(e) - print('error') - - - def OM_Flowsheet_Initialize(self,addedcomp): - self.OM_data_init = '' - self.OM_data_init = self.OM_data_init + ("model ms"+str(self.count)+"\n") - self.OM_data_init = self.OM_data_init + ("extends Simulator.Streams.MaterialStream;\n" ) - self.OM_data_init = self.OM_data_init + ("extends Simulator.Files.ThermodynamicPackages."+self.thermoPackage+";\n") - self.OM_data_init = self.OM_data_init + ("end ms"+str(self.count)+";\n") - comp_count = len(addedcomp) - # self.GetStartValues() - - #self.OM_data_init = "Simulator.Streams.Mat_Stm_RL " + self.name +"(Nc = " + str(comp_count) - self.OM_data_init = self.OM_data_init + "ms"+str(self.count) +" " + self.name +"(Nc = " + str(comp_count) - self.OM_data_init = self.OM_data_init + ",C = {" - C = str(addedcomp).strip('[').strip(']') - C = C.replace("'","") - self.OM_data_init = self.OM_data_init + C + "}," - #for key, value in self.startDict.items(): - # self.OM_data_init = self.OM_data_init + key + '(start = ' + str(value) + '),' - self.OM_data_init = self.OM_data_init[:-1] - self.OM_data_init = self.OM_data_init + ');\n' - return self.OM_data_init - - - def OM_Flowsheet_Equation(self,addedcomp,method): - self.OM_data_eqn = '' - self.comp_count = len(addedcomp) - if method == 'Eqn': - self.eqnDict = {} - self.GetMinEqnValues() - if method == 'SM': - self.eqnDict = {} - self.GetMinEqnValues() - #self.GetEquationValues() - #self.GetEquationValues() - - for key,value in self.eqnDict.items(): - self.OM_data_eqn = self.OM_data_eqn + self.name + '.'+ key + ' = ' + str(value) + ';\n' - return self.OM_data_eqn - - -'''
\ No newline at end of file Binary files differdiff --git a/UnitOperations.py b/UnitOperations.py index 92d6f07..9591dc2 100644 --- a/UnitOperations.py +++ b/UnitOperations.py @@ -1,4 +1,5 @@ from OMChem.Flowsheet import Flowsheet +from OMChem.EngStm import EngStm from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import QTextDocument ,QTextCursor ,QTextCharFormat ,QFont ,QPixmap @@ -9,12 +10,11 @@ from PyQt5.QtGui import QBrush ,QTransform ,QMouseEvent from PyQt5.QtGui import * import PyQt5.QtCore as QtCore import PyQt5.QtWidgets as QtWidgets -from component_selector import * -from container import * +from ComponentSelector import * +from Container import * class UnitOperation(): counter = 1 - def __init__(self): self.OM_data_eqn = '' self.OM_data_init = '' @@ -27,13 +27,12 @@ class UnitOperation(): self.type = '' self.no_of_inputs = 1 self.no_of_outputs = 1 - self.Prop = {} - self.x = 2500-30 + self.x = 2500-30 self.y = 2500-30 self.pos = QPointF(self.x, self.y) - #self.Prop = {} + self.count = UnitOperation.counter self.variables = {} - self.modeslist = [] + self.modesList = [] self.parameters = [] self.extra = [] self.ForNaming = [] @@ -43,13 +42,14 @@ class UnitOperation(): def paramgetter(self,mode=None): params = {} - if mode == None: - self.mode = self.modeslist[0] + if mode == None and self.modesList: + self.mode = self.modesList[0] else: self.mode = mode + params[self.mode] = None for i in self.parameters: params[i] = self.variables[i]['value'] - params[self.mode] = None + return params def paramsetter(self,params): @@ -60,11 +60,12 @@ class UnitOperation(): self.k = v self.variables[k]['value'] = v else: + self.variables[k]['value'] = v self.modeVal = params[self.mode] + print(self.variables) def add_connection(self,flag,UnitOpr): - if flag==1: - # Input stream if flag is 1 + if flag==1: # Input stream if flag is 1 print("INPUT CONNECTION") self.InputStms.append(UnitOpr) else : @@ -158,6 +159,275 @@ class UnitOperation(): return self.OM_data_eqn +class ShortcutColumn(UnitOperation): + def __init__(self, CompNames = [], name='ShortcutColumn'): + UnitOperation.__init__(self) + self.name = name + str(ShortcutColumn.counter) + self.type = 'ShortcutColumn' + self.no_of_inputs = 1 + self.no_of_outputs = 2 + self.InputStms = None + self.OutputStms = None + self.EngStm1 = EngStm(name='EngStm1'+self.name) + self.EngStm2 = EngStm(name='EngStm2'+self.name) + self.count = ShortcutColumn.counter + + self.parameters = ['HKey', 'LKey', 'HKey_x_pc', 'LKey_x_pc', 'Ctype', 'Pcond', 'Preb', 'RR'] + type(self).counter += 1 + + self.variables = { + 'HKey' : {'name':'Heavy Key', 'value':None, 'unit':''}, + 'LKey' : {'name':'Light Key', 'value':None, 'unit':''}, + 'HKey_x_pc' : {'name':'Heavy Key Mole Fraction', 'value':0.01, 'unit':'mol/s'}, + 'LKey_x_pc' : {'name':'Light Key Mole Fraction', 'value':0.01, 'unit':'mol/s'}, + 'Ctype' : {'name':'Condensor Type', 'value':None, 'unit':''}, + 'thermoPackage' : {'name':'Thermo Package', 'value':'Raoults_Law', 'unit':''}, + 'Pcond' : {'name':'Condensor Pressure', 'value':101325, 'unit':'Pa'}, + 'Preb' : {'name':'Reboiler Pressure', 'value':101325, 'unit':'Pa'}, + 'RR' : {'name':'Reflux Ratio', 'value':1.5, 'unit':''}, + } + + def paramsetter(self,params): + print("paramsetter ", params) + self.variables['HKey']['value'] = params[0] + self.variables['LKey']['value'] = params[1] + self.variables['HKey_x_pc']['value'] = params[2] + self.variables['LKey_x_pc']['value'] = params[3] + self.variables['Ctype']['value'] = params[4] + self.variables['Pcond']['value'] = params[5] + self.variables['Preb']['value'] = params[6] + self.variables['RR']['value'] = params[7] + + print(self.variables) + + +class DistillationColumn(UnitOperation): + def __init__(self,name='DistillationColumn'): + self.name = name + str(DistillationColumn.counter) + self.type = 'DistillationColumn' + self.no_of_inputs = 2 + self.no_of_outputs = 2 + + self.compounds = compound_selected + + self.EngStm1 = EngStm(name='EngStm1'+self.name) + self.EngStm2 = EngStm(name='EngStm2'+self.name) + self.count = DistillationColumn.counter + + self.InputStms = None + self.OutputStms = None + # self.modesList = ['RR', 'Nout', 'T'] + self.modesList = [] + self.parameters = [''] + #self.parameters = ['Nt', 'InT_s', 'In_s', 'thermoPackage', 'Ctype', 'Pcond', 'Preb'] + self.Cspec_list = ['Reflux Ratio','Product Molar Flow (mol/s)', 'Temperature (K)', 'Compound Molar Fraction', 'Compound Molar Flow (mol/s)'] + self.Rspec_list = ['Product Molar Flow (mol/s)', 'Temperature (K)', 'Compound Molar Fraction', 'Compound Molar Flow (mol/s)'] + + type(self).counter += 1 + self.variables = { + 'RR' : {'name':'Reflux Ratio', 'value':None, 'unit':''}, + 'T' : {'name':'Temperature', 'value':300, 'unit':'K'}, + 'Nout' : {'name':'No of Sidedraws', 'value':None, 'unit':''}, + 'Nt' : {'name':'No of Stages', 'value':12, 'unit':''}, + 'InT_s' : {'name':'No of Feed Stages', 'value':None, 'unit':''}, + 'In_s' : {'name':'No of Feeds', 'value':None, 'unit':''}, + 'thermoPackage' : {'name':'Thermo Package', 'value':'Raoults_Law', 'unit':''}, + 'Ctype' : {'name':'Condensor Type', 'value':'', 'unit':''}, + 'Pcond' : {'name':'Condensor Pressure', 'value':101325, 'unit':'Pa'}, + 'Preb' : {'name':'Reboiler Pressure', 'value':101325, 'unit':'Pa'}, + 'C_Spec': {'name':'Condensor Specification', 'type':'Reflux Ratio', 'value':'', 'comp':'', 'unit':''}, + 'R_Spec': {'name':'Reboiler Specification', 'type':'', 'value':'', 'comp':'', 'unit':''}, + } + def paramsetter(self,params): + print("paramsetter ", params) + self.variables['Nt']['value'] = params[0] + self.variables['In_s']['value'] = params[1] + self.variables['InT_s']['value'] = params[2] + self.variables['Ctype']['value'] = params[3] + self.variables['Pcond']['value'] = params[4] + self.variables['C_Spec']['type'] = params[5] + if 'Compound' in self.variables['C_Spec']['type']: + self.variables['C_Spec']['comp'] = params[6] + self.variables['C_Spec']['value'] = params[7] + self.variables['Preb']['value'] = params[8] + self.variables['R_Spec']['type'] = params[9] + if 'Compound' in self.variables['R_Spec']['type']: + self.variables['R_Spec']['comp'] = params[10] + self.variables['R_Spec']['value'] = params[11] + print(self.variables) + +class ConvertionReactor(UnitOperation): + def __init__(self,name='',Nr=None,b=None,X=None,Z=None,a=[],operation=None,Tdef=None): + UnitOperation.__init__(self) + self.name = name + self.type = 'ConvertionReactor' + + self.Nr = str(Nr) + self.b = str(b) + self.X = str(X) + self.Z = str(Z) + self.a = json.dumps(a).replace('[','{').replace(']','}') + self.operation = str(operation) + self.Tdef = str(Tdef) + +class CompoundSeparator(UnitOperation): + def __init__(self, name='CompoundSeparator'): + UnitOperation.__init__(self) + self.name = name + str(CompoundSeparator.counter) + self.type = 'CompoundSeparator' + self.no_of_inputs = 1 + self.no_of_outputs = 2 + + self.SepFact_modes = ['Molar_Flow (mol/s)', 'Mass_Flow (kg/s)', 'Inlet_Molar_Flow_Percent', 'Outlet_Molar_Flow_Percent'] + + type(self).counter += 1 + self.variables = { + 'SepStrm' : {'name':'Separation Stream', 'value':1, 'unit':''}, + #'SepVal' : {'name':'Separation Value', 'value':[], 'unit':''}, + #'SepFact' : {'name':'Separaction Factor', 'value':'', 'unit':''}, + } + + for i in self.compounds: + self.variables[i] = {'name':'SepVal_'+i, 'value':'', 'type':'', 'unit':''} + + # self.SepFact = json.dumps(self.variables['SepFact']['value']).replace('[','{').replace(']','}') + # self.SepStrm = str(self.variables['SepStrm']['value']) + # self.SepVal = json.dumps(self.variables['SepVal']['value']).replace('[','{').replace(']','}') + def paramsetter(self,params): + print("paramsetter ", params) + if params[0]: + self.variables['SepStrm']['value'] = 1 + elif params[1]: + self.variables['SepStrm']['value'] = 2 + + j = 2 + for i in self.compounds: + self.variables[i]['type'] = params[j] + self.variables[i]['value'] = float(params[j+1]) + j += 2 + print(self.variables) + +class Flash(UnitOperation): + def __init__(self,name='Flash'): + UnitOperation.__init__(self) + self.name = name + str(Flash.counter) + self.type = 'Flash' + self.no_of_inputs = 1 + self.no_of_outputs = 2 + self.InputStms = None + self.OutputStms = None + self.count = Flash.counter + + type(self).counter += 1 + self.variables = { + 'thermoPackage' : {'name':'Thermo Package', 'value':None, 'unit':''}, + 'BTdef' : {'name':'Separation Temperature Boolean', 'value':False, 'unit':''}, + 'BPdef' : {'name':'Separation Pressure Boolean', 'value':False, 'unit':''}, + 'Tdef' : {'name':'Separation Temperature', 'value':298.15, 'unit':'K'}, + 'Pdef' : {'name':'Separation Pressure', 'value':101325, 'unit':'Pa'} + } + def paramsetter(self,params): + print("paramsetter ", params) + self.variables['thermoPackage']['value'] = params[0] + self.variables['BTdef']['value'] = params[1] + self.variables['Tdef']['value'] = params[2] + self.variables['BPdef']['value'] = params[3] + self.variables['Pdef']['value'] = params[4] + print(self.variables) + +class Pump(UnitOperation): + def __init__(self,name='Pump'): + UnitOperation.__init__(self) + self.name = name + str(Pump.counter) + self.type = 'Pump' + self.InputStms = None + self.OutputStms = None + self.modesList = ['Pdel', 'Pout', 'Q'] #"enFlo" + self.parameters = ['Eff'] + + type(self).counter += 1 + self.variables = { + 'Eff' : {'name':'Efficiency', 'value':1, 'unit':''}, + 'Pdel' : {'name':'Pressure Increase', 'value':None, 'unit':'Pa'}, + 'Pout' : {'name':'Outlet Pressure', 'value':None, 'unit':'Pa'}, + 'Q' : {'name':'Power Required', 'value':None, 'unit':'W'}, + } + +class Valve(UnitOperation): + def __init__(self,name='Valve'): + UnitOperation.__init__(self) + self.name = name + str(Valve.counter) + self.type = 'Valve' + self.InputStms = None + self.OutputStms = None + self.modesList = ['Pdel', 'Pout'] + + type(self).counter += 1 + self.variables = { + 'Pdel' : {'name':'Pressure Drop', 'value':None, 'unit':'Pa'}, + 'Pout' : {'name':'Outlet Pressure', 'value':None, 'unit':'Pa'} + } + +class Splitter(UnitOperation): + def __init__(self,name='Splitter'): + UnitOperation.__init__(self) + self.name = name + str(Splitter.counter) + self.type = 'Splitter' + self.no_of_outputs = 3 + + # self.InputStms = None + self.CalcType_modes = ['Split Ratios', 'Mole Flow Specs', 'Mass Flow Specs'] + + self.parameters = ['NOO', 'CalcType']#, 'SpecVal_s' + type(self).counter += 1 + + self.variables = { + 'NOO' : {'name':'No. of Output', 'value':3, 'unit':''}, + 'CalcType' : {'name':'Calculation Type', 'value':self.CalcType_modes[0], 'unit':''}, + 'SpecVal_s' : {'name':'Specification Value', 'value':[50,50], 'unit':''} + } + + specval = self.variables['SpecVal_s']['value'] # [50,50] + self.specval = json.dumps(specval).replace('[','{').replace(']','}') + + def paramsetter(self,params): + print("paramsetter ", params) + self.variables['NOO']['value'] = int(params[0]) + self.variables['CalcType']['value'] = params[1] + self.variables['SpecVal_s']['value'] = [float(params[2]), float(params[3])] + if self.variables['CalcType']['value'] == 'Mole Flow Specs': + self.variables['SpecVal_s']['unit'] = 'mol/s' + elif self.variables['CalcType']['value'] == 'Mass Flow Specs': + self.variables['SpecVal_s']['unit'] = 'kg/s' + print(self.variables) + +class Mixer(UnitOperation): + + def __init__(self,name='Mixer'): + UnitOperation.__init__(self) + self.name = name + str(Mixer.counter) + self.type = 'Mixer' + self.no_of_inputs = 6 + + self.Pout_modes = ['Inlet Minimum', 'Inlet Average', 'Inlet Maximum'] + self.parameters = ['NOI', 'Pout'] + # self.OutputStms = None + type(self).counter += 1 + + self.variables = { + 'NOI' : {'name':'Number of Input', 'value':6, 'unit':''}, + 'Pout' : {'name':'Outlet Pressure', 'value':'Inlet_Average', 'unit':''}, + } + def paramsetter(self, params): + print(self.InputStms, self.OutputStms) + self.OutputStms = [] + print(self.InputStms, self.OutputStms) + print("paramsetter ", params) + self.variables['NOI']['value'] = int(params[0]) + self.variables['Pout']['value'] = params[1] + print(self.variables) + + class Heater(UnitOperation): def __init__(self, name='Heater'): @@ -178,6 +448,7 @@ class Heater(UnitOperation): 'Tout' : {'name':'Outlet Temperature', 'value':298.15, 'unit':'K'}, 'Tdel' : {'name':'Temperature Increase', 'value':0, 'unit':'K'}, 'Q' : {'name':'Heat Added', 'value':0, 'unit':'W'}, + 'xvapout': {'name':'Outlet Vapour', 'value':None, 'unit':''} } class Cooler(UnitOperation): @@ -188,18 +459,19 @@ class Cooler(UnitOperation): self.type = 'Cooler' self.no_of_inputs = 1 self.no_of_outputs = 1 - self.modesList = ["Q","Tout","xvapout","Tdel"] + self.modesList = ['Q','Tout','Tdel','xvap'] self.extra = None self.ForNaming = None self.parameters = ['Pdel', 'Eff'] type(self).counter += 1 self.variables = { - 'Pdel' : {'name':'Pressure Drop', 'value':0, 'unit':'Pa'}, - 'Eff' : {'name':'Efficiency', 'value':1, 'unit':''}, - 'Tout' : {'name':'Outlet Temperature', 'value':298.15, 'unit':'K'}, - 'Tdel' : {'name':'Temperature Increase', 'value':0, 'unit':'K'}, - 'Q' : {'name':'Heat Added', 'value':0, 'unit':'W'}, + 'Pdel' : {'name':'Pressure Drop', 'value':0, 'unit':'Pa'}, + 'Eff' : {'name':'Efficiency', 'value':1, 'unit':''}, + 'Tout' : {'name':'Outlet Temperature', 'value':298.15, 'unit':'K'}, + 'Tdel' : {'name':'Temperature Increase', 'value':0, 'unit':'K'}, + 'Q' : {'name':'Heat Added', 'value':0, 'unit':'W'}, + 'xvap' : {'name':'Vapour Phase Mole Fraction', 'value':None, 'unit':'g/s'}, } class AdiabaticCompressor(UnitOperation): @@ -220,9 +492,10 @@ class AdiabaticCompressor(UnitOperation): self.variables = { 'Pdel' : {'name':'Pressure Drop', 'value':0, 'unit':'Pa'}, 'Tdel' : {'name':'Temperature Increase', 'value':0, 'unit':'K'}, - 'Pout' : {'name':'Outlet Pressure', 'value':101325, 'unit':'Pa'}, - 'Tout' : {'name':'Outlet Temperature', 'value':298.15, 'unit':'K'}, + 'Pout' : {'name':'Outlet Pressure', 'value':101325, 'unit':'Pa'}, + 'Tout' : {'name':'Outlet Temperature', 'value':298.15, 'unit':'K'}, 'Q' : {'name':'Heat Added', 'value':0, 'unit':'W'}, + 'Eff' : {'name':'Efficiency', 'value':1, 'unit':''} } class AdiabaticExpander(UnitOperation): @@ -246,6 +519,7 @@ class AdiabaticExpander(UnitOperation): 'Pout' : {'name':'Outlet Pressure', 'value':101325, 'unit':'Pa'}, 'Tout' : {'name':'Outlet Temperature', 'value':298.15, 'unit':'K'}, 'Q' : {'name':'Heat Added', 'value':0, 'unit':'W'}, + 'Eff' : {'name':'Efficiency', 'value':1, 'unit':''} }
\ No newline at end of file diff --git a/container.py b/container.py index 6b4bcbe..6f9b0cd 100644 --- a/container.py +++ b/container.py @@ -1,5 +1,5 @@ from OMChem.Flowsheet import Flowsheet -from component_selector import * +from ComponentSelector import * from collections import defaultdict from PyQt5.QtCore import * from PyQt5.QtWidgets import * @@ -69,11 +69,12 @@ class Container(): # def addUnitOpObj(obj): # self.unitOp.append(obj) - def addUnitOp(self,obj): + def addUnitOp(self,obj, graphicsView): box = None self.obj = obj self.scene = self.graphics.getScene() - box = self.graphics.createNodeItem(self.obj, self) + self.graphicsView = graphicsView + box = self.graphics.createNodeItem(self.obj, self, self.graphicsView) self.scene.addItem(box) box.setPos(2500-30, 2500-30) @@ -92,6 +93,14 @@ class Container(): def delete(self,l): for item in l: self.scene.removeItem(item) + for i in dockWidgetLst: + if i.name == item.name: + i.hide() + del i + break + for i in dockWidgetLst: + print(i.name) + print("delete ", dockWidgetLst) if hasattr(item,'Input'): for x in item.Input: if x.newLine: diff --git a/dockWidget.py b/dockWidget.py index 36fbc32..8eeff51 100644 --- a/dockWidget.py +++ b/dockWidget.py @@ -4,7 +4,7 @@ from PyQt5.QtGui import * from PyQt5.uic import loadUiType import pandas as pd from functools import partial -from component_selector import * +from ComponentSelector import * from collections import defaultdict from Graphics import * @@ -12,7 +12,7 @@ ui_dialog,_ = loadUiType('DockWidget.ui') class DockWidget(QDockWidget,ui_dialog): - def __init__(self,name,comptype,obj,container,parent=None): + def __init__(self,name,comptype,obj,container, parent=None): QDockWidget.__init__(self,parent) self.setupUi(self) self.setWindowTitle(obj.name) @@ -23,21 +23,23 @@ class DockWidget(QDockWidget,ui_dialog): self.x_pclist = [] self.modes() self.comboBox.currentIndexChanged.connect(self.modeSelection) + print("constructor ", self.inputdict) self.pushButton_2.clicked.connect(self.param) self.dict = {} self.nameType = None self.container = container - + # input data tab def modes(self): modesList = self.obj.modesList if(modesList): for j in modesList: - self.comboBox.addItem(str(j)) + self.comboBox.addItem(str(self.obj.variables[j]['name'])) self.modeSelection() else: + self.comboBox.setDisabled(True) self.inputdict= {} self.inputdict = self.obj.paramgetter() self.inputparamslist() @@ -46,13 +48,21 @@ class DockWidget(QDockWidget,ui_dialog): self.inputdict= {} for i in reversed(range(self.formLayout.count())): self.formLayout.removeRow(i) - self.inputdict = self.obj.paramgetter(self.comboBox.currentText()) + print(self.comboBox.currentText()) + for i in self.obj.variables: + if self.obj.variables[i]['name'] == self.comboBox.currentText(): + currentText = i + break + self.inputdict = self.obj.paramgetter(currentText) + print('mode selection ', self.inputdict) self.inputparamslist() - + def inputparamslist(self): try: print("inputparamslist ", self.inputdict) for c,i in enumerate(self.inputdict): + if i == None: + continue if(i=="thermoPackage"): print("thermo1") combo = QComboBox() @@ -60,20 +70,24 @@ class DockWidget(QDockWidget,ui_dialog): print("thermo2") for j in self.lines: combo.addItem(str(j)) + combo.setMinimumContentsLength(15) lay = QGridLayout() lay.addWidget(QLabel(i+":"), 0,0, alignment=Qt.AlignLeft) - lay.addWidget(combo, 0, 1, alignment=Qt.AlignRight) + lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(''), 0, 2, alignment = Qt.AlignCenter) self.formLayout.addRow(lay) self.inputdict[i] = combo print("thermo") - elif(i=="condType"): + elif(i=="Ctype"): combo = QComboBox() self.lines = ["Total","Partial"] for j in self.lines: combo.addItem(str(j)) + combo.setMinimumContentsLength(15) lay = QGridLayout() - lay.addWidget(QLabel("Condensor Type :"+":"), 0, 0, alignment=Qt.AlignLeft) + lay.addWidget(QLabel("Condensor Type :"), 0, 0, alignment=Qt.AlignLeft) lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) + lay.addWidget(QLabel(''), 0, 2, alignment = Qt.AlignCenter) self.formLayout.addRow(lay) self.inputdict[i] = combo elif(i=="x_pc"): @@ -90,42 +104,49 @@ class DockWidget(QDockWidget,ui_dialog): lay.addWidget(QLabel(self.obj.variables[i]['unit']),j,2, alignment=Qt.AlignCenter) self.x_pclist.append(l) gp.setLayout(lay) - self.formLayout.addRow(gp) + self.formLayout.addRow(gp) else: print("elseloop") + print(i) + if i == None: + continue l = QLineEdit() if self.inputdict[i] != None: l.setText(str(self.inputdict[i])) + print('before lay') lay = QGridLayout() - lay.addWidget(QLabel(i+":"),0,0, alignment=Qt.AlignLeft) + lay.addWidget(QLabel(self.obj.variables[i]['name']+":"),0,0, alignment=Qt.AlignLeft) #self.obj.variables[i]['name'] lay.addWidget(l,0,1, alignment=Qt.AlignCenter) + print('after lay') if(i != 'MolFlow'): lay.addWidget(QLabel(self.obj.variables[i]['unit']),0,2, alignment=Qt.AlignCenter) else: - lay.addWidget(QLabel("mol/s"),0,2, alignment=Qt.AlignCenter) + lay.addWidget(QLabel('mol/s'),0,2, alignment=Qt.AlignCenter) + print('after all') self.formLayout.addRow(lay) self.inputdict[i] = l + except Exception as e: print(e) - def Show_Error(self): QMessageBox.about(self, 'Important', "Please fill all fields with data") def param(self): try: self.dict={} - print("param.inputdict ", self.inputdict) for i in self.inputdict: + if (self.inputdict[i] == None): + continue if(i=="thermoPackage"): if (self.inputdict[i].currentText()): self.dict[i] = self.inputdict[i].currentText() else: self.Show_Error() break - elif(i=="condType"): + elif(i=="Ctype"): if (self.inputdict[i].currentText()): self.dict[i] = self.inputdict[i].currentText() else: @@ -145,10 +166,11 @@ class DockWidget(QDockWidget,ui_dialog): for c in range(len(compound_selected)): mf.append(str(float(l[c])/total_moles)) self.x_pclist[c].setText(mf[-1]) - # self.formLayout.addRow(QLabel(str(compound_selected[c])+" Mole Fraction: "+str(float(l[c])/total_moles))) self.dict[i] = ",".join(mf) - # self.update() + elif(i == 'Pout' and self.obj.type == 'Mixer' or i == '' or i == 'HKey' or i == 'LKey'): + self.dict[i] = self.inputdict[i].currentText() else: + print(self.inputdict[i], i, self.obj.type) if (self.inputdict[i].text()): self.dict[i] = self.inputdict[i].text() else: @@ -163,7 +185,6 @@ class DockWidget(QDockWidget,ui_dialog): except Exception as e: print(e) - @staticmethod def showResult(lst): #DockWidget1.flag = True @@ -196,7 +217,4 @@ class DockWidget(QDockWidget,ui_dialog): self.tableWidget.resizeColumnsToContents() except Exception as e: - print(e) - - -
\ No newline at end of file + print(e)
\ No newline at end of file diff --git a/dockWidget.ui b/dockWidget.ui index 11855cb..5851d71 100644 --- a/dockWidget.ui +++ b/dockWidget.ui @@ -28,6 +28,9 @@ <property name="windowTitle"> <string>Form</string> </property> + <property name="autoFillBackground"> + <bool>false</bool> + </property> <widget class="QTabWidget" name="tabWidget"> <property name="geometry"> <rect> @@ -38,7 +41,7 @@ </rect> </property> <property name="autoFillBackground"> - <bool>true</bool> + <bool>false</bool> </property> <property name="currentIndex"> <number>0</number> diff --git a/icon/AdiabaticCompressor.png b/icon/AdiabaticCompressor.png Binary files differnew file mode 100644 index 0000000..08a874c --- /dev/null +++ b/icon/AdiabaticCompressor.png diff --git a/icon/AdiabaticExpander.png b/icon/AdiabaticExpander.png Binary files differnew file mode 100644 index 0000000..aaec6dc --- /dev/null +++ b/icon/AdiabaticExpander.png diff --git a/icons/CompSep.png b/icon/CompoundSeparator.png Binary files differindex 6fd2d0c..6fd2d0c 100644 --- a/icons/CompSep.png +++ b/icon/CompoundSeparator.png diff --git a/icon/Cooler.png b/icon/Cooler.png Binary files differnew file mode 100644 index 0000000..08519ea --- /dev/null +++ b/icon/Cooler.png diff --git a/icons/DistCol.png b/icon/DistillationColumn.png Binary files differindex 32a06b3..32a06b3 100644 --- a/icons/DistCol.png +++ b/icon/DistillationColumn.png diff --git a/icons/Equation.png b/icon/Equation.png Binary files differindex 687be3c..687be3c 100644 --- a/icons/Equation.png +++ b/icon/Equation.png diff --git a/icon/Flash.png b/icon/Flash.png Binary files differnew file mode 100644 index 0000000..4c38d8d --- /dev/null +++ b/icon/Flash.png diff --git a/icon/Heater.png b/icon/Heater.png Binary files differnew file mode 100644 index 0000000..18b891a --- /dev/null +++ b/icon/Heater.png diff --git a/icon/MaterialStream.png b/icon/MaterialStream.png Binary files differnew file mode 100644 index 0000000..ac543e4 --- /dev/null +++ b/icon/MaterialStream.png diff --git a/icon/Mixer.png b/icon/Mixer.png Binary files differnew file mode 100644 index 0000000..ee4b507 --- /dev/null +++ b/icon/Mixer.png diff --git a/icon/Pump.png b/icon/Pump.png Binary files differnew file mode 100644 index 0000000..daf804b --- /dev/null +++ b/icon/Pump.png diff --git a/icons/Sequential.png b/icon/Sequential.png Binary files differindex 3b08856..3b08856 100644 --- a/icons/Sequential.png +++ b/icon/Sequential.png diff --git a/icons/ShortCol.png b/icon/ShortcutColumn.png Binary files differindex 32a06b3..32a06b3 100644 --- a/icons/ShortCol.png +++ b/icon/ShortcutColumn.png diff --git a/icon/Splitter.png b/icon/Splitter.png Binary files differnew file mode 100644 index 0000000..28f6d52 --- /dev/null +++ b/icon/Splitter.png diff --git a/icon/Valve.png b/icon/Valve.png Binary files differnew file mode 100644 index 0000000..63bd362 --- /dev/null +++ b/icon/Valve.png diff --git a/icons/compoundSelector.png b/icon/compoundSelector.png Binary files differindex cc878eb..cc878eb 100644 --- a/icons/compoundSelector.png +++ b/icon/compoundSelector.png diff --git a/icon/icon_1.svg b/icon/icon_1.svg new file mode 100644 index 0000000..1da1384 --- /dev/null +++ b/icon/icon_1.svg @@ -0,0 +1,732 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="594mm" + height="420mm" + viewBox="0 0 594 420" + version="1.1" + id="svg8" + inkscape:version="0.92.4 (unknown)" + sodipodi:docname="icon_1.svg"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.47318645" + inkscape:cx="1085.0351" + inkscape:cy="870.44478" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1865" + inkscape:window-height="1056" + inkscape:window-x="55" + inkscape:window-y="24" + inkscape:window-maximized="1" + inkscape:snap-global="false"> + <sodipodi:guide + position="38.306975,232.31858" + orientation="1,0" + id="guide2011" + inkscape:locked="false" /> + <sodipodi:guide + position="64.835656,235.07052" + orientation="1,0" + id="guide2013" + inkscape:locked="false" /> + <sodipodi:guide + position="122.67041,244.71812" + orientation="1,0" + id="guide2015" + inkscape:locked="false" /> + <sodipodi:guide + position="149.13484,251.56774" + orientation="1,0" + id="guide2017" + inkscape:locked="false" /> + </sodipodi:namedview> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,123)"> + <rect + style="opacity:1;vector-effect:none;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.51917696;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect2029" + width="43.993099" + height="30.633631" + x="-6.1643405" + y="-217.32184" /> + <rect + style="opacity:1;vector-effect:none;fill:#fff6d5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.70616245;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect394" + width="66.145836" + height="201.51312" + x="766.57684" + y="-313.47989" /> + <rect + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2253848;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1049" + width="39.462116" + height="39.462116" + x="-74.921936" + y="70.041443" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" /> + <g + id="g2027" + transform="matrix(0.5,0,0,0.5,26.82059,-32.083134)"> + <g + transform="translate(0,12.142503)" + id="g1890"> + <g + id="g436" + transform="translate(74.573546,-175.45207)"> + <g + inkscape:export-ydpi="300" + inkscape:export-xdpi="300" + transform="translate(-2.0545634e-6,5.7992693e-6)" + id="g1073"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path392" + d="M 74.222905,94.546573 H 48.760335" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <g + id="g422"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path396" + d="m 74.1844,94.545543 -5.845362,4.242013" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <g + transform="matrix(1,0,0,-1,0,188.06436)" + id="g428"> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 74.1844,93.498902 -5.845362,4.242013" + id="path424" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(1.0131489,-1.0238188,1.0238188,1.0131489,-4.2710557,13.822723)" + id="g469"> + <g + id="g459" + transform="translate(-2.0545634e-6,5.7992693e-6)" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" /> + <g + id="g463" /> + <g + id="g467" + transform="matrix(1,0,0,-1,0,188.06436)" /> + </g> + <circle + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path471" + cx="154.63138" + cy="46.335262" + r="0" /> + <circle + r="12.87918" + cy="-84.209984" + cx="798.29523" + id="circle1343" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69997323;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1345" + d="M 823.58145,-84.147368 H 773.51281" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + sodipodi:nodetypes="ccc" + inkscape:connector-curvature="0" + d="m 816.45781,-89.224968 7.04793,5.09514 -7.04793,5.15469" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path1351" /> + <g + id="g1851" + transform="matrix(0.5,0,0,0.5,15.961607,-20.655148)"> + <path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + d="m 40.17402,99.982004 13.01746,9.639106 -13.01746,9.75174 z" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path1414" /> + <path + id="path1416" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 66.17938,99.982004 -13.01747,9.639106 13.01747,9.75174 z" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + </g> + <g + id="g1881" + transform="matrix(0.5,0,0,0.5,17.128285,-19.87535)"> + <g + transform="translate(-223.95846,235.07091)" + id="g1623"> + <g + id="g1370" + transform="rotate(-52.431815,166.72402,-104.61321)"> + <g + id="g1341"> + <circle + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path1306" + cx="155.64589" + cy="45.839531" + r="12.87918" /> + <g + id="g1331"> + <g + style="stroke:#ff0000" + id="g1320" + transform="matrix(1.9663623,0,0,1.9663623,34.983,-140.01067)"> + <g + style="stroke:#ff0000" + inkscape:export-ydpi="300" + inkscape:export-xdpi="300" + transform="translate(-2.0545634e-6,5.7992693e-6)" + id="g1310"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1308" + d="M 74.222905,94.546573 H 48.760335" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.3588126;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <g + style="stroke:#ff0000" + id="g1314" /> + <g + style="stroke:#ff0000" + transform="matrix(1,0,0,-1,0,188.06436)" + id="g1318"> + <path + sodipodi:nodetypes="ccc" + inkscape:connector-curvature="0" + d="M 70.600153,96.100011 74.1844,93.508859 70.600153,90.887428" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.3588126;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path1316" /> + </g> + </g> + </g> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.85591602px;line-height:16.1558075px;font-family:Arial;-inkscape-font-specification:Arial;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#492449;fill-opacity:1;stroke:none;stroke-width:1.11419368px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="274.11319" + y="1.5254955" + id="text1374"><tspan + sodipodi:role="line" + id="tspan1372" + x="274.11319" + y="1.5254955" + style="fill:#492449;fill-opacity:1;stroke-width:1.11419368px">H</tspan></text> + </g> + </g> + <g + id="g1866" + transform="matrix(0.5,0,0,0.5,17.046258,-19.979869)"> + <g + transform="translate(-83.05765,135.18057)" + id="g1412"> + <g + transform="matrix(0.6097052,0.79262827,0.79262827,-0.6097052,6.9260527,-59.433115)" + id="g1394"> + <g + id="g1392"> + <circle + r="12.87918" + cy="45.839531" + cx="155.64589" + id="circle1376" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <g + id="g1390"> + <g + transform="matrix(1.9663623,0,0,1.9663623,34.983,-140.01067)" + id="g1388" + style="stroke:#ff0000"> + <g + id="g1380" + transform="translate(-2.0545634e-6,5.7992693e-6)" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" + style="stroke:#ff0000"> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.3588126;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 74.222905,94.546573 H 48.760335" + id="path1378" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> + <g + id="g1382" + style="stroke:#ff0000" /> + <g + id="g1386" + transform="matrix(1,0,0,-1,0,188.06436)" + style="stroke:#ff0000"> + <path + id="path1384" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.3588126;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 70.600153,96.100011 74.1844,93.508859 70.600153,90.887428" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + </g> + </g> + </g> + </g> + </g> + <text + id="text1398" + y="41.936649" + x="133.04834" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.85591602px;line-height:16.1558075px;font-family:Arial;-inkscape-font-specification:Arial;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#492449;fill-opacity:1;stroke:none;stroke-width:1.11419368px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="fill:#492449;fill-opacity:1;stroke-width:1.11419368px" + y="41.936649" + x="133.04834" + id="tspan1396" + sodipodi:role="line">C</tspan></text> + </g> + </g> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.35299999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 43.669706,-33.941755 c -3.420356,0 -6.173783,1.67604 -6.173783,3.757909 v 0.557591 H 50.43725 v -0.557591 c 0,-2.081869 -2.753426,-3.757909 -6.173782,-3.757909 z m -6.173783,5.858558 V -13.39624 H 50.43725 v -14.686957 z m 0,16.230015 v 0.324011 c 0,2.0818715 2.753427,3.7579116 6.173783,3.7579116 h 0.593762 c 3.420356,0 6.173782,-1.6760401 6.173782,-3.7579116 v -0.324011 z" + id="rect1451" + inkscape:connector-curvature="0" /> + <g + id="g1847" + transform="matrix(0.5,0,0,0.5,17.761179,-19.772226)"> + <g + transform="translate(-36.185666,-15.387545)" + id="g1531"> + <g + id="g1507" + transform="translate(19.84375)" + style="stroke:#492449;stroke-opacity:1"> + <rect + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1494" + width="25.831001" + height="3.1642954" + x="55.012814" + y="85.833954" + ry="0" /> + <circle + r="10.438661" + cy="73.683235" + cx="68.088394" + id="circle1488" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.78197443;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1490" + d="M 68.072509,73.683235 H 55.045533" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 100.68254,63.240216 H 87.655564" + id="path1509" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> + </g> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.35040316;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 88.361702,-37.886812 v 4.7625 0.517798 4.233333 l 12.878798,-2.102973 v -2.13036 -0.517798 -2.659528 z" + id="path1533" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + id="path1544" + d="m 101.08203,-6.3428385 v 4.7625 0.517795 4.233335 L 88.203232,1.0678165 v -2.13036 -0.517795 -2.65953 z" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.35040316;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 164.96484 192.87305 C 152.03752 192.87305 141.63086 199.20769 141.63086 207.07617 L 141.63086 209.18555 L 190.54297 209.18555 L 190.54297 207.07617 C 190.54297 199.20769 180.13436 192.87305 167.20703 192.87305 L 164.96484 192.87305 z M 141.63086 215.01758 L 141.63086 270.52734 L 190.54297 270.52734 L 190.54297 215.01758 L 141.63086 215.01758 z M 141.63086 276.35938 L 141.63086 277.58398 C 141.63086 285.45247 152.03752 291.78711 164.96484 291.78711 L 167.20703 291.78711 C 180.13436 291.78711 190.54297 285.45247 190.54297 277.58398 L 190.54297 276.35938 L 141.63086 276.35938 z " + transform="matrix(0.26458333,0,0,0.26458333,0,-123)" + id="rect1546" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.29405668;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 50.367322,-59.593005 c -0.909315,0 -0.712255,1.419033 -1.621569,1.419033 -0.909315,0 -0.71225,-1.419033 -1.621565,-1.419033 -0.909315,0 -0.712255,1.419033 -1.621571,1.419033 -0.909316,0 -0.712253,-1.419033 -1.62157,-1.419033 -0.909316,0 -0.712253,1.419033 -1.621569,1.419033 -0.909317,0 -0.712255,-1.419033 -1.621571,-1.419033 -0.909316,0 -0.712254,1.419033 -1.62157,1.419033 -0.909316,0 -0.712254,-1.419033 -1.62157,-1.419033" + id="path1552" + inkscape:connector-curvature="0" + sodipodi:nodetypes="czzzzzzzc" /> + <g + id="g1931" + transform="matrix(0.5,0,0,0.5,30.664016,-14.875669)"> + <g + transform="translate(173.43664,-129.08319)" + id="g1823"> + <rect + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2253848;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1070" + width="39.462116" + height="39.462116" + x="66.408394" + y="79.791267" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 57.154697,58.824045 h 1.186983 c 6.84071,0 12.347852,3.35204 12.347852,7.51578 v 70.675665 62.41297 c 0,4.16374 -5.507142,7.51577 -12.347852,7.51577 h -1.186983 c -6.84071,0 -12.347852,-3.35203 -12.347852,-7.51577 v -62.9215 -70.167135 c 0,-4.16374 5.507142,-7.51578 12.347852,-7.51578 z" + id="rect1575" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssscsssscss" /> + <g + id="g1649" + transform="translate(-182.42801,52.455977)"> + <g + id="g1643" + transform="rotate(-52.431815,166.72402,-104.61321)"> + <g + id="g1641"> + <circle + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="circle1625" + cx="155.64589" + cy="45.839531" + r="12.87918" /> + <g + id="g1639"> + <g + style="stroke:#ff0000" + id="g1637" + transform="matrix(1.9663623,0,0,1.9663623,34.983,-140.01067)"> + <g + style="stroke:#ff0000" + inkscape:export-ydpi="300" + inkscape:export-xdpi="300" + transform="translate(-2.0545634e-6,5.7992693e-6)" + id="g1629"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1627" + d="M 74.222905,94.546573 H 48.760335" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.3588126;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <g + style="stroke:#ff0000" + id="g1631" /> + <g + style="stroke:#ff0000" + transform="matrix(1,0,0,-1,0,188.06436)" + id="g1635"> + <path + sodipodi:nodetypes="ccc" + inkscape:connector-curvature="0" + d="M 70.600153,96.100011 74.1844,93.508859 70.600153,90.887428" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.3588126;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path1633" /> + </g> + </g> + </g> + </g> + </g> + </g> + <g + transform="matrix(-1,0,0,1,374.22351,220.94571)" + id="g1675"> + <g + transform="rotate(-52.431815,166.72402,-104.61321)" + id="g1669"> + <g + id="g1667"> + <circle + r="12.87918" + cy="45.839531" + cx="155.64589" + id="circle1651" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <g + id="g1665"> + <g + transform="matrix(1.9663623,0,0,1.9663623,34.983,-140.01067)" + id="g1663" + style="stroke:#ff0000"> + <g + id="g1655" + transform="translate(-2.0545634e-6,5.7992693e-6)" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" + style="stroke:#ff0000"> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.3588126;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 74.222905,94.546573 H 48.760335" + id="path1653" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> + <g + id="g1657" + style="stroke:#ff0000" /> + <g + id="g1661" + transform="matrix(1,0,0,-1,0,188.06436)" + style="stroke:#ff0000"> + <path + id="path1659" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.3588126;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 70.600153,96.100011 74.1844,93.508859 70.600153,90.887428" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + </g> + </g> + </g> + </g> + </g> + </g> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 82.089856,217.18513 H 57.748189 v -10.15632" + id="path1709" + inkscape:connector-curvature="0" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 57.748189,58.700631 V 48.583146 h 26.02996" + id="path1682" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1703" + d="M 70.448189,82.431634 H 110.23648" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 97.14005,61.295994 V 82.136052" + id="path1715" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <g + id="g1739" + transform="matrix(-1,0,0,1,84.846711,-0.30335508)"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1711" + d="m 14.448838,91.201636 h 18.09246" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1713" + d="M 20.79884,105.33795 H 39.420466" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 14.448838,119.47426 h 18.09246" + id="path1719" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 21.328006,133.61058 h 18.09246" + id="path1721" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1723" + d="m 14.448838,147.74689 h 18.09246" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1725" + d="m 21.328006,161.88321 h 18.09246" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 14.448838,176.01953 h 18.09246" + id="path1727" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 70.448189,182.97335 H 110.23648" + id="path1741" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1743" + d="m 97.14005,183.00438 v 20.84007" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + </g> + <path + inkscape:connector-curvature="0" + id="path1825" + d="m 88.634922,28.795099 v 12.82324 h 6.27611 l 6.547158,-6.41162 -6.547158,-6.41162 z" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.35277778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + sodipodi:nodetypes="cccccc" /> + <path + sodipodi:nodetypes="cccccc" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.35277778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 100.83549,71.723329 v 12.82324 h -6.276108 l -6.54716,-6.41162 6.54716,-6.41162 z" + id="path1827" + inkscape:connector-curvature="0" /> + <g + id="g2009" + transform="translate(-137.55149,8.7979388)"> + <rect + ry="3.3609526" + y="-74.577286" + x="370.66953" + height="25.470205" + width="43.075089" + id="rect1933" + style="opacity:1;vector-effect:none;fill:#c8c4b7;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.72532076;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <text + id="text1937" + y="-53.083542" + x="372.93628" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.10041618px;line-height:27.29670143px;font-family:Arial;-inkscape-font-specification:Arial;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88253105px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="stroke-width:1.88253105px" + y="-53.083542" + x="372.93628" + id="tspan1935" + sodipodi:role="line">SQ</tspan></text> + </g> + <g + id="g2004" + transform="translate(-137.55149,23.489355)"> + <rect + style="opacity:1;vector-effect:none;fill:#c8c4b7;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.72532076;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1945" + width="43.075089" + height="25.470205" + x="370.8223" + y="-41.2733" + ry="3.3609526" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.10041618px;line-height:27.29670143px;font-family:Arial;-inkscape-font-specification:Arial;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.88253105px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="373.08905" + y="-19.779552" + id="text1949"><tspan + sodipodi:role="line" + id="tspan1947" + x="373.08905" + y="-19.779552" + style="stroke-width:1.88253105px">EQ</tspan></text> + </g> + <g + id="g1999" + transform="translate(-137.55149,31.267163)"> + <rect + ry="3.3609526" + y="-2.3513699" + x="371.12784" + height="25.470205" + width="43.075089" + id="rect1951" + style="opacity:1;vector-effect:none;fill:#c8c4b7;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.72532076;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <rect + style="opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.50269556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1957" + width="29.853903" + height="17.652548" + x="377.73843" + y="1.5574627" + ry="2.3293638" /> + <text + id="text1961" + y="15.759001" + x="381.56311" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.27015781px;line-height:15.51879597px;font-family:Arial;-inkscape-font-specification:Arial;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.07026172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="stroke-width:1.07026172px" + y="15.759001" + x="381.56311" + id="tspan1959" + sodipodi:role="line">PW</tspan></text> + </g> + <g + id="g1993" + transform="translate(-137.55149,39.909171)"> + <rect + style="opacity:1;vector-effect:none;fill:#c8c4b7;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.72532076;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1963" + width="43.075089" + height="25.470205" + x="371.12784" + y="39.220215" + ry="3.3609526" /> + <circle + r="10.986364" + cy="-279.5603" + cx="-280.59134" + id="circle1971" + style="opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60186213;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + transform="matrix(-0.60970512,-0.79262833,-0.79262833,0.60970512,0,0)" /> + <rect + y="43.313293" + x="391.04501" + height="17.284018" + width="3.2407534" + id="rect1988" + style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <path + inkscape:connector-curvature="0" + id="rect1453" + d="m 35.59113,-29.626264 v 1.543061 h 16.750914 v -1.543061 z m 0,16.230011 v 1.54306 h 16.750914 v -1.54306 z" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.35277778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + inkscape:connector-curvature="0" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.35277778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 35.567855,-67.652992 v 1.54306 h 16.751432 v -1.54306 z m 0,16.23001 v 1.54306 h 16.751432 v -1.54306 z" + id="rect1548" /> + </g> +</svg> diff --git a/icon/logo.png b/icon/logo.png Binary files differnew file mode 100644 index 0000000..541e99e --- /dev/null +++ b/icon/logo.png diff --git a/icons/new.svg b/icon/new.svg index bd566f3..bd566f3 100644 --- a/icons/new.svg +++ b/icon/new.svg diff --git a/icons/package-icon.svg b/icon/package-icon.svg index 43382a3..43382a3 100644 --- a/icons/package-icon.svg +++ b/icon/package-icon.svg diff --git a/icons/plus.png b/icon/plus.png Binary files differindex 08a6564..08a6564 100644 --- a/icons/plus.png +++ b/icon/plus.png diff --git a/icons/zoomIn.png b/icon/zoomIn.png Binary files differindex b10c61a..b10c61a 100644 --- a/icons/zoomIn.png +++ b/icon/zoomIn.png diff --git a/icons/zoomOut.png b/icon/zoomOut.png Binary files differindex 6c60a02..6c60a02 100644 --- a/icons/zoomOut.png +++ b/icon/zoomOut.png diff --git a/icons/zoomReset.png b/icon/zoomReset.png Binary files differindex 62fc917..62fc917 100644 --- a/icons/zoomReset.png +++ b/icon/zoomReset.png diff --git a/icons/AdiabaticCompressor.png b/icons/AdiabaticCompressor.png Binary files differindex 08a874c..1fd7bb0 100644 --- a/icons/AdiabaticCompressor.png +++ b/icons/AdiabaticCompressor.png diff --git a/icons/AdiabaticExpander.png b/icons/AdiabaticExpander.png Binary files differindex aaec6dc..615a638 100644 --- a/icons/AdiabaticExpander.png +++ b/icons/AdiabaticExpander.png diff --git a/icons/Column.png b/icons/Column.png Binary files differnew file mode 100644 index 0000000..84c0bcc --- /dev/null +++ b/icons/Column.png diff --git a/icons/CompoundSeparator.png b/icons/CompoundSeparator.png Binary files differnew file mode 100644 index 0000000..3435dcf --- /dev/null +++ b/icons/CompoundSeparator.png diff --git a/icons/Cooler.png b/icons/Cooler.png Binary files differindex 08519ea..4dcb802 100644 --- a/icons/Cooler.png +++ b/icons/Cooler.png diff --git a/icons/DistillationColumn.png b/icons/DistillationColumn.png Binary files differnew file mode 100644 index 0000000..f65150b --- /dev/null +++ b/icons/DistillationColumn.png diff --git a/icons/Flash.png b/icons/Flash.png Binary files differindex 4c38d8d..9a84def 100644 --- a/icons/Flash.png +++ b/icons/Flash.png diff --git a/icons/Heater.png b/icons/Heater.png Binary files differindex 18b891a..52b8c00 100644 --- a/icons/Heater.png +++ b/icons/Heater.png diff --git a/icons/MaterialStream.png b/icons/MaterialStream.png Binary files differindex ac543e4..b548d3f 100644 --- a/icons/MaterialStream.png +++ b/icons/MaterialStream.png diff --git a/icons/Mixer.png b/icons/Mixer.png Binary files differindex ee4b507..6656945 100644 --- a/icons/Mixer.png +++ b/icons/Mixer.png diff --git a/icons/Pump.png b/icons/Pump.png Binary files differindex daf804b..a2d3e8e 100644 --- a/icons/Pump.png +++ b/icons/Pump.png diff --git a/icons/ShortcutColumn.png b/icons/ShortcutColumn.png Binary files differnew file mode 100644 index 0000000..f65150b --- /dev/null +++ b/icons/ShortcutColumn.png diff --git a/icons/Splitter.png b/icons/Splitter.png Binary files differindex 28f6d52..778bcda 100644 --- a/icons/Splitter.png +++ b/icons/Splitter.png diff --git a/icons/Valve.png b/icons/Valve.png Binary files differindex 63bd362..3cfd5c4 100644 --- a/icons/Valve.png +++ b/icons/Valve.png diff --git a/icons/compound.png b/icons/compound.png Binary files differnew file mode 100644 index 0000000..a9c946d --- /dev/null +++ b/icons/compound.png diff --git a/icons/eq.png b/icons/eq.png Binary files differnew file mode 100644 index 0000000..cb0485a --- /dev/null +++ b/icons/eq.png diff --git a/icons/icon_1.svg b/icons/icon_1.svg new file mode 100644 index 0000000..7f6acd7 --- /dev/null +++ b/icons/icon_1.svg @@ -0,0 +1,868 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="594mm" + height="420mm" + viewBox="0 0 594 420" + version="1.1" + id="svg8" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" + sodipodi:docname="icon_1.svg"> + <defs + id="defs2"> + <linearGradient + inkscape:collect="always" + id="linearGradient7271"> + <stop + style="stop-color:#dcdcdc;stop-opacity:1;" + offset="0" + id="stop7267" /> + <stop + style="stop-color:#dcdcdc;stop-opacity:0;" + offset="1" + id="stop7269" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7271" + id="linearGradient7273" + x1="370.30686" + y1="-61.842183" + x2="414.10727" + y2="-61.842183" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.9570334,1.9570334)" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.6767468" + inkscape:cx="167.48347" + inkscape:cy="827.81667" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1304" + inkscape:window-height="745" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:snap-global="false"> + <sodipodi:guide + position="38.306975,232.31858" + orientation="1,0" + id="guide2011" + inkscape:locked="false" /> + <sodipodi:guide + position="64.835656,235.07052" + orientation="1,0" + id="guide2013" + inkscape:locked="false" /> + <sodipodi:guide + position="122.67041,244.71812" + orientation="1,0" + id="guide2015" + inkscape:locked="false" /> + <sodipodi:guide + position="149.13484,251.56774" + orientation="1,0" + id="guide2017" + inkscape:locked="false" /> + </sodipodi:namedview> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,123)"> + <rect + style="opacity:1;vector-effect:none;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.51917696;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect2029" + width="43.993099" + height="30.633631" + x="-6.1643405" + y="-217.32184" /> + <rect + style="opacity:1;vector-effect:none;fill:#fff6d5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.70616245;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect394" + width="66.145836" + height="201.51312" + x="766.57684" + y="-313.47989" /> + <rect + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2253848;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1049" + width="39.462116" + height="39.462116" + x="-74.921936" + y="70.041443" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" /> + <g + id="g2027" + transform="matrix(0.5,0,0,0.5,26.82059,-32.083134)" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\MaterialStream.png"> + <g + transform="translate(0,12.142503)" + id="g1890"> + <g + id="g436" + transform="translate(68.42287,-171.538)" + style="fill:#004646;fill-opacity:0;stroke:#004646;stroke-opacity:1"> + <g + inkscape:export-ydpi="300" + inkscape:export-xdpi="300" + transform="translate(-2.0545634e-6,5.7992693e-6)" + id="g1073" + style="fill:#004646;fill-opacity:0;stroke:#004646;stroke-opacity:1"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path392" + d="M 74.222905,94.546573 H 48.760335" + style="opacity:1;vector-effect:none;fill:#004646;fill-opacity:0;fill-rule:nonzero;stroke:#004646;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <g + id="g422" + style="fill:#004646;fill-opacity:0;stroke:#004646;stroke-opacity:1"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path396" + d="m 74.1844,94.545543 -5.845362,4.242013" + style="opacity:1;vector-effect:none;fill:#004646;fill-opacity:0;fill-rule:nonzero;stroke:#004646;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <g + transform="matrix(1,0,0,-1,0,188.06436)" + id="g428" + style="fill:#004646;fill-opacity:0;stroke:#004646;stroke-opacity:1"> + <path + style="opacity:1;vector-effect:none;fill:#004646;fill-opacity:0;fill-rule:nonzero;stroke:#004646;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 74.1844,93.498902 -5.845362,4.242013" + id="path424" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(1.0131489,-1.0238188,1.0238188,1.0131489,-4.2710557,13.822723)" + id="g469"> + <g + id="g459" + transform="translate(-2.0545634e-6,5.7992693e-6)" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" /> + <g + id="g463" /> + <g + id="g467" + transform="matrix(1,0,0,-1,0,188.06436)" /> + </g> + <circle + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path471" + cx="154.63138" + cy="46.335262" + r="0" /> + <circle + r="12.87918" + cy="-84.209984" + cx="798.29523" + id="circle1343" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69997323;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1345" + d="M 823.58145,-84.147368 H 773.51281" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + sodipodi:nodetypes="ccc" + inkscape:connector-curvature="0" + d="m 816.45781,-89.224968 7.04793,5.09514 -7.04793,5.15469" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path1351" /> + <g + id="g1851" + transform="matrix(0.5,0,0,0.5,15.961607,-20.655148)" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\Valve.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> + <path + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + d="m 40.17402,99.982004 13.01746,9.639106 -13.01746,9.75174 z" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path1414" /> + <path + id="path1416" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 66.17938,99.982004 -13.01747,9.639106 13.01747,9.75174 z" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + </g> + <g + id="g1881" + transform="matrix(0.5,0,0,0.5,16.83175,-19.87535)" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\Heater.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + style="stroke-width:0.84666667;stroke-miterlimit:4;stroke-dasharray:none"> + <g + transform="translate(-223.95846,235.07091)" + id="g1623" + style="stroke-width:0.84666667;stroke-miterlimit:4;stroke-dasharray:none"> + <g + id="g1370" + transform="rotate(-52.431815,166.72402,-104.61321)" + style="stroke-width:0.84666667;stroke-miterlimit:4;stroke-dasharray:none"> + <g + id="g1341" + style="stroke-width:0.84666667;stroke-miterlimit:4;stroke-dasharray:none"> + <circle + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.84666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path1306" + cx="155.64589" + cy="45.839531" + r="12.87918" /> + <g + id="g1331" + style="stroke-width:0.84666667;stroke-miterlimit:4;stroke-dasharray:none"> + <g + style="stroke:#ff0000;stroke-width:0.43057511;stroke-miterlimit:4;stroke-dasharray:none" + id="g1320" + transform="matrix(1.9663623,0,0,1.9663623,34.983,-140.01067)"> + <g + style="stroke:#ff0000;stroke-width:0.43057511;stroke-miterlimit:4;stroke-dasharray:none" + inkscape:export-ydpi="300" + inkscape:export-xdpi="300" + transform="translate(-2.0545634e-6,5.7992693e-6)" + id="g1310"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1308" + d="M 74.222905,94.546573 H 48.760335" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.43057511;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <g + style="stroke:#ff0000;stroke-width:0.43057511;stroke-miterlimit:4;stroke-dasharray:none" + id="g1314" /> + <g + style="stroke:#ff0000;stroke-width:0.43057511;stroke-miterlimit:4;stroke-dasharray:none" + transform="matrix(1,0,0,-1,0,188.06436)" + id="g1318"> + <path + sodipodi:nodetypes="ccc" + inkscape:connector-curvature="0" + d="M 70.600153,96.100011 74.1844,93.508859 70.600153,90.887428" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.43057511;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path1316" /> + </g> + </g> + </g> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.85591602px;line-height:16.1558075px;font-family:Arial;-inkscape-font-specification:Arial;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#004646;fill-opacity:1;stroke:none;stroke-width:0.84666667;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" + x="274.11319" + y="1.5254955" + id="text1374"><tspan + sodipodi:role="line" + id="tspan1372" + x="274.11319" + y="1.5254955" + style="fill:#004646;fill-opacity:1;stroke-width:0.84666667;stroke-miterlimit:4;stroke-dasharray:none">H</tspan></text> + </g> + </g> + <g + id="g1866" + transform="matrix(0.5,0,0,0.5,17.046258,-19.979869)" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\Cooler.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> + <g + transform="translate(-83.05765,135.18057)" + id="g1412"> + <g + transform="matrix(0.6097052,0.79262827,0.79262827,-0.6097052,6.9260527,-59.433115)" + id="g1394"> + <g + id="g1392"> + <circle + r="12.87918" + cy="45.839531" + cx="155.64589" + id="circle1376" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <g + id="g1390"> + <g + transform="matrix(1.9663623,0,0,1.9663623,34.983,-140.01067)" + id="g1388" + style="stroke:#ff0000"> + <g + id="g1380" + transform="translate(-2.0545634e-6,5.7992693e-6)" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" + style="stroke:#ff0000"> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.3588126;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 74.222905,94.546573 H 48.760335" + id="path1378" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> + <g + id="g1382" + style="stroke:#ff0000" /> + <g + id="g1386" + transform="matrix(1,0,0,-1,0,188.06436)" + style="stroke:#ff0000"> + <path + id="path1384" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.3588126;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 70.600153,96.100011 74.1844,93.508859 70.600153,90.887428" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + </g> + </g> + </g> + </g> + </g> + <text + id="text1398" + y="41.936649" + x="133.04834" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.85591602px;line-height:16.1558075px;font-family:Arial;-inkscape-font-specification:Arial;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#004646;fill-opacity:1;stroke:none;stroke-width:1.11419368px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;" + xml:space="preserve"><tspan + style="fill:#004646;fill-opacity:1;stroke-width:1.11419368px;" + y="41.936649" + x="133.04834" + id="tspan1396" + sodipodi:role="line">C</tspan></text> + </g> + </g> + <path + style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:0;fill-rule:nonzero;stroke:#004646;stroke-width:0.35299999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 43.669706,-33.941755 c -3.420356,0 -6.173783,1.67604 -6.173783,3.757909 v 0.557591 H 50.43725 v -0.557591 c 0,-2.081869 -2.753426,-3.757909 -6.173782,-3.757909 z m -6.173783,5.858558 V -13.39624 H 50.43725 v -14.686957 z m 0,16.230015 v 0.324011 c 0,2.0818715 2.753427,3.7579116 6.173783,3.7579116 h 0.593762 c 3.420356,0 6.173782,-1.6760401 6.173782,-3.7579116 v -0.324011 z" + id="rect1451" + inkscape:connector-curvature="0" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\CompoundSeparator.png" /> + <g + id="g1847" + transform="matrix(0.5,0,0,0.5,17.761179,-19.772226)" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\Pump.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> + <g + transform="translate(-36.185666,-15.387545)" + id="g1531"> + <g + id="g1507" + transform="translate(19.84375)" + style="stroke:#004646;stroke-opacity:1"> + <rect + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1494" + width="25.831001" + height="3.1642954" + x="55.012814" + y="85.833954" + ry="0" /> + <circle + r="10.438661" + cy="73.683235" + cx="68.088394" + id="circle1488" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.78197443;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1490" + d="M 68.072509,73.683235 H 55.045533" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 100.68254,63.240216 H 87.655564" + id="path1509" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> + </g> + <path + style="opacity:1;vector-effect:none;fill:#004646;fill-opacity:0;fill-rule:nonzero;stroke:#004646;stroke-width:0.35;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 88.361702,-37.886812 v 4.7625 0.517798 4.233333 l 12.878798,-2.102973 v -2.13036 -0.517798 -2.659528 z" + id="path1533" + inkscape:connector-curvature="0" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\AdiabaticCompressor.png" /> + <path + inkscape:connector-curvature="0" + id="path1544" + d="m 101.08203,-6.3428385 v 4.7625 0.517795 4.233335 L 88.203232,1.0678165 v -2.13036 -0.517795 -2.65953 z" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.35040316;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\AdiabaticExpander.png" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 164.96484 192.87305 C 152.03752 192.87305 141.63086 199.20769 141.63086 207.07617 L 141.63086 209.18555 L 190.54297 209.18555 L 190.54297 207.07617 C 190.54297 199.20769 180.13436 192.87305 167.20703 192.87305 L 164.96484 192.87305 z M 141.63086 215.01758 L 141.63086 270.52734 L 190.54297 270.52734 L 190.54297 215.01758 L 141.63086 215.01758 z M 141.63086 276.35938 L 141.63086 277.58398 C 141.63086 285.45247 152.03752 291.78711 164.96484 291.78711 L 167.20703 291.78711 C 180.13436 291.78711 190.54297 285.45247 190.54297 277.58398 L 190.54297 276.35938 L 141.63086 276.35938 z " + id="rect1546" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + transform="matrix(0.26458333,0,0,0.26458333,0,-123)" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\Flash.png" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.29405668;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 50.367322,-59.593005 c -0.909315,0 -0.712255,1.419033 -1.621569,1.419033 -0.909315,0 -0.71225,-1.419033 -1.621565,-1.419033 -0.909315,0 -0.712255,1.419033 -1.621571,1.419033 -0.909316,0 -0.712253,-1.419033 -1.62157,-1.419033 -0.909316,0 -0.712253,1.419033 -1.621569,1.419033 -0.909317,0 -0.712255,-1.419033 -1.621571,-1.419033 -0.909316,0 -0.712254,1.419033 -1.62157,1.419033 -0.909316,0 -0.712254,-1.419033 -1.62157,-1.419033" + id="path1552" + inkscape:connector-curvature="0" + sodipodi:nodetypes="czzzzzzzc" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\Flash.png" /> + <g + id="g1931" + transform="matrix(0.5,0,0,0.5,59.180788,-12.359483)" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + style="stroke-width:1.69333333;stroke-miterlimit:4;stroke-dasharray:none"> + <g + transform="translate(173.43664,-129.08319)" + id="g1823" + style="stroke-width:1.69333333;stroke-miterlimit:4;stroke-dasharray:none"> + <rect + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1070" + width="39.462116" + height="39.462116" + x="66.408394" + y="79.791267" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 57.154697,58.824045 h 1.186983 c 6.84071,0 12.347852,3.35204 12.347852,7.51578 v 70.675665 62.41297 c 0,4.16374 -5.507142,7.51577 -12.347852,7.51577 h -1.186983 c -6.84071,0 -12.347852,-3.35203 -12.347852,-7.51577 v -62.9215 -70.167135 c 0,-4.16374 5.507142,-7.51578 12.347852,-7.51578 z" + id="rect1575" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssscsssscss" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127" /> + <g + id="g1649" + transform="translate(-182.42801,52.455977)" + style="stroke:#004646;stroke-opacity:1;stroke-width:3.38666667;stroke-miterlimit:4;stroke-dasharray:none" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127"> + <g + id="g1643" + transform="rotate(-52.431815,166.72402,-104.61321)" + style="stroke:#004646;stroke-opacity:1;stroke-width:3.38666667;stroke-miterlimit:4;stroke-dasharray:none"> + <g + id="g1641" + style="stroke:#004646;stroke-opacity:1;stroke-width:3.38666667;stroke-miterlimit:4;stroke-dasharray:none"> + <circle + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="circle1625" + cx="155.64589" + cy="45.839531" + r="12.87918" /> + <g + id="g1639" + style="stroke:#004646;stroke-opacity:1;stroke-width:3.38666667;stroke-miterlimit:4;stroke-dasharray:none"> + <g + style="stroke:#004646;stroke-opacity:1;stroke-width:1.72230045;stroke-miterlimit:4;stroke-dasharray:none" + id="g1637" + transform="matrix(1.9663623,0,0,1.9663623,34.983,-140.01067)"> + <g + style="stroke:#004646;stroke-opacity:1;stroke-width:1.72230045;stroke-miterlimit:4;stroke-dasharray:none" + inkscape:export-ydpi="300" + inkscape:export-xdpi="300" + transform="translate(-2.0545634e-6,5.7992693e-6)" + id="g1629"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1627" + d="M 74.222905,94.546573 H 48.760335" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:1.72230045;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <g + style="stroke:#004646;stroke-opacity:1;stroke-width:1.72230045;stroke-miterlimit:4;stroke-dasharray:none" + id="g1631" /> + <g + style="stroke:#ff0000;stroke-opacity:1;stroke-width:1.72230045;stroke-miterlimit:4;stroke-dasharray:none" + transform="matrix(1,0,0,-1,0,188.06436)" + id="g1635"> + <path + sodipodi:nodetypes="ccc" + inkscape:connector-curvature="0" + d="M 70.600153,96.100011 74.1844,93.508859 70.600153,90.887428" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:1.72230045;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="path1633" /> + </g> + </g> + </g> + </g> + </g> + </g> + <g + transform="matrix(-1,0,0,1,374.22351,220.94571)" + id="g1675" + style="stroke-width:1.69333333;stroke-miterlimit:4;stroke-dasharray:none"> + <g + transform="rotate(-52.431815,166.72402,-104.61321)" + id="g1669" + style="stroke-width:1.69333333;stroke-miterlimit:4;stroke-dasharray:none"> + <g + id="g1667" + style="stroke:#004646;stroke-opacity:1;stroke-width:1.69333333;stroke-miterlimit:4;stroke-dasharray:none"> + <circle + r="12.87918" + cy="45.839531" + cx="155.64589" + id="circle1651" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127" /> + <g + id="g1665" + style="stroke:#004646;stroke-opacity:1;stroke-width:1.69333333;stroke-miterlimit:4;stroke-dasharray:none"> + <g + transform="matrix(1.9663623,0,0,1.9663623,34.983,-140.01067)" + id="g1663" + style="stroke:#004646;stroke-opacity:1;stroke-width:0.86115022;stroke-miterlimit:4;stroke-dasharray:none"> + <g + id="g1655" + transform="translate(-2.0545634e-6,5.7992693e-6)" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127" + style="stroke:#004646;stroke-opacity:1;stroke-width:1.72230045;stroke-miterlimit:4;stroke-dasharray:none" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png"> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:1.72230045;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 74.222905,94.546573 H 48.760335" + id="path1653" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> + <g + id="g1657" + style="stroke:#004646;stroke-opacity:1;stroke-width:0.86115022;stroke-miterlimit:4;stroke-dasharray:none" /> + <g + id="g1661" + transform="matrix(1,0,0,-1,0,188.06436)" + style="stroke:#ff0000;stroke-opacity:1;stroke-width:1.72230045;stroke-miterlimit:4;stroke-dasharray:none" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127"> + <path + id="path1659" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:1.72230045;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 70.600153,96.100011 74.1844,93.508859 70.600153,90.887428" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + </g> + </g> + </g> + </g> + </g> + </g> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 82.089856,217.18513 H 57.748189 v -10.15632" + id="path1709" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 57.748189,58.700631 V 48.583146 h 26.02996" + id="path1682" + inkscape:connector-curvature="0" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1703" + d="M 70.448189,82.431634 H 110.23648" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 97.14005,61.295994 V 82.136052" + id="path1715" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127" /> + <g + id="g1739" + transform="matrix(-1,0,0,1,84.846711,-0.30335508)" + style="stroke:#004646;stroke-opacity:1;stroke-width:3.38666667;stroke-miterlimit:4;stroke-dasharray:none" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127"> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1711" + d="m 14.448838,91.201636 h 18.09246" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1713" + d="M 20.79884,105.33795 H 39.420466" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 14.448838,119.47426 h 18.09246" + id="path1719" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 21.328006,133.61058 h 18.09246" + id="path1721" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1723" + d="m 14.448838,147.74689 h 18.09246" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1725" + d="m 21.328006,161.88321 h 18.09246" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 14.448838,176.01953 h 18.09246" + id="path1727" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + </g> + <path + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="M 70.448189,182.97335 H 110.23648" + id="path1741" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path1743" + d="m 97.14005,183.00438 v 20.84007" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:3.38666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\ShortcutColumn.png" + inkscape:export-xdpi="48.442127" + inkscape:export-ydpi="48.442127" /> + </g> + </g> + <path + inkscape:connector-curvature="0" + id="path1825" + d="m 88.634922,28.795099 v 12.82324 h 6.27611 l 6.547158,-6.41162 -6.547158,-6.41162 z" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.35277778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + sodipodi:nodetypes="cccccc" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\Mixer.png" /> + <path + sodipodi:nodetypes="cccccc" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.35277778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 100.83549,71.723329 v 12.82324 h -6.276108 l -6.54716,-6.41162 6.54716,-6.41162 z" + id="path1827" + inkscape:connector-curvature="0" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\Splitter.png" /> + <g + id="g2009" + transform="translate(-137.55149,8.7979388)" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\sq.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> + <rect + ry="3.3609526" + y="-72.620255" + x="372.62656" + height="25.470205" + width="43.075089" + id="rect1933" + style="opacity:1;vector-effect:none;fill:#004646;fill-opacity:0.8627451;fill-rule:nonzero;stroke:url(#linearGradient7273);stroke-width:0.72532076;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\sq.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" /> + <text + id="text1937" + y="-51.126507" + x="374.89331" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.10041618px;line-height:27.29670143px;font-family:Arial;-inkscape-font-specification:Arial;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.88253105px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\sq.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"><tspan + style="fill:#ffffff;fill-opacity:1;stroke-width:1.88253105px" + y="-51.126507" + x="374.89331" + id="tspan1935" + sodipodi:role="line">SQ</tspan></text> + </g> + <g + id="g2004" + transform="translate(-125.52971,22.650626)" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\eq.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> + <rect + style="opacity:1;vector-effect:none;fill:#004646;fill-opacity:0.8627451;fill-rule:nonzero;stroke:#dcdcdc;stroke-width:0.72532076;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1945" + width="43.075089" + height="25.470205" + x="370.8223" + y="-41.2733" + ry="3.3609526" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.10041618px;line-height:27.29670143px;font-family:Arial;-inkscape-font-specification:Arial;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.88253105px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="373.08905" + y="-19.779552" + id="text1949"><tspan + sodipodi:role="line" + id="tspan1947" + x="373.08905" + y="-19.779552" + style="fill:#ffffff;fill-opacity:1;stroke-width:1.88253105px">EQ</tspan></text> + </g> + <g + id="g1999" + transform="translate(-137.55149,31.267163)"> + <rect + ry="3.3609526" + y="-2.3513699" + x="371.12784" + height="25.470205" + width="43.075089" + id="rect1951" + style="opacity:1;vector-effect:none;fill:#c8c4b7;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.72532076;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + <rect + style="opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.50269556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1957" + width="29.853903" + height="17.652548" + x="377.73843" + y="1.5574627" + ry="2.3293638" /> + <text + id="text1961" + y="15.759001" + x="381.56311" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.27015781px;line-height:15.51879597px;font-family:Arial;-inkscape-font-specification:Arial;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.07026172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="stroke-width:1.07026172px" + y="15.759001" + x="381.56311" + id="tspan1959" + sodipodi:role="line">PW</tspan></text> + </g> + <g + id="g1993" + transform="translate(-137.55149,39.909171)"> + <rect + style="opacity:1;vector-effect:none;fill:#c8c4b7;fill-opacity:1;fill-rule:nonzero;stroke:#492449;stroke-width:0.72532076;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + id="rect1963" + width="43.075089" + height="25.470205" + x="371.12784" + y="39.220215" + ry="3.3609526" /> + <circle + r="10.986364" + cy="-279.5603" + cx="-280.59134" + id="circle1971" + style="opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60186213;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + transform="matrix(-0.60970512,-0.79262833,-0.79262833,0.60970512,0,0)" /> + <rect + y="43.313293" + x="391.04501" + height="17.284018" + width="3.2407534" + id="rect1988" + style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.70555556;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" /> + </g> + <path + inkscape:connector-curvature="0" + id="rect1453" + d="m 35.59113,-29.626264 v 1.543061 h 16.750914 v -1.543061 z m 0,16.230011 v 1.54306 h 16.750914 v -1.54306 z" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.35277778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\CompoundSeparator.png" /> + <path + inkscape:connector-curvature="0" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#004646;stroke-width:0.35277778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" + d="m 35.567855,-67.652992 v 1.54306 h 16.751432 v -1.54306 z m 0,16.23001 v 1.54306 h 16.751432 v -1.54306 z" + id="rect1548" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:export-filename="C:\Users\Lucas Zhao\Desktop\Chemical-Simulator-GUI\Icons\Flash.png" /> + </g> +</svg> diff --git a/icons/images.png b/icons/images.png Binary files differnew file mode 100644 index 0000000..559fdbb --- /dev/null +++ b/icons/images.png diff --git a/icons/logo.png b/icons/logo.png Binary files differindex 541e99e..60d94d8 100644 --- a/icons/logo.png +++ b/icons/logo.png diff --git a/icons/new.png b/icons/new.png Binary files differnew file mode 100644 index 0000000..f4343a7 --- /dev/null +++ b/icons/new.png diff --git a/icons/sq.png b/icons/sq.png Binary files differnew file mode 100644 index 0000000..b963402 --- /dev/null +++ b/icons/sq.png diff --git a/icons/zoo.png b/icons/zoo.png Binary files differnew file mode 100644 index 0000000..1de4314 --- /dev/null +++ b/icons/zoo.png diff --git a/icons/zoom_in.png b/icons/zoom_in.png Binary files differnew file mode 100644 index 0000000..cdf3e3f --- /dev/null +++ b/icons/zoom_in.png diff --git a/icons/zoom_out.png b/icons/zoom_out.png Binary files differnew file mode 100644 index 0000000..b6dbcc9 --- /dev/null +++ b/icons/zoom_out.png diff --git a/icons/zoom_reset.png b/icons/zoom_reset.png Binary files differnew file mode 100644 index 0000000..ca9d36f --- /dev/null +++ b/icons/zoom_reset.png @@ -266,7 +266,7 @@ <property name="geometry"> <rect> <x>0</x> - <y>0</y> + <y>-246</y> <width>221</width> <height>956</height> </rect> @@ -734,11 +734,11 @@ <string notr="true">Text-align:left</string> </property> <property name="text"> - <string>Component Seperator</string> + <string>Compound Seperator</string> </property> <property name="icon"> <iconset> - <normaloff>icons/CompSep.png</normaloff>icons/CompSep.png</iconset> + <normaloff>icons/CompoundSeparator.png</normaloff>icons/CompoundSeparator.png</iconset> </property> <property name="iconSize"> <size> @@ -1037,7 +1037,7 @@ </property> <property name="icon"> <iconset> - <normaloff>icons/DistCol.png</normaloff>icons/DistCol.png</iconset> + <normaloff>icons/DistillationColumn.png</normaloff>icons/DistillationColumn.png</iconset> </property> <property name="iconSize"> <size> @@ -1081,7 +1081,7 @@ </property> <property name="icon"> <iconset> - <normaloff>icons/ShortCol.png</normaloff>icons/ShortCol.png</iconset> + <normaloff>icons/ShortcutColumn.png</normaloff>icons/ShortcutColumn.png</iconset> </property> <property name="iconSize"> <size> diff --git a/main2.ui b/main2.ui new file mode 100644 index 0000000..49b29e6 --- /dev/null +++ b/main2.ui @@ -0,0 +1,415 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>1068</width> + <height>829</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <property name="windowIcon"> + <iconset> + <normaloff>icons/logo.png</normaloff>icons/logo.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <widget class="QWidget" name="centralwidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QGraphicsView" name="graphicsView"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="font"> + <font> + <pointsize>12</pointsize> + </font> + </property> + <property name="mouseTracking"> + <bool>true</bool> + </property> + <property name="acceptDrops"> + <bool>true</bool> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="styleSheet"> + <string notr="true"/> + </property> + <property name="verticalScrollBarPolicy"> + <enum>Qt::ScrollBarAsNeeded</enum> + </property> + <property name="horizontalScrollBarPolicy"> + <enum>Qt::ScrollBarAsNeeded</enum> + </property> + <property name="backgroundBrush"> + <brush brushstyle="NoBrush"> + <color alpha="255"> + <red>170</red> + <green>170</green> + <blue>127</blue> + </color> + </brush> + </property> + <property name="foregroundBrush"> + <brush brushstyle="NoBrush"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </property> + <property name="sceneRect"> + <rectf> + <x>0.000000000000000</x> + <y>0.000000000000000</y> + <width>5000.000000000000000</width> + <height>5000.000000000000000</height> + </rectf> + </property> + <property name="dragMode"> + <enum>QGraphicsView::RubberBandDrag</enum> + </property> + <property name="transformationAnchor"> + <enum>QGraphicsView::AnchorUnderMouse</enum> + </property> + <property name="resizeAnchor"> + <enum>QGraphicsView::AnchorUnderMouse</enum> + </property> + <property name="viewportUpdateMode"> + <enum>QGraphicsView::FullViewportUpdate</enum> + </property> + <property name="optimizationFlags"> + <set>QGraphicsView::DontClipPainter</set> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QDockWidget" name="dockWidget_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>109</width> + <height>150</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>524287</width> + <height>150</height> + </size> + </property> + <property name="allowedAreas"> + <set>Qt::BottomDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Message Browser</string> + </property> + <widget class="QWidget" name="dockWidgetContents_2"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QTextEdit" name="textBrowser"/> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>1068</width> + <height>21</height> + </rect> + </property> + <widget class="QMenu" name="menuFile"> + <property name="title"> + <string>File</string> + </property> + <addaction name="actionNew_Flowsheet"/> + <addaction name="actionSave_2"/> + <addaction name="actionOpen"/> + </widget> + <widget class="QMenu" name="menuEdit"> + <property name="title"> + <string>Edit</string> + </property> + <addaction name="actionUndo"/> + <addaction name="actionRedo"/> + </widget> + <widget class="QMenu" name="menuView"> + <property name="title"> + <string>View</string> + </property> + <addaction name="actionZoomIn"/> + <addaction name="actionZoomOut"/> + <addaction name="actionResetZoom"/> + </widget> + <widget class="QMenu" name="menuSimulation"> + <property name="title"> + <string>Simulation</string> + </property> + <addaction name="actionEquation_oriented"/> + <addaction name="actionSequential_mode"/> + <addaction name="separator"/> + <addaction name="actionTerminate"/> + </widget> + <widget class="QMenu" name="menuComponds"> + <property name="title"> + <string>Compounds</string> + </property> + <addaction name="actionSelect_compounds"/> + </widget> + <widget class="QMenu" name="menuHelp"> + <property name="title"> + <string>Help</string> + </property> + <addaction name="actionHelp"/> + </widget> + <widget class="QMenu" name="menuUtility"> + <property name="title"> + <string>Utility</string> + </property> + <addaction name="actionBinary_Phase_Envelope"/> + </widget> + <addaction name="menuFile"/> + <addaction name="menuEdit"/> + <addaction name="menuView"/> + <addaction name="menuSimulation"/> + <addaction name="menuComponds"/> + <addaction name="menuHelp"/> + <addaction name="menuUtility"/> + </widget> + <widget class="QDockWidget" name="dockWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>270</width> + <height>548</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>270</width> + <height>524287</height> + </size> + </property> + <property name="windowTitle"> + <string>Component Selector</string> + </property> + <attribute name="dockWidgetArea"> + <number>2</number> + </attribute> + <widget class="QWidget" name="dockWidgetContents"> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QScrollArea" name="scrollArea"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>100</width> + <height>430</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>240</width> + <height>1000</height> + </size> + </property> + <property name="verticalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOn</enum> + </property> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>221</width> + <height>732</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout_5"> + <item> + <layout class="QGridLayout" name="gl"/> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + </widget> + <widget class="QToolBar" name="toolBar"> + <property name="windowTitle"> + <string>toolBar</string> + </property> + <property name="styleSheet"> + <string notr="true"/> + </property> + <attribute name="toolBarArea"> + <enum>TopToolBarArea</enum> + </attribute> + <attribute name="toolBarBreak"> + <bool>false</bool> + </attribute> + <addaction name="actionNew_Flowsheet"/> + <addaction name="separator"/> + <addaction name="actionZoomIn"/> + <addaction name="actionZoomOut"/> + <addaction name="actionResetZoom"/> + <addaction name="separator"/> + <addaction name="actionEquation_oriented"/> + <addaction name="actionSequential_mode"/> + <addaction name="separator"/> + <addaction name="actionSelect_compounds"/> + </widget> + <action name="actionZoomIn"> + <property name="icon"> + <iconset> + <normaloff>icons/zoomIn.png</normaloff>icons/zoomIn.png</iconset> + </property> + <property name="text"> + <string>ZoomIn</string> + </property> + </action> + <action name="actionZoomOut"> + <property name="icon"> + <iconset> + <normaloff>icons/zoomOut.png</normaloff>icons/zoomOut.png</iconset> + </property> + <property name="text"> + <string>ZoomOut</string> + </property> + </action> + <action name="actionResetZoom"> + <property name="icon"> + <iconset> + <normaloff>icons/zoomReset.png</normaloff>icons/zoomReset.png</iconset> + </property> + <property name="text"> + <string>ResetZoom</string> + </property> + </action> + <action name="actionEquation_oriented"> + <property name="icon"> + <iconset> + <normaloff>icons/Equation.png</normaloff>icons/Equation.png</iconset> + </property> + <property name="text"> + <string>Equation oriented</string> + </property> + </action> + <action name="actionSequential_mode"> + <property name="icon"> + <iconset> + <normaloff>icons/Sequential.png</normaloff>icons/Sequential.png</iconset> + </property> + <property name="text"> + <string>Sequential mode</string> + </property> + </action> + <action name="actionSelect_compounds"> + <property name="icon"> + <iconset> + <normaloff>icons/compoundSelector.png</normaloff>icons/compoundSelector.png</iconset> + </property> + <property name="text"> + <string>Select Compounds</string> + </property> + </action> + <action name="actionNew_Flowsheet"> + <property name="icon"> + <iconset> + <normaloff>icons/new.svg</normaloff>icons/new.svg</iconset> + </property> + <property name="text"> + <string>New</string> + </property> + </action> + <action name="actionHelp"> + <property name="text"> + <string>Help</string> + </property> + </action> + <action name="actionSave"> + <property name="text"> + <string>save</string> + </property> + </action> + <action name="actionSave_2"> + <property name="text"> + <string>Save</string> + </property> + </action> + <action name="actionOpen"> + <property name="text"> + <string>Open</string> + </property> + </action> + <action name="actionBinary_Phase_Envelope"> + <property name="text"> + <string>Binary Phase Envelope</string> + </property> + </action> + <action name="actionTerminate"> + <property name="text"> + <string>Terminate</string> + </property> + </action> + <action name="actionUndo"> + <property name="text"> + <string>Undo</string> + </property> + </action> + <action name="actionRedo"> + <property name="text"> + <string>Redo</string> + </property> + </action> + </widget> + <resources/> + <connections/> +</ui> diff --git a/main3.ui b/main3.ui new file mode 100644 index 0000000..9d30a8e --- /dev/null +++ b/main3.ui @@ -0,0 +1,2112 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>1068</width> + <height>803</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <property name="windowIcon"> + <iconset> + <normaloff>icons/logo.png</normaloff>icons/logo.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>24</width> + <height>24</height> + </size> + </property> + <widget class="QWidget" name="centralwidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QGraphicsView" name="graphicsView"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="font"> + <font> + <pointsize>12</pointsize> + </font> + </property> + <property name="mouseTracking"> + <bool>true</bool> + </property> + <property name="acceptDrops"> + <bool>true</bool> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="styleSheet"> + <string notr="true"/> + </property> + <property name="verticalScrollBarPolicy"> + <enum>Qt::ScrollBarAsNeeded</enum> + </property> + <property name="horizontalScrollBarPolicy"> + <enum>Qt::ScrollBarAsNeeded</enum> + </property> + <property name="backgroundBrush"> + <brush brushstyle="NoBrush"> + <color alpha="255"> + <red>170</red> + <green>170</green> + <blue>127</blue> + </color> + </brush> + </property> + <property name="foregroundBrush"> + <brush brushstyle="NoBrush"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </property> + <property name="sceneRect"> + <rectf> + <x>0.000000000000000</x> + <y>0.000000000000000</y> + <width>5000.000000000000000</width> + <height>5000.000000000000000</height> + </rectf> + </property> + <property name="dragMode"> + <enum>QGraphicsView::RubberBandDrag</enum> + </property> + <property name="transformationAnchor"> + <enum>QGraphicsView::AnchorUnderMouse</enum> + </property> + <property name="resizeAnchor"> + <enum>QGraphicsView::AnchorUnderMouse</enum> + </property> + <property name="viewportUpdateMode"> + <enum>QGraphicsView::FullViewportUpdate</enum> + </property> + <property name="optimizationFlags"> + <set>QGraphicsView::DontClipPainter</set> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QDockWidget" name="dockWidget_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>109</width> + <height>150</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>524287</width> + <height>150</height> + </size> + </property> + <property name="allowedAreas"> + <set>Qt::BottomDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Message Browser</string> + </property> + <widget class="QWidget" name="dockWidgetContents_2"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QTextEdit" name="textBrowser"/> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>1068</width> + <height>21</height> + </rect> + </property> + <widget class="QMenu" name="menuFile"> + <property name="title"> + <string>File</string> + </property> + <addaction name="actionNew"/> + <addaction name="actionSave_2"/> + <addaction name="actionOpen"/> + </widget> + <widget class="QMenu" name="menuEdit"> + <property name="title"> + <string>Edit</string> + </property> + <addaction name="actionUndo"/> + <addaction name="actionRedo"/> + </widget> + <widget class="QMenu" name="menuView"> + <property name="title"> + <string>View</string> + </property> + <addaction name="actionZoomIn"/> + <addaction name="actionZoomOut"/> + <addaction name="actionResetZoom"/> + </widget> + <widget class="QMenu" name="menuSimulation"> + <property name="title"> + <string>Simulation</string> + </property> + <addaction name="actionEquation_oriented"/> + <addaction name="actionSequential_mode"/> + <addaction name="separator"/> + <addaction name="actionTerminate"/> + </widget> + <widget class="QMenu" name="menuComponds"> + <property name="title"> + <string>Compounds</string> + </property> + <addaction name="actionSelect_compounds"/> + </widget> + <widget class="QMenu" name="menuHelp"> + <property name="title"> + <string>Help</string> + </property> + <addaction name="actionHelp"/> + </widget> + <widget class="QMenu" name="menuUtility"> + <property name="title"> + <string>Utility</string> + </property> + <addaction name="actionBinary_Phase_Envelope"/> + </widget> + <addaction name="menuFile"/> + <addaction name="menuEdit"/> + <addaction name="menuView"/> + <addaction name="menuSimulation"/> + <addaction name="menuComponds"/> + <addaction name="menuHelp"/> + <addaction name="menuUtility"/> + </widget> + <widget class="QDockWidget" name="dockWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>270</width> + <height>548</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>270</width> + <height>524287</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="windowTitle"> + <string>Component Selector</string> + </property> + <attribute name="dockWidgetArea"> + <number>2</number> + </attribute> + <widget class="QWidget" name="dockWidgetContents"> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QScrollArea" name="scrollArea"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>100</width> + <height>430</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>240</width> + <height>1000</height> + </size> + </property> + <property name="verticalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOn</enum> + </property> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents"> + <property name="geometry"> + <rect> + <x>0</x> + <y>-251</y> + <width>221</width> + <height>956</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout_5"> + <item> + <widget class="QLabel" name="label_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>16777215</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei UI</family> + <pointsize>14</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="layoutDirection"> + <enum>Qt::LeftToRight</enum> + </property> + <property name="styleSheet"> + <string notr="true">color:rgb(73,36,73,255)</string> + </property> + <property name="text"> + <string>Streams</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <italic>false</italic> + <bold>true</bold> + </font> + </property> + <property name="acceptDrops"> + <bool>true</bool> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left;</string> + </property> + <property name="text"> + <string> MaterialStream</string> + </property> + <property name="icon"> + <iconset> + <normaloff>icons/MaterialStream.png</normaloff>icons/MaterialStream.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_3"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>16777215</height> + </size> + </property> + <property name="palette"> + <palette> + <active> + <colorrole role="WindowText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Button"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>46</green> + <blue>46</blue> + </color> + </brush> + </colorrole> + <colorrole role="Light"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>69</green> + <blue>69</blue> + </color> + </brush> + </colorrole> + <colorrole role="Midlight"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>57</green> + <blue>57</blue> + </color> + </brush> + </colorrole> + <colorrole role="Dark"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>23</green> + <blue>23</blue> + </color> + </brush> + </colorrole> + <colorrole role="Mid"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>30</green> + <blue>30</blue> + </color> + </brush> + </colorrole> + <colorrole role="Text"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="BrightText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + </brush> + </colorrole> + <colorrole role="ButtonText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Base"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + <colorrole role="Window"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>46</green> + <blue>46</blue> + </color> + </brush> + </colorrole> + <colorrole role="Shadow"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + <colorrole role="AlternateBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>23</green> + <blue>23</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>220</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + </active> + <inactive> + <colorrole role="WindowText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Button"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>46</green> + <blue>46</blue> + </color> + </brush> + </colorrole> + <colorrole role="Light"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>69</green> + <blue>69</blue> + </color> + </brush> + </colorrole> + <colorrole role="Midlight"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>57</green> + <blue>57</blue> + </color> + </brush> + </colorrole> + <colorrole role="Dark"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>23</green> + <blue>23</blue> + </color> + </brush> + </colorrole> + <colorrole role="Mid"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>30</green> + <blue>30</blue> + </color> + </brush> + </colorrole> + <colorrole role="Text"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="BrightText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + </brush> + </colorrole> + <colorrole role="ButtonText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Base"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + <colorrole role="Window"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>46</green> + <blue>46</blue> + </color> + </brush> + </colorrole> + <colorrole role="Shadow"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + <colorrole role="AlternateBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>23</green> + <blue>23</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>220</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + </inactive> + <disabled> + <colorrole role="WindowText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Button"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>46</green> + <blue>46</blue> + </color> + </brush> + </colorrole> + <colorrole role="Light"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>69</green> + <blue>69</blue> + </color> + </brush> + </colorrole> + <colorrole role="Midlight"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>57</green> + <blue>57</blue> + </color> + </brush> + </colorrole> + <colorrole role="Dark"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>23</green> + <blue>23</blue> + </color> + </brush> + </colorrole> + <colorrole role="Mid"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>30</green> + <blue>30</blue> + </color> + </brush> + </colorrole> + <colorrole role="Text"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="BrightText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + </brush> + </colorrole> + <colorrole role="ButtonText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Base"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>46</green> + <blue>46</blue> + </color> + </brush> + </colorrole> + <colorrole role="Window"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>46</green> + <blue>46</blue> + </color> + </brush> + </colorrole> + <colorrole role="Shadow"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + <colorrole role="AlternateBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>46</green> + <blue>46</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>220</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + </disabled> + </palette> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei UI</family> + <pointsize>14</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="layoutDirection"> + <enum>Qt::LeftToRight</enum> + </property> + <property name="styleSheet"> + <string notr="true">color:rgb(73,36,73,255)</string> + </property> + <property name="text"> + <string>Mixer/Splitter</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_7"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Mixer</string> + </property> + <property name="icon"> + <iconset> + <normaloff>icons/Mixer.png</normaloff>icons/Mixer.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_10"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Splitter</string> + </property> + <property name="icon"> + <iconset> + <normaloff>icons/Splitter.png</normaloff>icons/Splitter.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>16777215</height> + </size> + </property> + <property name="palette"> + <palette> + <active> + <colorrole role="WindowText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Button"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>70</green> + <blue>70</blue> + </color> + </brush> + </colorrole> + <colorrole role="Light"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>105</green> + <blue>105</blue> + </color> + </brush> + </colorrole> + <colorrole role="Midlight"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>87</green> + <blue>87</blue> + </color> + </brush> + </colorrole> + <colorrole role="Dark"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>35</green> + <blue>35</blue> + </color> + </brush> + </colorrole> + <colorrole role="Mid"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>46</green> + <blue>46</blue> + </color> + </brush> + </colorrole> + <colorrole role="Text"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="BrightText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + </brush> + </colorrole> + <colorrole role="ButtonText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Base"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + <colorrole role="Window"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>70</green> + <blue>70</blue> + </color> + </brush> + </colorrole> + <colorrole role="Shadow"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + <colorrole role="AlternateBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>35</green> + <blue>35</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>220</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + </active> + <inactive> + <colorrole role="WindowText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Button"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>70</green> + <blue>70</blue> + </color> + </brush> + </colorrole> + <colorrole role="Light"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>105</green> + <blue>105</blue> + </color> + </brush> + </colorrole> + <colorrole role="Midlight"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>87</green> + <blue>87</blue> + </color> + </brush> + </colorrole> + <colorrole role="Dark"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>35</green> + <blue>35</blue> + </color> + </brush> + </colorrole> + <colorrole role="Mid"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>46</green> + <blue>46</blue> + </color> + </brush> + </colorrole> + <colorrole role="Text"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="BrightText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + </brush> + </colorrole> + <colorrole role="ButtonText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Base"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + <colorrole role="Window"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>70</green> + <blue>70</blue> + </color> + </brush> + </colorrole> + <colorrole role="Shadow"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + <colorrole role="AlternateBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>35</green> + <blue>35</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>220</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + </inactive> + <disabled> + <colorrole role="WindowText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Button"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>70</green> + <blue>70</blue> + </color> + </brush> + </colorrole> + <colorrole role="Light"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>105</green> + <blue>105</blue> + </color> + </brush> + </colorrole> + <colorrole role="Midlight"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>87</green> + <blue>87</blue> + </color> + </brush> + </colorrole> + <colorrole role="Dark"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>35</green> + <blue>35</blue> + </color> + </brush> + </colorrole> + <colorrole role="Mid"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>46</green> + <blue>46</blue> + </color> + </brush> + </colorrole> + <colorrole role="Text"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="BrightText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>255</blue> + </color> + </brush> + </colorrole> + <colorrole role="ButtonText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>73</red> + <green>36</green> + <blue>73</blue> + </color> + </brush> + </colorrole> + <colorrole role="Base"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>70</green> + <blue>70</blue> + </color> + </brush> + </colorrole> + <colorrole role="Window"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>70</green> + <blue>70</blue> + </color> + </brush> + </colorrole> + <colorrole role="Shadow"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + <colorrole role="AlternateBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>70</green> + <blue>70</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipBase"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>255</red> + <green>255</green> + <blue>220</blue> + </color> + </brush> + </colorrole> + <colorrole role="ToolTipText"> + <brush brushstyle="SolidPattern"> + <color alpha="255"> + <red>0</red> + <green>0</green> + <blue>0</blue> + </color> + </brush> + </colorrole> + </disabled> + </palette> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei UI</family> + <pointsize>14</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="layoutDirection"> + <enum>Qt::LeftToRight</enum> + </property> + <property name="styleSheet"> + <string notr="true">color:rgb(73,36,73,255)</string> + </property> + <property name="text"> + <string>Exchangers</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_11"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Heater</string> + </property> + <property name="icon"> + <iconset> + <normaloff>icons/Heater.png</normaloff>icons/Heater.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="autoDefault"> + <bool>false</bool> + </property> + <property name="default"> + <bool>false</bool> + </property> + <property name="flat"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_12"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Cooler</string> + </property> + <property name="icon"> + <iconset> + <normaloff>icons/Cooler.png</normaloff>icons/Cooler.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="flat"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_4"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>16777215</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei UI</family> + <pointsize>14</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="layoutDirection"> + <enum>Qt::LeftToRight</enum> + </property> + <property name="styleSheet"> + <string notr="true">color:rgb(73,36,73,255)</string> + </property> + <property name="text"> + <string>Separator</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_9"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Flash</string> + </property> + <property name="icon"> + <iconset> + <normaloff>icons/Flash.png</normaloff>icons/Flash.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_13"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Compound Seperator</string> + </property> + <property name="icon"> + <iconset> + <normaloff>icons/CompoundSeparator.png</normaloff>icons/CompoundSeparator.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_5"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>16777215</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei UI</family> + <pointsize>14</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">color:rgb(73,36,73,255)</string> + </property> + <property name="text"> + <string>Pressure Changers</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_25"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Valve</string> + </property> + <property name="icon"> + <iconset> + <normaloff>icons/Valve.png</normaloff>icons/Valve.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_14"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Centrifugal Pump</string> + </property> + <property name="icon"> + <iconset> + <normaloff>icons/Pump.png</normaloff>icons/Pump.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_15"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Adiabatic Compressor</string> + </property> + <property name="icon"> + <iconset> + <normaloff>icons/AdiabaticCompressor.png</normaloff>icons/AdiabaticCompressor.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_16"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="autoFillBackground"> + <bool>false</bool> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Adiabatic Expander</string> + </property> + <property name="icon"> + <iconset> + <normaloff>icons/AdiabaticExpander.png</normaloff>icons/AdiabaticExpander.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_6"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>30</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>16777215</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei UI</family> + <pointsize>14</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">color:rgb(73,36,73,255)</string> + </property> + <property name="text"> + <string>Columns</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_26"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>50</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Distillation Column</string> + </property> + <property name="icon"> + <iconset> + <normaloff>Icons/Column.png</normaloff>Icons/Column.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>50</width> + <height>50</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pushButton_18"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>16777215</height> + </size> + </property> + <property name="font"> + <font> + <family>Microsoft JhengHei</family> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="styleSheet"> + <string notr="true">Text-align:left</string> + </property> + <property name="text"> + <string> Shortcut Column</string> + </property> + <property name="icon"> + <iconset> + <normaloff>Icons/Column.png</normaloff>Icons/Column.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>50</width> + <height>50</height> + </size> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + </widget> + <widget class="QToolBar" name="toolBar"> + <property name="windowTitle"> + <string>toolBar</string> + </property> + <property name="styleSheet"> + <string notr="true"/> + </property> + <attribute name="toolBarArea"> + <enum>TopToolBarArea</enum> + </attribute> + <attribute name="toolBarBreak"> + <bool>false</bool> + </attribute> + <addaction name="actionNew"/> + <addaction name="separator"/> + <addaction name="actionZoomIn"/> + <addaction name="actionZoomOut"/> + <addaction name="actionResetZoom"/> + <addaction name="separator"/> + <addaction name="actionEquation_oriented"/> + <addaction name="actionSequential_mode"/> + <addaction name="separator"/> + <addaction name="actionSelect_compounds"/> + </widget> + <action name="actionZoomIn"> + <property name="icon"> + <iconset> + <normaloff>Icons/zoom_in.png</normaloff>Icons/zoom_in.png</iconset> + </property> + <property name="text"> + <string>ZoomIn</string> + </property> + </action> + <action name="actionZoomOut"> + <property name="icon"> + <iconset> + <normaloff>Icons/zoom_out.png</normaloff>Icons/zoom_out.png</iconset> + </property> + <property name="text"> + <string>ZoomOut</string> + </property> + </action> + <action name="actionResetZoom"> + <property name="icon"> + <iconset> + <normaloff>Icons/zoom_reset.png</normaloff>Icons/zoom_reset.png</iconset> + </property> + <property name="text"> + <string>ResetZoom</string> + </property> + </action> + <action name="actionEquation_oriented"> + <property name="icon"> + <iconset> + <normaloff>Icons/eq.png</normaloff>Icons/eq.png</iconset> + </property> + <property name="text"> + <string>Equation oriented</string> + </property> + </action> + <action name="actionSequential_mode"> + <property name="icon"> + <iconset> + <normaloff>Icons/sq.png</normaloff>Icons/sq.png</iconset> + </property> + <property name="text"> + <string>Sequential mode</string> + </property> + </action> + <action name="actionSelect_compounds"> + <property name="icon"> + <iconset> + <normaloff>Icons/compound.png</normaloff>Icons/compound.png</iconset> + </property> + <property name="text"> + <string>Select Compounds</string> + </property> + </action> + <action name="actionNew"> + <property name="icon"> + <iconset> + <normaloff>Icons/new.png</normaloff>Icons/new.png</iconset> + </property> + <property name="text"> + <string>New</string> + </property> + </action> + <action name="actionHelp"> + <property name="text"> + <string>Help</string> + </property> + </action> + <action name="actionSave"> + <property name="text"> + <string>save</string> + </property> + </action> + <action name="actionSave_2"> + <property name="text"> + <string>Save</string> + </property> + </action> + <action name="actionOpen"> + <property name="text"> + <string>Open</string> + </property> + </action> + <action name="actionBinary_Phase_Envelope"> + <property name="text"> + <string>Binary Phase Envelope</string> + </property> + </action> + <action name="actionTerminate"> + <property name="text"> + <string>Terminate</string> + </property> + </action> + <action name="actionUndo"> + <property name="text"> + <string>Undo</string> + </property> + </action> + <action name="actionRedo"> + <property name="text"> + <string>Redo</string> + </property> + </action> + </widget> + <resources/> + <connections/> +</ui> @@ -14,12 +14,12 @@ from PyQt5.QtGui import QBrush ,QTransform ,QMouseEvent import PyQt5.QtGui as QtGui import PyQt5.QtCore as QtCore import PyQt5.QtWidgets as QtWidgets -from component_selector import * +from ComponentSelector import * from Bin_Phase_env import * from UnitOperations import * from Streams import * import datetime -from container import * +from Container import * from Graphics import * import pickle import threading @@ -27,7 +27,7 @@ import os import ctypes import sys -ui,_ = loadUiType('main.ui') +ui,_ = loadUiType('main3.ui') ''' MainApp class is responsible for all the main App Ui operations @@ -50,11 +50,11 @@ class MainApp(QMainWindow,ui): self.thrd = None # Creating instances of classes for the main app - self.Container = Container(self.textBrowser) - self.comp = componentSelector(self) + self.container = Container.Container(self.textBrowser) + self.comp = ComponentSelector(self) # Setting up interactive canvas - self.scene = self.Container.graphics.getScene() + self.scene = self.container.graphics.getScene() ### self.graphicsView.setScene(self.scene) self.graphicsView.setMouseTracking(True) self.graphicsView.keyPressEvent=self.deleteCall @@ -64,8 +64,6 @@ class MainApp(QMainWindow,ui): self.setCorner(Qt.BottomLeftCorner, Qt.LeftDockWidgetArea) self.addDockWidget(Qt.BottomDockWidgetArea,self.dockWidget_2) - # Setting up undo stack - # self.undoStack = QUndoStack(self) # Calling initialisation functions self.buttonHandler() self.menuBar() @@ -78,18 +76,18 @@ class MainApp(QMainWindow,ui): def menuBar(self): self.actionSelect_compounds.triggered.connect(self.selectCompounds) self.actionSelect_compounds.setShortcut('Ctrl+C') - self.actionZoomIn.triggered.connect(self.zoomin) + self.actionZoomIn.triggered.connect(self.zoomIn) self.actionZoomIn.setShortcut('Ctrl++') - self.actionNew_Flowsheet.triggered.connect(self.new) - self.actionNew_Flowsheet.setShortcut('Ctrl+N') - self.actionZoomOut.triggered.connect(self.zoomout) + self.actionNew.triggered.connect(self.new) + self.actionNew.setShortcut('Ctrl+N') + self.actionZoomOut.triggered.connect(self.zoomOut) self.actionZoomOut.setShortcut('Ctrl+-') self.actionResetZoom.triggered.connect(self.zoomReset) self.actionResetZoom.setShortcut('Ctrl+R') self.actionHelp.triggered.connect(self.help) self.actionHelp.setShortcut('Ctrl+H') self.actionSequential_mode.triggered.connect(partial(self.simulate,'SM')) - self.actionSequential_mode.setShortcut('Ctrl+M') + self.actionSequential_mode.setShortcut('Ctrl+M') self.actionEquation_oriented.triggered.connect(partial(self.simulate,'EQN')) self.actionEquation_oriented.setShortcut('Ctrl+E') self.actionUndo.triggered.connect(self.undo) @@ -113,14 +111,14 @@ class MainApp(QMainWindow,ui): self.pushButton.clicked.connect(partial(self.component,'MaterialStream')) self.pushButton_7.clicked.connect(partial(self.component,'Mixer')) self.pushButton_14.clicked.connect(partial(self.component,'Pump')) - self.pushButton_26.clicked.connect(partial(self.component,'DistCol')) - self.pushButton_18.clicked.connect(partial(self.component,'ShortCol')) + self.pushButton_26.clicked.connect(partial(self.component,'DistillationColumn')) + self.pushButton_18.clicked.connect(partial(self.component,'ShortcutColumn')) self.pushButton_11.clicked.connect(partial(self.component,'Heater')) self.pushButton_10.clicked.connect(partial(self.component,'Splitter')) self.pushButton_9.clicked.connect(partial(self.component,'Flash')) self.pushButton_25.clicked.connect(partial(self.component,'Valve')) self.pushButton_12.clicked.connect(partial(self.component,'Cooler')) - self.pushButton_13.clicked.connect(partial(self.component,'CompSep')) + self.pushButton_13.clicked.connect(partial(self.component,'CompoundSeparator')) self.pushButton_15.clicked.connect(partial(self.component,'AdiabaticCompressor')) self.pushButton_16.clicked.connect(partial(self.component,'AdiabaticExpander')) @@ -166,16 +164,16 @@ class MainApp(QMainWindow,ui): selected by the user. ''' def simulate(self,mode): - self.thrd = threading.Thread(target=self.Container.simulate, args=(mode,)) + self.thrd = threading.Thread(target=self.container.simulate, args=(mode,)) self.thrd.start() def terminate(self): - os.chdir(self.Container.flowsheet.root_dir) + os.chdir(self.container.flowsheet.root_dir) if self.thrd: thread_id = self.thrd.ident print('____________________Going to terminate simulation thread with Thread ID:',thread_id,'____________________') print('____________________Going to terminate the new process created for omc____________________') - self.Container.flowsheet.process.terminate() + self.container.flowsheet.process.terminate() print('____________________New process created for omc is terminated.____________________') res = ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, ctypes.py_object(SystemExit)) self.textBrowser.append("<span style=\"color:red\">["+str(self.currentTime())+"]<b> Terminating the simulation </b></span>") @@ -198,14 +196,14 @@ class MainApp(QMainWindow,ui): ''' ZoomOut the canvas ''' - def zoomout(self): + def zoomOut(self): self.graphicsView.scale(1.0/1.15,1.0/1.15) self.zoomcount -=1 ''' ZoomIn the canvas ''' - def zoomin(self): + def zoomIn(self): self.graphicsView.scale(1.15,1.15) self.zoomcount +=1 @@ -217,10 +215,10 @@ class MainApp(QMainWindow,ui): if(self.comp.isCompSelected()): self.type = unitOpType if(self.type=="MaterialStream"): - self.obj = MaterialStream(CompNames=compound_selected) + self.obj = MaterialStream(CompNames=compound_selected) else: self.obj = eval(self.type)() - self.Container.addUnitOp(self.obj) + self.container.addUnitOp(self.obj, self.graphicsView) else: QMessageBox.about(self, 'Important', "Please Select Compounds first") @@ -233,21 +231,7 @@ class MainApp(QMainWindow,ui): self.undo_redo_helper() self.comp.tableWidget.setRowCount(0) self.textBrowser.append("<span>[" + str(self.currentTime()) + "] <b>New</b> flowsheet is created ... </span>") - - ''' - It helps by clearing screen and loading the objects by undo redo methods - ''' - def undo_redo_helper(self): - for i in self.Container.unitOp: - type(i).counter = 1 - del self.Container - lst.clear() - self.Container = Container(self.textBrowser) - compound_selected.clear() - self.scene = self.Container.graphics.getScene() - self.graphicsView.setScene(self.scene) - self.graphicsView.setMouseTracking(True) - self.graphicsView.keyPressEvent=self.deleteCall + dockWidgetLst.clear() ''' Handels all the operations which will happen when delete button is pressed. @@ -258,11 +242,31 @@ class MainApp(QMainWindow,ui): l=self.scene.selectedItems() for i in l: eval(i.type).counter -= 1 - self.Container.delete(l) + self.container.delete(l) except Exception as e: print(e) ''' + It helps by clearing screen and loading the objects by undo redo methods + ''' + def undo_redo_helper(self): + for i in self.container.unitOp: + type(i).counter = 1 + del self.container + for i in dockWidgetLst: + i.hide() + del i + lst.clear() + self.container = Container.Container(self.textBrowser) + compound_selected.clear() + self.scene = self.container.graphics.getScene() + self.graphicsView.setScene(self.scene) + self.graphicsView.setMouseTracking(True) + self.graphicsView.keyPressEvent=self.deleteCall + + + + ''' Function for undo ''' def undo(self): @@ -273,7 +277,7 @@ class MainApp(QMainWindow,ui): messages = self.textBrowser.toPlainText() try: self.undo_redo_helper() - self.Container.graphics.loadCanvas(undo_data) + self.container.graphics.loadCanvas(undo_data) self.textBrowser.setText(messages) except Exception as e: print(e) @@ -292,7 +296,7 @@ class MainApp(QMainWindow,ui): PUSH('Undo', redo_data) messages = self.textBrowser.toPlainText() self.undo_redo_helper() - self.Container.graphics.loadCanvas(redo_data) + self.container.graphics.loadCanvas(redo_data) self.textBrowser.setText(messages) else: messages = self.textBrowser.toPlainText() @@ -304,7 +308,7 @@ class MainApp(QMainWindow,ui): ''' def save(self): data = [] - for i in self.Container.unitOp: + for i in self.container.unitOp: data.append(i) print(i.pos) data.append(compound_selected) @@ -338,7 +342,7 @@ class MainApp(QMainWindow,ui): with open(fileName, 'rb') as f: obj = pickle.load(f) - self.Container.graphics.loadCanvas(obj) + self.container.graphics.loadCanvas(obj) except Exception as e: pass diff --git a/umlet.uxf b/umlet.uxf new file mode 100644 index 0000000..ed90e4f --- /dev/null +++ b/umlet.uxf @@ -0,0 +1,1448 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<diagram program="umlet" version="14.3.0"> + <zoom_level>11</zoom_level> + <element> + <id>UMLClass</id> + <coordinates> + <x>341</x> + <y>759</y> + <w>286</w> + <h>462</h> + </coordinates> + <panel_attributes>MainApp +-- ++ zoomcount: int = 0 ++ thrd: Thread = None ++ container: Container() ++ comp: ComponentSelector() ++ scene: Graphics.QGraphicsScene() +-- ++ menuBar() ++ buttonHandler() ++ help() ++ BinPhaseEnv() ++ selectCompounds() ++ currentTime() ++ simulate(mode) ++ terminate() ++ zoomReset() ++ zoomOut() ++ zoomIn() ++ component() ++ new() ++ deleteCall() ++ undo_redo_helper() ++ undo() ++ redo() ++ save() ++ open() + +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>363</x> + <y>484</y> + <w>242</w> + <h>187</h> + </coordinates> + <panel_attributes>QMainWindow +-- +graphicsView.keyPressEvent +textBrowser: UC1 +-- +setUpUi() +graphicsView.setScene() +graphicsView.setMouseTracking() +setDockNestingEnabled() +setCorner() +addDockWidget()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>473</x> + <y>660</y> + <w>33</w> + <h>121</h> + </coordinates> + <panel_attributes>lt=<<<-</panel_attributes> + <additional_attributes>10.0;10.0;10.0;90.0</additional_attributes> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>385</x> + <y>330</y> + <w>187</w> + <h>66</h> + </coordinates> + <panel_attributes>UC1 (textBrowserClass) +-- +setText()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>462</x> + <y>385</y> + <w>33</w> + <h>121</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;10.0;90.0</additional_attributes> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>715</x> + <y>352</y> + <w>352</w> + <h>363</h> + </coordinates> + <panel_attributes>ComponentSelector +-- ++ Dict1: dictionary = dict() ++ instance: list = [ChemsepDatabase()] ++ lines: list = [] ++ model: QStringListModel() ++ completer: QCompleter() +-- ++ final_list(*list_name) ++ isCompSelected() ++ get_object(component) ++ get_original_name(component, removing_attrib) ++ compoundSelection() +_+ setCompounds(compounds)_ ++ addToTable(a) ++ addCompToList(comp) ++ removeItems() ++ Show_Error() ++ cancel() ++ getComp() ++ final_mo() + + + + + +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>737</x> + <y>748</y> + <w>253</w> + <h>462</h> + </coordinates> + <panel_attributes>Container +-- ++ unitOp: list = [] ++ termoPackage = None ++ compounds = None ++ conn: dictionary = defaultdict(list) ++ op: dictionary = defaultdict(list) ++ ip: dictionary = defaultdict(list) ++ msg ++ opl: list = [] ++ result: list = [] ++ graphics: Graphics(unitOp) ++ scene : graphics.getScene() +-- ++ currentTime() ++ addUnitOp(obj, graphicsView) ++ delete(l) ++ fetchObject(name) ++ addCompounds(comp) ++ add_thermoPackage(thermo) ++ msgBrowser() ++ simulate(mode) ++ flatlist(lst) ++ PUSH(fileName, data) ++ CLEAN_FILE(fileName) ++ POP(fileName) ++ get_last_list(fileName) +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1078</x> + <y>836</y> + <w>374</w> + <h>187</h> + </coordinates> + <panel_attributes>Graphics +-- ++ scene: QGraphicsScene() ++ pos: QPointF = None ++ unitOp: list = unitOp +-- ++ getScene() ++ getComponentSelector() ++ createNodeItem(unitOpr, container, graphicsView) ++ boundingRect() ++ loadCanvas(obj) +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1144</x> + <y>528</y> + <w>231</w> + <h>165</h> + </coordinates> + <panel_attributes>QDialog +-- +lineEdit: UC2 +compoundSelectButton: UC3 +pushButton: UC4 +pushButton_2: UC4 +pshButton_3: UC4 +-- +setupUi() +show()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1144</x> + <y>220</y> + <w>231</w> + <h>55</h> + </coordinates> + <panel_attributes>QStringListModel +-- +setStringList()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1430</x> + <y>517</y> + <w>231</w> + <h>77</h> + </coordinates> + <panel_attributes>UC3 (selectButtonClass) +-- +clicked.connect() +setAutoDefault() +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1144</x> + <y>297</y> + <w>231</w> + <h>77</h> + </coordinates> + <panel_attributes>QCompleter +-- +setCaseSensitivity() +setModel()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1144</x> + <y>407</y> + <w>231</w> + <h>55</h> + </coordinates> + <panel_attributes>UC2 (lineEditClass) +-- +setCompleter()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1430</x> + <y>616</y> + <w>231</w> + <h>55</h> + </coordinates> + <panel_attributes>UC4 (pushButtonClass) +-- +clicked.connect()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1045</x> + <y>1089</y> + <w>440</w> + <h>583</h> + </coordinates> + <panel_attributes>NodeItem +-- ++ obj: UnitOperation = unitOpr ++ container: Container = container ++ graphicsView: QGraphicsView = graphicsView ++ name: string = obj.name ++ type: string = obj.type ++ default_tooltip: string ++ default_tooltip_dict: dictionary ++ nin: int = obj.no_of_inputs ++ nop: int = obj.no_of_outputs ++ text: string = user_input ++ ok: boolean = user_input ++ dockWidget: DockWidget() or DockWidgetMaterialStream() + or DockWidgetMixer() or DockWidgetSplitter() + or DockWidgetFlash() or DockWidgetCompoundSeparator() + or DockWidgetDistillationColumn() + or DockWidgetShortcutColumn() ++ mainwindow = findMainWindow() ++ pic: QPixmap() ++ rect: QRect() ++ text: QGraphicsTextItem() ++ f: QFont() ++ brush: QBrush() ++ pen: QPen() ++ selPen: QPen() ++ Input:list = [NodeSocket(type)] ++ Output:list = [NodeSocket(type)] +-- +shape() +boundingRect() +paint() +mouseMoveEvent(event) +mouseDoubleClickEvent(event) ++ initializeSockets(type) +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1012</x> + <y>1705</y> + <w>187</w> + <h>77</h> + </coordinates> + <panel_attributes>QtWidgets.QGraphicsItem +-- +setTooltip(default_tooltip) +setFlag + +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1331</x> + <y>1782</y> + <w>231</w> + <h>55</h> + </coordinates> + <panel_attributes>QtWidgets.QInputDialog +-- +getText() + +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1254</x> + <y>1870</y> + <w>231</w> + <h>55</h> + </coordinates> + <panel_attributes>QtGui.QFont +-- +setPointSize() + +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1012</x> + <y>1826</y> + <w>231</w> + <h>121</h> + </coordinates> + <panel_attributes>QtWidgets.QGraphicTextItem +-- +setFont() +setDefaultTextColor() +setParentItem() +setPos() +setPlainText() + +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>759</x> + <y>1265</y> + <w>176</w> + <h>66</h> + </coordinates> + <panel_attributes>QtGui.QBrush +-- +setStyle() +setColor() + +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>462</x> + <y>1265</y> + <w>231</w> + <h>88</h> + </coordinates> + <panel_attributes>QtGui.QPen +-- +setStyle() +setColor() +setWidth() + +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>737</x> + <y>1419</y> + <w>231</w> + <h>363</h> + </coordinates> + <panel_attributes>NodeSocket +-- ++ rect: QRect = rect ++ type: string = socketType ++ parent: NodeItem = parent ++ newLine: NodeLine = None ++ otherLine: NodeLine = None ++ brush: QBrush() ++ pen: QPen() ++ outLines: list = [] ++ inLines: list = [] +-- +shape() +boundingRect() +paint() +mousePressEvent(event) +mouseMoveEvent(event) +mouseReleaseEvent(event) +hoverEnterEvent(event) +hoverLeaveEvent(event) ++ getCenter() +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>385</x> + <y>1419</y> + <w>231</w> + <h>418</h> + </coordinates> + <panel_attributes>NodeLine +-- ++ _pointA: QPointF = pointA ++ _pointB: QPointF = pointB ++ _source: QPointF = None ++ _targer: QPointF = None ++ socket: string = socket ++ pen: QPen() +-- +updatePath() +paint() +__delete__(instance) ++ pointA() ++ pointA(point) ++ pointB() ++ pointB(poing) ++ source() ++ target() +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>220</x> + <y>1265</y> + <w>231</w> + <h>88</h> + </coordinates> + <panel_attributes>QtWigets.QGraphicsPathItem +-- +setZValue() +setBrush() +setPen() +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>2101</x> + <y>396</y> + <w>264</w> + <h>330</h> + </coordinates> + <panel_attributes>DockWidgetMaterialStream +-- ++ name: string = name ++ obj: UnitOperations = obj ++ type: string = comptype ++ inputdict: dictionary = {} ++ dict: dictionary = {} ++ x_pclist: list = [] ++ nameType: string = None ++ container: Container = container ++ header: QTreeWidgetItem() +-- ++ modes() ++ modeSelection() ++ inputparamslist() ++ param() ++ resultsCategory(name) ++ _showResult(lst)_ ++ Show_Error()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1430</x> + <y>704</y> + <w>231</w> + <h>55</h> + </coordinates> + <panel_attributes>UC5 (comboBoxClass) +-- +currentIndexChanged.connect()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1716</x> + <y>616</y> + <w>264</w> + <h>308</h> + </coordinates> + <panel_attributes>DockWidget +-- ++ name: string = name ++ obj: UnitOperations = obj ++ type: string = comptype ++ inputdict: dictionary = {} ++ dict: dictionary = {} ++ x_pclist: list = [] ++ nameType: string = None ++ container: Container = container +-- ++ modes() ++ modeSelection() ++ inputparamslist() ++ param() ++ resultsCategory(name) +_+ showResult(lst)_ ++ Show_Error()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1760</x> + <y>385</y> + <w>231</w> + <h>176</h> + </coordinates> + <panel_attributes>QDockWidget +-- +pushButton_2: UC4 +comboBox: UC5 + +btn:UC4 +-- +setupUi() +setWindowTitle() +hide()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>2101</x> + <y>1232</y> + <w>264</w> + <h>275</h> + </coordinates> + <panel_attributes>DockWidgetShortcutColumn +-- ++ name: string = name ++ obj: UnitOperations = obj ++ type: string = comptype ++ inputdict: list = [] ++ dict: list = [] ++ nameType: string = None ++ container: Container = container +-- ++ inputparamslist() ++ fun() ++ param() ++ Show_Error() +_+ showResult(lst)_ ++ resultCategory(name)</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>2101</x> + <y>1012</y> + <w>264</w> + <h>198</h> + </coordinates> + <panel_attributes>DockWidgetMixer +DockWidgetCompoundSeparator +-- ++ name: string = name ++ obj: UnitOperations = obj ++ type: string = comptype ++ inputdict: list = [] ++ dict: list = [] +-- ++ inputparamslist() ++ param() ++ Show_Error()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>2101</x> + <y>770</y> + <w>264</w> + <h>220</h> + </coordinates> + <panel_attributes>DockWidgetSplitter +DockWidgetFlash +-- ++ name: string = name ++ obj: UnitOperations = obj ++ type: string = comptype ++ inputdict: list = [] ++ dict: list = [] +-- ++ inputparamslist() ++ fun() ++ param() ++ Show_Error()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1606</x> + <y>957</y> + <w>451</w> + <h>473</h> + </coordinates> + <panel_attributes>Flowsheet +-- ++ sim_name: string = 'Simulator' ++ sim_method: string = '' ++ UnitOpn: list = [] ++ data: list = [] ++ compounds: list = [] ++ interface: string = '' ++ omc_path: string = None ++ omc_path: string = cwd() ++ sim_dir_path: string = join(curr_path, sim_name) ++ Flomo_path: string = join(ssim_dir_path, 'Flowsheet.mo') ++ eqn_mos_path: string = join(sim_dir_path, 'simlateEQN.mos') ++ sm_mos_path: string = join(sim_dir_path, 'simulateSM.mos') ++ resdata: list = [] ++ stdout = None ++ stderr = None +-- ++ get_omc_path() ++ add_UnitOpn() ++ remove_UnitOpn() ++ add_comp_list() ++ send_for_simulationEqn() ++ send_for_simulationSM() ++ ExtData() ++ simulateEQN() ++ simulateSM()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1650</x> + <y>1694</y> + <w>297</w> + <h>517</h> + </coordinates> + <panel_attributes>MaterialStream +-- +_+ counter: int = 1_ ++ name: string = 'MaterialStream' + counter ++ type: string = 'MaterialStream' ++ CompNames: string = CompNames ++ count: int = counter ++ thermoPackage: string = 'RaoultsLaw' ++ mode1: string = 'P' ++ mode2: string = 'T' ++ mode1val: string = '' ++ mode2Val: string = '' ++ OM_data_init: string = '' ++ OM_data_eqn: string = '' ++ no_of_inputs: int = 1 ++ no_of_outputs: int = 2 ++ x: int = 2500-30 ++ y: int = 2500-30 ++ startDict: dictionary = {} ++ eqnDict: dictionary = {} ++ modesList: list = ['PT',...] ++ variables: dictionary = {'P':{..},...} +-- ++ paramgetter(mode) ++ paramsetter(params) ++ setPos(pos) ++ GetMinEqnValues() ++ GetStartValues() ++ OM_Flowsheet_Initialize() ++ OM_Flowsheet_Equation()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>2068</x> + <y>1694</y> + <w>297</w> + <h>572</h> + </coordinates> + <panel_attributes>UnitOperations +-- +_+ counter: int = 1_ ++ OM_data_eqn: string = '' ++ OM_data_init: string = '' ++ InputStms: list = [] ++ OutputStms: list = [] ++ compounds: list = compound_selected ++ name: string = '' ++ mode: string = None ++ modeVal: string = None ++ type: string = None ++ no_of_inputs: int = 1 ++ no_of_outputs: int = 1 ++ x: int = 2500-30 ++ y: int = 2500-30 ++ pos: QPointF(x, y) ++ count: int = counter ++ variables: dictionary = {} ++ modesList: list = [] ++ parameters: list = [] ++ extra: list = [] ++ ForNaming: list = [] ++ multidict: list = [] ++ ThermoPackReq: boolean = False ++ thermoPackage: list = None +-- ++ paramgetter(mode) ++ paramsetter(params) ++ setPos(pos) ++ add_connection(flag, UnitOpr) ++ OM_Flowsheet_Initialize() ++ OM_Flowsheet_Equation()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>0</x> + <y>935</y> + <w>275</w> + <h>264</h> + </coordinates> + <panel_attributes>Bin_Phase_env +-- ++ comp: CompoundSelector = comp ++ compounds: list = comp.getComp() ++ lines: list = [line.rstrip('\n')...] ++ counter: int = 1 +-- +setupUi() ++ button_handler() ++ T_xy() ++ P_xy() ++ get_omc_path() ++ plot() ++ pressEvent(evt) ++ entered(items)</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>770</x> + <y>154</y> + <w>231</w> + <h>154</h> + </coordinates> + <panel_attributes>ChemsepDatabase +-- ++ comp_name_list: list = list() ++ name: string = 'chemsep' ++ comp_prop_list: list = list() +-- ++ get_comp_name_list() ++ get_value(comps, attrib) ++ get_comp_prop(comps)</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>616</x> + <y>704</y> + <w>132</w> + <h>132</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>100.0;10.0;100.0;100.0;10.0;100.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>616</x> + <y>902</y> + <w>143</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>110.0;10.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>869</x> + <y>297</y> + <w>33</w> + <h>77</h> + </coordinates> + <panel_attributes>lt=<<<-</panel_attributes> + <additional_attributes>10.0;10.0;10.0;50.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1056</x> + <y>594</y> + <w>110</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<<-</panel_attributes> + <additional_attributes>80.0;10.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1243</x> + <y>451</y> + <w>33</w> + <h>99</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;10.0;70.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1243</x> + <y>363</y> + <w>33</w> + <h>66</h> + </coordinates> + <panel_attributes/> + <additional_attributes>10.0;10.0;10.0;40.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1243</x> + <y>264</y> + <w>33</w> + <h>55</h> + </coordinates> + <panel_attributes/> + <additional_attributes>10.0;10.0;10.0;30.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1364</x> + <y>550</y> + <w>88</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>60.0;10.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1364</x> + <y>627</y> + <w>88</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>60.0;10.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>979</x> + <y>935</y> + <w>121</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>90.0;10.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1243</x> + <y>1012</y> + <w>33</w> + <h>99</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>10.0;70.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>957</x> + <y>1529</y> + <w>110</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>10.0;10.0;80.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>605</x> + <y>1529</y> + <w>154</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>10.0;10.0;120.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>341</x> + <y>1342</y> + <w>165</w> + <h>99</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;130.0;70.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>495</x> + <y>1342</y> + <w>99</w> + <h>99</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>70.0;10.0;10.0;70.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>847</x> + <y>1320</y> + <w>33</w> + <h>121</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;10.0;90.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>924</x> + <y>1298</y> + <w>143</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;110.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1100</x> + <y>1661</y> + <w>33</w> + <h>66</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;40.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1441</x> + <y>1661</y> + <w>33</w> + <h>143</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;110.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1287</x> + <y>1661</y> + <w>33</w> + <h>231</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;190.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1210</x> + <y>1661</y> + <w>33</w> + <h>187</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;150.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>979</x> + <y>1034</y> + <w>649</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>570.0;10.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1529</x> + <y>1034</y> + <w>704</w> + <h>682</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>620.0;600.0;620.0;520.0;10.0;520.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1782</x> + <y>1595</y> + <w>33</w> + <h>121</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>10.0;90.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1474</x> + <y>539</y> + <w>1023</w> + <h>1023</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>810.0;10.0;910.0;10.0;910.0;910.0;10.0;910.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>2354</x> + <y>858</y> + <w>143</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>10.0;10.0;110.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>2354</x> + <y>1100</y> + <w>143</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>10.0;10.0;110.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>2354</x> + <y>1353</y> + <w>143</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>10.0;10.0;110.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1969</x> + <y>737</y> + <w>528</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<-</panel_attributes> + <additional_attributes>10.0;10.0;460.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1826</x> + <y>550</y> + <w>33</w> + <h>88</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;10.0;60.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1980</x> + <y>429</y> + <w>143</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;110.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1980</x> + <y>462</y> + <w>154</w> + <h>330</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;120.0;280.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1980</x> + <y>506</y> + <w>143</w> + <h>528</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;110.0;460.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1980</x> + <y>550</y> + <w>143</w> + <h>715</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;110.0;630.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>264</x> + <y>1012</y> + <w>99</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<<-</panel_attributes> + <additional_attributes>10.0;10.0;70.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1650</x> + <y>638</y> + <w>88</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;60.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>1650</x> + <y>726</y> + <w>88</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<.</panel_attributes> + <additional_attributes>10.0;10.0;60.0;10.0</additional_attributes> + </element> + <element> + <id>UMLNote</id> + <coordinates> + <x>1804</x> + <y>165</y> + <w>176</w> + <h>55</h> + </coordinates> + <panel_attributes>UC is the abbreviation +for unknown class. +bg=white +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>1793</x> + <y>242</y> + <w>231</w> + <h>77</h> + </coordinates> + <panel_attributes>Graphics.py +-- +findMainWindow()</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLNote</id> + <coordinates> + <x>1100</x> + <y>0</y> + <w>341</w> + <h>187</h> + </coordinates> + <panel_attributes>OMCS Class Diagram +-- +Initial version : + Author - Saurabh Agarwala + Date - 7th December 2019 + Contact - saur.agarwala@gmail.com +-- +Current final version : + Author - Thiha Min Maung + Date - 19th February 2020 + Contact - lucaszhao999@gmail.com +bg=white +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>2442</x> + <y>2145</y> + <w>231</w> + <h>187</h> + </coordinates> + <panel_attributes>Heater +Cooler +AdiabaticCompressor +AdiabaticExpander +Valve +Pump +Flash +-- +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>2442</x> + <y>1925</y> + <w>231</w> + <h>55</h> + </coordinates> + <panel_attributes>Mixer +-- ++ Pout_modes: list = [...] +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>2442</x> + <y>1991</y> + <w>231</w> + <h>55</h> + </coordinates> + <panel_attributes>Splitter +-- ++ CalcType_modes: list = [...] +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>2442</x> + <y>2068</y> + <w>231</w> + <h>55</h> + </coordinates> + <panel_attributes>CompoundSeparator +-- ++ SepFact_modes: list = [...] +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>2442</x> + <y>1716</y> + <w>275</w> + <h>110</h> + </coordinates> + <panel_attributes>DistillationColumn +-- ++ EngStm1:string = 'EngStm1'+name ++ EngStm2: string = 'EngStm2'+name ++ Cspec_list: list = [...] ++ Rsepc_list: list = [...] + +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>2442</x> + <y>1837</y> + <w>275</w> + <h>77</h> + </coordinates> + <panel_attributes>ShortcutColumn +-- ++ EngStm1:string = 'EngStm1'+name ++ EngStm2: string = 'EngStm2'+name + +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>2354</x> + <y>1760</y> + <w>110</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<-</panel_attributes> + <additional_attributes>10.0;10.0;80.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>2354</x> + <y>1859</y> + <w>110</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<-</panel_attributes> + <additional_attributes>10.0;10.0;80.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>2354</x> + <y>1947</y> + <w>110</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<-</panel_attributes> + <additional_attributes>10.0;10.0;80.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>2354</x> + <y>2024</y> + <w>110</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<-</panel_attributes> + <additional_attributes>10.0;10.0;80.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>2354</x> + <y>2090</y> + <w>110</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<-</panel_attributes> + <additional_attributes>10.0;10.0;80.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>2354</x> + <y>2211</y> + <w>110</w> + <h>33</h> + </coordinates> + <panel_attributes>lt=<<-</panel_attributes> + <additional_attributes>10.0;10.0;80.0;10.0</additional_attributes> + </element> +</diagram> |