21 #You should have received a copy of the GNU General Public |
21 #You should have received a copy of the GNU General Public |
22 #License along with this library; if not, write to the Free Software |
22 #License along with this library; if not, write to the Free Software |
23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
24 |
24 |
25 from minixsv import pyxsval |
25 from minixsv import pyxsval |
|
26 from xml.dom import minidom |
26 import cPickle |
27 import cPickle |
27 import os,sys,re |
28 import os,sys,re |
28 from datetime import * |
29 from datetime import * |
29 |
30 |
30 from plcopen import plcopen |
31 from plcopen import plcopen |
183 def CreateNewProject(self, name): |
185 def CreateNewProject(self, name): |
184 # Create the project |
186 # Create the project |
185 self.Project = plcopen.project() |
187 self.Project = plcopen.project() |
186 self.Project.setName(name) |
188 self.Project.setName(name) |
187 # Initialize the project buffer |
189 # Initialize the project buffer |
188 self.ProjectBuffer = UndoBuffer(self.Copy(self.Project)) |
190 #self.ProjectBuffer = UndoBuffer(self.Copy(self.Project)) |
189 |
191 |
190 # Change project name |
192 # Change project name |
191 def SetProjectName(self, name): |
193 def SetProjectName(self, name): |
192 self.Project.setName(name) |
194 self.Project.setName(name) |
193 |
195 |
1052 connector["edge"] = variable.getConnectorEdge() |
1054 connector["edge"] = variable.getConnectorEdge() |
1053 connector["links"] = [] |
1055 connector["links"] = [] |
1054 connections = variable.connectionPointIn.getConnections() |
1056 connections = variable.connectionPointIn.getConnections() |
1055 if connections: |
1057 if connections: |
1056 for link in connections: |
1058 for link in connections: |
1057 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1059 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1058 connector["links"].append(dic) |
1060 connector["links"].append(dic) |
1059 infos["connectors"]["inputs"].append(connector) |
1061 infos["connectors"]["inputs"].append(connector) |
1060 for variable in instance.outputVariables.getVariable(): |
1062 for variable in instance.outputVariables.getVariable(): |
1061 connector = {} |
1063 connector = {} |
1062 connector["position"] = variable.connectionPointOut.getRelPosition() |
1064 connector["position"] = variable.connectionPointOut.getRelPosition() |
1081 infos["connector"]["edge"] = instance.getConnectorEdge() |
1083 infos["connector"]["edge"] = instance.getConnectorEdge() |
1082 infos["connector"]["links"] = [] |
1084 infos["connector"]["links"] = [] |
1083 connections = instance.connectionPointIn.getConnections() |
1085 connections = instance.connectionPointIn.getConnections() |
1084 if connections: |
1086 if connections: |
1085 for link in connections: |
1087 for link in connections: |
1086 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1088 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1087 infos["connector"]["links"].append(dic) |
1089 infos["connector"]["links"].append(dic) |
1088 elif isinstance(instance, plcopen.inOutVariable): |
1090 elif isinstance(instance, plcopen.inOutVariable): |
1089 infos["name"] = instance.getExpression() |
1091 infos["name"] = instance.getExpression() |
1090 infos["value_type"] = self.GetPouVarValueType(self.GetCurrentElementEditing(), infos["name"]) |
1092 infos["value_type"] = self.GetPouVarValueType(self.GetCurrentElementEditing(), infos["name"]) |
1091 infos["type"] = "inout" |
1093 infos["type"] = "inout" |
1098 infos["connectors"]["input"]["edge"] = instance.getInputEdge() |
1100 infos["connectors"]["input"]["edge"] = instance.getInputEdge() |
1099 infos["connectors"]["input"]["links"] = [] |
1101 infos["connectors"]["input"]["links"] = [] |
1100 connections = instance.connectionPointIn.getConnections() |
1102 connections = instance.connectionPointIn.getConnections() |
1101 if connections: |
1103 if connections: |
1102 for link in connections: |
1104 for link in connections: |
1103 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1105 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1104 infos["connectors"]["input"]["links"].append(dic) |
1106 infos["connectors"]["input"]["links"].append(dic) |
1105 elif isinstance(instance, plcopen.continuation): |
1107 elif isinstance(instance, plcopen.continuation): |
1106 infos["name"] = instance.getName() |
1108 infos["name"] = instance.getName() |
1107 infos["value_type"] = self.GetPouVarValueType(self.GetCurrentElementEditing(), infos["name"]) |
1109 infos["value_type"] = self.GetPouVarValueType(self.GetCurrentElementEditing(), infos["name"]) |
1108 infos["type"] = "continuation" |
1110 infos["type"] = "continuation" |
1116 infos["connector"]["position"] = instance.connectionPointIn.getRelPosition() |
1118 infos["connector"]["position"] = instance.connectionPointIn.getRelPosition() |
1117 infos["connector"]["links"] = [] |
1119 infos["connector"]["links"] = [] |
1118 connections = instance.connectionPointIn.getConnections() |
1120 connections = instance.connectionPointIn.getConnections() |
1119 if connections: |
1121 if connections: |
1120 for link in connections: |
1122 for link in connections: |
1121 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1123 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1122 infos["connector"]["links"].append(dic) |
1124 infos["connector"]["links"].append(dic) |
1123 elif isinstance(instance, plcopen.comment): |
1125 elif isinstance(instance, plcopen.comment): |
1124 infos["type"] = "comment" |
1126 infos["type"] = "comment" |
1125 infos["content"] = instance.getContentText() |
1127 infos["content"] = instance.getContentText() |
1126 elif isinstance(instance, plcopen.leftPowerRail): |
1128 elif isinstance(instance, plcopen.leftPowerRail): |
1136 for connection in instance.getConnectionPointIn(): |
1138 for connection in instance.getConnectionPointIn(): |
1137 connector = {} |
1139 connector = {} |
1138 connector["position"] = connection.getRelPosition() |
1140 connector["position"] = connection.getRelPosition() |
1139 connector["links"] = [] |
1141 connector["links"] = [] |
1140 for link in connection.getConnections(): |
1142 for link in connection.getConnections(): |
1141 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1143 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1142 connector["links"].append(dic) |
1144 connector["links"].append(dic) |
1143 infos["connectors"].append(connector) |
1145 infos["connectors"].append(connector) |
1144 elif isinstance(instance, plcopen.contact): |
1146 elif isinstance(instance, plcopen.contact): |
1145 infos["type"] = "contact" |
1147 infos["type"] = "contact" |
1146 infos["name"] = instance.getVariable() |
1148 infos["name"] = instance.getVariable() |
1150 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition() |
1152 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition() |
1151 infos["connectors"]["input"]["links"] = [] |
1153 infos["connectors"]["input"]["links"] = [] |
1152 connections = instance.connectionPointIn.getConnections() |
1154 connections = instance.connectionPointIn.getConnections() |
1153 if connections: |
1155 if connections: |
1154 for link in connections: |
1156 for link in connections: |
1155 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1157 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1156 infos["connectors"]["input"]["links"].append(dic) |
1158 infos["connectors"]["input"]["links"].append(dic) |
1157 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition() |
1159 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition() |
1158 elif isinstance(instance, plcopen.coil): |
1160 elif isinstance(instance, plcopen.coil): |
1159 infos["type"] = "coil" |
1161 infos["type"] = "coil" |
1160 infos["name"] = instance.getVariable() |
1162 infos["name"] = instance.getVariable() |
1164 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition() |
1166 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition() |
1165 infos["connectors"]["input"]["links"] = [] |
1167 infos["connectors"]["input"]["links"] = [] |
1166 connections = instance.connectionPointIn.getConnections() |
1168 connections = instance.connectionPointIn.getConnections() |
1167 if connections: |
1169 if connections: |
1168 for link in connections: |
1170 for link in connections: |
1169 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1171 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1170 infos["connectors"]["input"]["links"].append(dic) |
1172 infos["connectors"]["input"]["links"].append(dic) |
1171 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition() |
1173 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition() |
1172 elif isinstance(instance, plcopen.step): |
1174 elif isinstance(instance, plcopen.step): |
1173 infos["type"] = "step" |
1175 infos["type"] = "step" |
1174 infos["name"] = instance.getName() |
1176 infos["name"] = instance.getName() |
1179 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition() |
1181 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition() |
1180 infos["connectors"]["input"]["links"] = [] |
1182 infos["connectors"]["input"]["links"] = [] |
1181 connections = instance.connectionPointIn.getConnections() |
1183 connections = instance.connectionPointIn.getConnections() |
1182 if connections: |
1184 if connections: |
1183 for link in connections: |
1185 for link in connections: |
1184 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1186 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1185 infos["connectors"]["input"]["links"].append(dic) |
1187 infos["connectors"]["input"]["links"].append(dic) |
1186 if instance.connectionPointOut: |
1188 if instance.connectionPointOut: |
1187 infos["connectors"]["output"] = {"position" : instance.connectionPointOut.getRelPosition()} |
1189 infos["connectors"]["output"] = {"position" : instance.connectionPointOut.getRelPosition()} |
1188 if instance.connectionPointOutAction: |
1190 if instance.connectionPointOutAction: |
1189 infos["connectors"]["action"] = {"position" : instance.connectionPointOutAction.getRelPosition()} |
1191 infos["connectors"]["action"] = {"position" : instance.connectionPointOutAction.getRelPosition()} |
1196 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition() |
1198 infos["connectors"]["input"]["position"] = instance.connectionPointIn.getRelPosition() |
1197 infos["connectors"]["input"]["links"] = [] |
1199 infos["connectors"]["input"]["links"] = [] |
1198 connections = instance.connectionPointIn.getConnections() |
1200 connections = instance.connectionPointIn.getConnections() |
1199 if connections: |
1201 if connections: |
1200 for link in connections: |
1202 for link in connections: |
1201 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1203 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1202 infos["connectors"]["input"]["links"].append(dic) |
1204 infos["connectors"]["input"]["links"].append(dic) |
1203 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition() |
1205 infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition() |
1204 elif isinstance(instance, (plcopen.selectionDivergence, plcopen.simultaneousDivergence)): |
1206 elif isinstance(instance, (plcopen.selectionDivergence, plcopen.simultaneousDivergence)): |
1205 if isinstance(instance, plcopen.selectionDivergence): |
1207 if isinstance(instance, plcopen.selectionDivergence): |
1206 infos["type"] = "selectionDivergence" |
1208 infos["type"] = "selectionDivergence" |
1211 connector["position"] = instance.connectionPointIn.getRelPosition() |
1213 connector["position"] = instance.connectionPointIn.getRelPosition() |
1212 connector["links"] = [] |
1214 connector["links"] = [] |
1213 connections = instance.connectionPointIn.getConnections() |
1215 connections = instance.connectionPointIn.getConnections() |
1214 if connections: |
1216 if connections: |
1215 for link in connections: |
1217 for link in connections: |
1216 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1218 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1217 connector["links"].append(dic) |
1219 connector["links"].append(dic) |
1218 infos["connectors"]["inputs"].append(connector) |
1220 infos["connectors"]["inputs"].append(connector) |
1219 for sequence in instance.getConnectionPointOut(): |
1221 for sequence in instance.getConnectionPointOut(): |
1220 connector = {} |
1222 connector = {} |
1221 connector["position"] = sequence.getRelPosition() |
1223 connector["position"] = sequence.getRelPosition() |
1231 connector["position"] = sequence.getRelPosition() |
1233 connector["position"] = sequence.getRelPosition() |
1232 connector["links"] = [] |
1234 connector["links"] = [] |
1233 connections = sequence.getConnections() |
1235 connections = sequence.getConnections() |
1234 if connections: |
1236 if connections: |
1235 for link in connections: |
1237 for link in connections: |
1236 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1238 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1237 connector["links"].append(dic) |
1239 connector["links"].append(dic) |
1238 infos["connectors"]["inputs"].append(connector) |
1240 infos["connectors"]["inputs"].append(connector) |
1239 connector = {} |
1241 connector = {} |
1240 connector["position"] = instance.connectionPointOut.getRelPosition() |
1242 connector["position"] = instance.connectionPointOut.getRelPosition() |
1241 infos["connectors"]["outputs"].append(connector) |
1243 infos["connectors"]["outputs"].append(connector) |
1246 infos["connector"]["position"] = instance.connectionPointIn.getRelPosition() |
1248 infos["connector"]["position"] = instance.connectionPointIn.getRelPosition() |
1247 infos["connector"]["links"] = [] |
1249 infos["connector"]["links"] = [] |
1248 connections = instance.connectionPointIn.getConnections() |
1250 connections = instance.connectionPointIn.getConnections() |
1249 if connections: |
1251 if connections: |
1250 for link in connections: |
1252 for link in connections: |
1251 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1253 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1252 infos["connector"]["links"].append(dic) |
1254 infos["connector"]["links"].append(dic) |
1253 elif isinstance(instance, plcopen.actionBlock): |
1255 elif isinstance(instance, plcopen.actionBlock): |
1254 infos["type"] = "actionBlock" |
1256 infos["type"] = "actionBlock" |
1255 infos["actions"] = instance.getActions() |
1257 infos["actions"] = instance.getActions() |
1256 infos["connector"] = {} |
1258 infos["connector"] = {} |
1257 infos["connector"]["position"] = instance.connectionPointIn.getRelPosition() |
1259 infos["connector"]["position"] = instance.connectionPointIn.getRelPosition() |
1258 infos["connector"]["links"] = [] |
1260 infos["connector"]["links"] = [] |
1259 connections = instance.connectionPointIn.getConnections() |
1261 connections = instance.connectionPointIn.getConnections() |
1260 if connections: |
1262 if connections: |
1261 for link in connections: |
1263 for link in connections: |
1262 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()} |
1264 dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()} |
1263 infos["connector"]["links"].append(dic) |
1265 infos["connector"]["links"].append(dic) |
1264 return infos |
1266 return infos |
1265 return False |
1267 return False |
1266 |
1268 |
1267 # Return the variable type of the given pou |
1269 # Return the variable type of the given pou |
1276 wires = connector.GetWires() |
1278 wires = connector.GetWires() |
1277 idx = 0 |
1279 idx = 0 |
1278 for wire, handle in wires: |
1280 for wire, handle in wires: |
1279 points = wire.GetPoints(handle != 0) |
1281 points = wire.GetPoints(handle != 0) |
1280 if handle == 0: |
1282 if handle == 0: |
1281 refLocalId = wire.GetConnectedId(-1) |
1283 result = wire.GetConnectedInfos(-1) |
1282 else: |
1284 else: |
1283 refLocalId = wire.GetConnectedId(0) |
1285 result = wire.GetConnectedInfos(0) |
1284 if refLocalId != None: |
1286 if result != None: |
|
1287 refLocalId, formalParameter = result |
1285 connection.addConnection() |
1288 connection.addConnection() |
1286 connection.setConnectionId(idx, refLocalId) |
1289 connection.setConnectionId(idx, refLocalId) |
1287 connection.setConnectionPoints(idx, points) |
1290 connection.setConnectionPoints(idx, points) |
|
1291 if formalParameter != "": |
|
1292 connection.setConnectionParameter(idx, formalParameter) |
|
1293 else: |
|
1294 connection.setConnectionParameter(idx, None) |
1288 idx += 1 |
1295 idx += 1 |
1289 |
1296 |
1290 def AddCurrentElementEditingBlock(self, id): |
1297 def AddCurrentElementEditingBlock(self, id): |
1291 block = plcopen.block() |
1298 block = plcopen.block() |
1292 block.setLocalId(id) |
1299 block.setLocalId(id) |
1845 new_instance["Task"] = "" |
1852 new_instance["Task"] = "" |
1846 instances_data.append(new_instance) |
1853 instances_data.append(new_instance) |
1847 return tasks_data, instances_data |
1854 return tasks_data, instances_data |
1848 |
1855 |
1849 def OpenXMLFile(self, filepath): |
1856 def OpenXMLFile(self, filepath): |
1850 if sys: |
1857 if self.VerifyXML: |
1851 sys.stdout = HolePseudoFile() |
1858 if sys: |
1852 tree = pyxsval.parseAndValidate(filepath, os.path.join(sys.path[0], "plcopen/TC6_XML_V10_B.xsd")) |
1859 sys.stdout = HolePseudoFile() |
1853 if sys: |
1860 result = pyxsval.parseAndValidate(filepath, os.path.join(sys.path[0], "plcopen/TC6_XML_V10_B.xsd")) |
1854 sys.stdout = sys.__stdout__ |
1861 if sys: |
|
1862 sys.stdout = sys.__stdout__ |
|
1863 tree = result.getTree() |
|
1864 else: |
|
1865 xmlfile = open(filepath, 'r') |
|
1866 tree = minidom.parse(xmlfile) |
|
1867 xmlfile.close() |
1855 |
1868 |
1856 self.Project = plcopen.project() |
1869 self.Project = plcopen.project() |
1857 self.Project.loadXMLTree(tree.getTree().childNodes[0]) |
1870 self.Project.loadXMLTree(tree.childNodes[0]) |
1858 self.UndoBuffer = UndoBuffer(self.Copy(self.Project), True) |
1871 self.UndoBuffer = UndoBuffer(self.Copy(self.Project), True) |
1859 self.SetFilePath(filepath) |
1872 self.SetFilePath(filepath) |
1860 self.ElementsOpened = [] |
1873 self.ElementsOpened = [] |
1861 self.CurrentElementEditing = None |
1874 self.CurrentElementEditing = None |
1862 self.RefreshPouUsingTree() |
1875 self.RefreshPouUsingTree() |
1871 "xmlns:xhtml" : "http://www.w3.org/1999/xhtml", |
1884 "xmlns:xhtml" : "http://www.w3.org/1999/xhtml", |
1872 "xmlns:xsi" : "http://www.w3.org/2001/XMLSchema-instance", |
1885 "xmlns:xsi" : "http://www.w3.org/2001/XMLSchema-instance", |
1873 "xsi:schemaLocation" : "http://www.plcopen.org/xml/tc6.xsd http://www.plcopen.org/xml/tc6.xsd"} |
1886 "xsi:schemaLocation" : "http://www.plcopen.org/xml/tc6.xsd http://www.plcopen.org/xml/tc6.xsd"} |
1874 text += self.Project.generateXMLText("project", 0, extras) |
1887 text += self.Project.generateXMLText("project", 0, extras) |
1875 |
1888 |
1876 if sys: |
1889 if self.VerifyXML: |
1877 sys.stdout = HolePseudoFile() |
1890 if sys: |
1878 pyxsval.parseAndValidateString(text, open(os.path.join(sys.path[0], "plcopen/TC6_XML_V10_B.xsd"),"r").read()) |
1891 sys.stdout = HolePseudoFile() |
1879 if sys: |
1892 pyxsval.parseAndValidateString(text, open(os.path.join(sys.path[0], "plcopen/TC6_XML_V10_B.xsd"),"r").read()) |
1880 sys.stdout = sys.__stdout__ |
1893 if sys: |
|
1894 sys.stdout = sys.__stdout__ |
1881 |
1895 |
1882 if filepath: |
1896 if filepath: |
1883 xmlfile = open(filepath,"w") |
1897 xmlfile = open(filepath,"w") |
1884 else: |
1898 else: |
1885 xmlfile = open(self.FilePath,"w") |
1899 xmlfile = open(self.FilePath,"w") |
1886 xmlfile.write(text) |
1900 xmlfile.write(text) |
1887 xmlfile.close() |
1901 xmlfile.close() |
1888 self.UndoBuffer.CurrentSaved() |
1902 #self.ProjectBuffer.CurrentSaved() |
1889 if filepath: |
1903 if filepath: |
1890 self.SetFilePath(filepath) |
1904 self.SetFilePath(filepath) |
1891 return True |
1905 return True |
1892 |
1906 |
1893 #------------------------------------------------------------------------------- |
1907 #------------------------------------------------------------------------------- |
1899 """ |
1913 """ |
1900 def Copy(self, model): |
1914 def Copy(self, model): |
1901 return cPickle.loads(cPickle.dumps(model)) |
1915 return cPickle.loads(cPickle.dumps(model)) |
1902 |
1916 |
1903 def BufferProject(self): |
1917 def BufferProject(self): |
1904 self.UndoBuffer.Buffering(self.Copy(self)) |
1918 self.ProjectBuffer.Buffering(self.Copy(self)) |
1905 |
1919 |
1906 def ProjectIsSaved(self): |
1920 def ProjectIsSaved(self): |
1907 return self.UndoBuffer.IsCurrentSaved() |
1921 return self.ProjectBuffer.IsCurrentSaved() |
1908 |
1922 |
1909 def LoadPrevious(self): |
1923 def LoadPrevious(self): |
1910 self.Project = self.Copy(self.UndoBuffer.Previous()) |
1924 self.Project = self.Copy(self.ProjectBuffer.Previous()) |
1911 self.RefreshElementsOpened() |
1925 self.RefreshElementsOpened() |
1912 |
1926 |
1913 def LoadNext(self): |
1927 def LoadNext(self): |
1914 self.Project = self.Copy(self.UndoBuffer.Next()) |
1928 self.Project = self.Copy(self.ProjectBuffer.Next()) |
1915 self.RefreshElementsOpened() |
1929 self.RefreshElementsOpened() |
1916 |
1930 |
1917 def GetBufferState(self): |
1931 def GetBufferState(self): |
1918 first = self.UndoBuffer.IsFirst() |
1932 first = self.ProjectBuffer.IsFirst() |
1919 last = self.UndoBuffer.IsLast() |
1933 last = self.ProjectBuffer.IsLast() |
1920 return not first, not last |
1934 return not first, not last |