def CommitData(self, editor): role, value = editor.GetRoleAndValue() tp = None if role != 'type' and 'type' in self.part: tp = self.part['type'] if role in ('type', 'uri'): values = [] for v in value.split('|'): values.append( appdata.datamodel.ResolveNameOrUri(v, tp, not self.doc.use_names)) value = list2value(values) else: value = appdata.datamodel.ResolveNameOrUri(value, tp, not self.doc.use_names) if self.part not in self.option['parts']: if role: if self.role: del self.part[self.role] self.role = role self.part[self.role] = value lst = [] lst.append( actions.DocumentModifyPatternOptionParts( self.option, self.part)) #lst.append(actions.DocumentModifyPatternOptionPartRoles(self.option, self.part, role, value = value, action = actions.ROLE_ADD)) self.doc << MultiAction(lst) return True else: return False if not self.role: if role: self.role = role self.doc << actions.DocumentModifyPatternOptionPartRoles( self.option, self.part, role, value=value, action=actions.ROLE_ADD) return True else: return False if not role: return False self.doc << actions.DocumentModifyPatternOptionPartRoles( self.option, self.part, self.role, value=(role, value), action=actions.ROLE_MODIFY) return True
def Drop(self, data, before=None, after=None): if not self.doc.CanEdit(): return False if data.get('uri'): value = appdata.datamodel.ResolveNameOrUri(data['uri'], None, not self.doc.use_names) part = HashableDict({ 'type': value, 'self': GenPartName(self.option) }) node = PatternOptionPartNode(self, part) self.Expand() node.Expand() node.children[0].Edit() return True elif data.get('qname'): qname = data['qname'] if qname.startswith('part2:'): qname = qname.replace(':', '.') part = HashableDict({ 'type': qname, 'self': GenPartName(self.option) }) node = PatternOptionPartNode(self, part) self.Expand() node.Expand() node.children[0].Edit() return True else: return False elif data.get('pattern'): part = HashableDict({'type': 'patterns.' + data['pattern']}) node = PatternOptionPartNode(self, part) self.Expand() node.Expand() node.children[0].Edit() return True elif data.get('patternpart'): part = data['patternpart'] if dict(part) not in [dict(x) for x in self.option['parts']]: self.Expand() self.doc << actions.DocumentModifyPatternOptionParts( self.option, part) return True else: return False
def Drop(self, data, before=None, after=None): if not self.doc.CanEdit(): return False if 'uri' in data: tp = None if 'type' in self.part: tp = self.part['type'] value = appdata.datamodel.ResolveNameOrUri(data['uri'], tp, not self.doc.use_names) node = PatternRoleNode(self, '') self.Expand() node.Edit(value) return True elif 'pattern' in data: if 'type' in self.part: return False self.doc << actions.DocumentModifyPatternOptionPartRoles( self.option, self.part, 'type', 'patterns.' + data['pattern'], action=actions.ROLE_ADD) return True elif data.get('patternpart'): part = data['patternpart'] lst = [] try: parts = [dict(x) for x in self.option['parts']] idx = parts.index(dict(part)) part = self.option['parts'][idx] except: lst.append( actions.DocumentModifyPatternOptionParts( self.option, part)) idx = len(self.option['parts']) newidx = self.option['parts'].index(self.part) if newidx != idx: lst.append( actions.DocumentChangePatternOptionPartIndex( self.option, part, newidx)) if lst: self.doc << MultiAction(lst) return True else: return False
def Paste(self): if not self.document.CanEdit(): return selected = self.wnd_tree.selected if util.CheckClipboard('application/x-dot15926-patterns'): if not selected or (len(selected) == 1 and selected[0] is self.provnode): lst = [] data = util.GetClipboard('application/x-dot15926-patterns') for v in data: lst.append( actions.DocumentModifyPatterns(self.document, v, new=False)) self.document << MultiAction(lst) elif util.CheckClipboard('application/x-dot15926-pattern-options'): if selected: if all(isinstance(x, PatternNode) for x in selected): lst = [] data = util.GetClipboard( 'application/x-dot15926-pattern-options') for x in selected: for v in data: lst.append( actions.DocumentModifyPatternOptions( x.pattern, v, new=False)) self.document << MultiAction(lst) elif util.CheckClipboard('application/x-dot15926-pattern-parts'): if selected: if all( isinstance(x, PatternOptionEntryNode) for x in selected): lst = [] data = util.GetClipboard( 'application/x-dot15926-pattern-parts') for x in selected: for v in data: lst.append( actions.DocumentModifyPatternOptionParts( x.option, v)) self.document << MultiAction(lst)
def Cut(self): selected = self.wnd_tree.selected if not selected: return if all(isinstance(x, PatternNode) for x in selected): data = [] lst = [] for v in selected: data.append(v.pattern) lst.append( actions.DocumentModifyPatterns(self.document, v.pattern, True)) util.SetClipboard('', {'application/x-dot15926-patterns': data}) self.document << MultiAction(lst) if all(isinstance(x, PatternOptionEntryNode) for x in selected): data = [] lst = [] for v in selected: data.append(v.option) lst.append( actions.DocumentModifyPatternOptions( v.pattern, v.option, True)) util.SetClipboard('', {'application/x-dot15926-pattern-options': data}) self.document << MultiAction(lst) if all(isinstance(x, PatternOptionPartNode) for x in selected): data = [] lst = [] for v in selected: data.append(v.part) lst.append( actions.DocumentModifyPatternOptionParts( v.option, v.part, True)) util.SetClipboard('', {'application/x-dot15926-pattern-parts': data}) self.document << MultiAction(lst)
def DoAdd(self): part = HashableDict({'self': GenPartName(self.option)}) self.doc << actions.DocumentModifyPatternOptionParts(self.option, part)
def DoDelete(self): self.doc << actions.DocumentModifyPatternOptionParts( self.option, self.part, True)