class FootBox(gtk.HBox):
    '''
    class docs
    '''
    def __init__(self):
        '''
        init docs
        '''
        gtk.HBox.__init__(self)

        self.button_width = 80

        self.module_id = None

        self.buttons_list = []
        self.__setup_reset_button()
        self.buttons_list.append(self.reset_button)

        self.__is_init_ui = False

    def __setup_reset_button(self):
        self.reset_button = Button(_("Reset"))
        #self.reset_button.set_size_request(self.button_width, WIDGET_HEIGHT)
        self.reset_button.connect("clicked", self.__reset_button_clicked)

    def __setup_buttons_align(self, list):
        buttons_align = self.__setup_align(
            padding_top=7,
            padding_left=80 - (len(list) - 1) * 10,
            padding_right=TEXT_WINDOW_RIGHT_WIDGET_PADDING)
        buttons_box = gtk.HBox(spacing=5)
        i = 0
        while i < len(list):
            buttons_box.pack_start(list[i], False, False)
            i += 1

        buttons_align.add(buttons_box)

        return buttons_align

    def __init_ui(self):
        self.status_label = self.__setup_label("")
        self.right_box = gtk.VBox()
        self.buttons_align = self.__setup_buttons_align(self.buttons_list)
        self.right_box.pack_start(self.buttons_align)

        self.pack_start(self.status_label)
        self.pack_end(self.right_box, False, False)
        self.set_size_request(-1, STATUS_HEIGHT)

        self.connect("expose-event", self.__expose)

        self.__is_init_ui = True

    def __handle_dbus_reply(*reply):
        pass

    def __handle_dbus_error(*error):
        pass

    def __add_button_clicked(self, widget, argv):
        bus = dbus.SessionBus()
        module_dbus_name = "com.deepin.%s_settings" % (self.module_id)
        module_object_name = "/com/deepin/%s_settings" % (self.module_id)
        if is_dbus_name_exists(module_dbus_name):
            bus_object = bus.get_object(module_dbus_name, module_object_name)
            method = bus_object.get_dbus_method("message_receiver")
            method("add_button_cb",
                   argv,
                   reply_handler=self.__handle_dbus_reply,
                   error_handler=self.__handle_dbus_error)

    def __reset_button_clicked(self, widget):
        bus = dbus.SessionBus()
        module_dbus_name = "com.deepin.%s_settings" % (self.module_id)
        module_object_name = "/com/deepin/%s_settings" % (self.module_id)
        if is_dbus_name_exists(module_dbus_name):
            bus_object = bus.get_object(module_dbus_name, module_object_name)
            method = bus_object.get_dbus_method("message_receiver")
            method("reset",
                   "",
                   reply_handler=self.__handle_dbus_reply,
                   error_handler=self.__handle_dbus_error)

    def hide(self):
        self.hide_all()

    def show(self, module_id):
        self.module_id = module_id

        if not self.__is_init_ui:
            self.__init_ui()

        self.show_all()

    def hide_reset(self):
        self.reset_button.set_child_visible(False)

    def show_reset(self):
        self.reset_button.set_child_visible(True)

    def add_button(self, add_button):
        container_remove_all(self.buttons_align.get_children()[0])

        self.__setup_reset_button()
        button = Button(add_button)
        button.set_size_request(self.button_width, WIDGET_HEIGHT)
        button.connect("clicked", self.__add_button_clicked, add_button)
        self.buttons_list = []
        self.buttons_list.append(button)
        self.buttons_list.append(self.reset_button)
        self.buttons_align = self.__setup_buttons_align(self.buttons_list)
        self.right_box.pack_start(self.buttons_align)

    def hide_status(self):
        self.status_label.set_text("")

    def set_status(self, status):
        self.status_label.set_text(status)
        gobject.timeout_add(3000, self.hide_status)

    def __expose(self, widget, event):
        cr = widget.window.cairo_create()
        rect = widget.allocation

        cr.set_source_rgb(*color_hex_to_cairo(MODULE_BG_COLOR))
        cr.rectangle(rect.x, rect.y, rect.width, rect.height)
        cr.fill()

        cr.set_source_rgb(*color_hex_to_cairo(TREEVIEW_BORDER_COLOR))
        draw_line(cr, rect.x, rect.y + 1, rect.x + rect.width, rect.y + 1)

    def __setup_align(self,
                      xalign=0,
                      yalign=0,
                      xscale=0,
                      yscale=0,
                      padding_top=0,
                      padding_bottom=0,
                      padding_left=FRAME_LEFT_PADDING,
                      padding_right=0):
        align = gtk.Alignment()
        align.set(xalign, yalign, xscale, yscale)
        align.set_padding(padding_top, padding_bottom, padding_left,
                          padding_right)
        return align

    def __setup_label(self,
                      text="",
                      text_size=CONTENT_FONT_SIZE,
                      label_width=600):
        label = Label(
            text=text,
            text_size=text_size,
            text_x_align=ALIGN_MIDDLE,
            label_width=label_width,
            enable_select=False,
        )
        return label
