📄 mainframe.py
字号:
def renameChannelFolder_(self, sender): eventloop.addIdle(app.controller.renameCurrentTab, "Rename Channel Tab") def removeChannel_(self, sender): eventloop.addIdle(app.controller.removeCurrentFeed, "Remove channel") def updateChannel_(self, sender): eventloop.addIdle(app.controller.updateCurrentFeed, "Update current feed") def updateAllChannels_(self, sender): eventloop.addIdle(app.controller.updateAllFeeds, "Update all channels") def tellAFriend_(self, sender): print "NOT IMPLEMENTED" # $$$$$$$$$$$$$$ def copyChannelURL_(self, sender): eventloop.addIdle(app.controller.copyCurrentFeedURL, "Copy channel URL") # Playlists menu # def createPlaylist_(self, sender): playlist.createNewPlaylist() def createPlaylistFolder_(self, sender): folder.createNewPlaylistFolder() def renamePlaylist_(self, sender): eventloop.addIdle(app.controller.renameCurrentPlaylist, "Rename Playlist") def removePlaylist_(self, sender): eventloop.addIdle(app.controller.removeCurrentPlaylist, "Remove Playlist") # Playback menu # def playPause_(self, sender): self.videoDisplayController.playPause_(sender) def stopVideo_(self, sender): self.videoDisplayController.stop_(sender) def nextVideo_(self, sender): eventloop.addIdle(lambda:app.controller.playbackController.skip(1), "Skip Video") def previousVideo_(self, sender): eventloop.addIdle(lambda:app.controller.playbackController.skip(-1, False), "Skip Video") def toggleFullScreen_(self, sender): self.videoDisplayController.playFullScreen_(sender) # Help menu # def showHelp_(self, sender): helpURL = NSURL.URLWithString_(config.get(prefs.HELP_URL)) NSWorkspace.sharedWorkspace().openURL_(helpURL) ### Menu items validation ### def validateMenuItem_(self, item): result = False action = item.action() display = self.frame.mainDisplay.hostedDisplay if action == 'removeVideos:': self.updateMenuItem(item, 'video_remove') result = self.actionGroups['VideoSelected'] or self.actionGroups['VideosSelected'] elif action == 'saveVideoAs:': result = False elif action == 'copyVideoURL:': result = self.actionGroups['VideoSelected'] elif action == 'deleteSelected:': result = (self.actionGroups['ChannelLikeSelected'] or self.actionGroups['ChannelLikesSelected'] or self.actionGroups['PlaylistLikeSelected'] or self.actionGroups['PlaylistLikesSelected'] or self.actionGroups['VideoSelected'] or self.actionGroups['VideosSelected']) elif action == 'addChannel:': result = True elif action == 'createSearchChannel:': result = True elif action == 'createChannelFolder:': result = True elif action == 'addGuide:': result = True elif action == 'renameChannelFolder:': self.updateMenuItem(item, 'channel_rename') result = self.actionGroups['ChannelLikeSelected'] elif action == 'removeChannel:': self.updateMenuItem(item, 'channel_remove') result = self.actionGroups['ChannelLikeSelected'] or self.actionGroups['ChannelLikesSelected'] elif action == 'updateChannel:': self.updateMenuItem(item, 'channel_update') result = self.actionGroups['ChannelLikeSelected'] or self.actionGroups['ChannelLikesSelected'] elif action == 'updateAllChannels:': result = True elif action == 'tellAFriend:': result = self.actionGroups['ChannelSelected'] elif action == 'copyChannelURL:': result = self.actionGroups['ChannelSelected'] elif action == 'createPlaylist:': return True elif action == 'createPlaylistFolder:': return True elif action == 'renamePlaylist:': self.updateMenuItem(item, 'playlist_rename') return self.actionGroups['PlaylistLikeSelected'] elif action == 'removePlaylist:': self.updateMenuItem(item, 'playlist_remove') return self.actionGroups['PlaylistLikeSelected'] or self.actionGroups['PlaylistLikesSelected'] elif action == 'playPause:': return display is app.controller.videoDisplay elif action == 'stopVideo:': return display is app.controller.videoDisplay elif action == 'nextVideo:': return display is app.controller.videoDisplay elif action == 'previousVideo:': return display is app.controller.videoDisplay elif action == 'toggleFullScreen:': return display is app.controller.videoDisplay elif action == 'showHelp:': return True return result def updateMenuItem(self, item, key): if key in self.menuStrings: item.setTitle_(self.menuStrings[key].replace('_', ''))###############################################################################class DisplayHostView (NibClassBuilder.AutoBaseClass): def initWithFrame_(self, frame): self = super(DisplayHostView, self).initWithFrame_(frame) self.scheduledDisplay = None self.hostedDisplay = None self.hostedView = nil self.backgroundColor = NSColor.whiteColor() return self def drawRect_(self, rect): self.backgroundColor.set() NSRectFill(rect) def setScheduledDisplay(self, display): if self.scheduledDisplay is not None: self.scheduledDisplay.cancel() self.scheduledDisplay = display def setDisplay(self, display, owner): platformutils.warnIfNotOnMainThread('DisplayHostView.setDisplay') self.scheduledDisplay = None # Send notification to old display if any if self.hostedDisplay is not None: self.hostedDisplay.onDeselected_private(owner) self.hostedDisplay.onDeselected(owner) oldView = self.hostedView # Switch to new display self.hostedDisplay = display if display is not None: self.hostedView = display.getView() else: self.hostedView = nil if display is None: return # Figure out where to put the content area frame = self.bounds() mask = self.autoresizingMask() # Arrange to cover the template that marks the content area self.hostedView.setFrame_(frame) self.addSubview_(self.hostedView) self.hostedView.setAutoresizingMask_(mask) # Mark as needing display self.setNeedsDisplayInRect_(frame) self.hostedView.setNeedsDisplay_(YES) # Wait until now to clean up the old view, to reduce flicker # (doesn't actually work all that well, sadly -- possibly what # we want to do is wait until notification comes from the new # view that it's been fully loaded to even show it) if oldView and (not (oldView is self.hostedView)): oldView.removeFromSuperview() # Send notification to new display display.onSelected_private(owner) display.onSelected(owner)###############################################################################class NullDisplay (app.Display): "Represents an empty right-hand area." def __init__(self): app.Display.__init__(self) self.view = NSView.alloc().init().retain() def getView(self): return self.view###############################################################################class DTVSplitView (NibClassBuilder.AutoBaseClass): def awakeFromNib(self): self.background = NSImage.imageNamed_('splitview_divider_background') self.backgroundRect = ((0,0), self.background.size()) self.dimple = NSImage.imageNamed_('splitview_divider_dimple') def dividerThickness(self): return 10.0 def drawDividerInRect_(self, rect): dividerOrigin = (rect.origin.x, 12) dividerSize = (rect.size.width, rect.size.height - 58 - 12) dividerRect = (dividerOrigin, dividerSize) self.background.drawInRect_fromRect_operation_fraction_(dividerRect, self.backgroundRect, NSCompositeSourceOver, 1.0) dimplePosition = (rect.origin.x, (dividerSize[1] - self.dimple.size().height) / 2) self.dimple.compositeToPoint_operation_(dimplePosition, NSCompositeSourceOver)###############################################################################class ProgressDisplayView (NibClassBuilder.AutoBaseClass): def awakeFromNib(self): self.progressSlider.sliderWasClicked = self.progressSliderWasClicked self.progressSlider.sliderWasDragged = self.progressSliderWasDragged self.progressSlider.sliderWasReleased = self.progressSliderWasReleased self.backgroundLeft = NSImage.imageNamed_( "display_left" ) self.backgroundLeftWidth = self.backgroundLeft.size().width self.backgroundRight = NSImage.imageNamed_( "display_right" ) self.backgroundRightWidth = self.backgroundRight.size().width self.backgroundCenter = NSImage.imageNamed_( "display_center" ) self.backgroundCenterWidth = self.backgroundCenter.size().width self.renderer = None self.updateTimer = nil self.wasPlaying = False @platformutils.onMainThread def setup(self, renderer): if self.renderer != renderer: self.renderer = renderer if renderer is not nil: self.updateTimer = NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_(1.0, self, 'refresh:', nil, YES) NSRunLoop.currentRunLoop().addTimer_forMode_(self.updateTimer, NSEventTrackingRunLoopMode) elif self.updateTimer is not nil: self.updateTimer.invalidate() self.updateTimer = nil self.refresh_(nil) self.setNeedsDisplay_(YES) def teardown(self): self.setup(None) def refresh_(self, timer): if self.renderer is not None: self.progressSlider.setShowCursor_(True) self.progressSlider.setFloatValue_(self.renderer.getProgress()) self.timeIndicator.setStringValue_(self.renderer.getDisplayTime()) else: self.progressSlider.setShowCursor_(False) self.progressSlider.setFloatValue_(0.0) self.timeIndicator.setStringValue_(app.VideoRenderer.DEFAULT_DISPLAY_TIME) def drawRect_(self, rect): self.backgroundLeft.compositeToPoint_operation_( (0,0), NSCompositeSourceOver ) x = self.bounds().size.width - self.backgroundRightWidth self.backgroundRight.compositeToPoint_operation_( (x, 0), NSCompositeSourceOver ) emptyWidth = self.bounds().size.width - (self.backgroundRightWidth + self.backgroundLeftWidth) emptyRect = ((self.backgroundLeftWidth, 0), (emptyWidth, self.bounds().size.height)) NSGraphicsContext.currentContext().saveGraphicsState() NSBezierPath.clipRect_(emptyRect) tiles = math.ceil(emptyWidth / float(self.backgroundCenterWidth))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -