Esempio n. 1
0
    def __init__(self):
        gtk.HBox.__init__(self)
        self.connect("expose-event", self.on_page_expose_event)

        self.aibizhi_cache_page = CachePage(Aibizhi())
        self.bizhi360_cache_page = CachePage(Bizhi360())
        self.aibizhi_cache_page.cache_view.try_to_fetch()
        self.bizhi360_cache_page.cache_view.try_to_fetch()

        self.favorites_page = FavoritePage(get_favorite_dir())
        self.pictures_page = LocalPicturePage(get_download_wallpaper_dir())

        self.add_item = AddItem()
        self.pictures_page.select_view.add_items([self.add_item])

        self.task_page = TaskPage()

        self.switch_page = gtk.VBox()
        self.__init_navigatebar()

        self.pack_start(self.navigatebar, False, True)
        self.pack_start(self.switch_page, True, True)

        event_manager.add_callback("switch-to-local-pictures",
                                   self.switch_to_local_pictures)
    def __init__(self, padding_x=8, padding_y=10):
        IconView.__init__(self, padding_x=padding_x, padding_y=padding_y)

        self.add_item = AddItem()
        self.add_items([self.add_item])

        self.connect("right-click-item", self.__on_right_click_item)

        event_manager.add_callback("add-wallpapers", self.on_add_wallpapers)
        event_manager.add_callback("add-download-wallpapers",
                                   self.on_add_wallpapers)
        event_manager.add_callback("wallpapers-deleted",
                                   self.on_wallpapers_deleted)
        event_manager.add_callback("select-wallpaper",
                                   self.on_wallpaper_select)
        event_manager.add_callback("apply-wallpaper", self.on_wallpaper_apply)
        event_manager.add_callback("apply-download-wallpaper",
                                   self.on_download_wallpaper_apply)
        event_manager.add_callback("delete-wallpaper-link",
                                   self.__on_delete_wallpaper_link)
        self.theme = None
    def __init__(self, padding_x=8, padding_y=10):
        IconView.__init__(self, padding_x=padding_x, padding_y=padding_y)
        
        self.add_item = AddItem()
        self.add_items([self.add_item])

        self.connect("right-click-item", self.__on_right_click_item)
        
        event_manager.add_callback("add-wallpapers", self.on_add_wallpapers)
        event_manager.add_callback("add-download-wallpapers", self.on_add_wallpapers)
        event_manager.add_callback("wallpapers-deleted", self.on_wallpapers_deleted)
        event_manager.add_callback("select-wallpaper", self.on_wallpaper_select)
        event_manager.add_callback("apply-wallpaper", self.on_wallpaper_apply)
        event_manager.add_callback("apply-download-wallpaper", self.on_download_wallpaper_apply)
        event_manager.add_callback("delete-wallpaper-link", self.__on_delete_wallpaper_link)
        self.theme = None