class DetailPage(gtk.VBox):
    """
    class docs
    """

    def __init__(self):
        """
        init docs
        """
        gtk.VBox.__init__(self)

        self.__background_settings = deepin_gsettings.new("com.deepin.dde.background")

        self.draw_title_background = self.draw_tab_title_background
        self.theme = None

        self.wallpaper_box = gtk.VBox()
        self.window_theme_box = gtk.VBox()
        self.wallpaper_view = WallpaperView(padding_x=30, padding_y=ITEM_PADDING_Y)
        self.wallpaper_view_sw = self.wallpaper_view.get_scrolled_window()
        self.wallpaper_view_sw.set_size_request(-1, 426)

        position_group, self.position_combobox = get_combo_group(
            _("Position"), DRAW_COMBO_ITEM, self.on_position_combox_selected
        )
        time_group, self.time_combobox = get_combo_group(_("Duration"), TIME_COMBO_ITEM, self.on_time_combox_selected)

        self.__is_random = True
        if self.__background_settings.get_int("background-duration") == 0:
            self.__is_random = False
        self.unorder_play, self.random_toggle = get_toggle_group(
            _("Random"), self.__on_random_toggled, self.__is_random
        )
        self.button_align = gtk.Alignment()
        self.button_box = gtk.HBox(spacing=5)
        self.select_all_button = Button(_("Select all"))
        self.select_all_button.set_size_request(80, WIDGET_HEIGHT)
        self.select_all_button.connect("clicked", self.__on_select_all)
        self.delete_button = Button(_("Delete"))
        self.delete_button.set_size_request(80, WIDGET_HEIGHT)
        self.delete_button.connect("clicked", self.__on_delete)
        self.button_box.pack_start(self.select_all_button, False, False)
        self.button_box.pack_start(self.delete_button, False, False)
        self.button_align.add(self.button_box)

        self.action_bar = gtk.HBox(spacing=26)
        self.action_bar.pack_start(position_group, False, False)
        self.action_bar.pack_start(time_group, False, False)
        self.action_bar.pack_start(self.unorder_play, False, False)
        self.action_bar.pack_end(self.button_align, False, False)
        action_bar_align = gtk.Alignment()
        action_bar_align.set_size_request(-1, STATUS_HEIGHT)
        action_bar_align.set_padding(5, 5, 50, 20)
        action_bar_align.add(self.action_bar)

        self.wallpaper_box.pack_start(self.wallpaper_view_sw, True, True)
        self.wallpaper_box.pack_start(action_bar_align, False, False)

        self.pack_start(self.wallpaper_box, False, False)

        event_manager.add_callback("select-wallpaper", self.on_wallpaper_select)
        event_manager.add_callback("apply-wallpaper", self.__on_wallpaper_apply)
        event_manager.add_callback("add-wallpapers", self.__on_add_wallpapers)

    def __random_enable(self):
        self.time_combobox.set_sensitive(True)
        self.unorder_play.set_child_visible(True)
        self.random_toggle.set_child_visible(True)
        self.random_toggle.set_active(self.theme.get_background_random_mode())

    def __random_disable(self):
        self.time_combobox.set_sensitive(False)
        self.unorder_play.set_child_visible(False)
        self.random_toggle.set_child_visible(False)
        self.random_toggle.set_active(self.theme.get_background_random_mode())

    def on_wallpaper_select(self, name, obj, select_item):
        if self.wallpaper_view.is_randomable():
            self.__random_enable()
        else:
            self.__random_disable()

        if self.wallpaper_view.is_select_all():
            self.select_all_button.set_label(_("Clear all"))
        else:
            self.select_all_button.set_label(_("Select all"))
        self.select_all_button.set_size_request(80, WIDGET_HEIGHT)

    def __on_wallpaper_apply(self, name, obj, select_item):
        self.__random_disable()

        if self.wallpaper_view.is_select_all():
            self.select_all_button.set_label(_("Clear all"))
        else:
            self.select_all_button.set_label(_("Select all"))
        self.select_all_button.set_size_request(80, WIDGET_HEIGHT)

    def __on_select_all(self, widget):
        self.wallpaper_view.select_all()
        if self.wallpaper_view.is_select_all():
            self.select_all_button.set_label(_("Clear all"))
        else:
            self.select_all_button.set_label(_("Select all"))
        self.select_all_button.set_size_request(80, WIDGET_HEIGHT)

        if self.wallpaper_view.is_randomable():
            self.__random_enable()
        else:
            self.__random_disable()

    def __on_delete(self, widget):
        event_manager.emit("switch-to-deletepage", self.theme)

    def __on_random_toggled(self, widget):
        self.theme.set_background_random_mode(widget.get_active())

    def draw_tab_title_background(self, cr, widget):
        rect = widget.allocation
        cr.set_source_rgb(1, 1, 1)
        cr.rectangle(0, 0, rect.width, rect.height - 1)
        cr.fill()

    def on_position_combox_selected(self, widget, label, data, index):
        self.theme.set_background_draw_mode(data)
        self.theme.save()

    def on_time_combox_selected(self, widget, label, data, index):
        self.theme.set_background_duration(data)
        self.theme.save()

    def __set_delete_button_visible(self):
        is_editable = self.wallpaper_view.is_editable()
        if is_editable:
            self.button_align.set_padding(0, 0, 113, 5)
        else:
            self.button_align.set_padding(0, 0, 204, 5)

        self.delete_button.set_child_visible(is_editable)

    def __on_add_wallpapers(self, name, obj, image_paths):
        if len(self.wallpaper_view.items) < 2:
            self.select_all_button.set_child_visible(False)
        else:
            self.select_all_button.set_child_visible(True)
            self.select_all_button.set_label(_("Select all"))

        self.__set_delete_button_visible()

    def set_theme(self, theme):
        self.theme = theme

        draw_mode = self.theme.get_background_draw_mode()
        item_index = 0
        for index, item in enumerate(DRAW_COMBO_ITEM):
            if draw_mode == item[-1]:
                item_index = index

        self.position_combobox.set_select_index(item_index)

        duration = self.theme.get_background_duration()
        item_index = 0
        for index, item in enumerate(TIME_COMBO_ITEM):
            if duration == item[-1]:
                item_index = index

        self.time_combobox.set_select_index(item_index)
        self.wallpaper_view.set_theme(theme)

        self.__set_delete_button_visible()

        if self.wallpaper_view.is_randomable():
            self.__random_enable()
        else:
            self.__random_disable()

        if len(self.wallpaper_view.items) < 2:
            self.select_all_button.set_child_visible(False)
        else:
            self.select_all_button.set_child_visible(True)

        if self.wallpaper_view.is_select_all():
            self.select_all_button.set_label(_("Clear all"))
            self.select_all_button.set_size_request(80, WIDGET_HEIGHT)

    def draw_mask(self, cr, x, y, w, h):
        """
        Draw mask interface.
        
        @param cr: Cairo context.
        @param x: X coordiante of draw area.
        @param y: Y coordiante of draw area.
        @param w: Width of draw area.
        @param h: Height of draw area.
        """
        cr.set_source_rgb(1, 1, 1)
        cr.rectangle(x, y, w, h)
        cr.fill()
