Created GUI for mediaclip selection from DVD.

This commit is contained in:
Tomas Groth 2014-01-24 19:43:02 +00:00
parent 80c6c371df
commit 365a4c62cf
4 changed files with 833 additions and 0 deletions

View File

@ -0,0 +1,190 @@
from PyQt4 import QtCore, QtGui
from openlp.core.common import translate
class Ui_MediaClipSelector(object):
def setupUi(self, MediaClipSelector):
MediaClipSelector.setObjectName("MediaClipSelector")
MediaClipSelector.resize(683, 739)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MediaClipSelector.sizePolicy().hasHeightForWidth())
MediaClipSelector.setSizePolicy(sizePolicy)
MediaClipSelector.setMinimumSize(QtCore.QSize(683, 686))
MediaClipSelector.setFocusPolicy(QtCore.Qt.NoFocus)
MediaClipSelector.setAutoFillBackground(False)
MediaClipSelector.setInputMethodHints(QtCore.Qt.ImhNone)
self.centralwidget = QtGui.QWidget(MediaClipSelector)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
self.centralwidget.setSizePolicy(sizePolicy)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtGui.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.close_pushbutton = QtGui.QPushButton(self.centralwidget)
self.close_pushbutton.setEnabled(True)
self.close_pushbutton.setObjectName("close_pushbutton")
self.gridLayout.addWidget(self.close_pushbutton, 10, 4, 1, 1)
self.pause_pushbutton = QtGui.QPushButton(self.centralwidget)
self.pause_pushbutton.setEnabled(True)
self.pause_pushbutton.setText("")
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/slides/media_playback_pause.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.pause_pushbutton.setIcon(icon)
self.pause_pushbutton.setObjectName("pause_pushbutton")
self.gridLayout.addWidget(self.pause_pushbutton, 6, 1, 1, 1)
self.play_pushbutton = QtGui.QPushButton(self.centralwidget)
self.play_pushbutton.setEnabled(True)
self.play_pushbutton.setText("")
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(":/slides/media_playback_start.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.play_pushbutton.setIcon(icon1)
self.play_pushbutton.setObjectName("play_pushbutton")
self.gridLayout.addWidget(self.play_pushbutton, 6, 0, 1, 1)
self.media_path_label = QtGui.QLabel(self.centralwidget)
self.media_path_label.setEnabled(True)
self.media_path_label.setObjectName("media_path_label")
self.gridLayout.addWidget(self.media_path_label, 0, 0, 1, 2)
self.preview_pushbutton = QtGui.QPushButton(self.centralwidget)
self.preview_pushbutton.setEnabled(True)
self.preview_pushbutton.setObjectName("preview_pushbutton")
self.gridLayout.addWidget(self.preview_pushbutton, 10, 2, 1, 1)
self.start_point_label = QtGui.QLabel(self.centralwidget)
self.start_point_label.setEnabled(True)
self.start_point_label.setObjectName("start_point_label")
self.gridLayout.addWidget(self.start_point_label, 7, 0, 1, 2)
spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem, 9, 3, 1, 1)
self.start_timeedit = QtGui.QTimeEdit(self.centralwidget)
self.start_timeedit.setEnabled(True)
self.start_timeedit.setObjectName("start_timeedit")
self.gridLayout.addWidget(self.start_timeedit, 7, 2, 1, 1)
self.jump_end_pushbutton = QtGui.QPushButton(self.centralwidget)
self.jump_end_pushbutton.setEnabled(True)
self.jump_end_pushbutton.setObjectName("jump_end_pushbutton")
self.gridLayout.addWidget(self.jump_end_pushbutton, 8, 4, 1, 1)
self.subtitle_track_label = QtGui.QLabel(self.centralwidget)
self.subtitle_track_label.setEnabled(True)
self.subtitle_track_label.setObjectName("subtitle_track_label")
self.gridLayout.addWidget(self.subtitle_track_label, 4, 0, 1, 2)
self.set_end_pushbutton = QtGui.QPushButton(self.centralwidget)
self.set_end_pushbutton.setEnabled(True)
self.set_end_pushbutton.setObjectName("set_end_pushbutton")
self.gridLayout.addWidget(self.set_end_pushbutton, 8, 3, 1, 1)
self.set_start_pushbutton = QtGui.QPushButton(self.centralwidget)
self.set_start_pushbutton.setEnabled(True)
self.set_start_pushbutton.setObjectName("set_start_pushbutton")
self.gridLayout.addWidget(self.set_start_pushbutton, 7, 3, 1, 1)
self.audio_track_label = QtGui.QLabel(self.centralwidget)
self.audio_track_label.setEnabled(True)
self.audio_track_label.setObjectName("audio_track_label")
self.gridLayout.addWidget(self.audio_track_label, 3, 0, 1, 2)
self.load_disc_pushbutton = QtGui.QPushButton(self.centralwidget)
self.load_disc_pushbutton.setEnabled(True)
self.load_disc_pushbutton.setObjectName("load_disc_pushbutton")
self.gridLayout.addWidget(self.load_disc_pushbutton, 0, 4, 1, 1)
self.media_position_timeedit = QtGui.QTimeEdit(self.centralwidget)
self.media_position_timeedit.setEnabled(True)
self.media_position_timeedit.setObjectName("media_position_timeedit")
self.gridLayout.addWidget(self.media_position_timeedit, 6, 4, 1, 1)
self.end_point_label = QtGui.QLabel(self.centralwidget)
self.end_point_label.setEnabled(True)
self.end_point_label.setObjectName("end_point_label")
self.gridLayout.addWidget(self.end_point_label, 8, 0, 1, 1)
self.jump_start_pushbutton = QtGui.QPushButton(self.centralwidget)
self.jump_start_pushbutton.setEnabled(True)
self.jump_start_pushbutton.setObjectName("jump_start_pushbutton")
self.gridLayout.addWidget(self.jump_start_pushbutton, 7, 4, 1, 1)
self.end_timeedit = QtGui.QTimeEdit(self.centralwidget)
self.end_timeedit.setEnabled(True)
self.end_timeedit.setObjectName("end_timeedit")
self.gridLayout.addWidget(self.end_timeedit, 8, 2, 1, 1)
self.title_label = QtGui.QLabel(self.centralwidget)
self.title_label.setEnabled(True)
self.title_label.setObjectName("title_label")
self.gridLayout.addWidget(self.title_label, 2, 0, 1, 1)
self.save_pushbutton = QtGui.QPushButton(self.centralwidget)
self.save_pushbutton.setEnabled(True)
self.save_pushbutton.setObjectName("save_pushbutton")
self.gridLayout.addWidget(self.save_pushbutton, 10, 3, 1, 1)
self.media_path_combobox = QtGui.QComboBox(self.centralwidget)
self.media_path_combobox.setEnabled(True)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.media_path_combobox.sizePolicy().hasHeightForWidth())
self.media_path_combobox.setSizePolicy(sizePolicy)
self.media_path_combobox.setEditable(True)
self.media_path_combobox.setObjectName("media_path_combobox")
self.gridLayout.addWidget(self.media_path_combobox, 0, 2, 1, 2)
self.position_horizontalslider = QtGui.QSlider(self.centralwidget)
self.position_horizontalslider.setEnabled(True)
self.position_horizontalslider.setTracking(False)
self.position_horizontalslider.setOrientation(QtCore.Qt.Horizontal)
self.position_horizontalslider.setInvertedAppearance(False)
self.position_horizontalslider.setObjectName("position_horizontalslider")
self.gridLayout.addWidget(self.position_horizontalslider, 6, 2, 1, 2)
self.title_combo_box = QtGui.QComboBox(self.centralwidget)
self.title_combo_box.setEnabled(True)
self.title_combo_box.setProperty("currentText", "")
self.title_combo_box.setObjectName("title_combo_box")
self.gridLayout.addWidget(self.title_combo_box, 2, 2, 1, 2)
self.audio_tracks_combobox = QtGui.QComboBox(self.centralwidget)
self.audio_tracks_combobox.setEnabled(True)
self.audio_tracks_combobox.setObjectName("audio_tracks_combobox")
self.gridLayout.addWidget(self.audio_tracks_combobox, 3, 2, 1, 2)
self.subtitle_tracks_combobox = QtGui.QComboBox(self.centralwidget)
self.subtitle_tracks_combobox.setEnabled(True)
self.subtitle_tracks_combobox.setObjectName("subtitle_tracks_combobox")
self.gridLayout.addWidget(self.subtitle_tracks_combobox, 4, 2, 1, 2)
self.media_view_frame = QtGui.QFrame(self.centralwidget)
self.media_view_frame.setMinimumSize(QtCore.QSize(665, 375))
self.media_view_frame.setStyleSheet("background-color:black;")
self.media_view_frame.setFrameShape(QtGui.QFrame.StyledPanel)
self.media_view_frame.setFrameShadow(QtGui.QFrame.Raised)
self.media_view_frame.setObjectName("media_view_frame")
self.gridLayout.addWidget(self.media_view_frame, 5, 0, 1, 5)
#MediaClipSelector.setCentralWidget(self.centralwidget)
self.retranslateUi(MediaClipSelector)
QtCore.QMetaObject.connectSlotsByName(MediaClipSelector)
MediaClipSelector.setTabOrder(self.media_path_combobox, self.load_disc_pushbutton)
MediaClipSelector.setTabOrder(self.load_disc_pushbutton, self.title_combo_box)
MediaClipSelector.setTabOrder(self.title_combo_box, self.audio_tracks_combobox)
MediaClipSelector.setTabOrder(self.audio_tracks_combobox, self.subtitle_tracks_combobox)
MediaClipSelector.setTabOrder(self.subtitle_tracks_combobox, self.play_pushbutton)
MediaClipSelector.setTabOrder(self.play_pushbutton, self.pause_pushbutton)
MediaClipSelector.setTabOrder(self.pause_pushbutton, self.position_horizontalslider)
MediaClipSelector.setTabOrder(self.position_horizontalslider, self.media_position_timeedit)
MediaClipSelector.setTabOrder(self.media_position_timeedit, self.start_timeedit)
MediaClipSelector.setTabOrder(self.start_timeedit, self.set_start_pushbutton)
MediaClipSelector.setTabOrder(self.set_start_pushbutton, self.jump_start_pushbutton)
MediaClipSelector.setTabOrder(self.jump_start_pushbutton, self.end_timeedit)
MediaClipSelector.setTabOrder(self.end_timeedit, self.set_end_pushbutton)
MediaClipSelector.setTabOrder(self.set_end_pushbutton, self.jump_end_pushbutton)
MediaClipSelector.setTabOrder(self.jump_end_pushbutton, self.preview_pushbutton)
MediaClipSelector.setTabOrder(self.preview_pushbutton, self.save_pushbutton)
MediaClipSelector.setTabOrder(self.save_pushbutton, self.close_pushbutton)
def retranslateUi(self, MediaClipSelector):
MediaClipSelector.setWindowTitle(translate("MediaPlugin.MediaClipSelector", "Select media clip", None))
self.close_pushbutton.setText(translate("MediaPlugin.MediaClipSelector", "Close", None))
self.media_path_label.setText(translate("MediaPlugin.MediaClipSelector", "Media path", None))
self.preview_pushbutton.setText(translate("MediaPlugin.MediaClipSelector", "Preview current clip", None))
self.start_point_label.setText(translate("MediaPlugin.MediaClipSelector", "Start point", None))
self.start_timeedit.setDisplayFormat(translate("MediaPlugin.MediaClipSelector", "HH:mm:ss.z", None))
self.jump_end_pushbutton.setText(translate("MediaPlugin.MediaClipSelector", "Jump to end point", None))
self.subtitle_track_label.setText(translate("MediaPlugin.MediaClipSelector", "Subtitle track", None))
self.set_end_pushbutton.setText(translate("MediaPlugin.MediaClipSelector", "Set current position as end point", None))
self.set_start_pushbutton.setText(translate("MediaPlugin.MediaClipSelector", "Set current position as start point", None))
self.audio_track_label.setText(translate("MediaPlugin.MediaClipSelector", "Audio track", None))
self.load_disc_pushbutton.setText(translate("MediaPlugin.MediaClipSelector", "Load disc", None))
self.media_position_timeedit.setDisplayFormat(translate("MediaPlugin.MediaClipSelector", "HH:mm:ss.z", None))
self.end_point_label.setText(translate("MediaPlugin.MediaClipSelector", "End point", None))
self.jump_start_pushbutton.setText(translate("MediaPlugin.MediaClipSelector", "Jump to start point", None))
self.end_timeedit.setDisplayFormat(translate("MediaPlugin.MediaClipSelector", "HH:mm:ss.z", None))
self.title_label.setText(translate("MediaPlugin.MediaClipSelector", "Title", None))
self.save_pushbutton.setText(translate("MediaPlugin.MediaClipSelector", "Save current clip", None))