class WallpaperView(IconView):
    def __init__(self, padding_x=8, padding_y=10):
        IconView.__init__(self, padding_x=padding_x, padding_y=padding_y)

        self.add_item = AddItem()
        self.add_items([self.add_item])

        self.connect("right-click-item", self.__on_right_click_item)

        event_manager.add_callback("add-wallpapers", self.on_add_wallpapers)
        event_manager.add_callback("add-download-wallpapers",
                                   self.on_add_wallpapers)
        event_manager.add_callback("wallpapers-deleted",
                                   self.on_wallpapers_deleted)
        event_manager.add_callback("select-wallpaper",
                                   self.on_wallpaper_select)
        event_manager.add_callback("apply-wallpaper", self.on_wallpaper_apply)
        event_manager.add_callback("apply-download-wallpaper",
                                   self.on_download_wallpaper_apply)
        event_manager.add_callback("delete-wallpaper-link",
                                   self.__on_delete_wallpaper_link)
        self.theme = None

    def __on_delete_wallpaper_link(self, name, obj, data):
        items = filter(lambda item: item.image_path == data, self.items)
        if items:
            self.delete_items(items)

    def __on_right_click_item(self, widget, item, x, y):
        menu_items = [(None, _("Apply Wallpaper"),
                       lambda: item.do_apply_wallpaper())]
        Menu(menu_items, True).show((int(x), int(y)))

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

        self.add_items([self.add_item])

        self.add_system_wallpapers(self.theme.get_system_wallpapers())
        self.add_user_wallpapers(self.theme.get_user_wallpapers())

    def is_editable(self):
        if self.theme.is_system_theme:
            if len(self.theme.get_user_wallpapers()) == 0:
                return False

        return True

    def is_exists(self, image):
        if self.theme == None:
            return False

        if image in self.theme.get_user_wallpapers():
            return True
        return False

    def add_user_wallpapers(self, image_paths, save=False):
        self.add_images(image_paths, readonly=False)
        if save:
            if self.theme == None:
                return

            self.theme.add_user_wallpapers(image_paths)

    def add_system_wallpapers(self, image_paths):
        self.add_images(image_paths, readonly=True)

    def add_images(self, images, readonly=False):
        images = list(set(images))
        items = map(
            lambda image: WallpaperItem(image, readonly, self.theme,
                                        background_gsettings), images)
        self.add_items(items, insert_pos=-1)

    def on_wallpaper_select(self, name, obj, select_item):
        image_uris = [
            "file://%s" % item.image_path for item in self.items
            if item.is_tick
        ]
        self.apply_wallpapers(image_uris)

    def is_deletable(self):
        for item in self.items:
            if not item.is_tick:
                return True

        return False

    def delete_wallpaper(self):
        for item in self.items:
            if not item.is_tick:
                self.theme.remove_option("user_wallpaper", item.image_path)

        self.theme.save()
        self.set_theme(self.theme, True)

    def is_randomable(self):
        i = 0

        for item in self.items:
            if item.is_tick:
                i += 1
        if i < 2:
            return False

        return True

    def is_select_all(self):
        for item in self.items:
            if item.__class__.__name__ == "AddItem":
                continue

            if not item.is_tick:
                return False

        return True

    def select_all(self):
        is_select_all = self.is_select_all()

        for item in self.items:
            if is_select_all:
                item.untick()
            else:
                item.tick()

        image_uris = [
            "file://%s" % item.image_path for item in self.items
            if item.is_tick
        ]
        self.apply_wallpapers(image_uris)

    def on_download_wallpaper_apply(self, name, obj, image_path):
        image_uris = ["file://%s" % image_path]
        self.apply_wallpapers(image_uris)
        if self.is_randomable():
            self.items[-2].tick()

    def on_wallpaper_apply(self, name, obj, apply_item):
        [item.untick() for item in self.items if item != apply_item]
        image_uris = ["file://%s" % apply_item.image_path]
        self.apply_wallpapers(image_uris)

    def apply_wallpapers(self, image_paths):
        image_path_string = ";".join(image_paths)
        background_gsettings.set_string("picture-uris", image_path_string)
        if self.theme:
            self.theme.save()

    def on_add_wallpapers(self, name, obj, image_paths):
        filter_images = filter(lambda image: not self.is_exists(image),
                               image_paths)
        if filter_images:
            self.add_user_wallpapers(filter_images, save=True)
        event_manager.emit("update-theme", self.theme)

    def on_wallpapers_deleted(self, name, obj, image_paths):
        items = filter(lambda item: item.image_path in image_paths, self.items)
        if items:
            self.delete_items(items)

    def get_scrolled_window(self):
        scrolled_window = ScrolledWindow()
        scrolled_window.add_child(self)
        return scrolled_window

    def draw_mask(self, cr, x, y, w, h):
        cr.set_source_rgb(1, 1, 1)
        cr.rectangle(x, y, w, h)
        cr.fill()