Beispiel #3
0
class DetailPage(gtk.VBox):
    '''
    class docs
    '''
    def __init__(self):
        '''
        init docs
        '''
        gtk.VBox.__init__(self)

        self.__background_settings = deepin_gsettings.new(
            "com.deepin.dde.background")

        self.draw_title_background = self.draw_tab_title_background
        self.theme = None

        self.wallpaper_box = gtk.VBox()
        self.window_theme_box = gtk.VBox()
        self.wallpaper_view = WallpaperView(padding_x=30,
                                            padding_y=ITEM_PADDING_Y)
        self.wallpaper_view_sw = self.wallpaper_view.get_scrolled_window()
        self.wallpaper_view_sw.set_size_request(-1, 426)

        position_group, self.position_combobox = get_combo_group(
            _("Position"), DRAW_COMBO_ITEM, self.on_position_combox_selected)
        time_group, self.time_combobox = get_combo_group(
            _("Duration"), TIME_COMBO_ITEM, self.on_time_combox_selected)

        self.__is_random = True
        if self.__background_settings.get_int("background-duration") == 0:
            self.__is_random = False
        self.unorder_play, self.random_toggle = get_toggle_group(
            _("Random"), self.__on_random_toggled, self.__is_random)
        self.button_align = gtk.Alignment()
        self.button_box = gtk.HBox(spacing=5)
        self.select_all_button = Button(_("Select all"))
        self.select_all_button.set_size_request(80, WIDGET_HEIGHT)
        self.select_all_button.connect("clicked", self.__on_select_all)
        self.delete_button = Button(_("Delete"))
        self.delete_button.set_size_request(80, WIDGET_HEIGHT)
        self.delete_button.connect("clicked", self.__on_delete)
        self.button_box.pack_start(self.select_all_button, False, False)
        self.button_box.pack_start(self.delete_button, False, False)
        self.button_align.add(self.button_box)

        self.action_bar = gtk.HBox(spacing=26)
        self.action_bar.pack_start(position_group, False, False)
        self.action_bar.pack_start(time_group, False, False)
        self.action_bar.pack_start(self.unorder_play, False, False)
        self.action_bar.pack_end(self.button_align, False, False)
        action_bar_align = gtk.Alignment()
        action_bar_align.set_size_request(-1, STATUS_HEIGHT)
        action_bar_align.set_padding(5, 5, 50, 20)
        action_bar_align.add(self.action_bar)

        self.wallpaper_box.pack_start(self.wallpaper_view_sw, True, True)
        self.wallpaper_box.pack_start(action_bar_align, False, False)

        self.pack_start(self.wallpaper_box, False, False)

        event_manager.add_callback("select-wallpaper",
                                   self.on_wallpaper_select)
        event_manager.add_callback("apply-wallpaper",
                                   self.__on_wallpaper_apply)
        event_manager.add_callback("add-wallpapers", self.__on_add_wallpapers)

    def __random_enable(self):
        self.time_combobox.set_sensitive(True)
        self.unorder_play.set_child_visible(True)
        self.random_toggle.set_child_visible(True)
        self.random_toggle.set_active(self.theme.get_background_random_mode())

    def __random_disable(self):
        self.time_combobox.set_sensitive(False)
        self.unorder_play.set_child_visible(False)
        self.random_toggle.set_child_visible(False)
        self.random_toggle.set_active(self.theme.get_background_random_mode())

    def on_wallpaper_select(self, name, obj, select_item):
        if self.wallpaper_view.is_randomable():
            self.__random_enable()
        else:
            self.__random_disable()

        if self.wallpaper_view.is_select_all():
            self.select_all_button.set_label(_("Clear all"))
        else:
            self.select_all_button.set_label(_("Select all"))
        self.select_all_button.set_size_request(80, WIDGET_HEIGHT)

    def __on_wallpaper_apply(self, name, obj, select_item):
        self.__random_disable()

        if self.wallpaper_view.is_select_all():
            self.select_all_button.set_label(_("Clear all"))
        else:
            self.select_all_button.set_label(_("Select all"))
        self.select_all_button.set_size_request(80, WIDGET_HEIGHT)

    def __on_select_all(self, widget):
        self.wallpaper_view.select_all()
        if self.wallpaper_view.is_select_all():
            self.select_all_button.set_label(_("Clear all"))
        else:
            self.select_all_button.set_label(_("Select all"))
        self.select_all_button.set_size_request(80, WIDGET_HEIGHT)

        if self.wallpaper_view.is_randomable():
            self.__random_enable()
        else:
            self.__random_disable()

    def __on_delete(self, widget):
        event_manager.emit("switch-to-deletepage", self.theme)

    def __on_random_toggled(self, widget):
        self.theme.set_background_random_mode(widget.get_active())

    def draw_tab_title_background(self, cr, widget):
        rect = widget.allocation
        cr.set_source_rgb(1, 1, 1)
        cr.rectangle(0, 0, rect.width, rect.height - 1)
        cr.fill()

    def on_position_combox_selected(self, widget, label, data, index):
        self.theme.set_background_draw_mode(data)
        self.theme.save()

    def on_time_combox_selected(self, widget, label, data, index):
        self.theme.set_background_duration(data)
        self.theme.save()

    def __set_delete_button_visible(self):
        is_editable = self.wallpaper_view.is_editable()
        if is_editable:
            self.button_align.set_padding(0, 0, 113, 5)
        else:
            self.button_align.set_padding(0, 0, 204, 5)

        self.delete_button.set_child_visible(is_editable)

    def __on_add_wallpapers(self, name, obj, image_paths):
        if len(self.wallpaper_view.items) < 2:
            self.select_all_button.set_child_visible(False)
        else:
            self.select_all_button.set_child_visible(True)
            self.select_all_button.set_label(_("Select all"))

        self.__set_delete_button_visible()

    def set_theme(self, theme):
        self.theme = theme

        draw_mode = self.theme.get_background_draw_mode()
        item_index = 0
        for index, item in enumerate(DRAW_COMBO_ITEM):
            if draw_mode == item[-1]:
                item_index = index

        self.position_combobox.set_select_index(item_index)

        duration = self.theme.get_background_duration()
        item_index = 0
        for index, item in enumerate(TIME_COMBO_ITEM):
            if duration == item[-1]:
                item_index = index

        self.time_combobox.set_select_index(item_index)
        self.wallpaper_view.set_theme(theme)

        self.__set_delete_button_visible()

        if self.wallpaper_view.is_randomable():
            self.__random_enable()
        else:
            self.__random_disable()

        if len(self.wallpaper_view.items) < 2:
            self.select_all_button.set_child_visible(False)
        else:
            self.select_all_button.set_child_visible(True)

        if self.wallpaper_view.is_select_all():
            self.select_all_button.set_label(_("Clear all"))
            self.select_all_button.set_size_request(80, WIDGET_HEIGHT)

    def draw_mask(self, cr, x, y, w, h):
        '''
        Draw mask interface.
        
        @param cr: Cairo context.
        @param x: X coordiante of draw area.
        @param y: Y coordiante of draw area.
        @param w: Width of draw area.
        @param h: Height of draw area.
        '''
        cr.set_source_rgb(1, 1, 1)
        cr.rectangle(x, y, w, h)
        cr.fill()
