示例#1
0
class OptionBox(Button):
    """
    left      x coordinate. Integer
    top       y coordinate. Integer
    width     Integer
    height    Integer
    text      Letter to hold.
    bg_color  Background color (Color)
    fg_color  Foreground color (Color)
    selected_bg_color  Background color (Color)
    selected_fg_color  Foreground color (Color)
    border    Border
    bd_color  Border color (Color)
    bd_width  Border width Integer

    """

    
    def __init__(self, text=' ', left=None, top=None, width=100, height=25, 
                 bg_color=None, fg_color=None, selected_bg_color=None,
                 selected_fg_color=None, border=None, bd_color=None, 
                 bd_width=None):

        handler = None

        Button.__init__(self, text, handler, left, top, width, height, bg_color,
                        fg_color, selected_bg_color, selected_fg_color,
                        border, bd_color, bd_width)

        self.max_visible = 5
        self.h_spacing   = 6
        self.h_margin    = 6
        self.v_margin    = 2


        self.label.h_align = Align.LEFT

        self.list = ListBox(width=self.width, height=self.height*self.max_visible)
        self.add_child(self.list)
        self.list.visible = 0


    def change_item(self, direction):
        self.list.sort_items()
        self.list.scroll(direction)

        if self.list.get_selected_index() >= 0:
            self.set_text(self.list.get_selected_item().text)
        

    def add_item(self, text, value=None):
        self.list.add_item(None, text, value, h_margin=10)


    def toggle_selected_index(self, i):
        if self.list:
            self.list.toggle_selected_index(i)


    def toggle_box(self):
        if self.list.is_visible():
            self.list.visible = 0
            self.selected = 1
        else:
            self.list.visible = 1
            self.selected = 0


    def _draw(self):
        """
        The actual internal draw function.

        """
        if not self.width or not self.height or not self.text:
            raise TypeError, 'Not all needed variables set.'

        if self.selected:
            c = self.selected_bg_color.get_color_sdl()
            a = self.selected_bg_color.get_alpha()
        else:
            c = self.bg_color.get_color_sdl()
            a = self.bg_color.get_alpha()

        self.surface = self.osd.Surface(self.get_size(), 0, 32)
        self.surface.fill(c)
        self.surface.set_alpha(a)

        ar_1 = (self.width-18, 7)
        ar_2 = (self.width-8, 7)
        ar_3 = (self.width-13, 18)

        if self.selected:
            arrow_color = self.selected_fg_color.get_color_sdl()
        else:
            arrow_color = self.fg_color.get_color_sdl()

        self.osd.polygon(self.surface, arrow_color, [ar_1, ar_2, ar_3])

        if isinstance(self.list, ListBox):
            self.list.set_position(self.left, self.top+self.height)

        Container._draw(self)
        self.blit_parent()
        if self.list:
            self.list.draw(self.parent.surface)
示例#2
0
class OptionBox(Button):
    """
    left      x coordinate. Integer
    top       y coordinate. Integer
    width     Integer
    height    Integer
    text      Letter to hold.
    bg_color  Background color (Color)
    fg_color  Foreground color (Color)
    selected_bg_color  Background color (Color)
    selected_fg_color  Foreground color (Color)
    border    Border
    bd_color  Border color (Color)
    bd_width  Border width Integer

    """


    def __init__(self, text=' ', left=None, top=None, width=100, height=25,
                 bg_color=None, fg_color=None, selected_bg_color=None,
                 selected_fg_color=None, border=None, bd_color=None,
                 bd_width=None):

        handler = None

        Button.__init__(self, text, handler, left, top, width, height, bg_color,
                        fg_color, selected_bg_color, selected_fg_color,
                        border, bd_color, bd_width)

        self.max_visible = 5
        self.h_spacing   = 6
        self.h_margin    = 6
        self.v_margin    = 2


        self.label.h_align = Align.LEFT

        self.list = ListBox(width=self.width, height=self.height*self.max_visible)
        self.add_child(self.list)
        self.list.visible = 0


    def change_item(self, direction):
        self.list.sort_items()
        self.list.scroll(direction)

        if self.list.get_selected_index() >= 0:
            self.set_text(self.list.get_selected_item().text)


    def add_item(self, text, value=None):
        self.list.add_item(None, text, value, h_margin=10)


    def toggle_selected_index(self, i):
        if self.list:
            self.list.toggle_selected_index(i)


    def toggle_box(self):
        if self.list.is_visible():
            self.list.visible = 0
            self.selected = 1
        else:
            self.list.visible = 1
            self.selected = 0


    def _draw(self):
        """
        The actual internal draw function.

        """
        if not self.width or not self.height or not self.text:
            raise TypeError, 'Not all needed variables set.'

        if self.selected:
            c = self.selected_bg_color.get_color_sdl()
            a = self.selected_bg_color.get_alpha()
        else:
            c = self.bg_color.get_color_sdl()
            a = self.bg_color.get_alpha()

        self.surface = self.osd.Surface(self.get_size(), 0, 32)
        self.surface.fill(c)
        self.surface.set_alpha(a)

        ar_1 = (self.width-18, 7)
        ar_2 = (self.width-8, 7)
        ar_3 = (self.width-13, 18)

        if self.selected:
            arrow_color = self.selected_fg_color.get_color_sdl()
        else:
            arrow_color = self.fg_color.get_color_sdl()

        self.osd.polygon(self.surface, arrow_color, [ar_1, ar_2, ar_3])

        if isinstance(self.list, ListBox):
            self.list.set_position(self.left, self.top+self.height)

        Container._draw(self)
        self.blit_parent()
        if self.list:
            self.list.draw(self.parent.surface)