def __init__(self, config, window, on_streams_button_press, on_add_item, settings_save, TAB_STREAMS, add_tab): self.config = config self.window = window self.on_streams_button_press = on_streams_button_press self.on_add_item = on_add_item self.settings_save = settings_save self.stream_edit_dialog = None self.builder = ui.builder('streams') # Streams tab self.streams = self.builder.get_object('streams_page_treeview') self.streams_selection = self.streams.get_selection() self.streamswindow = self.builder.get_object('streams_page_scrolledwindow') self.tab_widget = self.builder.get_object('streams_tab_eventbox') self.tab_label = self.builder.get_object('streams_tab_label') self.tab_label.set_text(TAB_STREAMS) self.tab = add_tab(self.streamswindow, self.tab_widget, TAB_STREAMS, self.streams) self.streams.connect('button_press_event', self.on_streams_button_press) self.streams.connect('row_activated', self.on_streams_activated) self.streams.connect('key-press-event', self.on_streams_key_press) # Initialize streams data and widget self.streamsdata = self.builder.get_object('streams_liststore') self.streams.set_search_column(1)
def on_prefs_real(self): """Display the preferences dialog""" self.builder = ui.builder('preferences') self.provider = ui.css_provider('preferences') self.prefswindow = self.builder.get_object('preferences_dialog') self.prefswindow.set_transient_for(self.window) self.prefsnotebook = self.builder.get_object('preferences_notebook') tabs = ('mpd', 'display', 'behavior', 'format', 'extras', 'plugins') for name in tabs: func = getattr(self, '%s_tab' % name) cbs = globals().get('%s_cbs' % name.capitalize()) func(cbs) close_button = self.builder.get_object('preferences_closebutton') self.prefswindow.show_all() self.prefsnotebook.set_current_page(self.last_tab) close_button.grab_focus() self.prefswindow.connect('response', self._window_response) # Save previous connection properties to determine if we should try to # connect to MPD after prefs are closed: self.prev_host = self.config.host[self.config.profile_num] self.prev_port = self.config.port[self.config.profile_num] self.prev_password = self.config.password[self.config.profile_num]
def __init__(self, config, window, on_streams_button_press, on_add_item, settings_save, TAB_STREAMS, add_tab): self.config = config self.window = window self.on_streams_button_press = on_streams_button_press self.on_add_item = on_add_item self.settings_save = settings_save self.stream_edit_dialog = None self.builder = ui.builder('streams') # Streams tab self.streams = self.builder.get_object('streams_page_treeview') self.streams_selection = self.streams.get_selection() self.streamswindow = self.builder.get_object( 'streams_page_scrolledwindow') self.tab_widget = self.builder.get_object('streams_tab_eventbox') self.tab_label = self.builder.get_object('streams_tab_label') self.tab_label.set_text(TAB_STREAMS) self.tab = add_tab(self.streamswindow, self.tab_widget, TAB_STREAMS, self.streams) self.streams.connect('button_press_event', self.on_streams_button_press) self.streams.connect('row_activated', self.on_streams_activated) self.streams.connect('key-press-event', self.on_streams_key_press) # Initialize streams data and widget self.streamsdata = self.builder.get_object('streams_liststore') self.streams.set_search_column(1)
def __init__(self, config, linkcolor, on_link_click_cb, get_playing_song, TAB_INFO, on_image_activate, on_image_motion_cb, on_image_drop_cb, album_return_artist_and_tracks, add_tab): self.logger = logging.getLogger(__name__) self.config = config self.linkcolor = linkcolor self.on_link_click_cb = on_link_click_cb self.get_playing_song = get_playing_song self.album_return_artist_and_tracks = album_return_artist_and_tracks self.last_bitrate = None self.info_boxes_in_more = None self._editlabel = None self.info_left_label = None self.info_lyrics = None self._morelabel = None self._searchlabel = None self.lyrics_text = None self.album_text = None self.active = False # Info tab self.builder = ui.builder('info') self.css_provider = ui.css_provider('info') self.info_area = self.builder.get_object('info_page_scrolledwindow') self.tab_label_widget = self.builder.get_object('info_tab_eventbox') tab_label = self.builder.get_object('info_tab_label') tab_label.set_text(TAB_INFO) self.tab = add_tab(self.info_area, self.tab_label_widget, TAB_INFO, self.info_area) self._imagebox = self.builder.get_object('info_page_song_eventbox') self.image = self.builder.get_object('info_page_song_image') self.image.set_from_icon_set(ui.icon('sonata-cd-large'), -1) self._imagebox.drag_dest_set(Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, [Gtk.TargetEntry.new("text/uri-list", 0, 80), Gtk.TargetEntry.new("text/plain", 0, 80)], Gdk.DragAction.DEFAULT) self._imagebox.connect('button_press_event', on_image_activate) self._imagebox.connect('drag_motion', on_image_motion_cb) self._imagebox.connect('drag_data_received', on_image_drop_cb) self._widgets_initialize()
def __init__(self, config, linkcolor, on_link_click_cb, get_playing_song, TAB_INFO, on_image_activate, on_image_motion_cb, on_image_drop_cb, album_return_artist_and_tracks, add_tab): self.logger = logging.getLogger(__name__) self.config = config self.linkcolor = linkcolor self.on_link_click_cb = on_link_click_cb self.get_playing_song = get_playing_song self.album_return_artist_and_tracks = album_return_artist_and_tracks self.last_bitrate = None self.info_boxes_in_more = None self._editlabel = None self.info_left_label = None self.info_lyrics = None self._morelabel = None self._searchlabel = None self.lyrics_text = None self.album_text = None self.active = False # Info tab self.builder = ui.builder('info') self.css_provider = ui.css_provider('info') self.info_area = self.builder.get_object('info_page_scrolledwindow') self.tab_label_widget = self.builder.get_object('info_tab_eventbox') tab_label = self.builder.get_object('info_tab_label') tab_label.set_text(TAB_INFO) self.tab = add_tab(self.info_area, self.tab_label_widget, TAB_INFO, self.info_area) self._imagebox = self.builder.get_object('info_page_song_eventbox') self.image = self.builder.get_object('info_page_song_image') self.image.set_from_icon_set(ui.icon('sonata-cd-large'), -1) self._imagebox.drag_dest_set( Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, [ Gtk.TargetEntry.new("text/uri-list", 0, 80), Gtk.TargetEntry.new("text/plain", 0, 80) ], Gdk.DragAction.DEFAULT) self._imagebox.connect('button_press_event', on_image_activate) self._imagebox.connect('drag_motion', on_image_motion_cb) self._imagebox.connect('drag_data_received', on_image_drop_cb) self._widgets_initialize()
def __init__(self, window, tags_mpd_update, tags_set_use_mpdpath): self.window = window self.tags_mpd_update = tags_mpd_update self.tags_set_use_mpdpath = tags_set_use_mpdpath self.file_label = None self.curr_mpdpath = None self.tagnum = None self.use_mpdpaths = None self.edit_window = None self.entries = None self.tags = None self.builder = ui.builder('tagedit') self.css_provider = ui.css_provider('tagedit')
def tab_construct(): builder = ui.builder('localmpd', 'plugins') editbutton = builder.get_object('localmpd_edit_button') editbutton.connect('clicked', lambda *args: subprocess.Popen( ["gksu", "xdg-open", "/etc/mpd.conf"])) restartbutton = builder.get_object('localmpd_restart_button') restartbutton.connect('clicked', lambda *args:subprocess.Popen( ["gksu", "service", "mpd", "restart"])) label = builder.get_object('localmpd_data_label') update(label) window = builder.get_object('localmpd_scrolledwindow') window.show_all() tab_widget = builder.get_object('localmpd_tab_eventbox') # (tab content, icon name, tab name, the widget to focus on tab switch) return (window, tab_widget, "Local MPD", None)
def __init__(self, config, window, mpd, UIManager, update_menu_visibility, iterate_now, on_add_item, on_playlists_button_press, get_current_songs, connected, add_selected_to_playlist, TAB_PLAYLISTS, add_tab): self.config = config self.window = window self.mpd = mpd self.UIManager = UIManager self.update_menu_visibility = update_menu_visibility self.iterate_now = iterate_now # XXX Do we really need this? self.on_add_item = on_add_item self.on_playlists_button_press = on_playlists_button_press self.get_current_songs = get_current_songs self.add_selected_to_playlist = add_selected_to_playlist self.connected = connected self.mergepl_id = None self.actionGroupPlaylists = None self.playlist_name_dialog = None self.builder = ui.builder('playlists') # Playlists tab self.playlists = self.builder.get_object('playlists_page_treeview') self.playlists_selection = self.playlists.get_selection() self.playlistswindow = self.builder.get_object('playlists_page_scrolledwindow') self.tab_label = self.builder.get_object('playlists_tab_label') self.tab_label.set_text(TAB_PLAYLISTS) self.tab_widget = self.builder.get_object('playlists_tab_eventbox') self.tab = add_tab(self.playlistswindow, self.tab_widget, TAB_PLAYLISTS, self.playlists) self.playlists.connect('button_press_event', self.on_playlists_button_press) self.playlists.connect('row_activated', self.playlists_activated) self.playlists.connect('key-press-event', self.playlists_key_press) # Initialize playlist data and widget self.playlistsdata = self.builder.get_object('playlists_liststore') self.playlists.set_search_column(1)
def tab_construct(): builder = ui.builder('youtube', 'plugins') phrase = builder.get_object('phrase') search = builder.get_object('search') lambda_search = lambda *args: search_phrase_in_separate_thread( builder, [builder, phrase.get_text()]) phrase.connect('activate', lambda_search) search.connect('clicked', lambda_search) builder.get_object('results_view').connect( 'row_activated', lambda *args: trigger_row(builder)) window = builder.get_object('youtube_scrolledwindow') window.show_all() tab_widget = builder.get_object('youtube_tab_eventbox') return (window, tab_widget, "YouTube", None)
def __init__(self, config, window, mpd, UIManager, update_menu_visibility, iterate_now, on_add_item, on_playlists_button_press, connected, add_selected_to_playlist, TAB_PLAYLISTS, add_tab): self.config = config self.window = window self.mpd = mpd self.UIManager = UIManager self.update_menu_visibility = update_menu_visibility self.iterate_now = iterate_now # XXX Do we really need this? self.on_add_item = on_add_item self.on_playlists_button_press = on_playlists_button_press self.add_selected_to_playlist = add_selected_to_playlist self.connected = connected self.mergepl_id = None self.actionGroupPlaylists = None self.playlist_name_dialog = None self.builder = ui.builder('playlists') # Playlists tab self.playlists = self.builder.get_object('playlists_page_treeview') self.playlists_selection = self.playlists.get_selection() self.playlistswindow = self.builder.get_object( 'playlists_page_scrolledwindow') self.tab_label = self.builder.get_object('playlists_tab_label') self.tab_label.set_text(TAB_PLAYLISTS) self.tab_widget = self.builder.get_object('playlists_tab_eventbox') self.tab = add_tab(self.playlistswindow, self.tab_widget, TAB_PLAYLISTS, self.playlists) self.playlists.connect('button_press_event', self.on_playlists_button_press) self.playlists.connect('row_activated', self.playlists_activated) self.playlists.connect('key-press-event', self.playlists_key_press) # Initialize playlist data and widget self.playlistsdata = self.builder.get_object('playlists_liststore') self.playlists.set_search_column(1)
def about_load(self, stats): self.builder = ui.builder('about') self.provider = ui.css_provider('about') self.about_dialog = self.builder.get_object('about_dialog') try: self.about_dialog.set_transient_for(self.parent_window) except: pass self.about_dialog.set_version(self.version) if stats: self.about_dialog.set_copyright(self.statstext(stats)) context = self.about_dialog.get_style_context() logo_icon = Gtk.IconFactory.lookup_default('sonata-large') logo_pb = logo_icon.render_icon_pixbuf(context, -1) self.about_dialog.set_logo(logo_pb) # Add button to show keybindings: children = self.about_dialog.action_area.get_children()[-1] self.about_dialog.action_area.reorder_child(children, -2) # Connect to callbacks self.about_dialog.connect('response', self.about_close) self.about_dialog.connect('delete_event', self.about_close) shortcut_button = self.builder.get_object('shortcut_button') shortcut_button.connect('clicked', self.about_shortcuts) self.about_dialog.show_all()
def __init__(self, config, mpd, TAB_CURRENT, on_current_button_press, connected, sonata_loaded, songinfo, update_statusbar, iterate_now, libsearchfilter_get_style, add_tab): self.config = config self.mpd = mpd self.on_current_button_press = on_current_button_press self.connected = connected self.sonata_loaded = sonata_loaded self.songinfo = songinfo self.update_statusbar = update_statusbar self.iterate_now = iterate_now self.libsearchfilter_get_style = libsearchfilter_get_style self.currentdata = None self.filterbox_visible = False self.current_update_skip = False # Mapping between filter rows and self.currentdata rows self.filter_row_mapping = [] self.columnformat = None self.columns = None self.current_songs = None self.filterbox_cmd_buf = None self.filterbox_cond = None self.filterbox_source = None # TreeViewColumn, order self.column_sorted = (None, Gtk.SortType.DESCENDING) self.total_time = 0 self.edit_style_orig = None self.resizing_columns = None self.prev_boldrow = -1 self.prevtodo = None self.plpos = None self.playlist_pos_before_filter = None self.sel_rows = None # Current tab self.builder = ui.builder('current') self.current = self.builder.get_object('current_page_treeview') self.current_selection = self.current.get_selection() self.expanderwindow = self.builder.get_object('current_page_scrolledwindow') self.filterpattern = self.builder.get_object('current_page_filterbox_entry') self.filterbox = self.builder.get_object('current_page_filterbox') self.vbox_current = self.builder.get_object('current_page_v_box') tab_label = self.builder.get_object('current_tab_label') tab_label.set_text(TAB_CURRENT) self.tab_label_widget = self.builder.get_object('current_tab_eventbox') self.tab = add_tab(self.vbox_current, self.tab_label_widget, TAB_CURRENT, self.current) self.current.connect('drag_data_received', self.on_dnd) self.current.connect('row_activated', self.on_current_click) self.current.connect('button_press_event', self.on_current_button_press) self.current.connect('drag-begin', self.on_current_drag_begin) self.current.connect_after('drag-begin', self.dnd_after_current_drag_begin) self.current.connect('button_release_event', self.on_current_button_release) self.filter_changed_handler = self.filterpattern.connect('changed', self.searchfilter_feed_loop) self.filterpattern.connect('activate', self.searchfilter_on_enter) self.filterpattern.connect('key-press-event', self.searchfilter_key_pressed) filterclosebutton = self.builder.get_object( 'current_page_filterbox_closebutton') filterclosebutton.connect('clicked', self.searchfilter_toggle) # Set up current view self.initialize_columns() self.current_selection.set_mode(Gtk.SelectionMode.MULTIPLE) target_reorder = ('MY_TREE_MODEL_ROW', Gtk.TargetFlags.SAME_WIDGET, 0) target_file_managers = ('text/uri-list', 0, 0) self.current.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, [target_reorder, target_file_managers], Gdk.DragAction.COPY | Gdk.DragAction.DEFAULT) self.current.enable_model_drag_dest([target_reorder, target_file_managers], Gdk.DragAction.MOVE | Gdk.DragAction.DEFAULT) self.current.connect('drag-data-get', self.dnd_get_data_for_file_managers)
def __init__(self, config, mpd, name, on_button_press, connected, sonata_loaded, songinfo, update_statusbar, iterate_now, add_tab): self.config = config self.mpd = mpd self.on_button_press = on_button_press self.connected = connected self.sonata_loaded = sonata_loaded self.songinfo = songinfo self.update_statusbar = update_statusbar self.iterate_now = iterate_now self.store = None self.filterbox_visible = False self.update_skip = False self.columnformat = None self.columns = None self.refilter_handler_id = None # TreeViewColumn, order self.column_sorted = (None, Gtk.SortType.DESCENDING) self.total_time = 0 self.resizing_columns = None self.prev_boldrow = -1 self.playlist_pos_before_filter = None self.sel_rows = None # Current tab builder = ui.builder('current') self.view = builder.get_object('current_page_treeview') self.selection = self.view.get_selection() self.filterpattern = builder.get_object('current_page_filterbox_entry') self.filterbox = builder.get_object('current_page_filterbox') self.vbox = builder.get_object('current_page_v_box') builder.get_object('current_tab_label').set_text(name) tab_label_widget = builder.get_object('current_tab_eventbox') self.tab = add_tab(self.vbox, tab_label_widget, name, self.view) self.view.connect('drag-data-received', self.on_dnd_received) self.view.connect('row-activated', self.on_click) self.view.connect('button-press-event', self.on_button_press) self.view.connect('drag-begin', self.on_drag_begin) self.view.connect_after('drag-begin', self.on_dnd_after_drag_begin) self.view.connect('button-release-event', self.on_button_release) self.filter_changed_handler = self.filterpattern.connect( 'changed', self.searchfilter_key_pressed) self.filterpattern.connect('activate', self.searchfilter_on_enter) filterclosebutton = builder.get_object( 'current_page_filterbox_closebutton') filterclosebutton.connect('clicked', self.searchfilter_toggle) # Set up current view self.initialize_columns() self.selection.set_mode(Gtk.SelectionMode.MULTIPLE) target_reorder = ('MY_TREE_MODEL_ROW', Gtk.TargetFlags.SAME_WIDGET, 0) target_file_managers = ('text/uri-list', 0, 0) self.view.enable_model_drag_source( Gdk.ModifierType.BUTTON1_MASK, [target_reorder, target_file_managers], Gdk.DragAction.COPY | Gdk.DragAction.DEFAULT) self.view.enable_model_drag_dest( [target_reorder, target_file_managers], Gdk.DragAction.MOVE | Gdk.DragAction.DEFAULT) self.view.connect('drag-data-get', self.dnd_get_data_for_file_managers)