class FootBox(gtk.HBox):
    '''
    class docs
    '''
	
    def __init__(self):
        '''
        init docs
        '''
        gtk.HBox.__init__(self)

        self.button_width = 80

        self.module_id = None

        self.buttons_list = []
        self.__setup_reset_button()
        self.buttons_list.append(self.reset_button)

        self.__is_init_ui = False
   
    def __setup_reset_button(self):
        self.reset_button = Button(_("Reset"))
        #self.reset_button.set_size_request(self.button_width, WIDGET_HEIGHT)
        self.reset_button.connect("clicked", self.__reset_button_clicked)

    def __setup_buttons_align(self, list):
        buttons_align = self.__setup_align(padding_top = 7,
            padding_left = 80 - (len(list) - 1) * 10,
            padding_right = TEXT_WINDOW_RIGHT_WIDGET_PADDING)
        buttons_box = gtk.HBox(spacing = 5)
        i = 0
        while i < len(list):
            buttons_box.pack_start(list[i], False, False)
            i += 1

        buttons_align.add(buttons_box)

        return buttons_align

    def __init_ui(self):
        self.status_label = self.__setup_label("")
        self.right_box = gtk.VBox()
        self.buttons_align = self.__setup_buttons_align(self.buttons_list)
        self.right_box.pack_start(self.buttons_align)
        
        self.pack_start(self.status_label)
        self.pack_end(self.right_box, False, False)
        self.set_size_request(-1, STATUS_HEIGHT)
        
        self.connect("expose-event", self.__expose)
        
        self.__is_init_ui = True

    def __handle_dbus_reply(*reply):                                                  
        pass

    def __handle_dbus_error(*error):                                                  
        pass

    def __add_button_clicked(self, widget, argv):                                      
        bus = dbus.SessionBus()                                                              
        module_dbus_name = "com.deepin.%s_settings" % (self.module_id)                  
        module_object_name = "/com/deepin/%s_settings" % (self.module_id)                  
        if is_dbus_name_exists(module_dbus_name):                                       
            bus_object = bus.get_object(module_dbus_name, module_object_name)       
            method = bus_object.get_dbus_method("message_receiver")                 
            method("add_button_cb",                                                        
                   argv,                                                             
                   reply_handler=self.__handle_dbus_reply,                          
                   error_handler=self.__handle_dbus_error                          
                  )                    

    def __reset_button_clicked(self, widget):
        bus = dbus.SessionBus()                                                     
        module_dbus_name = "com.deepin.%s_settings" % (self.module_id)                   
        module_object_name = "/com/deepin/%s_settings" % (self.module_id)                
        if is_dbus_name_exists(module_dbus_name):                                   
            bus_object = bus.get_object(module_dbus_name, module_object_name)          
            method = bus_object.get_dbus_method("message_receiver")                 
            method("reset",                                                    
                   "",                      
                   reply_handler=self.__handle_dbus_reply,                                 
                   error_handler=self.__handle_dbus_error                  
                  )         
    
    def hide(self):
        self.hide_all()

    def show(self, module_id):
        self.module_id = module_id

        if not self.__is_init_ui:
            self.__init_ui()
       
        self.show_all()

    def hide_reset(self):
        self.reset_button.set_child_visible(False)
   
    def show_reset(self):
        self.reset_button.set_child_visible(True)

    def add_button(self, add_button):
        container_remove_all(self.buttons_align.get_children()[0])

        self.__setup_reset_button()
        button = Button(add_button)
        button.set_size_request(self.button_width, WIDGET_HEIGHT)
        button.connect("clicked", self.__add_button_clicked, add_button)
        self.buttons_list = []
        self.buttons_list.append(button)
        self.buttons_list.append(self.reset_button)
        self.buttons_align = self.__setup_buttons_align(self.buttons_list)        
        self.right_box.pack_start(self.buttons_align)

    def hide_status(self):
        self.status_label.set_text("")

    def set_status(self, status):
        self.status_label.set_text(status)
        gobject.timeout_add(3000, self.hide_status)
    
    def __expose(self, widget, event):
        cr = widget.window.cairo_create()                                       
        rect = widget.allocation                                                
        
        cr.set_source_rgb(*color_hex_to_cairo(MODULE_BG_COLOR))                     
        cr.rectangle(rect.x, rect.y, rect.width, rect.height)                       
        cr.fill()

        cr.set_source_rgb(*color_hex_to_cairo(TREEVIEW_BORDER_COLOR))
        draw_line(cr, rect.x, rect.y + 1, rect.x + rect.width, rect.y + 1)
    
    def __setup_align(self, 
                      xalign=0, 
                      yalign=0, 
                      xscale=0, 
                      yscale=0, 
                      padding_top=0, 
                      padding_bottom=0, 
                      padding_left=FRAME_LEFT_PADDING,
                      padding_right=0):
        align = gtk.Alignment()
        align.set(xalign, yalign, xscale, yscale)
        align.set_padding(padding_top, 
                          padding_bottom, 
                          padding_left, 
                          padding_right)
        return align

    def __setup_label(self, 
                      text="", 
                      text_size=CONTENT_FONT_SIZE, 
                      label_width=600):
        label = Label(text = text, 
                      text_size = text_size, 
                      text_x_align = ALIGN_MIDDLE, 
                      label_width = label_width, 
                      enable_select = False, 
                      )
        return label