예제 #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 = 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)
예제 #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 = 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 )
예제 #3
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 )
예제 #4
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)
예제 #5
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))
예제 #6
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)])
예제 #7
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 ) ] )
예제 #8
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()
예제 #9
0
class ReadonlyEditor(Editor):
    """ Read-only style of image enumeration editor, which displays a single
    ImageControl, representing the object trait's value.
    """

    #---------------------------------------------------------------------------
    #  Finishes initializing the editor by creating the underlying toolkit
    #  widget:
    #---------------------------------------------------------------------------

    def init(self, parent):
        """ Finishes initializing the editor by creating the underlying toolkit
            widget.
        """
        self.control = ImageControl(
            parent,
            bitmap_cache(
                '%s%s%s' %
                (self.factory.prefix, self.str_value, self.factory.suffix),
                False, self.factory._image_path))

    #---------------------------------------------------------------------------
    #  Updates the editor when the object trait changes external to the editor:
    #---------------------------------------------------------------------------

    def update_editor(self):
        """ Updates the editor when the object trait changes externally to the
            editor.
        """
        self.control.Bitmap(
            bitmap_cache(
                '%s%s%s' %
                (self.factory.prefix, self.str_value, self.factory.suffix),
                False, self.factory._image_path))
예제 #10
0
class _ImageEditor(Editor):
    """ Traits UI 'display only' image editor.
    """

    #---------------------------------------------------------------------------
    #  Finishes initializing the editor by creating the underlying toolkit
    #  widget:
    #---------------------------------------------------------------------------

    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()

    #---------------------------------------------------------------------------
    #  Updates the editor when the object trait changes external to the editor:
    #---------------------------------------------------------------------------

    def update_editor(self):
        """ Updates the editor when the object trait changes externally to the
            editor.
        """
        if self.factory.image is None:
            value = self.value
            if isinstance(value, ImageResource):
                self.control.Bitmap(convert_bitmap(value))
예제 #11
0
class ReadonlyEditor(Editor):

    #---------------------------------------------------------------------------
    #  Finishes initializing the editor by creating the underlying toolkit
    #  widget:
    #---------------------------------------------------------------------------

    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))

    #---------------------------------------------------------------------------
    #  Updates the editor when the object trait changes external to the editor:
    #---------------------------------------------------------------------------

    def update_editor(self):
        """ Updates the editor when the object trait changes external to the 
            editor.
        """
        self.control.Bitmap(
            bitmap_cache(self.str_value + self.factory.suffix, False,
                         self.factory._image_path))
예제 #12
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()
예제 #13
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()
예제 #14
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()
예제 #15
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()