def __init__(self):
     gtk.VBox.__init__(self)
     
     self.set_spacing(10)
     self.local_view_page = LocalSearchView(local_search_tab)
     
     self.close_button = SearchCloseButton()
     self.line_dcolor = app_theme.get_color("globalItemHighlight")
     close_button_align = set_widget_gravity(self.close_button, gravity=(0.5, 0.5, 0, 0),
                                             paddings=(0, 0, 5, 10))
     close_button_align.connect("expose-event",  self.on_close_button_expose_event)
     
     self.tab_switcher = TabSwitcher([TabItem(_("Library"), self.local_view_page)])
     self.tab_switcher.connect("tab-switch-start", lambda switcher, tab_index: self.switch_result_view(tab_index))
     tab_switcher_align = set_widget_gravity(self.tab_switcher, gravity=(0, 0, 1, 1),
                                             paddings=(10, 0, 0, 0))
     tab_switcher_box = gtk.HBox()
     tab_switcher_box.pack_start(tab_switcher_align, True, True)
     tab_switcher_box.pack_start(close_button_align, False, False)
     
     self.result_page = gtk.VBox()
     self.result_page.add(self.local_view_page)
     
     self.pack_start(tab_switcher_box, False, True)
     self.pack_start(self.result_page, True, True)
     
     Dispatcher.connect("add-search-view", self.on_dispatcher_add_search_view)
     Dispatcher.connect("remove-search-view", self.on_dispatcher_remove_search_view)
     Dispatcher.connect("switch-browser", self.on_list_manager_switch_browser)
    def __init__(self):
        gtk.VBox.__init__(self)

        self.set_spacing(10)
        self.local_view_page = LocalSearchView(local_search_tab)

        self.close_button = SearchCloseButton()
        self.line_dcolor = app_theme.get_color("globalItemHighlight")
        close_button_align = set_widget_gravity(self.close_button,
                                                gravity=(0.5, 0.5, 0, 0),
                                                paddings=(0, 0, 5, 10))
        close_button_align.connect("expose-event",
                                   self.on_close_button_expose_event)

        self.tab_switcher = TabSwitcher(
            [TabItem(_("Library"), self.local_view_page)])
        self.tab_switcher.connect(
            "tab-switch-start",
            lambda switcher, tab_index: self.switch_result_view(tab_index))
        tab_switcher_align = set_widget_gravity(self.tab_switcher,
                                                gravity=(0, 0, 1, 1),
                                                paddings=(10, 0, 0, 0))
        tab_switcher_box = gtk.HBox()
        tab_switcher_box.pack_start(tab_switcher_align, True, True)
        tab_switcher_box.pack_start(close_button_align, False, False)

        self.result_page = gtk.VBox()
        self.result_page.add(self.local_view_page)

        self.pack_start(tab_switcher_box, False, True)
        self.pack_start(self.result_page, True, True)

        Dispatcher.connect("add-search-view",
                           self.on_dispatcher_add_search_view)
        Dispatcher.connect("remove-search-view",
                           self.on_dispatcher_remove_search_view)
        Dispatcher.connect("switch-browser",
                           self.on_list_manager_switch_browser)
