📄 callbackhandler.py
字号:
def on_video_time_scale_value_changed(self, videoTimeScale): videoDisplay = self.mainApp.videoDisplay renderer = videoDisplay.activeRenderer if videoDisplay.isPlaying and renderer and videoTimeScale.buttonsDown: renderer.playFromTime(videoTimeScale.get_value()) return True def on_video_time_scale_format_value(self, scale, seconds): videoLength = self.mainFrame.videoLength if videoLength is None or videoLength <= 0: return "" def formatTime(seconds): mins, secs = divmod(seconds, 60) hours, mins = divmod(mins, 60) if hours > 0: return "%02d:%02d:%02d" % (hours, mins, secs) else: return "%02d:%02d" % (mins, secs) return "%s / %s" % (formatTime(seconds), formatTime(videoLength)) def on_volume_scale_value_changed(self, scale): self.mainApp.videoDisplay.setVolume(scale.get_value()) def on_open_video_activate(self, event = None): chooser = gtk.FileChooserDialog("Open Files...", self.mainFrame.widgetTree['main-window'], gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT)) chooser.set_select_multiple(True) if (CallbackHandler.current_folder): chooser.set_current_folder(CallbackHandler.current_folder) if chooser.run() == gtk.RESPONSE_ACCEPT: files = chooser.get_filenames() eventloop.addIdle(lambda:singleclick.parseCommandLineArgs (files), "Open Files") CallbackHandler.current_folder = chooser.get_current_folder() chooser.destroy() def on_save_video_activate(self, event = None): videoPath = self.mainFrame.currentVideoFilename if videoPath is None: return self.mainApp.videoDisplay.pause() chooser = gtk.FileChooserDialog("Save Video As...", self.mainFrame.widgetTree['main-window'], gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT)) chooser.set_current_name(os.path.basename(videoPath)) if (CallbackHandler.current_folder): chooser.set_current_folder(CallbackHandler.current_folder) if chooser.run() == gtk.RESPONSE_ACCEPT: savePath = chooser.get_filename() def getExt(path): return os.path.splitext(path)[1] if getExt(savePath) == '': savePath += getExt(videoPath) print "saving %r to %r" % (videoPath, savePath) shutil.copyfile(videoPath, savePath) CallbackHandler.current_folder = chooser.get_current_folder() chooser.destroy() def on_play_activate(self, event): currentDisplay = self.mainApp.playbackController.currentDisplay if currentDisplay == self.mainApp.videoDisplay: self.mainApp.videoDisplay.play() else: self.mainApp.playbackController.enterPlayback() def on_stop_activate(self, event): currentDisplay = self.mainApp.playbackController.currentDisplay if currentDisplay == self.mainApp.videoDisplay: self.mainApp.videoDisplay.pause() else: pass # I think this will happen if we play an item externally. Not # sure what to do here. def on_quit_activate(self, event): app.controller.quit() def on_fullscreen_activate(self, event): self.mainFrame.setFullscreen(True) def on_leave_fullscreen_activate(self, event): self.mainFrame.setFullscreen(False) def on_fullscreen_button_clicked(self, event = None): if self.mainFrame.isFullscreen: self.mainFrame.setFullscreen(False) else: self.mainFrame.setFullscreen(True) def on_remove_channel_activate(self, event = None): eventloop.addIdle (app.controller.removeCurrentFeed, "Remove Channel") def on_rename_channel_activate(self, event = None): eventloop.addIdle (app.controller.renameCurrentTab, "Rename Tab") def on_remove_playlist_activate(self, event = None): eventloop.addIdle (app.controller.removeCurrentPlaylist, "Remove Playlist") def on_remove_video_activate(self, event = None): eventloop.addIdle (app.controller.removeCurrentItems, "Remove Videos") def on_rename_playlist_activate(self, event = None): eventloop.addIdle (app.controller.renameCurrentTab, "Rename Tab") def on_update_channel_activate(self, event = None): eventloop.addIdle (app.controller.updateCurrentFeed, "Update Channel") def on_update_all_channels_activate(self, event = None): eventloop.addIdle (app.controller.updateAllFeeds, "Update All Channels") def on_copy_channel_link_activate(self, event = None): eventloop.addIdle (app.controller.copyCurrentFeedURL, "Copy feed URL") def on_mail_channel_link_activate(self, event = None): print "Mail Chanel Link unimplemented" def on_copy_video_link_activate(self, event = None): print "Copy Video Link unimplemented" def on_add_channel_button_clicked(self, event = None): eventloop.addIdle(lambda:app.controller.addAndSelectFeed(), "Add Channel") def on_add_search_channel_button_clicked(self, event = None): eventloop.addIdle(lambda:app.controller.addSearchFeed(), "Add SearchChannel") def on_add_guide_button_clicked(self, event = None): eventloop.addIdle(lambda:app.controller.addAndSelectGuide(), "Add Guide") def on_new_playlist_activate(self, event=None): playlist.createNewPlaylist() def on_new_playlist_folder_activate(self, event=None): folder.createNewPlaylistFolder() def on_new_channel_folder_activate(self, event=None): folder.createNewChannelFolder() def on_preference(self, event = None): import autodler # get our add channel dialog movie_dir = config.get(prefs.MOVIES_DIRECTORY) if config.get(prefs.PRESERVE_DISK_SPACE): old_disk = config.get(prefs.PRESERVE_X_GB_FREE) else: old_disk = 0 widgetTree = MainFrame.WidgetTree(resources.path('democracy.glade'), 'dialog-preferences', 'democracyplayer') dialog = widgetTree['dialog-preferences'] mainWindow = self.mainFrame.widgetTree['main-window'] dialog.set_transient_for(mainWindow) AttachBoolean (widgetTree['checkbutton-limit'], prefs.LIMIT_UPSTREAM, widgetTree['spinbutton-limit']) AttachBoolean (widgetTree['checkbutton-padding'], prefs.PRESERVE_DISK_SPACE, widgetTree['spinbutton-padding']) AttachBoolean (widgetTree['checkbutton-autorun'], prefs.RUN_DTV_AT_STARTUP) AttachInteger (widgetTree['spinbutton-limit'], prefs.UPSTREAM_LIMIT_IN_KBS) AttachInteger (widgetTree['spinbutton-bt-min-port'], prefs.BT_MIN_PORT) AttachInteger (widgetTree['spinbutton-bt-max-port'], prefs.BT_MAX_PORT) AttachInteger (widgetTree['spinbutton-max-manual'], prefs.MAX_MANUAL_DOWNLOADS) AttachFloat(widgetTree['spinbutton-padding'], prefs.PRESERVE_X_GB_FREE) AttachCombo (widgetTree['combobox-poll'], prefs.CHECK_CHANNELS_EVERY_X_MN, (30, 60, -1)) AttachCombo (widgetTree['combobox-expiration'], prefs.EXPIRE_AFTER_X_DAYS, (1, 3, 6, 10, 30, -1)) AttachBooleanRadio (widgetTree['radiobutton-playback-one'], widgetTree['radiobutton-playback-all'], prefs.SINGLE_VIDEO_PLAYBACK_MODE) try: os.makedirs (movie_dir) except: pass chooser = widgetTree['filechooserbutton-movies-directory'] chooser.set_filename (movie_dir + "/") # run the dialog response = dialog.run() autodler.updatePrefs() new_movie_dir = widgetTree['filechooserbutton-movies-directory'].get_filename() if (movie_dir != new_movie_dir): print "NEW: %r" % new_movie_dir migrate_widgetTree = MainFrame.WidgetTree(resources.path('democracy.glade'), 'dialog-migrate', 'democracyplater') migrate_dialog = migrate_widgetTree['dialog-migrate'] response = migrate_dialog.run() app.changeMoviesDirectory(new_movie_dir, response == gtk.RESPONSE_YES) migrate_dialog.destroy() dialog.destroy() if config.get(prefs.BT_MAX_PORT) < config.get(prefs.BT_MIN_PORT): config.set(prefs.BT_MAX_PORT, config.get(prefs.BT_MIN_PORT)) startup.updateAutostart() if config.get(prefs.PRESERVE_DISK_SPACE): new_disk = config.get(prefs.PRESERVE_X_GB_FREE) else: new_disk = 0 def on_about_clicked(self, event = None): self.mainFrame.about() def on_donate_clicked(self, event = None): print "Donate unimplemented" def on_delete(self, event = None): eventloop.addUrgentCall(app.controller.removeCurrentSelection, "remove current selection") def on_button_chrome_search_go_clicked (self, event=None): widgetTree = self.mainFrame.widgetTree term = widgetTree["entry-chrome-search-term"].get_text() iter = widgetTree["combobox-chrome-search-engine"].get_active_iter() (engine,) = widgetTree["combobox-chrome-search-engine"].get_model().get(iter, 0) eventloop.addIdle (lambda:app.controller.performSearch (engine, term), "Search for %s on %s" % (term, engine))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -