From 190966e010e321e4df56d40104ec80467a870e53 Mon Sep 17 00:00:00 2001
From: Sann Yay Aye
Date: Thu, 30 Jan 2020 12:57:51 +0530
Subject: undo&redo_implementation
---
container.py | 147 +++++++++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 117 insertions(+), 30 deletions(-)
(limited to 'container.py')
diff --git a/container.py b/container.py
index 6cfc689..7212cc4 100644
--- a/container.py
+++ b/container.py
@@ -19,7 +19,6 @@ import sys
from Graphics import *
class Container():
-
def __init__(self,msgbrowser):
self.unitOp = []
self.thermoPackage = None
@@ -33,46 +32,47 @@ class Container():
self.opl=[]
self.result=[]
self.graphics = Graphics(self.unitOp)
+ self.scene = self.graphics.getScene()
def currentTime(self):
now = datetime.datetime.now()
time = str(now.hour) + ":" + str(now.minute) + ":" +str(now.second)
return time
- def updateConn(self,key,value):
- self.conn[key].append(value)
- self.msg.append("["+str(self.currentTime())+"] "+key.name+" output is connected to input of "+value.name +" ")
-
- def connection(self):
- try:
- self.op.clear()
- self.ip.clear()
- self.opl.clear()
- stm = ['MaterialStream','EngStm']
- for i in self.conn:
- if i.type not in stm:
- self.op[i]=self.conn[i]
-
- for j in range(len(self.conn[i])):
- if self.conn[i][j].type not in stm:
- self.ip[self.conn[i][j]].append(i)
-
- for i in self.op:
- i.connect(InputStms=self.ip[i],OutputStms=self.op[i])
-
- self.opl.append([self.op[i] for i in self.op])
- self.opl=flatlist(flatlist(self.opl))
- except Exception as e:
- print(e)
+ # def updateConn(self,key,value):
+ # self.conn[key].append(value)
+ # self.msg.append("["+str(self.currentTime())+"] "+key.name+" output is connected to input of "+value.name +" ")
+ #
+ # def connection(self):
+ # try:
+ # self.op.clear()
+ # self.ip.clear()
+ # self.opl.clear()
+ # stm = ['MaterialStream','EngStm']
+ # for i in self.conn:
+ # if i.type not in stm:
+ # self.op[i]=self.conn[i]
+ #
+ # for j in range(len(self.conn[i])):
+ # if self.conn[i][j].type not in stm:
+ # self.ip[self.conn[i][j]].append(i)
+ #
+ # for i in self.op:
+ # i.connect(InputStms=self.ip[i],OutputStms=self.op[i])
+ #
+ # self.opl.append([self.op[i] for i in self.op])
+ # self.opl=flatlist(flatlist(self.opl))
+ # except Exception as e:
+ # print(e)
- @staticmethod
- def addUnitOpObj(obj):
- self.unitOp.append(obj)
+ # @staticmethod
+ # def addUnitOpObj(obj):
+ # self.unitOp.append(obj)
def addUnitOp(self,obj):
box = None
self.obj = obj
- self.scene = self.graphics.getScene()
+ # self.scene = self.graphics.getScene()
box = self.graphics.createNodeItem(self.obj)
self.scene.addItem(box)
box.setPos(2500-30, 2500-30)
@@ -81,8 +81,49 @@ class Container():
pass
else:
self.unitOp.append(obj)
+ data = self.unitOp[:]
+ data.append(compound_selected)
+ PUSH('Undo', data)
self.msg.append("["+str(self.currentTime())+"] "+obj.name+" is instantiated .""")
+ '''
+ Deletes the selected item from the canvas and also the objects created for that type.
+ '''
+ def delete(self,l):
+ for item in l:
+ self.scene.removeItem(item)
+ if hasattr(item,'Input'):
+ for x in item.Input:
+ if x.newLine:
+ self.scene.removeItem(x.newLine)
+ del x.newLine
+ if x.otherLine:
+ self.scene.removeItem(x.otherLine)
+ del x.otherLine
+ if hasattr(item,'Output'):
+ for x in item.Output:
+ if x.newLine:
+ self.scene.removeItem(x.newLine)
+ del x.newLine
+ if x.otherLine:
+ self.scene.removeItem(x.otherLine)
+ del x.otherLine
+ if hasattr(item,'obj'):
+ self.unitOp.remove(item.obj)
+ for k in list(self.conn):
+ if item.obj==k:
+ del self.conn[k]
+ elif item.obj in self.conn[k]:
+ self.conn[k].remove(item.obj)
+ self.msg.append("["+str(self.currentTime())+"] "+item.obj.name+" is deleted .""")
+ del item.obj
+ del item
+
+ CLEAN_FILE('Redo')
+ data = self.unitOp[:]
+ data.append(compound_selected)
+ PUSH('Undo', data)
+
def fetchObject(self,name):
for i in self.unitOp:
if(i.name==name):
@@ -137,3 +178,49 @@ def flatlist(lst):
for item in sublist:
flat_list.append(item)
return flat_list
+
+def PUSH(fileName, data):
+ with open(f"{fileName}.dat", "ab") as obj:
+ pickle.dump(data, obj)
+
+def CLEAN_FILE(fileName):
+ with open(f"{fileName}.dat", "wb") as clean:
+ pass
+
+def POP(fileName):
+ last_command = None
+ if os.stat(f"{fileName}.dat").st_size != 0:
+ commands = []
+ with open(f"{fileName}.dat", "rb") as objs:
+ while True:
+ try:
+ command = pickle.load(objs)
+ commands.append(command)
+ except EOFError:
+ break
+
+ last_command = commands[-1]
+ commands.remove(commands[-1])
+ if len(commands) != 0:
+ with open(f"{fileName}.dat", "wb") as updated_data:
+ for i in range(len(commands)):
+ pickle.dump(commands[i], updated_data)
+ else:
+ CLEAN_FILE(fileName)
+
+ return last_command
+
+def get_last_list(fileName):
+ commands = []
+ if os.stat(f"{fileName}.dat").st_size != 0:
+ with open(f"{fileName}.dat", "rb") as objs:
+ while True:
+ try:
+ command = pickle.load(objs)
+ commands.append(command)
+ except EOFError:
+ break
+ if len(commands) is not 0:
+ return commands[-1]
+ else:
+ return None
\ No newline at end of file
--
cgit