class MenuController(QObject): clockwiseRotate = pyqtSignal() antiClosewiseRotate = pyqtSignal() flipHorizontal = pyqtSignal() flipVertical = pyqtSignal() toggleFullscreen = pyqtSignal() toggleMiniMode = pyqtSignal() screenShot = pyqtSignal() scaleChanged = pyqtSignal(float,arguments=["scale"]) proportionChanged = pyqtSignal(float,float, arguments=["propWidth", "propHeight"]) openDialog = pyqtSignal(str) staysOnTop = pyqtSignal(bool,arguments=["onTop"]) showPreference = pyqtSignal() showMovieInformation = pyqtSignal() openSubtitleFile = pyqtSignal() subtitleSelected = pyqtSignal(str,arguments=["subtitle"]) playNext = pyqtSignal() playPrevious = pyqtSignal() playForward = pyqtSignal() playBackward = pyqtSignal() volumeUp = pyqtSignal() volumeDown = pyqtSignal() volumeMuted = pyqtSignal(bool, arguments=["muted"]) soundChannelChanged = pyqtSignal(str, arguments=["channelLayout"]) showSubtitleSettings = pyqtSignal() playlistPlay = pyqtSignal() addItemToPlaylist = pyqtSignal() addFolderToPlaylist = pyqtSignal() removeItemFromPlaylist = pyqtSignal() removeInvalidItemsFromPlaylist = pyqtSignal() playlistExport = pyqtSignal() playlistImport = pyqtSignal() playlistClear = pyqtSignal() playlistShowClickedItemInFM = pyqtSignal() playlistInformation = pyqtSignal() togglePlaylist = pyqtSignal() subtitleVisibleSet = pyqtSignal(bool, arguments=["visible"]) def __init__(self): super(MenuController, self).__init__() self._proportion = "proportion:radio:_p_default" self._scale = "scale:radio:_s_1" self._sound_channel = "sound_channel:radio:auto" # if actions-like menu items are clicked, we should send signals to inform # the main controller that actions should be taken, if configs-like menu # items are clicked, we just change the configuration, config.py will takes # care of it for you . def _menu_item_invoked(self, _id, _checked): if _id == "_turn_right": self.clockwiseRotate.emit() elif _id == "_turn_left": self.antiClosewiseRotate.emit() elif _id == "_flip_horizontal": self.flipHorizontal.emit() elif _id == "_flip_vertial": self.flipVertical.emit() elif _id == "_fullscreen_quit": self.toggleFullscreen.emit() elif _id == "_screenshot": self.screenShot.emit() elif _id == "proportion:radio:_p_default": self._proportion = "proportion:radio:_p_default" self.proportionChanged.emit(1, 1) elif _id == "proportion:radio:_p_4_3": self._proportion = "proportion:radio:_p_4_3" self.proportionChanged.emit(4, 3) elif _id == "proportion:radio:_p_16_9": self._proportion = "proportion:radio:_p_16_9" self.proportionChanged.emit(16, 9) elif _id == "proportion:radio:_p_16_10": self._proportion = "proportion:radio:_p_16_10" self.proportionChanged.emit(16, 10) elif _id == "proportion:radio:_p_1_85_1": self._proportion = "proportion:radio:_p_1_85_1" self.proportionChanged.emit(1.85, 1) elif _id == "proportion:radio:_p_2_35_1": self._proportion = "proportion:radio:_p_2_35_1" self.proportionChanged.emit(2.35, 1) elif _id == "scale:radio:_s_0_5": self._scale = "scale:radio:_s_0_5" self.scaleChanged.emit(0.5) elif _id == "scale:radio:_s_1": self._scale = "scale:radio:_s_1" self.scaleChanged.emit(1) elif _id == "scale:radio:_s_1_5": self._scale = "scale:radio:_s_1_5" self.scaleChanged.emit(1.5) elif _id == "scale:radio:_s_2": self._scale = "scale:radio:_s_2" self.scaleChanged.emit(2) elif _id == "_open_file": self.openDialog.emit("file") elif _id == "_open_dir": self.openDialog.emit("dir") elif _id == "_open_url": self.openDialog.emit("url") elif _id == "_mini_mode": self.toggleMiniMode.emit() elif _id == "_on_top": self.staysOnTop.emit(_checked) elif _id == "_toggle_playlist": self.togglePlaylist.emit() elif _id == "mode_group:radio:in_order": config.playerPlayOrderType = ORDER_TYPE_IN_ORDER elif _id == "mode_group:radio:random": config.playerPlayOrderType = ORDER_TYPE_RANDOM elif _id == "mode_group:radio:single": config.playerPlayOrderType = ORDER_TYPE_SINGLE elif _id == "mode_group:radio:single_cycle": config.playerPlayOrderType = ORDER_TYPE_SINGLE_CYCLE elif _id == "mode_group:radio:playlist_cycle": config.playerPlayOrderType = ORDER_TYPE_PLAYLIST_CYCLE elif _id == "sound_channel:radio:auto": self._sound_channel = "sound_channel:radio:auto" self.soundChannelChanged.emit("auto") elif _id == "sound_channel:radio:mono": self._sound_channel = "sound_channel:radio:mono" self.soundChannelChanged.emit("mono") elif _id == "sound_channel:radio:left": self._sound_channel = "sound_channel:radio:left" self.soundChannelChanged.emit("left") elif _id == "sound_channel:radio:right": self._sound_channel = "sound_channel:radio:right" self.soundChannelChanged.emit("right") elif _id == "sound_channel:radio:stero": self._sound_channel = "sound_channel:radio:stero" self.soundChannelChanged.emit("stero") elif _id == "_subtitle_hide": self.subtitleVisibleSet.emit(not _checked) elif _id == "_subtitle_manual": self.openSubtitleFile.emit() elif _id.startswith("_subtitles:radio"): self.subtitleSelected.emit(_subtitle_file_from_menu_item_id(_id)) elif _id == "_play_operation_forward": self.playForward.emit() elif _id == "_play_operation_backward": self.playBackward.emit() elif _id == "_play_operation_next": self.playNext.emit() elif _id == "_play_operation_previous": self.playPrevious.emit() elif _id == "_sound_increase": self.volumeUp.emit() elif _id == "_sound_decrease": self.volumeDown.emit() elif _id == "_sound_muted": self.volumeMuted.emit(_checked) elif _id == "_subtitle_settings": self.showSubtitleSettings.emit() elif _id == "_preferences": self.showPreference.emit() elif _id == "_information": self.showMovieInformation.emit() # playlist menu elif _id == "_playlist_play": self.playlistPlay.emit() elif _id == "_playlist_add_item": self.addItemToPlaylist.emit() elif _id == "_playlist_add_folder": self.addFolderToPlaylist.emit() elif _id == "_playlist_remove_item": self.removeItemFromPlaylist.emit() elif _id == "_playlist_remove_invalid": self.removeInvalidItemsFromPlaylist.emit() elif _id == "_playlist_clear": self.playlistClear.emit() elif _id == "_playlist_open_position": self.playlistShowClickedItemInFM.emit() elif _id == "_playlist_information": self.playlistInformation.emit() elif _id == "_playlist_export": self.playlistExport.emit() elif _id == "_playlist_import": self.playlistImport.emit() @pyqtSlot(str) def show_menu(self, stateInfo): info = json.loads(stateInfo) videoSource = info["videoSource"] hasVideo = info["hasVideo"] subtitleFile = info["subtitleFile"] subtitleVisible = info["subtitleVisible"] isFullscreen = info["isFullscreen"] isMiniMode = info["isMiniMode"] isOnTop = info["isOnTop"] self.menu = Menu(right_click_menu) self.menu.getItemById("_fullscreen_quit").isActive = hasVideo self.menu.getItemById("_mini_mode").isActive = hasVideo self.menu.getItemById("_play_operation_forward").isActive = hasVideo self.menu.getItemById("_play_operation_backward").isActive = hasVideo self.menu.getItemById("_frame").isActive = hasVideo and not isFullscreen self.menu.getItemById("_subtitle_hide").isActive = subtitleFile != "" self.menu.getItemById("_subtitle_manual").isActive = hasVideo self.menu.getItemById("_subtitle_choose").isActive = subtitleFile != "" self.menu.getItemById("_information").isActive = hasVideo self.menu.getItemById("_on_top").checked = isOnTop self.menu.getItemById("mode_group:radio:in_order").checked = \ config.playerPlayOrderType == ORDER_TYPE_IN_ORDER self.menu.getItemById("mode_group:radio:random").checked = \ config.playerPlayOrderType == ORDER_TYPE_RANDOM self.menu.getItemById("mode_group:radio:single").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE self.menu.getItemById("mode_group:radio:single_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE_CYCLE self.menu.getItemById("mode_group:radio:playlist_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_PLAYLIST_CYCLE self.menu.getItemById("proportion:radio:_p_default").checked = \ self._proportion == "proportion:radio:_p_default" self.menu.getItemById("proportion:radio:_p_4_3").checked = \ self._proportion == "proportion:radio:_p_4_3" self.menu.getItemById("proportion:radio:_p_16_9").checked = \ self._proportion == "proportion:radio:_p_16_9" self.menu.getItemById("proportion:radio:_p_16_10").checked = \ self._proportion == "proportion:radio:_p_16_10" self.menu.getItemById("proportion:radio:_p_1_85_1").checked = \ self._proportion == "proportion:radio:_p_1_85_1" self.menu.getItemById("proportion:radio:_p_2_35_1").checked = \ self._proportion == "proportion:radio:_p_2_35_1" self.menu.getItemById("scale:radio:_s_0_5").checked = \ self._scale == "scale:radio:_s_0_5" self.menu.getItemById("scale:radio:_s_1").checked = \ self._scale == "scale:radio:_s_1" self.menu.getItemById("scale:radio:_s_1_5").checked = \ self._scale == "scale:radio:_s_1_5" self.menu.getItemById("scale:radio:_s_2").checked = \ self._scale == "scale:radio:_s_2" # self.menu.getItemById("_sound_channel").isActive = hasVideo # self.menu.getItemById("_sound_channel").setSubMenu( # Menu(sound_channel_sub_menu)) # self.menu.getItemById("sound_channel:radio:auto").checked = \ # self._sound_channel == "sound_channel:radio:auto" # self.menu.getItemById("sound_channel:radio:mono").checked = \ # self._sound_channel == "sound_channel:radio:mono" # self.menu.getItemById("sound_channel:radio:left").checked = \ # self._sound_channel == "sound_channel:radio:left" # self.menu.getItemById("sound_channel:radio:right").checked = \ # self._sound_channel == "sound_channel:radio:right" # self.menu.getItemById("sound_channel:radio:stero").checked = \ # self._sound_channel == "sound_channel:radio:stero" self.menu.getItemById("_sound_muted").checked = config.playerMuted self.menu.getItemById("_subtitle_hide").checked = subtitleVisible subtitles = get_subtitle_from_movie(videoSource) subtitles = _subtitle_menu_items_from_files(subtitles, subtitleFile) self.menu.getItemById("_subtitle_choose").setSubMenu(Menu(subtitles)) self.menu.getItemById("_fullscreen_quit").text = _("Fullscreen") if \ isFullscreen else _("Exit fullscreen") self.menu.getItemById("_mini_mode").text = _("Exit mini mode") if \ isMiniMode else _("Mini mode") self.menu.itemClicked.connect(self._menu_item_invoked) self.menu.showRectMenu(QCursor.pos().x(), QCursor.pos().y()) @pyqtSlot(str, bool) def show_playlist_menu(self, url, playlistEmpty): self.menu = Menu(playlist_right_menu) self.menu.itemClicked.connect(self._menu_item_invoked) self.menu.getItemById("mode_group:radio:in_order").checked = \ config.playerPlayOrderType == ORDER_TYPE_IN_ORDER self.menu.getItemById("mode_group:radio:random").checked = \ config.playerPlayOrderType == ORDER_TYPE_RANDOM self.menu.getItemById("mode_group:radio:single").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE self.menu.getItemById("mode_group:radio:single_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE_CYCLE self.menu.getItemById("mode_group:radio:playlist_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_PLAYLIST_CYCLE self.menu.getItemById("_playlist_play").isActive = url != "" self.menu.getItemById("_playlist_remove_item").isActive = url != "" self.menu.getItemById("_playlist_open_position").isActive = url != "" \ and utils.urlIsNativeFile(url) self.menu.getItemById("_playlist_information").isActive = url != "" \ and utils.fileIsValidVideo(url) self.menu.getItemById("_playlist_clear").isActive = not playlistEmpty self.menu.showRectMenu(QCursor.pos().x(), QCursor.pos().y()) @pyqtSlot() def show_mode_menu(self): self.menu = Menu(play_sequence_sub_menu) self.menu.itemClicked.connect(self._menu_item_invoked) self.menu.getItemById("mode_group:radio:in_order").checked = \ config.playerPlayOrderType == ORDER_TYPE_IN_ORDER self.menu.getItemById("mode_group:radio:random").checked = \ config.playerPlayOrderType == ORDER_TYPE_RANDOM self.menu.getItemById("mode_group:radio:single").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE self.menu.getItemById("mode_group:radio:single_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE_CYCLE self.menu.getItemById("mode_group:radio:playlist_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_PLAYLIST_CYCLE self.menu.showRectMenu(QCursor.pos().x(), QCursor.pos().y()) @pyqtSlot() def show_add_button_menu(self): self.menu = Menu(playlist_add_button_menu) self.menu.itemClicked.connect(self._menu_item_invoked) self.menu.showRectMenu(QCursor.pos().x(), QCursor.pos().y())
class MenuController(QObject): clockwiseRotate = pyqtSignal() antiClosewiseRotate = pyqtSignal() flipHorizontal = pyqtSignal() flipVertical = pyqtSignal() toggleFullscreen = pyqtSignal() toggleMiniMode = pyqtSignal() screenShot = pyqtSignal() scaleChanged = pyqtSignal(float,arguments=["scale"]) proportionChanged = pyqtSignal(float,float, arguments=["propWidth", "propHeight"]) openDialog = pyqtSignal(str) staysOnTop = pyqtSignal(bool,arguments=["onTop"]) showPreference = pyqtSignal() showMovieInformation = pyqtSignal() openSubtitleFile = pyqtSignal() subtitleSelected = pyqtSignal(str,arguments=["subtitle"]) playNext = pyqtSignal() playPrevious = pyqtSignal() playForward = pyqtSignal() playBackward = pyqtSignal() volumeUp = pyqtSignal() volumeDown = pyqtSignal() volumeMuted = pyqtSignal() showSubtitleSettings = pyqtSignal() playlistPlay = pyqtSignal() addItemToPlaylist = pyqtSignal() addFolderToPlaylist = pyqtSignal() removeItemFromPlaylist = pyqtSignal() removeInvalidItemsFromPlaylist = pyqtSignal() playlistExport = pyqtSignal() playlistImport = pyqtSignal() playlistClear = pyqtSignal() playlistShowClickedItemInFM = pyqtSignal() playlistInformation = pyqtSignal() togglePlaylist = pyqtSignal() def __init__(self, window): super(MenuController, self).__init__() self._window = window self._proportion = "proportion:radio:_p_default" self._scale = "scale:radio:_s_1" # if actions-like menu items are clicked, we should send signals to inform # the main controller that actions should be taken, if configs-like menu # items are clicked, we just change the configuration, config.py will takes # care of it for you . def _menu_item_invoked(self, _id, _checked): if _id == "_turn_right": self.clockwiseRotate.emit() elif _id == "_turn_left": self.antiClosewiseRotate.emit() elif _id == "_flip_horizontal": self.flipHorizontal.emit() elif _id == "_flip_vertial": self.flipVertical.emit() elif _id == "_fullscreen_quit": self.toggleFullscreen.emit() elif _id == "_screenshot": self.screenShot.emit() elif _id == "proportion:radio:_p_default": self._proportion = "proportion:radio:_p_default" self.proportionChanged.emit(1, 1) elif _id == "proportion:radio:_p_4_3": self._proportion = "proportion:radio:_p_4_3" self.proportionChanged.emit(4, 3) elif _id == "proportion:radio:_p_16_9": self._proportion = "proportion:radio:_p_16_9" self.proportionChanged.emit(16, 9) elif _id == "proportion:radio:_p_16_10": self._proportion = "proportion:radio:_p_16_10" self.proportionChanged.emit(16, 10) elif _id == "proportion:radio:_p_1_85_1": self._proportion = "proportion:radio:_p_1_85_1" self.proportionChanged.emit(1.85, 1) elif _id == "proportion:radio:_p_2_35_1": self._proportion = "proportion:radio:_p_2_35_1" self.proportionChanged.emit(2.35, 1) elif _id == "scale:radio:_s_0_5": self._scale = "scale:radio:_s_0_5" self.scaleChanged.emit(0.5) elif _id == "scale:radio:_s_1": self._scale = "scale:radio:_s_1" self.scaleChanged.emit(1) elif _id == "scale:radio:_s_1_5": self._scale = "scale:radio:_s_1_5" self.scaleChanged.emit(1.5) elif _id == "scale:radio:_s_2": self._scale = "scale:radio:_s_2" self.scaleChanged.emit(2) elif _id == "_open_file": self.openDialog.emit("file") elif _id == "_open_dir": self.openDialog.emit("dir") elif _id == "_open_url": self.openDialog.emit("url") elif _id == "_mini_mode": self.toggleMiniMode.emit() elif _id == "_on_top": self.staysOnTop.emit(_checked) elif _id == "_toggle_playlist": self.togglePlaylist.emit() elif _id == "mode_group:radio:in_order": config.playerPlayOrderType = ORDER_TYPE_IN_ORDER elif _id == "mode_group:radio:random": config.playerPlayOrderType = ORDER_TYPE_RANDOM elif _id == "mode_group:radio:single": config.playerPlayOrderType = ORDER_TYPE_SINGLE elif _id == "mode_group:radio:single_cycle": config.playerPlayOrderType = ORDER_TYPE_SINGLE_CYCLE elif _id == "mode_group:radio:playlist_cycle": config.playerPlayOrderType = ORDER_TYPE_PLAYLIST_CYCLE elif _id == "_sound_muted": config.playerMuted = _checked elif _id == "_subtitle_hide": self._window.subtitleVisible = not _checked elif _id == "_subtitle_manual": self.openSubtitleFile.emit() elif _id.startswith("_subtitles:radio"): self.subtitleSelected.emit(_subtitle_file_from_menu_item_id(_id)) elif _id == "_play_operation_forward": self.playForward.emit() elif _id == "_play_operation_backward": self.playBackward.emit() elif _id == "_play_operation_next": self.playNext.emit() elif _id == "_play_operation_previous": self.playPrevious.emit() elif _id == "_sound_increase": self.volumeUp.emit() elif _id == "_sound_decrease": self.volumeDown.emit() elif _id == "_sound_muted": self.volumeMuted.emit() elif _id == "_subtitle_settings": self.showSubtitleSettings.emit() elif _id == "_preferences": self.showPreference.emit() elif _id == "_information": self.showMovieInformation.emit() # playlist menu elif _id == "_playlist_play": self.playlistPlay.emit() elif _id == "_playlist_add_item": self.addItemToPlaylist.emit() elif _id == "_playlist_add_folder": self.addFolderToPlaylist.emit() elif _id == "_playlist_remove_item": self.removeItemFromPlaylist.emit() elif _id == "_playlist_remove_invalid": self.removeInvalidItemsFromPlaylist.emit() elif _id == "_playlist_clear": self.playlistClear.emit() elif _id == "_playlist_open_position": self.playlistShowClickedItemInFM.emit() elif _id == "_playlist_information": self.playlistInformation.emit() elif _id == "_playlist_export": self.playlistExport.emit() elif _id == "_playlist_import": self.playlistImport.emit() @pyqtSlot() def show_menu(self): self.menu = Menu(right_click_menu) hasVideo = movie_info.movie_file != "" self.menu.getItemById("_fullscreen_quit").isActive = hasVideo self.menu.getItemById("_mini_mode").isActive = hasVideo self.menu.getItemById("_play_operation_forward").isActive = hasVideo self.menu.getItemById("_play_operation_backward").isActive = hasVideo self.menu.getItemById("_frame").isActive = \ hasVideo and self._window.getState() != Qt.WindowFullScreen self.menu.getItemById("_subtitle_hide").isActive = \ hasVideo and bool(movie_info.subtitle_file) self.menu.getItemById("_subtitle_manual").isActive = hasVideo self.menu.getItemById("_subtitle_choose").isActive = \ bool(movie_info.subtitle_file) self.menu.getItemById("_information").isActive = hasVideo \ and movie_info.movie_duration != 0 self.menu.getItemById("_on_top").checked = self._window.staysOnTop self.menu.getItemById("mode_group:radio:in_order").checked = \ config.playerPlayOrderType == ORDER_TYPE_IN_ORDER self.menu.getItemById("mode_group:radio:random").checked = \ config.playerPlayOrderType == ORDER_TYPE_RANDOM self.menu.getItemById("mode_group:radio:single").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE self.menu.getItemById("mode_group:radio:single_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE_CYCLE self.menu.getItemById("mode_group:radio:playlist_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_PLAYLIST_CYCLE self.menu.getItemById("proportion:radio:_p_default").checked = \ self._proportion == "proportion:radio:_p_default" self.menu.getItemById("proportion:radio:_p_4_3").checked = \ self._proportion == "proportion:radio:_p_4_3" self.menu.getItemById("proportion:radio:_p_16_9").checked = \ self._proportion == "proportion:radio:_p_16_9" self.menu.getItemById("proportion:radio:_p_16_10").checked = \ self._proportion == "proportion:radio:_p_16_10" self.menu.getItemById("proportion:radio:_p_1_85_1").checked = \ self._proportion == "proportion:radio:_p_1_85_1" self.menu.getItemById("proportion:radio:_p_2_35_1").checked = \ self._proportion == "proportion:radio:_p_2_35_1" self.menu.getItemById("scale:radio:_s_0_5").checked = \ self._scale == "scale:radio:_s_0_5" self.menu.getItemById("scale:radio:_s_1").checked = \ self._scale == "scale:radio:_s_1" self.menu.getItemById("scale:radio:_s_1_5").checked = \ self._scale == "scale:radio:_s_1_5" self.menu.getItemById("scale:radio:_s_2").checked = \ self._scale == "scale:radio:_s_2" self.menu.getItemById("_sound_muted").checked = config.playerMuted self.menu.getItemById("_subtitle_hide").checked = \ not self._window.subtitleVisible subtitles = get_subtitle_from_movie(movie_info.movie_file) subtitles = _subtitle_menu_items_from_files(subtitles) self.menu.getItemById("_subtitle_choose").setSubMenu(Menu(subtitles)) self.menu.getItemById("_fullscreen_quit").text = _("Fullscreen") if \ self._window.getState() != Qt.WindowFullScreen else _("Exit fullscreen") self.menu.getItemById("_mini_mode").text = _("Exit mini mode") if \ self._window.miniModeState() else _("Mini mode") self.menu.itemClicked.connect(self._menu_item_invoked) self.menu.showRectMenu(QCursor.pos().x(), QCursor.pos().y()) @pyqtSlot(bool,str) def show_playlist_menu(self, isGroup, url): self.menu = Menu(playlist_right_menu) self.menu.itemClicked.connect(self._menu_item_invoked) self.menu.getItemById("mode_group:radio:in_order").checked = \ config.playerPlayOrderType == ORDER_TYPE_IN_ORDER self.menu.getItemById("mode_group:radio:random").checked = \ config.playerPlayOrderType == ORDER_TYPE_RANDOM self.menu.getItemById("mode_group:radio:single").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE self.menu.getItemById("mode_group:radio:single_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE_CYCLE self.menu.getItemById("mode_group:radio:playlist_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_PLAYLIST_CYCLE self.menu.getItemById("_playlist_play").isActive = url != "" self.menu.getItemById("_playlist_remove_item").isActive = \ isGroup or url != "" self.menu.getItemById("_playlist_open_position").isActive = url != "" \ and utils.urlIsNativeFile(url) self.menu.getItemById("_playlist_information").isActive = url != "" \ and utils.fileIsValidVideo(url) self.menu.showRectMenu(QCursor.pos().x(), QCursor.pos().y()) @pyqtSlot() def show_mode_menu(self): self.menu = Menu(play_sequence_sub_menu) self.menu.itemClicked.connect(self._menu_item_invoked) self.menu.getItemById("mode_group:radio:in_order").checked = \ config.playerPlayOrderType == ORDER_TYPE_IN_ORDER self.menu.getItemById("mode_group:radio:random").checked = \ config.playerPlayOrderType == ORDER_TYPE_RANDOM self.menu.getItemById("mode_group:radio:single").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE self.menu.getItemById("mode_group:radio:single_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_SINGLE_CYCLE self.menu.getItemById("mode_group:radio:playlist_cycle").checked = \ config.playerPlayOrderType == ORDER_TYPE_PLAYLIST_CYCLE self.menu.showRectMenu(QCursor.pos().x(), QCursor.pos().y()) @pyqtSlot() def show_add_button_menu(self): self.menu = Menu(playlist_add_button_menu) self.menu.itemClicked.connect(self._menu_item_invoked) self.menu.showRectMenu(QCursor.pos().x(), QCursor.pos().y())
class MenuController(QObject): toolSelected = pyqtSignal(str, arguments=["toolName"]) saveSelected = pyqtSignal(int, arguments=["saveOption"]) shareSelected = pyqtSignal() exitSelected = pyqtSignal() preMenuShow = pyqtSignal() postMenuHide = pyqtSignal() def __init__(self): super(MenuController, self).__init__() def _menu_unregistered(self): self.postMenuHide.emit() def _menu_item_invoked(self, _id, _checked): self.postMenuHide.emit() if _id == "_rectangle": self.toolSelected.emit("_rectangle") if _id == "_ellipse": self.toolSelected.emit("_ellipse") if _id == "_arrow": self.toolSelected.emit("_arrow") if _id == "_line": self.toolSelected.emit("_line") if _id == "_text": self.toolSelected.emit("_text") if _id == "save:radio:_op_save_to_desktop": self.saveSelected.emit(0) if _id == "save:radio:_op_auto_save": self.saveSelected.emit(1) if _id == "save:radio:_op_save_as": self.saveSelected.emit(2) if _id == "save:radio:_op_copy_to_clipboard": self.saveSelected.emit(3) if _id == "save:radio:_op_copy_and_save": self.saveSelected.emit(4) if _id == "_share": self.shareSelected.emit() if _id == "_exit": self.exitSelected.emit() @pyqtSlot(int) def show_menu(self, saveOption): self.preMenuShow.emit() self.menu = Menu(right_click_menu) self.menu.getItemById("_save").setSubMenu(Menu(save_sub_menu)) self.menu.getItemById("save:radio:_op_save_to_desktop").checked = \ saveOption == 0 self.menu.getItemById("save:radio:_op_auto_save").checked = \ saveOption == 1 self.menu.getItemById("save:radio:_op_save_as").checked = \ saveOption == 2 self.menu.getItemById("save:radio:_op_copy_to_clipboard").checked = \ saveOption == 3 self.menu.getItemById("save:radio:_op_copy_and_save").checked = \ saveOption == 4 self.menu.itemClicked.connect(self._menu_item_invoked) self.menu.menuDismissed.connect(self._menu_unregistered) self.menu.showRectMenu(QCursor.pos().x(), QCursor.pos().y())
class MenuController(QObject): toolSelected = pyqtSignal(str, arguments=["toolName"]) saveSelected = pyqtSignal(int, arguments=["saveOption"]) shareSelected = pyqtSignal() exitSelected = pyqtSignal() preMenuShow = pyqtSignal() postMenuHide = pyqtSignal() def __init__(self): super(MenuController, self).__init__() def _menu_unregistered(self): self.postMenuHide.emit() def _menu_item_invoked(self, _id, _checked): self.postMenuHide.emit() if _id == "_rectangle": self.toolSelected.emit("_rectangle") if _id == "_ellipse": self.toolSelected.emit("_ellipse") if _id == "_arrow": self.toolSelected.emit("_arrow") if _id == "_line": self.toolSelected.emit("_line") if _id == "_text": self.toolSelected.emit("_text") if _id == "save:radio:_op_auto_save": self.saveSelected.emit(1) if _id == "save:radio:_op_save_to_desktop": self.saveSelected.emit(0) if _id == "save:radio:_op_copy_to_clipboard": self.saveSelected.emit(4) if _id == "save:radio:_op_save_as": self.saveSelected.emit(2) if _id == "save:radio:_op_copy_and_save": self.saveSelected.emit(3) if _id == "_share": self.shareSelected.emit() if _id == "_exit": self.exitSelected.emit() @pyqtSlot(int) def show_menu(self, saveOption): self.preMenuShow.emit() self.menu = Menu(right_click_menu) self.menu.getItemById("_save").setSubMenu(Menu(save_sub_menu)) self.menu.getItemById("save:radio:_op_auto_save").checked = \ saveOption == 1 self.menu.getItemById("save:radio:_op_save_to_desktop").checked = \ saveOption == 0 self.menu.getItemById("save:radio:_op_copy_to_clipboard").checked = \ saveOption == 4 self.menu.getItemById("save:radio:_op_save_as").checked = \ saveOption == 2 self.menu.getItemById("save:radio:_op_copy_and_save").checked = \ saveOption == 3 self.menu.itemClicked.connect(self._menu_item_invoked) self.menu.menuDismissed.connect(self._menu_unregistered) self.menu.showRectMenu(QCursor.pos().x(), QCursor.pos().y())
class MenuController(QObject): toggleFullscreen = pyqtSignal() toggleMiniMode = pyqtSignal() screenShot = pyqtSignal() scaleChanged = pyqtSignal(float, arguments=["scale"]) proportionChanged = pyqtSignal(float, float, arguments=["propWidth", "propHeight"]) openDialog = pyqtSignal(str) staysOnTop = pyqtSignal(bool, arguments=["onTop"]) showPreference = pyqtSignal() showMovieInformation = pyqtSignal() subtitleSelected = pyqtSignal(str, arguments=["subtitle"]) playForward = pyqtSignal() playBackward = pyqtSignal() volumeUp = pyqtSignal() volumeDown = pyqtSignal() volumeMuted = pyqtSignal() showSubtitleSettings = pyqtSignal() def __init__(self, window): super(MenuController, self).__init__() self._window = window self._proportion = "proportion:radio:_p_default" self._scale = "scale:radio:_s_1" # if actions-like menu items are clicked, we should send signals to inform # the main controller that actions should be taken, if configs-like menu # items are clicked, we just change the configuration, config.py will takes # care of it for you . def _menu_item_invoked(self, _id, _checked): if _id == "_fullscreen_quit": self.toggleFullscreen.emit() elif _id == "_screenshot": self.screenShot.emit() elif _id == "proportion:radio:_p_default": self._proportion = "proportion:radio:_p_default" self.proportionChanged.emit(1, 1) elif _id == "proportion:radio:_p_4_3": self._proportion = "proportion:radio:_p_4_3" self.proportionChanged.emit(4, 3) elif _id == "proportion:radio:_p_16_9": self._proportion = "proportion:radio:_p_16_9" self.proportionChanged.emit(16, 9) elif _id == "proportion:radio:_p_16_10": self._proportion = "proportion:radio:_p_16_10" self.proportionChanged.emit(16, 10) elif _id == "proportion:radio:_p_1_85_1": self._proportion = "proportion:radio:_p_1_85_1" self.proportionChanged.emit(1.85, 1) elif _id == "proportion:radio:_p_2_35_1": self._proportion = "proportion:radio:_p_2_35_1" self.proportionChanged.emit(2.35, 1) elif _id == "scale:radio:_s_0_5": self._scale = "scale:radio:_s_0_5" self.scaleChanged.emit(0.5) elif _id == "scale:radio:_s_1": self._scale = "scale:radio:_s_1" self.scaleChanged.emit(1) elif _id == "scale:radio:_s_1_5": self._scale = "scale:radio:_s_1_5" self.scaleChanged.emit(1.5) elif _id == "scale:radio:_s_2": self._scale = "scale:radio:_s_2" self.scaleChanged.emit(2) elif _id == "_open_file": self.openDialog.emit("file") elif _id == "_open_url": self.openDialog.emit("url") elif _id == "_mini_mode": self.toggleMiniMode.emit() elif _id == "_on_top": self.staysOnTop.emit(_checked) elif _id == "_sound_muted": config.playerMuted = _checked elif _id == "_subtitle_hide": self._window.subtitleVisible = not _checked elif _id.startswith("_subtitles:radio"): self.subtitleSelected.emit(_subtitle_file_from_menu_item_id(_id)) elif _id == "_play_operation_forward": self.playForward.emit() elif _id == "_play_operation_backward": self.playBackward.emit() elif _id == "_sound_increase": self.volumeUp.emit() elif _id == "_sound_decrease": self.volumeDown.emit() elif _id == "_sound_muted": self.volumeMuted.emit() elif _id == "_subtitle_settings": self.showSubtitleSettings.emit() elif _id == "_preferences": self.showPreference.emit() elif _id == "_information": self.showMovieInformation.emit() @pyqtSlot() def show_menu(self): self.menu = Menu(right_click_menu) hasVideo = movie_info.movie_file != "" self.menu.getItemById("_fullscreen_quit").isActive = hasVideo self.menu.getItemById("_mini_mode").isActive = hasVideo self.menu.getItemById("_play_operation_forward").isActive = hasVideo self.menu.getItemById("_play_operation_backward").isActive = hasVideo self.menu.getItemById("_frame").isActive = \ hasVideo and self._window.getState() != Qt.WindowFullScreen self.menu.getItemById("_subtitle_hide").isActive = \ hasVideo and bool(movie_info.subtitle_file) self.menu.getItemById("_subtitle_manual").isActive = hasVideo self.menu.getItemById("_subtitle_choose").isActive = \ bool(movie_info.subtitle_file) self.menu.getItemById("_information").isActive = hasVideo \ and movie_info.movie_duration != 0 self.menu.getItemById("_on_top").checked = self._window.staysOnTop self.menu.getItemById("proportion:radio:_p_default").checked = \ self._proportion == "proportion:radio:_p_default" self.menu.getItemById("proportion:radio:_p_4_3").checked = \ self._proportion == "proportion:radio:_p_4_3" self.menu.getItemById("proportion:radio:_p_16_9").checked = \ self._proportion == "proportion:radio:_p_16_9" self.menu.getItemById("proportion:radio:_p_16_10").checked = \ self._proportion == "proportion:radio:_p_16_10" self.menu.getItemById("proportion:radio:_p_1_85_1").checked = \ self._proportion == "proportion:radio:_p_1_85_1" self.menu.getItemById("proportion:radio:_p_2_35_1").checked = \ self._proportion == "proportion:radio:_p_2_35_1" self.menu.getItemById("scale:radio:_s_0_5").checked = \ self._scale == "scale:radio:_s_0_5" self.menu.getItemById("scale:radio:_s_1").checked = \ self._scale == "scale:radio:_s_1" self.menu.getItemById("scale:radio:_s_1_5").checked = \ self._scale == "scale:radio:_s_1_5" self.menu.getItemById("scale:radio:_s_2").checked = \ self._scale == "scale:radio:_s_2" self.menu.getItemById("_sound_muted").checked = config.playerMuted self.menu.getItemById("_subtitle_hide").checked = \ not self._window.subtitleVisible subtitles = movie_info.movie_file) subtitles = _subtitle_menu_items_from_files(subtitles) self.menu.getItemById("_subtitle_choose").setSubMenu(Menu(subtitles)) self.menu.getItemById("_fullscreen_quit").text = _("Fullscreen") if \ self._window.getState() != Qt.WindowFullScreen else _("Exit fullscreen") self.menu.getItemById("_mini_mode").text = _("Exit mini mode") if \ self._window.miniModeState() else _("Mini mode") self.menu.itemClicked.connect(self._menu_item_invoked) self.menu.showRectMenu(QCursor.pos().x(), QCursor.pos().y())