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