import os
from deepin_utils.file import get_parent_dir
sys.path.append(os.path.join(get_parent_dir(__file__, 4), "dss"))

from display_view import DisplayView
from module_frame import ModuleFrame

if __name__ == "__main__":
    module_frame = ModuleFrame(
        os.path.join(get_parent_dir(__file__, 2), "config.ini"))

    display_view = DisplayView()

    module_frame.add(display_view)

    def message_handler(*message):
        (message_type, message_content) = message
        if message_type == "show_again":
            display_view.show_again()
            module_frame.send_module_info()
        elif message_type == "reset":
            display_view.reset()
        elif message_type == "exit":
            module_frame.exit()
        elif message_type == "size_changed":
            pass

    module_frame.module_message_handler = message_handler

    module_frame.run()
        cr.rectangle(x, y, w, h)
        cr.fill()
    
    def __make_align(self, widget=None, xalign=0.0, yalign=0.5, xscale=1.0,
                     yscale=0.0, padding_top=0, padding_bottom=0, padding_left=0,
                     padding_right=0, width=-1, height=CONTAINNER_HEIGHT):
        align = gtk.Alignment()
        align.set_size_request(width, height)
        align.set(xalign, yalign, xscale, yscale)
        align.set_padding(padding_top, padding_bottom, padding_left, padding_right)
        if widget:
            align.add(widget)
        return align
if __name__ == '__main__':
    gtk.gdk.threads_init()
    module_frame = ModuleFrame(os.path.join(get_parent_dir(__file__, 2), "config.ini"))

    sys_info = SysInfo(module_frame)
    
    module_frame.add(sys_info.alignment_widgets["main_hbox"])
    
    def message_handler(*message):
        (message_type, message_content) = message
        if message_type == "show_again":
            module_frame.send_module_info()
        elif message_type == "exit":
            module_frame.exit()

    module_frame.module_message_handler = message_handler        
    module_frame.run()
class DeepinIndividuation(object):
    
    config_file = os.path.join(get_parent_dir(__file__, 2), "config.ini")
    
    def __init__(self):
        
        # Init theme datas.
        self.__init_data()
        argv = ""
        for theme in theme_manager.get_user_themes() + theme_manager.get_system_themes():
            argv += theme.get_name() + ";"
        self.module_frame = ModuleFrame(self.config_file, argv)
        
        # Init slider.
        self.slider = HSlider()
    
        self.all_page = MainBox()
    
        # Add widgets in slider.
        self.all_page.set_size_request(PAGE_WIDTH, PAGE_HEIGHT)
        
        # Connect events.
        event_manager.add_callback("add-local-wallpapers", self.add_local_wallpappers)
        
        # Connect widgets.
        self.module_frame.add(self.slider)
        self.module_frame.connect("realize", lambda w: self.slider.set_to_page(self.all_page))
        self.module_frame.module_message_handler = self.message_handler
        self.module_frame.run()        

    def add_local_wallpappers(self, name, obj, theme):
        d = gtk.FileChooserDialog(
                "Choose Pictures",
                None,
                gtk.FILE_CHOOSER_ACTION_OPEN,
                (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
                 gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT)
                )
        d.set_select_multiple(True)
        d.set_current_folder(get_images_dir())
        pic_filter = gtk.FileFilter()
        pic_filter.set_name(_("Image files"))
        pic_filter.add_mime_type("image/*")
        d.add_filter(pic_filter)
        response = d.run()
        if(response == gtk.RESPONSE_ACCEPT):
            filenames = d.get_filenames()
            wallpapper_path = get_download_wallpaper_dir()
            for name in filenames:
                shutil.copy2(name, wallpapper_path)
        d.destroy()

    def __init_data(self):
        theme_manager.load()
        theme_manager.untitled_theme(theme_manager.get_default_theme())
    
    def message_handler(self, *message):
        (message_type, message_content) = message
        if message_type == "click_crumb":
            (crumb_index, crumb_label) = message_content
                
        elif message_type == "show_again":
            self.module_frame.send_module_info()

        elif message_type == "switch-theme":
            theme = None

            for item in theme_manager.get_user_themes() + theme_manager.get_system_themes():
                if item.get_name() == message_content:
                    theme = item
                    break

            if theme:
                print "DEBUG", theme
                event_manager.emit("theme-detail", theme)

        elif message_type == "exit":
            self.module_frame.exit()