class WallpaperView(IconView):
    
    def __init__(self, padding_x=8, padding_y=10):
        IconView.__init__(self, padding_x=padding_x, padding_y=padding_y)
        
        self.add_item = AddItem()
        self.add_items([self.add_item])

        self.connect("right-click-item", self.__on_right_click_item)
        
        event_manager.add_callback("add-wallpapers", self.on_add_wallpapers)
        event_manager.add_callback("add-download-wallpapers", self.on_add_wallpapers)
        event_manager.add_callback("wallpapers-deleted", self.on_wallpapers_deleted)
        event_manager.add_callback("select-wallpaper", self.on_wallpaper_select)
        event_manager.add_callback("apply-wallpaper", self.on_wallpaper_apply)
        event_manager.add_callback("apply-download-wallpaper", self.on_download_wallpaper_apply)
        event_manager.add_callback("delete-wallpaper-link", self.__on_delete_wallpaper_link)
        self.theme = None

    def __on_delete_wallpaper_link(self, name, obj, data):
        items = filter(lambda item: item.image_path == data, self.items) 
        if items:                                                               
            self.delete_items(items) 

    def __on_right_click_item(self, widget, item, x, y):                        
        menu_items = [(None, _("Apply Wallpaper"), lambda : item.do_apply_wallpaper())]
        Menu(menu_items, True).show((int(x), int(y)))

    def set_theme(self, theme):    
        self.theme = theme
        self.clear()
        self.add_item.set_theme(self.theme)
        
        self.add_items([self.add_item])
        
        self.add_system_wallpapers(self.theme.get_system_wallpapers())        
        self.add_user_wallpapers(self.theme.get_user_wallpapers())

    def is_editable(self):
        if self.theme.is_system_theme:
            if len(self.theme.get_user_wallpapers()) == 0:
                return False

        return True

    def is_exists(self, image):    
        if self.theme == None:
            return False

        if image in self.theme.get_user_wallpapers():
            return True
        return False
    
    def add_user_wallpapers(self, image_paths, save=False):
        self.add_images(image_paths, readonly=False)
        if save:
            if self.theme == None:
                return
            
            self.theme.add_user_wallpapers(image_paths)        
    
    def add_system_wallpapers(self, image_paths):
        self.add_images(image_paths, readonly=True)

    def add_images(self, images, readonly=False):
        images = list(set(images))
        items = map(lambda image: WallpaperItem(image, readonly, self.theme, background_gsettings), images)
        self.add_items(items, insert_pos=-1)
        
    def on_wallpaper_select(self, name, obj, select_item):    
        image_uris = [ "file://%s" % item.image_path for item in self.items if item.is_tick]
        self.apply_wallpapers(image_uris)

    def is_deletable(self):
        for item in self.items:
            if not item.is_tick:
                return True

        return False

    def delete_wallpaper(self):
        for item in self.items:
            if not item.is_tick:
                self.theme.remove_option("user_wallpaper", item.image_path)

        self.theme.save()
        self.set_theme(self.theme, True)

    def is_randomable(self):
        i = 0

        for item in self.items:
            if item.is_tick:
                i += 1
        if i < 2:
            return False

        return True

    def is_select_all(self):
        for item in self.items:
            if item.__class__.__name__ == "AddItem":
                continue

            if not item.is_tick:
                return False

        return True

    def select_all(self):
        is_select_all = self.is_select_all()

        for item in self.items:
            if is_select_all:
                item.untick()
            else:
                item.tick()
        
        image_uris = [ "file://%s" % item.image_path for item in self.items if item.is_tick]
        self.apply_wallpapers(image_uris)

    def on_download_wallpaper_apply(self, name, obj, image_path):
        image_uris = ["file://%s" % image_path]
        self.apply_wallpapers(image_uris)
        if self.is_randomable():
            self.items[-2].tick()
    
    def on_wallpaper_apply(self, name, obj, apply_item):
        [ item.untick() for item in self.items if item != apply_item]
        image_uris = ["file://%s" % apply_item.image_path]
        self.apply_wallpapers(image_uris)
        
    def apply_wallpapers(self, image_paths):
        image_path_string = ";".join(image_paths)
        background_gsettings.set_string("picture-uris", image_path_string)        
        if self.theme:
            self.theme.save()        
                
    def on_add_wallpapers(self, name, obj, image_paths):    
        filter_images = filter(lambda image: not self.is_exists(image), image_paths)        
        if filter_images:
            self.add_user_wallpapers(filter_images, save=True)
        event_manager.emit("update-theme", self.theme)
            
    def on_wallpapers_deleted(self, name, obj, image_paths):        
        items = filter(lambda item: item.image_path in image_paths, self.items)
        if items:        
            self.delete_items(items)
        
    def get_scrolled_window(self):    
        scrolled_window = ScrolledWindow()
        scrolled_window.add_child(self)
        return scrolled_window
    
    def draw_mask(self, cr, x, y, w, h):
        cr.set_source_rgb(1, 1, 1)
        cr.rectangle(x, y, w, h)
        cr.fill()