示例#1
0
    def _create_image_grid(self, parent):
        """ Populates a specified window with a grid of image buttons.
        """
        # Create the panel to hold the ImageControl buttons:
        self.control = panel = wx.Panel(parent, -1)

        # Create the main sizer:
        if self.factory.cols > 1:
            sizer = wx.GridSizer(0, self.factory.cols, 0, 0)
        else:
            sizer = wx.BoxSizer(wx.VERTICAL)

        # Add the set of all possible choices:
        cur_value = self.str_value
        for value in self.factory._names:
            control = ImageControl(
                panel,
                bitmap_cache(value + self.factory.suffix, False,
                             self.factory._image_path), value == cur_value,
                self.update_object)
            control.value = value
            sizer.Add(control, 0, wx.ALL, 2)
            self.set_tooltip(control)

        # Finish setting up the control layout:
        panel.SetAutoLayout(True)
        panel.SetSizer(sizer)
        sizer.Fit(panel)
示例#2
0
    def _create_image_grid(self, parent):
        """ Populates a specified window with a grid of image buttons.
        """
        # Create the panel to hold the ImageControl buttons:
        self.control = panel = TraitsUIPanel(parent, -1)

        # Create the main sizer:
        if self.factory.cols > 1:
            sizer = wx.GridSizer(0, self.factory.cols, 0, 0)
        else:
            sizer = wx.BoxSizer(wx.VERTICAL)

        # Add the set of all possible choices:
        factory = self.factory
        mapping = factory._mapping
        cur_value = self.value
        for name in self.factory._names:
            value = mapping[name]
            control = ImageControl(
                panel,
                bitmap_cache('%s%s%s' % (factory.prefix, name, factory.suffix),
                             False, factory._image_path), value == cur_value,
                self.update_object)
            control.value = value
            sizer.Add(control, 0, wx.ALL, 2)
            self.set_tooltip(control)

        # Finish setting up the control layout:
        panel.SetSizerAndFit(sizer)
示例#3
0
 def init(self, parent):
     """ Finishes initializing the editor by creating the underlying toolkit
         widget.
     """
     self.control = ImageControl(
         parent,
         bitmap_cache(self.str_value + self.factory.suffix, False,
                      self.factory._image_path))
示例#4
0
 def empty_list(self):
     """ Creates an empty list entry (so the user can add a new item).
     """
     control = ImageControl(self.control, self.bitmap, -1,
                            self.popup_empty_menu)
     control.is_empty = True
     proxy = ListItemProxy(self.object, self.name, -1, None, None)
     pcontrol = wx.StaticText(self.control, -1, '   (Empty List)')
     pcontrol.proxy = control.proxy = proxy
     self.reload_sizer([(control, pcontrol)])
示例#5
0
    def init(self, parent):
        """ Finishes initializing the editor by creating the underlying toolkit
            widget.
        """
        image = self.factory.image
        if image is None:
            image = self.value

        self.control = ImageControl(parent, convert_bitmap(image), padding=0)

        self.set_tooltip()
