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