Esempio n. 1
0
 def start_elem(self, name, attrs):
     if name == 'menus': return
     if name == 'menu':
         self.menu_depth += 1
         if self.menu_depth == 1:
             t = MenuTree( attrs['name'], attrs['label'], attrs.get('itemid', ''), attrs.get('help_str', ''),
                           handler=attrs.get('handler', '') )
             self.curr_menu.append( (t.root,) )
             self.menus.append(t)
             return
         node = MenuTree.Node( label=attrs['label'], name=attrs['name'], id=attrs.get('itemid', ''),
                               help_str=attrs.get('help_str', ''), handler=attrs.get('handler', '') )
         cm = self.curr_menu[-1]
         cm[0].children.append(node)
         node.parent = cm[0]
         menu = wx.Menu()
         self.curr_menu.append( (node, menu) )
     elif name == 'item':
         self.curr_item = MenuTree.Node()
     else:
         try: self.curr_index = self.itemattrs.index(name)
         except ValueError:
             # ignore unknown attributes...
             self.curr_index = -1
             pass
Esempio n. 2
0
    def get_menus(self):
        """returns the contents of self.menu_items as a list of trees which
        describe the structure of the menus in the format used by EditMenuBar"""
        trees = []

        def add(node, index):
            label = self._get_item_text(index,
                                        "label").lstrip().replace("\\t", "\t")
            id = self._get_item_text(index, "id")
            name = self._get_item_text(index, "name")
            help_str = self._get_item_text(index, "help_str")
            event_handler = self._get_item_text(index, "event_handler")
            try:
                item_type = int(self._get_item_text(index, "type"))
            except ValueError:
                item_type = 0
            checkable = item_type == 1 and misc.wxstr("1") or misc.wxstr("")
            radio = item_type == 2 and misc.wxstr("1") or misc.wxstr("")
            n = MenuTree.Node(label,
                              id,
                              name,
                              help_str,
                              checkable,
                              radio,
                              handler=event_handler)
            node.children.append(n)
            n.parent = node
            return n

        level = 0
        curr_item = None
        for index in range(self.items.GetItemCount()):
            label = self._get_item_text(index, "label").replace("\\t", "\t")
            lvl = self.item_level(index)
            if not lvl:
                t = MenuTree(self._get_item_text(index, "name"),
                             label,
                             id=self._get_item_text(index, "id"),
                             handler=self._get_item_text(
                                 index, "event_handler"))
                curr_item = t.root
                level = 1
                trees.append(t)
                continue
            elif lvl < level:
                for i in range(level - lvl):
                    curr_item = curr_item.parent
                level = lvl
            elif lvl > level:
                curr_item = curr_item.children[-1]
                level = lvl
            add(curr_item, index)

        return trees
Esempio n. 3
0
 def add(node, index):
     label         = self._get_item_text(index, "label").lstrip().replace("\\t", "\t")
     id            = self._get_item_text(index, "id")
     name          = self._get_item_text(index, "name")
     help_str      = self._get_item_text(index, "help_str")
     event_handler = self._get_item_text(index, "event_handler")
     try:
         item_type = int(self._get_item_text(index, "type"))
     except ValueError:
         item_type = 0
     checkable = item_type == 1 and misc.wxstr("1") or misc.wxstr("")
     radio = item_type == 2 and misc.wxstr("1") or misc.wxstr("")
     n = MenuTree.Node(label, id, name, help_str, checkable, radio, handler=event_handler)
     node.children.append(n)
     n.parent = node
     return n