⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callbackhandler.py

📁 属性sosuo算法
💻 PY
📖 第 1 页 / 共 2 页
字号:
"""Frontend callback handler.  Responsible for handling all GUI actions."""import appimport gobjectimport gtkimport gtk.gdkimport osimport shutilimport frontendimport configimport prefsimport resourcesimport MainFrameimport singleclickimport eventloopimport mathimport dialogsimport folderimport playlistimport platformutilsimport startupfrom gtcache import gettext as _ def AttachBoolean (widget, descriptor, sensitive_widget = None):    def BoolChanged (widget):         config.set (descriptor, widget.get_active())         if (sensitive_widget != None):             sensitive_widget.set_sensitive (widget.get_active())    widget.set_active (config.get(descriptor))    if (sensitive_widget != None):        sensitive_widget.set_sensitive (widget.get_active())    widget.connect ('toggled', BoolChanged) def AttachBooleanRadio (widget_true, widget_false, descriptor, sensitive_widget = None):    def BoolChanged (widget):         config.set (descriptor, widget.get_active())         if (sensitive_widget != None):             sensitive_widget.set_sensitive (widget.get_active())    if config.get(descriptor):        widget_true.set_active (True)    else:        widget_false.set_active (False)    if (sensitive_widget != None):        sensitive_widget.set_sensitive (widget_true.get_active())    widget_true.connect ('toggled', BoolChanged)def AttachInteger (widget, descriptor):    def IntegerChanged (widget):        try:            config.set (descriptor, widget.get_value_as_int())        except:            pass    widget.set_value (config.get(descriptor))    widget.connect ('changed', IntegerChanged)def AttachFloat (widget, descriptor):    def FloatChanged (widget):        try:            config.set (descriptor, widget.get_value())        except:            pass    widget.set_value (config.get(descriptor))    widget.connect ('changed', FloatChanged)def AttachCombo (widget, descriptor, values):    def ComboChanged (widget):        config.set (descriptor, values[widget.get_active()])    value = config.get (descriptor)    widget.set_active (-1)    for i in xrange (len (values)):        if values[i] == value:            widget.set_active (i)            break    widget.connect ('changed', ComboChanged)class CallbackHandler(object):    """Class to handle menu item activation, button presses, etc.  The method    names for this class correspond to the event handler that they implement.    The event handler name's are chosen in glade.  CallbackHandler uses the    underscored_method_name convention for its methods, because that's the    default for glade.    """    current_folder = None    def __init__(self, mainFrame):        self.mainFrame = mainFrame        self.mainApp = app.controller    def actionGroups (self):        platformutils.confirmMainThread()        actionGroups = {}        actionGroups["VideoSelected"] = gtk.ActionGroup("VideoSelected")        actionGroups["VideosSelected"] = gtk.ActionGroup("VideosSelected")        actionGroups["VideoPlaying"] = gtk.ActionGroup("VideoPlaying")        actionGroups["VideoPlayable"] = gtk.ActionGroup("VideoPlayable")        actionGroups["ChannelSelected"] = gtk.ActionGroup("ChannelSelected")        actionGroups["ChannelsSelected"] = gtk.ActionGroup("ChannelsSelected")        actionGroups["ChannelFolderSelected"] = gtk.ActionGroup("ChannelFolderSelected")        actionGroups["ChannelLikeSelected"] = gtk.ActionGroup("ChannelLikeSelected")        actionGroups["ChannelLikesSelected"] = gtk.ActionGroup("ChannelLikesSelected")        actionGroups["PlaylistLikeSelected"] = gtk.ActionGroup("PlaylistLikeSelected")        actionGroups["PlaylistLikesSelected"] = gtk.ActionGroup("PlaylistLikesSelected")        actionGroups["Ubiquitous"] = gtk.ActionGroup("Ubiquitous")        try:            fullscreen = gtk.STOCK_FULLSCREEN        except:            fullscreen = None        actionGroups["VideoSelected"].add_actions ([            ('SaveVideo', gtk.STOCK_SAVE, _('Save Video _As...'), '<Control>s', _('Save this video'), self.on_save_video_activate),            ('CopyVideoURL', None, _('_Copy Video URL'), None, None, self.on_copy_video_link_activate),            ])        actionGroups["VideosSelected"].add_actions ([            ('RemoveVideos', None, _('_Remove Video'), None, None, self.on_remove_video_activate),            ])        actionGroups["VideoPlaying"].add_actions ([            ('Fullscreen', fullscreen, _('_Fullscreen'), '<Control>f', None, self.on_fullscreen_button_clicked),            ('StopVideo', None, _('_Stop Video'), None, None, self.on_stop_activate),            ('NextVideo', None, _('_Next Video'), '<Alt>Right', None, self.on_next_button_clicked),            ('PreviousVideo', None, _('_Previous Video'), '<Alt>Left', None, self.on_previous_button_clicked),            ])        actionGroups["VideoPlayable"].add_actions ([            ('PlayPauseVideo', gtk.STOCK_MEDIA_PLAY, _('_Play / Pause'), '<Control>space', None, self.on_play_pause_button_clicked),            ])        actionGroups["ChannelSelected"].add_actions ([            ('CopyChannelURL', None, _("Copy Channel _Link"), None, None, self.on_copy_channel_link_activate),            ('MailChannel', None, _("_Send this channel to a friend"), None, None, self.on_mail_channel_link_activate),            ])        actionGroups["ChannelsSelected"].add_actions ([            ('UpdateChannels', None, _("_Update Channel"), None, None, self.on_update_channel_activate),            ])        actionGroups["ChannelLikeSelected"].add_actions ([            ('RenameChannel', None, _("Re_name Channel"), None, None, self.on_rename_channel_activate),            ])        actionGroups["ChannelLikesSelected"].add_actions ([            ('RemoveChannels', None, _("_Remove Channel"), None, None, self.on_remove_channel_activate),            ])        actionGroups["PlaylistLikeSelected"].add_actions ([            ('RenamePlaylist', None, _("Re_name Playlist"), None, None, self.on_rename_playlist_activate),            ])        actionGroups["PlaylistLikesSelected"].add_actions ([            ('RemovePlaylists', None, _("_Remove Playlist"), None, None, self.on_remove_playlist_activate),            ])        actionGroups["Ubiquitous"].add_actions ([            ('Video', None, _('_Video')),            ('Channels', None, _('_Channels')),            ('Playlists', None, _('_Playlists')),            ('Playback', None, _('P_layback')),            ('Open', gtk.STOCK_OPEN, _('_Open...'), '<Control>o', _('Open various files'), self.on_open_video_activate),            ('NewPlaylist', None, _('New _Playlist...'), None, _('Create new playlist'), self.on_new_playlist_activate),            ('NewPlaylistFolder', None, _('New Playlist _Folder...'), None, _('Create new playlist folder'), self.on_new_playlist_folder_activate),            ('NewChannelFolder', None, _('New Channel _Folder...'), None, _('Create new channel folder'), self.on_new_channel_folder_activate),            ('NewChannel', None, _("Add _Channel..."), None, None, self.on_add_channel_button_clicked),            ('NewSearchChannel', None, _("New Searc_h Channel..."), None, None, self.on_add_search_channel_button_clicked),            ('NewGuide', None, _("New Channel _Guide..."), None, None, self.on_add_guide_button_clicked),            ('EditPreferences', gtk.STOCK_PREFERENCES, _('P_references'), None, None, self.on_preference),            ('Quit', gtk.STOCK_QUIT, _('_Quit'), '<Control>q', _('Quit the Program'), self.on_quit_activate),            ('UpdateAllChannels', None, _("U_pdate All Channels"), None, None, self.on_update_all_channels_activate),            ('Help', None, _('_Help')),            ('About', gtk.STOCK_ABOUT, None, None, None, self.on_about_clicked),            ('Donate', None, _("_Donate"), None, None, self.on_donate_clicked),            ('Delete', None, _('Delete selection'), 'Delete', None, self.on_delete),            ('Backspace', None, _('Delete selection'), 'BackSpace', None, self.on_delete),            ])        return actionGroups    def on_main_delete(self, *args):        platformutils.confirmMainThread()        app.controller.quit()        return True    def on_play_pause_button_clicked(self, event = None):        videoDisplay = self.mainApp.videoDisplay        if videoDisplay.isPlaying:            videoDisplay.pause()        else:            videoTimeScale = self.mainFrame.widgetTree['video-time-scale']            videoDisplay.play(videoTimeScale.get_value())        self.mainFrame.windowChanger.updatePlayPauseButton()    def on_previous_button_clicked(self, event):        eventloop.addIdle(lambda:app.controller.playbackController.skip(-1), "Skip to previous track")    def on_next_button_clicked(self, event):        eventloop.addIdle(lambda:app.controller.playbackController.skip(1), "Skip to next track")    def on_video_time_scale_button_press_event(self, scale, event):        scale.buttonsDown.add(event.button)    def on_video_time_scale_button_release_event(self, scale, event):        platformutils.confirmMainThread()        # we want to remove the button from the buttonsDown set, but we can't        # yet, because we haven't run the default signal handler yet, which        # will emit the value-changed signal.  So we use use idle_add, to        # remove the buttons once we're done with signal processing.        button = event.button        def remove():            try:                scale.buttonsDown.remove(button)            except KeyError:                pass        gobject.idle_add(remove)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -