def isWidgetMimePastable(parentwidget, mimedata): """Is widget mime data suitable to paste at parentwidget?""" if mimedata is None: return False types = getMimeWidgetTypes(mimedata) for type in types: if doc.getSuitableParent(type, parentwidget) is None: return False return True
def do(self, document): """Do the import.""" import commandinterpreter index = self.index # get document to keep track of changes for undo/redo document.batchHistory(self) # fire up interpreter to read file interpreter = commandinterpreter.CommandInterpreter(document) parentwidget = document.resolveFullWidgetPath(self.parentpath) lines = self.mimedata.split('\n') numwidgets = int(lines[0]) # get types, names and number of lines for widgets types = lines[1:1+4*numwidgets:4] names = lines[2:2+4*numwidgets:4] names = [eval(name) for name in names] if self.newnames is not None: names = self.newnames # paths = lines[3:3+4*numwidgets:4] (not required here) widgetslines = lines[4:4+4*numwidgets:4] widgetslines = [int(x) for x in widgetslines] newwidgets = [] widgetline = 1+4*numwidgets try: for wtype, name, numline in izip(types, names, widgetslines): thisparent = doc.getSuitableParent(wtype, parentwidget) if thisparent is None: raise RuntimeError, "Cannot find suitable parent for pasting" # override name if it exists already if name in thisparent.childnames: name = None # make new widget widget = document.applyOperation( operations.OperationWidgetAdd( thisparent, wtype, autoadd=False, name=name, index=index) ) newwidgets.append(widget) # run generating commands interpreter.interface.currentwidget = widget for line in lines[widgetline:widgetline+numline]: interpreter.run(line) if index >= 0: index += 1 # move to next widget widgetline += numline except Exception: document.batchHistory(None) raise # stop batching changes document.batchHistory(None) return newwidgets
def do(self, document): """Do the import.""" import commandinterpreter index = self.index # get document to keep track of changes for undo/redo document.batchHistory(self) # fire up interpreter to read file interpreter = commandinterpreter.CommandInterpreter(document) parentwidget = document.resolveFullWidgetPath(self.parentpath) lines = self.mimedata.split('\n') numwidgets = int(lines[0]) # get types, names and number of lines for widgets types = lines[1:1 + 4 * numwidgets:4] names = lines[2:2 + 4 * numwidgets:4] names = [eval(name) for name in names] if self.newnames is not None: names = self.newnames # paths = lines[3:3+4*numwidgets:4] (not required here) widgetslines = lines[4:4 + 4 * numwidgets:4] widgetslines = [int(x) for x in widgetslines] newwidgets = [] widgetline = 1 + 4 * numwidgets try: for wtype, name, numline in izip(types, names, widgetslines): thisparent = doc.getSuitableParent(wtype, parentwidget) if thisparent is None: raise RuntimeError, "Cannot find suitable parent for pasting" # override name if it exists already if name in thisparent.childnames: name = None # make new widget widget = document.applyOperation( operations.OperationWidgetAdd(thisparent, wtype, autoadd=False, name=name, index=index)) newwidgets.append(widget) # run generating commands interpreter.interface.currentwidget = widget for line in lines[widgetline:widgetline + numline]: interpreter.run(line) if index >= 0: index += 1 # move to next widget widgetline += numline except Exception: document.batchHistory(None) raise # stop batching changes document.batchHistory(None) return newwidgets