Ejemplo n.º 1
0
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())
Ejemplo n.º 2
0
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())
Ejemplo n.º 3
0
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())
Ejemplo n.º 4
0
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())
Ejemplo n.º 5
0
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())