def delayed_song_set(): song = library.get(config.get("memory", "song")) seek_pos = config.getint("memory", "seek") config.set("memory", "seek", 0) player.setup(self.playlist, song, seek_pos)
def __init__(self, library, player): super(QuodLibetWindow, self).__init__() self.last_dir = const.HOME self.__update_title(player) self.set_default_size(550, 450) main_box = gtk.VBox() self.add(main_box) # create test instance of the MPD backend self._mpd = quodmpd.QuodMpd() # create main menubar, load/restore accelerator groups self.__library = library self.__create_menu(player, library) self.add_accel_group(self.ui.get_accel_group()) accel_fn = os.path.join(const.USERDIR, "accels") gtk.accel_map_load(accel_fn) accelgroup = gtk.accel_groups_from_object(self)[0] accelgroup.connect('accel-changed', lambda *args: gtk.accel_map_save(accel_fn)) main_box.pack_start(self.ui.get_widget("/Menu"), expand=False) # get the playlist up before other stuff self.songlist = MainSongList(library, player) self.songlist.show_all() self.add_accel_group(self.songlist.accelerators) self.songlist.connect_after( 'drag-data-received', self.__songlist_drag_data_recv) self.song_scroller = SongListScroller( self.ui.get_widget("/Menu/View/SongList")) self.song_scroller.add(self.songlist) self.qexpander = QueueExpander( self.ui.get_widget("/Menu/View/Queue"), library, player) self.playlist = PlaylistMux( player, self.qexpander.model, self.songlist.model) top_bar = TopBar(self, player, library) top_align = Alignment(top_bar, border=3, bottom=-3) main_box.pack_start(top_align, expand=False) self.__browserbox = Alignment(top=3, bottom=3) main_box.pack_start(self.__browserbox) statusbox = StatusBarBox(self.songlist.model, player) self.order = statusbox.order self.repeat = statusbox.repeat self.statusbar = statusbox.statusbar main_box.pack_start(Alignment(statusbox, border=3, top=-3), expand=False) self.songpane = gtk.VPaned() self.songpane.pack1(self.song_scroller, resize=True, shrink=False) self.songpane.pack2(self.qexpander, resize=True, shrink=False) self.__handle_position = self.songpane.get_property("position") self.song_scroller.connect('notify::visible', self.__show_or) self.qexpander.connect('notify::visible', self.__show_or) self.qexpander.connect('notify::expanded', self.__expand_or) self.qexpander.connect('size-allocate', self.__qex_size_allocate) self.songpane.connect('notify', self.__moved_pane_handle) sort = config.get('memory', 'sortby') self.songlist.set_sort_by(None, sort[1:], order=int(sort[0])) self.browser = None main_box.show_all() try: self.select_browser( self, config.get("memory", "browser"), library, player, True) except: config.set("memory", "browser", browsers.name(0)) config.save(const.CONFIG) raise # set at least the playlist before the mainloop starts.. player.setup(self.playlist, None, 0) def delayed_song_set(): song = library.get(config.get("memory", "song")) seek_pos = config.getint("memory", "seek") config.set("memory", "seek", 0) player.setup(self.playlist, song, seek_pos) gobject.idle_add(delayed_song_set) self.showhide_playlist(self.ui.get_widget("/Menu/View/SongList")) self.showhide_playqueue(self.ui.get_widget("/Menu/View/Queue")) self.songlist.connect('popup-menu', self.__songs_popup_menu) self.songlist.connect('columns-changed', self.__cols_changed) self.songlist.connect('columns-changed', self.__hide_headers) self.songlist.get_selection().connect( 'changed', util.DeferredSignal(self.__set_time)) lib = library.librarian gobject_weak(lib.connect, 'removed', self.__set_time, parent=self) gobject_weak(lib.connect, 'added', self.__set_time, parent=self) gobject_weak(lib.connect_object, 'changed', self.__song_changed, player, parent=self) player_sigs = [ ('song-ended', self.__song_ended), ('song-started', self.__song_started), ('paused', self.__update_paused, True), ('unpaused', self.__update_paused, False), ] for sig in player_sigs: gobject_weak(player.connect, *sig, **{"parent": self}) targets = [("text/uri-list", 0, 1)] self.drag_dest_set( gtk.DEST_DEFAULT_ALL, targets, gtk.gdk.ACTION_DEFAULT) self.connect_object('drag-motion', QuodLibetWindow.__drag_motion, self) self.connect_object('drag-leave', QuodLibetWindow.__drag_leave, self) self.connect_object( 'drag-data-received', QuodLibetWindow.__drag_data_received, self) if config.getboolean('library', 'refresh_on_start'): self.__rebuild(None, False) self.connect_object("key-press-event", self.__key_pressed, player) self.connect("delete-event", self.__save_browser) self.connect("destroy", self.__destroy) self.enable_window_tracking("quodlibet")