View File

@ -0,0 +1,276 @@
# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
# Copyright (c) 2008-2014 Raoul Snyman #
# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, #
# Frode Woldsund, Martin Zibricky, Patrick Zimmermann #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
import os
import sys
import logging
import time
from PyQt4 import QtCore, QtGui
from openlp.plugins.media.forms.mediaclipselectordialog import Ui_MediaClipSelector
from openlp.core.ui.media.vendor import vlc
log = logging.getLogger(__name__)
class MediaClipSelectorForm(QtGui.QDialog, Ui_MediaClipSelector):
"""
Class to manage the clip selection
"""
log.info('%s MediaClipSelectorForm loaded', __name__)
def __init__(self, media_item, parent, manager):
"""
Constructor
"""
super(MediaClipSelectorForm, self).__init__(parent)
self.media_item = media_item
self.setupUi(self)
self.playback_length = 0
self.position_horizontalslider.setMinimum(0)
self.disable_all()
self.toggle_disable_load_media(False)
# most actions auto-connect due to the functions name, so only a few left to do
self.close_pushbutton.clicked.connect(self.reject)
#self.load_disc_pushbutton.clicked.connect(self.on_load_disc_pushbutton_clicked)
#self.pause_pushbutton.clicked.connect(self.on_pause_pushbutton_clicked)
#self.play_pushbutton.clicked.connect(self.on_play_pushbutton_clicked)
def reject(self):
"""
Exit Dialog and do not save
"""
log.debug ('MediaClipSelectorForm.reject')
self.vlc_media_player.stop()
QtGui.QDialog.reject(self)
def exec_(self):
self.setup_vlc()
return QtGui.QDialog.exec_(self)
def setup_vlc(self):
self.vlc_instance = vlc.Instance()
# creating an empty vlc media player
self.vlc_media_player = self.vlc_instance.media_player_new()
# The media player has to be 'connected' to the QFrame.
# (otherwise a video would be displayed in it's own window)
# This is platform specific!
# You have to give the id of the QFrame (or similar object)
# to vlc, different platforms have different functions for this.
win_id = int(self.media_view_frame.winId())
if sys.platform == "win32":
self.vlc_media_player.set_hwnd(win_id)
elif sys.platform == "darwin":
# We have to use 'set_nsobject' since Qt4 on OSX uses Cocoa
# framework and not the old Carbon.
self.vlc_media_player.set_nsobject(win_id)
else:
# for Linux using the X Server
self.vlc_media_player.set_xwindow(win_id)
self.vlc_media = None
# Setup timer every 100 ms to update position
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(self.update_position)
self.timer.start(100)
@QtCore.pyqtSlot(bool)
def on_load_disc_pushbutton_clicked(self, clicked):
self.disable_all()
path = self.media_path_combobox.currentText()
if path == '':
print('no given path')
# TODO: Error message
self.toggle_disable_load_media(False)
return
self.vlc_media = self.vlc_instance.media_new_path(path)
if not self.vlc_media:
print('media player is none')
# TODO: Error message
self.toggle_disable_load_media(False)
return
# put the media in the media player
self.vlc_media_player.set_media(self.vlc_media)
self.vlc_media_player.audio_set_mute(True)
# start playback to get vlc to parse the media
if self.vlc_media_player.play() < 0:
print('play returned error')
# TODO: Error message
self.toggle_disable_load_media(False)
return
self.vlc_media_player.audio_set_mute(True)
while self.vlc_media_player.get_time() == 0:
if self.vlc_media_player.get_state() == vlc.State.Error:
print('player in error state')
self.toggle_disable_load_media(False)
return
time.sleep(0.1)
self.vlc_media_player.pause()
self.vlc_media_player.set_time(0)
# Get titles, insert in combobox
titles = self.vlc_media_player.video_get_title_description()
self.title_combo_box.clear()
for title in titles:
self.title_combo_box.addItem(title[1].decode(), title[0])
# Main title is usually title #1
if len(titles) > 1:
self.title_combo_box.setCurrentIndex(1)
else:
self.title_combo_box.setCurrentIndex(0)
# Enable audio track combobox if anything is in it
if len(titles) > 0:
self.title_combo_box.setDisabled(False)
self.toggle_disable_load_media(False)
def on_pause_pushbutton_clicked(self):
self.vlc_media_player.pause()
def on_play_pushbutton_clicked(self):
self.vlc_media_player.play()
def on_set_start_pushbutton_clicked(self):
vlc_ms_pos = self.vlc_media_player.get_time()
time = QtCore.QTime()
new_pos_time = time.addMSecs(vlc_ms_pos)
self.start_timeedit.setTime(new_pos_time)
def on_set_end_pushbutton_clicked(self):
vlc_ms_pos = self.vlc_media_player.get_time()
time = QtCore.QTime()
new_pos_time = time.addMSecs(vlc_ms_pos)
self.end_timeedit.setTime(new_pos_time)
def on_jump_end_pushbutton_clicked(self):
end_time = self.end_timeedit.time()
end_time_ms = end_time.hour() * 60 * 60 * 1000 + \
end_time.minute() * 60 * 1000 + \
end_time.second() * 1000 + \
end_time.msec()
self.vlc_media_player.set_time(end_time_ms)
def on_jump_start_pushbutton_clicked(self):
start_time = self.start_timeedit.time()
start_time_ms = start_time.hour() * 60 * 60 * 1000 + \
start_time.minute() * 60 * 1000 + \
start_time.second() * 1000 + \
start_time.msec()
self.vlc_media_player.set_time(start_time_ms)
@QtCore.pyqtSlot(int)
def on_title_combo_box_currentIndexChanged(self, index):
print('in on_title_combo_box_changed, index: ', str(index))
self.vlc_media_player.set_title(index)
self.vlc_media_player.set_time(0)
self.vlc_media_player.play()
self.vlc_media_player.audio_set_mute(True)
while self.vlc_media_player.get_time() == 0:
time.sleep(0.1)
# pause
self.vlc_media_player.pause()
self.vlc_media_player.set_time(0)
# Get audio tracks, insert in combobox
audio_tracks = self.vlc_media_player.audio_get_track_description()
self.audio_tracks_combobox.clear()
for audio_track in audio_tracks:
self.audio_tracks_combobox.addItem(audio_track[1].decode(),audio_track[0])
# Enable audio track combobox if anything is in it
if len(audio_tracks) > 0:
self.audio_tracks_combobox.setDisabled(False)
# First track is "deactivated", so set to next if it exists
if len(audio_tracks) > 1:
self.audio_tracks_combobox.setCurrentIndex(1)
# Get subtitle tracks, insert in combobox
subtitles_tracks = self.vlc_media_player.video_get_spu_description()
self.subtitle_tracks_combobox.clear()
for subtitle_track in subtitles_tracks:
self.subtitle_tracks_combobox.addItem(subtitle_track[1].decode(), subtitle_track[0])
# Enable subtitle track combobox is anything in it
if len(subtitles_tracks) > 0:
self.subtitle_tracks_combobox.setDisabled(False)
# First track is "deactivated", so set to next if it exists
if len(subtitles_tracks) > 1:
self.subtitle_tracks_combobox.setCurrentIndex(1)
self.vlc_media_player.audio_set_mute(False)
self.playback_length = self.vlc_media_player.get_length()
self.position_horizontalslider.setMaximum(self.playback_length)
# If a title or audio track is available the player is enabled
if self.title_combo_box.count() > 0 or len(audio_tracks) > 0:
self.toggle_disable_player(False)
@QtCore.pyqtSlot(int)
def on_audio_tracks_combobox_currentIndexChanged(self, index):
audio_track = self.audio_tracks_combobox.itemData(index)
print('in on_audio_tracks_combobox_currentIndexChanged, index: ', str(index), ' audio_track: ', audio_track)
if audio_track and int(audio_track) > 0:
self.vlc_media_player.audio_set_track(int(audio_track))
@QtCore.pyqtSlot(int)
def on_subtitle_tracks_combobox_currentIndexChanged(self, index):
subtitle_track = self.subtitle_tracks_combobox.itemData(index)
print('in on_subtitle_tracks_combobox_currentIndexChanged, index: ', str(index), ' subtitle_track: ', subtitle_track)
if subtitle_track:
self.vlc_media_player.video_set_spu(int(subtitle_track))
def on_position_horizontalslider_sliderMoved(self, position):
self.vlc_media_player.set_time(position)
def update_position(self):
if self.vlc_media_player:
vlc_ms_pos = self.vlc_media_player.get_time()
#print('in update_position, time: ', vlc_ms_pos)
rounded_vlc_ms_pos = int(round(vlc_ms_pos / 100.0) * 100.0)
time = QtCore.QTime()
new_pos_time = time.addMSecs(rounded_vlc_ms_pos)
self.media_position_timeedit.setTime(new_pos_time)
self.position_horizontalslider.setSliderPosition(vlc_ms_pos)
def disable_all(self):
self.toggle_disable_load_media(True)
self.title_combo_box.setDisabled(True)
self.audio_tracks_combobox.setDisabled(True)
self.subtitle_tracks_combobox.setDisabled(True)
self.toggle_disable_player(True)
def toggle_disable_load_media(self, action):
self.media_path_combobox.setDisabled(action)
self.load_disc_pushbutton.setDisabled(action)
def toggle_disable_player(self, action):
self.play_pushbutton.setDisabled(action)
self.pause_pushbutton.setDisabled(action)
self.position_horizontalslider.setDisabled(action)
self.media_position_timeedit.setDisabled(action)
self.start_timeedit.setDisabled(action)
self.set_start_pushbutton.setDisabled(action)
self.jump_start_pushbutton.setDisabled(action)
self.end_timeedit.setDisabled(action)
self.set_end_pushbutton.setDisabled(action)
self.jump_end_pushbutton.setDisabled(action)
self.preview_pushbutton.setDisabled(action)
self.save_pushbutton.setDisabled(action)