示例#6
0
    def update_editor(self):
        """ Updates the editor when the object trait changes externally to the
            editor.
        """
        # Disconnect the editor from any control about to be destroyed:
        self._dispose_items()

        # Get rid of any previous contents:
        list_pane = self.control
        list_pane.SetSizer(None)
        list_pane.DestroyChildren()

        # Create all of the list item trait editors:
        trait_handler = self._trait_handler
        resizable = ((trait_handler.minlen != trait_handler.maxlen)
                     and self.mutable)
        item_trait = trait_handler.item_trait
        factory = self.factory
        list_sizer = wx.FlexGridSizer(len(self.value),
                                      (1 + resizable) * factory.columns, 0, 0)
        j = resizable
        for i in range(factory.columns):
            list_sizer.AddGrowableCol(j)
            j += (1 + resizable)

        values = self.value
        index = 0
        width, height = 0, 0

        is_fake = (resizable and (values is None or len(values) == 0))
        if is_fake:
            values = [item_trait.default_value()[1]]

        panel_height = 0
        editor = self._editor
        for value in values:
            width1 = height = 0
            if resizable:
                control = ImageControl(list_pane, self.bitmap, -1,
                                       self.popup_menu)
                width1, height = control.GetSize()
                width1 += 4

            try:
                proxy = ListItemProxy(self.object, self.name, index,
                                      item_trait, value)
                if resizable:
                    control.proxy = proxy
                peditor = editor(self.ui, proxy, 'value', self.description,
                                 list_pane).set(object_name='')
                peditor.prepare(list_pane)
                pcontrol = peditor.control
                pcontrol.proxy = proxy
            except:
                if not is_fake:
                    raise

                pcontrol = wx.Button(list_pane, -1, 'sample')

            pcontrol.Fit()
            width2, height2 = size = pcontrol.GetSize()
            pcontrol.SetMinSize(size)
            width = max(width, width1 + width2)
            height = max(height, height2)
            panel_height += height

            if resizable:
                list_sizer.Add(control, 0, wx.LEFT | wx.RIGHT, 2)

            list_sizer.Add(pcontrol, 0, wx.EXPAND)
            index += 1

        list_pane.SetSizer(list_sizer)

        if not self.mutable:
            #list_sizer.SetDimension(0,0,width, panel_height)
            list_pane.SetInitialSize(list_sizer.GetSize())

        if is_fake:
            self._cur_control = control
            self.empty_list()
            control.Destroy()
            pcontrol.Destroy()

        rows = 1
        if not self.single_row:
            rows = self.factory.rows

        # Make sure we have valid values set for width and height (in case there
        # was no data to base them on):
        if width == 0:
            width = 100

        if panel_height == 0:
            panel_height = 20

        list_pane.SetMinSize(
            wx.Size(width + ((trait_handler.maxlen > rows) * scrollbar_dx),
                    panel_height))

        list_pane.SetupScrolling()
        list_pane.GetParent().Layout()
示例#7
0
    def update_editor(self):
        """ Updates the editor when the object trait changes external to the 
            editor.
        """
        list_pane = self.control
        editor = self._editor

        # Disconnext the editor from any control about to be destroyed:
        for control in list_pane.GetChildren():
            if hasattr(control, '_editor'):
                control._editor.control = None

        # Get rid of any previous contents:
        list_pane.SetSizer(None)
        list_pane.DestroyChildren()

        # Create all of the list item trait editors:
        trait_handler = self.factory.trait_handler
        resizable = ((trait_handler.minlen != trait_handler.maxlen)
                     and (self.kind != 'readonly_editor'))
        item_trait = trait_handler.item_trait
        list_sizer = wx.FlexGridSizer(0, 1 + resizable, 0, 0)
        list_sizer.AddGrowableCol(resizable)
        values = self.value
        index = 0
        width, height = 100, 18
        is_fake = (resizable and (len(values) == 0))
        if is_fake:
            values = [item_trait.default_value()[1]]

        for value in values:
            width = height = 0
            if resizable:
                control = ImageControl(list_pane,
                                       bitmap_cache('list_editor', False), -1,
                                       self.popup_menu)
                width, height = control.GetSize()
                width += 4
            try:
                proxy = ListItemProxy(self.object, self.name, index,
                                      item_trait, value)
                peditor = editor(self.ui, proxy, 'value', self.description,
                                 list_pane)
                pcontrol = peditor.control
                pcontrol.proxy = proxy
                if resizable:
                    control.proxy = proxy
            except:
                if not is_fake:
                    raise
                pcontrol = wx.Button(list_pane, -1, 'sample')
            width2, height2 = pcontrol.GetSize()
            width += width2
            height = max(height, height2)
            if resizable:
                list_sizer.Add(control, 0, wx.LEFT | wx.RIGHT, 2)
            list_sizer.Add(pcontrol, 1, wx.EXPAND)
            index += 1

        list_pane.SetSizer(list_sizer)

        if is_fake:
            self._cur_control = control
            self.empty_list()
            control.Destroy()
            pcontrol.Destroy()

        rows = [self.factory.rows, 1][self.kind == 'simple_editor']
        list_pane.SetSize(
            wx.Size(width + ((trait_handler.maxlen > rows) * scrollbar_dx),
                    height * rows))
        list_pane.SetScrollRate(16, height)
        list_pane.SetVirtualSize(list_sizer.GetMinSize())
        list_pane.GetParent().Layout()