Exemple #1
0
class PreferenceDialog(DialogBox):
    '''
    PreferenceDialog class.
    
    @undocumented: button_press_preference_item
    @undocumented: set_item_widget
    @undocumented: draw_treeview_mask
    '''
	
    def __init__(self,
                 default_width=575,
                 default_height=495,
                 ):
        '''
        Initialize PreferenceDialog class.
        
        @param default_width: The default width, default is 575 pixels.
        @param default_height: The default height, default is 495 pixels.
        '''
        DialogBox.__init__(
            self,
            _("Preferences"), 
            default_width,
            default_height,
            mask_type=DIALOG_MASK_MULTIPLE_PAGE,
            close_callback=self.hide_dialog,
            )
        self.set_position(gtk.WIN_POS_CENTER)
        
        self.main_box = gtk.VBox()
        close_button = Button(_("Close"))
        close_button.connect("clicked", lambda w: self.hide_all())
        
        # Category bar
        category_bar_width = 132
        self.category_bar = TreeView(
            enable_drag_drop=False, 
            enable_multiple_select=False,
            )
        self.category_bar.set_expand_column(1)
        self.category_bar.draw_mask = self.draw_treeview_mask
        self.category_bar.set_size_request(category_bar_width, 516)
        self.category_bar.connect("button-press-item", self.button_press_preference_item)
        
        category_box = gtk.VBox()
        background_box = BackgroundBox()
        background_box.set_size_request(category_bar_width, 11)
        background_box.draw_mask = self.draw_treeview_mask
        category_box.pack_start(background_box, False, False)
        
        category_bar_align = gtk.Alignment()
        category_bar_align.set(0, 0, 1, 1,)
        category_bar_align.set_padding(0, 1, 0, 0)
        category_bar_align.add(self.category_bar)
        category_box.pack_start(category_bar_align, True, True)
        
        # Pack widget.
        left_box = gtk.VBox()
        self.right_box = gtk.VBox()
        left_box.add(category_box)
        right_align = gtk.Alignment()
        right_align.set_padding(0, 0, 0, 0)
        right_align.add(self.right_box)

        body_box = gtk.HBox()
        body_box.pack_start(left_box, False, False)
        body_box.pack_start(right_align, False, False)
        self.main_box.add(body_box)
        
        # DialogBox code.
        self.body_box.pack_start(self.main_box, True, True)
        self.right_button_box.set_buttons([close_button])        
        
    def hide_dialog(self):
        self.hide_all()
        
        return True
        
    def button_press_preference_item(self, treeview, item, column_index, offset_x, offset_y):
        if self.set_item_widget(item):
            self.show_all()
            
    def set_item_widget(self, item):
        if isinstance(item, PreferenceItem):
            container_remove_all(self.right_box)
            self.right_box.pack_start(item.item_widget)
            self.category_bar.select_items([item])
            
            return True
        else:
            return False
            
    def draw_treeview_mask(self, cr, x, y, width, height):
        cr.set_source_rgba(*alpha_color_hex_to_cairo(("#FFFFFF", 0.9)))
        cr.rectangle(x, y, width, height)
        cr.fill()
        
    def set_preference_items(self, preference_items):
        '''
        Set preference items.
        
        @param preference_items: The list of preference item, item format is:
         - (item_name, item_widget)
         - Item list support recursively add.
        '''
        items = []
        for (item_name, item_content) in preference_items:
            if isinstance(item_content, gtk.Widget):
                items.append(PreferenceItem(item_name, item_content))
            elif isinstance(item_content, list):
                expand_item = ExpandPreferenceItem(item_name)
                items.append(expand_item)
                
                child_items = []
                for (child_item_name, child_item_content) in item_content:
                    child_items.append(PreferenceItem(child_item_name, child_item_content))
                    
                expand_item.add_items(child_items)
            
        self.category_bar.add_items(items)
        
        for item in items:
            if self.set_item_widget(item):
                break
Exemple #2
0
class PreferenceDialog(DialogBox):
    '''
    PreferenceDialog class.

    @undocumented: button_press_preference_item
    @undocumented: set_item_widget
    @undocumented: draw_treeview_mask
    '''

    def __init__(self,
                 default_width=575,
                 default_height=495,
                 ):
        '''
        Initialize PreferenceDialog class.

        @param default_width: The default width, default is 575 pixels.
        @param default_height: The default height, default is 495 pixels.
        '''
        DialogBox.__init__(
            self,
            _("Preferences"),
            default_width,
            default_height,
            mask_type=DIALOG_MASK_MULTIPLE_PAGE,
            close_callback=self.hide_dialog,
            )
        self.set_position(gtk.WIN_POS_CENTER)

        self.main_box = gtk.VBox()
        close_button = Button(_("Close"))
        close_button.connect("clicked", lambda w: self.hide_all())

        # Category bar
        category_bar_width = 132
        self.category_bar = TreeView(
            enable_drag_drop=False,
            enable_multiple_select=False,
            )
        self.category_bar.set_expand_column(1)
        self.category_bar.draw_mask = self.draw_treeview_mask
        self.category_bar.set_size_request(category_bar_width, 516)
        self.category_bar.connect("button-press-item", self.button_press_preference_item)

        category_box = gtk.VBox()
        background_box = BackgroundBox()
        background_box.set_size_request(category_bar_width, 11)
        background_box.draw_mask = self.draw_treeview_mask
        category_box.pack_start(background_box, False, False)

        category_bar_align = gtk.Alignment()
        category_bar_align.set(0, 0, 1, 1,)
        category_bar_align.set_padding(0, 1, 0, 0)
        category_bar_align.add(self.category_bar)
        category_box.pack_start(category_bar_align, True, True)

        # Pack widget.
        left_box = gtk.VBox()
        self.right_box = gtk.VBox()
        left_box.add(category_box)
        right_align = gtk.Alignment()
        right_align.set_padding(0, 0, 0, 0)
        right_align.add(self.right_box)

        body_box = gtk.HBox()
        body_box.pack_start(left_box, False, False)
        body_box.pack_start(right_align, False, False)
        self.main_box.add(body_box)

        # DialogBox code.
        self.body_box.pack_start(self.main_box, True, True)
        self.right_button_box.set_buttons([close_button])

    def hide_dialog(self):
        self.hide_all()

        return True

    def button_press_preference_item(self, treeview, item, column_index, offset_x, offset_y):
        if self.set_item_widget(item):
            self.show_all()

    def set_item_widget(self, item):
        if isinstance(item, PreferenceItem):
            container_remove_all(self.right_box)
            self.right_box.pack_start(item.item_widget)
            self.category_bar.select_items([item])

            return True
        else:
            return False

    def draw_treeview_mask(self, cr, x, y, width, height):
        cr.set_source_rgba(*alpha_color_hex_to_cairo(("#FFFFFF", 0.9)))
        cr.rectangle(x, y, width, height)
        cr.fill()

    def set_preference_items(self, preference_items):
        '''
        Set preference items.

        @param preference_items: The list of preference item, item format is:
         - (item_name, item_widget)
         - Item list support recursively add.
        '''
        items = []
        for (item_name, item_content) in preference_items:
            if isinstance(item_content, gtk.Widget):
                items.append(PreferenceItem(item_name, item_content))
            elif isinstance(item_content, list):
                expand_item = ExpandPreferenceItem(item_name)
                items.append(expand_item)

                child_items = []
                for (child_item_name, child_item_content) in item_content:
                    child_items.append(PreferenceItem(child_item_name, child_item_content))

                expand_item.add_items(child_items)

        self.category_bar.add_items(items)

        for item in items:
            if self.set_item_widget(item):
                break