View File

@ -39,6 +39,8 @@ from openlp.core.lib.ui import critical_error_message_box, create_horizontal_adj
from openlp.core.ui import DisplayController, Display, DisplayControllerType
from openlp.core.ui.media import get_media_players, set_media_players
from openlp.core.utils import get_locale_key
from openlp.plugins.media.forms.mediaclipselectorform import MediaClipSelectorForm
log = logging.getLogger(__name__)
@ -115,6 +117,7 @@ class MediaMediaItem(MediaManagerItem):
triggers=self.onReplaceClick)
self.reset_action = self.toolbar.add_toolbar_action('reset_action', icon=':/system/system_close.png',
visible=False, triggers=self.onResetClick)
self.load_optical = self.toolbar.add_toolbar_action('load_optical', icon=':/songs/song_maintenance.png', triggers=self.on_load_optical)
self.media_widget = QtGui.QWidget(self)
self.media_widget.setObjectName('media_widget')
self.display_layout = QtGui.QFormLayout(self.media_widget)
@ -215,6 +218,7 @@ class MediaMediaItem(MediaManagerItem):
check_directory_exists(self.servicePath)
self.load_list(Settings().value(self.settings_section + '/media files'))
self.populateDisplayTypes()
self.media_clip_selector_form = MediaClipSelectorForm(self, self.main_window, None)
def rebuild_players(self):
"""
@ -311,3 +315,7 @@ class MediaMediaItem(MediaManagerItem):
if filename.lower().find(string) > -1:
results.append([file, filename])
return results
def on_load_optical(self):
log.debug('in on_load_optical')
self.media_clip_selector_form.exec_()

View File

@ -0,0 +1,359 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MediaClipSelector</class>
<widget class="QMainWindow" name="MediaClipSelector">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>683</width>
<height>739</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>683</width>
<height>686</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="windowTitle">
<string>Select media clip</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="inputMethodHints">
<set>Qt::ImhNone</set>
</property>
<widget class="QWidget" name="centralwidget">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="10" column="4">
<widget class="QPushButton" name="close_pushbutton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Close</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QPushButton" name="pause_pushbutton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normaloff>../images/media_playback_pause.png</normaloff>../images/media_playback_pause.png</iconset>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QPushButton" name="play_pushbutton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normaloff>../images/media_playback_start.png</normaloff>../images/media_playback_start.png</iconset>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="media_path_label">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Media path</string>
</property>
</widget>
</item>
<item row="10" column="2">
<widget class="QPushButton" name="preview_pushbutton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Preview current clip</string>
</property>
</widget>
</item>
<item row="7" column="0" colspan="2">
<widget class="QLabel" name="start_point_label">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Start point</string>
</property>
</widget>
</item>
<item row="9" column="3">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="7" column="2">
<widget class="QTimeEdit" name="start_timeedit">
<property name="enabled">
<bool>true</bool>
</property>
<property name="displayFormat">
<string>HH:mm:ss.z</string>
</property>
</widget>
</item>
<item row="8" column="4">
<widget class="QPushButton" name="jump_end_pushbutton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Jump to end point</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QLabel" name="subtitle_track_label">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Subtitle track</string>
</property>
</widget>
</item>
<item row="8" column="3">
<widget class="QPushButton" name="set_end_pushbutton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Set current position as end point</string>
</property>
</widget>
</item>
<item row="7" column="3">
<widget class="QPushButton" name="set_start_pushbutton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Set current position as start point</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QLabel" name="audio_track_label">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Audio track</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="load_disc_pushbutton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Load disc</string>
</property>
</widget>
</item>
<item row="6" column="4">
<widget class="QTimeEdit" name="media_position_timeedit">
<property name="enabled">
<bool>true</bool>
</property>
<property name="displayFormat">
<string>HH:mm:ss.z</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="end_point_label">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>End point</string>
</property>
</widget>
</item>
<item row="7" column="4">
<widget class="QPushButton" name="jump_start_pushbutton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Jump to start point</string>
</property>
</widget>
</item>
<item row="8" column="2">
<widget class="QTimeEdit" name="end_timeedit">
<property name="enabled">
<bool>true</bool>
</property>
<property name="displayFormat">
<string>HH:mm:ss.z</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="title_label">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Title</string>
</property>
</widget>
</item>
<item row="10" column="3">
<widget class="QPushButton" name="save_pushbutton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Save current clip</string>
</property>
</widget>
</item>
<item row="0" column="2" colspan="2">
<widget class="QComboBox" name="media_path_combobox">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="2" colspan="2">
<widget class="QSlider" name="position_horizontalslider">
<property name="enabled">
<bool>true</bool>
</property>
<property name="tracking">
<bool>false</bool>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="2" colspan="2">
<widget class="QComboBox" name="title_combo_box">
<property name="enabled">
<bool>true</bool>
</property>
<property name="currentText" stdset="0">
<string/>
</property>
</widget>
</item>
<item row="3" column="2" colspan="2">
<widget class="QComboBox" name="audio_tracks_combobox">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="2" colspan="2">
<widget class="QComboBox" name="subtitle_tracks_combobox">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="0" colspan="5">
<widget class="QFrame" name="media_view_frame">
<property name="minimumSize">
<size>
<width>665</width>
<height>375</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color:black;</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<tabstops>
<tabstop>media_path_combobox</tabstop>
<tabstop>load_disc_pushbutton</tabstop>
<tabstop>title_combo_box</tabstop>
<tabstop>audio_tracks_combobox</tabstop>
<tabstop>subtitle_tracks_combobox</tabstop>
<tabstop>play_pushbutton</tabstop>
<tabstop>pause_pushbutton</tabstop>
<tabstop>position_horizontalslider</tabstop>
<tabstop>media_position_timeedit</tabstop>
<tabstop>start_timeedit</tabstop>
<tabstop>set_start_pushbutton</tabstop>
<tabstop>jump_start_pushbutton</tabstop>
<tabstop>end_timeedit</tabstop>
<tabstop>set_end_pushbutton</tabstop>
<tabstop>jump_end_pushbutton</tabstop>
<tabstop>preview_pushbutton</tabstop>
<tabstop>save_pushbutton</tabstop>
<tabstop>close_pushbutton</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>