Esempio n. 1
0
    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
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 6
0
 def DoAdd(self):
     part = HashableDict({'self': GenPartName(self.option)})
     self.doc << actions.DocumentModifyPatternOptionParts(self.option, part)
Esempio n. 7
0
 def DoDelete(self):
     self.doc << actions.DocumentModifyPatternOptionParts(
         self.option, self.part, True)