class GlobalSearch(gtk.VBox):
    
    def __init__(self):
        gtk.VBox.__init__(self)
        
        self.set_spacing(10)
        self.local_view_page = LocalSearchView(local_search_tab)
        
        self.close_button = SearchCloseButton()
        self.line_dcolor = app_theme.get_color("globalItemHighlight")
        close_button_align = set_widget_gravity(self.close_button, gravity=(0.5, 0.5, 0, 0),
                                                paddings=(0, 0, 5, 10))
        close_button_align.connect("expose-event",  self.on_close_button_expose_event)
        
        self.tab_switcher = TabSwitcher([TabItem(_("Library"), self.local_view_page)])
        self.tab_switcher.connect("tab-switch-start", lambda switcher, tab_index: self.switch_result_view(tab_index))
        tab_switcher_align = set_widget_gravity(self.tab_switcher, gravity=(0, 0, 1, 1),
                                                paddings=(10, 0, 0, 0))
        tab_switcher_box = gtk.HBox()
        tab_switcher_box.pack_start(tab_switcher_align, True, True)
        tab_switcher_box.pack_start(close_button_align, False, False)
        
        self.result_page = gtk.VBox()
        self.result_page.add(self.local_view_page)
        
        self.pack_start(tab_switcher_box, False, True)
        self.pack_start(self.result_page, True, True)
        
        Dispatcher.connect("add-search-view", self.on_dispatcher_add_search_view)
        Dispatcher.connect("remove-search-view", self.on_dispatcher_remove_search_view)
        Dispatcher.connect("switch-browser", self.on_list_manager_switch_browser)
        
    def on_dispatcher_add_search_view(self, widget, tab_item):    
        self.tab_switcher.add_item(tab_item)
        
    def on_dispatcher_remove_search_view(self, widget, tab_item):
        self.tab_switcher.remove_item(tab_item)
        
    def switch_result_view(self, item):    
        switch_tab(self.result_page, item.search_view)
            
    def begin_search(self, keyword):
        for item in self.tab_switcher.items:
            if hasattr(item.search_view, "start_search_songs"):
                item.search_view.start_search_songs(keyword)
        
    def on_close_button_expose_event(self, widget, event):    
        cr = widget.window.cairo_create()
        rect = widget.allocation
        cr.set_source_rgb(*color_hex_to_cairo(self.line_dcolor.get_color()))
        cr.rectangle(rect.x, rect.y + rect.height - 1, rect.width, 1)
        cr.fill()
        
    def on_list_manager_switch_browser(self, widget, data, is_switched):    
        current_index = None
        for index, item in enumerate(self.tab_switcher.items):
            if item.search_view.source_tab == data:
                current_index = index
                break
            
        if current_index != None:    
            self.tab_switcher.active_item_by_index(current_index)
class GlobalSearch(gtk.VBox):
    def __init__(self):
        gtk.VBox.__init__(self)

        self.set_spacing(10)
        self.local_view_page = LocalSearchView(local_search_tab)

        self.close_button = SearchCloseButton()
        self.line_dcolor = app_theme.get_color("globalItemHighlight")
        close_button_align = set_widget_gravity(self.close_button,
                                                gravity=(0.5, 0.5, 0, 0),
                                                paddings=(0, 0, 5, 10))
        close_button_align.connect("expose-event",
                                   self.on_close_button_expose_event)

        self.tab_switcher = TabSwitcher(
            [TabItem(_("Library"), self.local_view_page)])
        self.tab_switcher.connect(
            "tab-switch-start",
            lambda switcher, tab_index: self.switch_result_view(tab_index))
        tab_switcher_align = set_widget_gravity(self.tab_switcher,
                                                gravity=(0, 0, 1, 1),
                                                paddings=(10, 0, 0, 0))
        tab_switcher_box = gtk.HBox()
        tab_switcher_box.pack_start(tab_switcher_align, True, True)
        tab_switcher_box.pack_start(close_button_align, False, False)

        self.result_page = gtk.VBox()
        self.result_page.add(self.local_view_page)

        self.pack_start(tab_switcher_box, False, True)
        self.pack_start(self.result_page, True, True)

        Dispatcher.connect("add-search-view",
                           self.on_dispatcher_add_search_view)
        Dispatcher.connect("remove-search-view",
                           self.on_dispatcher_remove_search_view)
        Dispatcher.connect("switch-browser",
                           self.on_list_manager_switch_browser)

    def on_dispatcher_add_search_view(self, widget, tab_item):
        self.tab_switcher.add_item(tab_item)

    def on_dispatcher_remove_search_view(self, widget, tab_item):
        self.tab_switcher.remove_item(tab_item)

    def switch_result_view(self, item):
        switch_tab(self.result_page, item.search_view)

    def begin_search(self, keyword):
        for item in self.tab_switcher.items:
            if hasattr(item.search_view, "start_search_songs"):
                item.search_view.start_search_songs(keyword)

    def on_close_button_expose_event(self, widget, event):
        cr = widget.window.cairo_create()
        rect = widget.allocation
        cr.set_source_rgb(*color_hex_to_cairo(self.line_dcolor.get_color()))
        cr.rectangle(rect.x, rect.y + rect.height - 1, rect.width, 1)
        cr.fill()

    def on_list_manager_switch_browser(self, widget, data, is_switched):
        current_index = None
        for index, item in enumerate(self.tab_switcher.items):
            if item.search_view.source_tab == data:
                current_index = index
                break

        if current_index != None:
            self.tab_switcher.active_item_by_index(current_index)