openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #05072
[Merge] lp:~googol-hush/openlp/slidecontroller into lp:openlp
Andreas Preikschat has proposed merging lp:~googol-hush/openlp/slidecontroller into lp:openlp.
Requested reviews:
Raoul Snyman (raoul-snyman)
Tim Bentley (trb143)
For more details, see:
https://code.launchpad.net/~googol-hush/openlp/slidecontroller/+merge/44778
Fix for bug #598356.
Cheers
--
https://code.launchpad.net/~googol-hush/openlp/slidecontroller/+merge/44778
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/lib/dockwidget.py'
--- openlp/core/lib/dockwidget.py 2010-12-26 11:04:47 +0000
+++ openlp/core/lib/dockwidget.py 2010-12-28 10:43:53 +0000
@@ -37,13 +37,15 @@
"""
Custom DockWidget class to handle events
"""
- def __init__(self, parent=None, name=None):
+ def __init__(self, parent=None, name=None, icon=None):
"""
Initialise the DockWidget
"""
+ log.debug(u'Initialise the %s widget' % name)
QtGui.QDockWidget.__init__(self, parent)
self.parent = parent
if name:
self.setObjectName(name)
+ if icon:
+ self.setWindowIcon(icon)
self.setFloating(False)
- log.debug(u'Init done')
\ No newline at end of file
=== modified file 'openlp/core/lib/settingsmanager.py'
--- openlp/core/lib/settingsmanager.py 2010-12-26 11:04:47 +0000
+++ openlp/core/lib/settingsmanager.py 2010-12-28 10:43:53 +0000
@@ -55,7 +55,7 @@
self.mainwindow_left = mainwindow_docbars
self.mainwindow_right = mainwindow_docbars
self.slidecontroller = (self.width - (
- self.mainwindow_left + self.mainwindow_right) - 100 ) / 2
+ self.mainwindow_left + self.mainwindow_right) - 100) / 2
self.slidecontroller_image = self.slidecontroller - 50
@staticmethod
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2010-12-26 11:04:47 +0000
+++ openlp/core/ui/mainwindow.py 2010-12-28 10:43:53 +0000
@@ -76,7 +76,7 @@
MainIcon = build_icon(u':/icon/openlp-logo-16x16.png')
MainWindow.setWindowIcon(MainIcon)
self.setDockNestingEnabled(True)
- # Set up the main container, which contains all the other form widgets
+ # Set up the main container, which contains all the other form widgets.
self.MainContent = QtGui.QWidget(MainWindow)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
@@ -141,13 +141,12 @@
self.DefaultThemeLabel.setObjectName(u'DefaultThemeLabel')
self.StatusBar.addPermanentWidget(self.DefaultThemeLabel)
# Create the MediaManager
- self.MediaManagerDock = OpenLPDockWidget(MainWindow)
- self.MediaManagerDock.setWindowIcon(
+ self.MediaManagerDock = OpenLPDockWidget(
+ MainWindow, u'MediaManagerDock',
build_icon(u':/system/system_mediamanager.png'))
self.MediaManagerDock.setStyleSheet(MEDIA_MANAGER_STYLE)
self.MediaManagerDock.setMinimumWidth(
self.settingsmanager.mainwindow_left)
- self.MediaManagerDock.setObjectName(u'MediaManagerDock')
self.MediaManagerContents = QtGui.QWidget(MainWindow)
self.MediaManagerContents.setObjectName(u'MediaManagerContents')
self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents)
@@ -161,10 +160,9 @@
MainWindow.addDockWidget(
QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock)
# Create the service manager
- self.ServiceManagerDock = OpenLPDockWidget(MainWindow)
- self.ServiceManagerDock.setWindowIcon(
+ self.ServiceManagerDock = OpenLPDockWidget(
+ MainWindow, u'ServiceManagerDock',
build_icon(u':/system/system_servicemanager.png'))
- self.ServiceManagerDock.setObjectName(u'ServiceManagerDock')
self.ServiceManagerDock.setMinimumWidth(
self.settingsmanager.mainwindow_right)
self.ServiceManagerContents = ServiceManager(self)
@@ -172,10 +170,9 @@
MainWindow.addDockWidget(
QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock)
# Create the theme manager
- self.ThemeManagerDock = OpenLPDockWidget(MainWindow)
- self.ThemeManagerDock.setWindowIcon(
+ self.ThemeManagerDock = OpenLPDockWidget(
+ MainWindow, u'ThemeManagerDock',
build_icon(u':/system/system_thememanager.png'))
- self.ThemeManagerDock.setObjectName(u'ThemeManagerDock')
self.ThemeManagerDock.setMinimumWidth(
self.settingsmanager.mainwindow_right)
self.ThemeManagerContents = ThemeManager(self)
@@ -272,7 +269,7 @@
self.SettingsPluginListItem.setObjectName(u'SettingsPluginListItem')
MainWindow.actionList.add_action(self.SettingsPluginListItem,
u'Settings')
- #i18n Language Items
+ # i18n Language Items
self.AutoLanguageItem = QtGui.QAction(MainWindow)
self.AutoLanguageItem.setObjectName(u'AutoLanguageItem')
self.AutoLanguageItem.setCheckable(True)
@@ -331,7 +328,7 @@
None, self.ViewMediaManagerItem, self.ViewServiceManagerItem,
self.ViewThemeManagerItem, None, self.ViewPreviewPanel,
self.ViewLivePanel))
- #i18n add Language Actions
+ # i18n add Language Actions
add_actions(self.SettingsLanguageMenu, (self.AutoLanguageItem, None))
add_actions(self.SettingsLanguageMenu, self.LanguageGroup.actions())
add_actions(self.SettingsMenu, (self.SettingsPluginListItem,
@@ -354,17 +351,8 @@
QtCore.SIGNAL(u'aboutToShow()'), self.updateFileMenu)
QtCore.QObject.connect(self.FileExitItem,
QtCore.SIGNAL(u'triggered()'), MainWindow.close)
- QtCore.QObject.connect(self.ControlSplitter,
- QtCore.SIGNAL(u'splitterMoved(int, int)'), self.trackSplitter)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
- def trackSplitter(self, tab, pos):
- """
- Splitter between the Preview and Live Controllers.
- """
- self.liveController.widthChanged()
- self.previewController.widthChanged()
-
def retranslateUi(self, MainWindow):
"""
Set up the translation system
@@ -998,8 +986,8 @@
The service filename to add
"""
# The maxRecentFiles value does not have an interface and so never gets
- # actually stored in the settings therefore the default value of 20
- # will always be used.
+ # actually stored in the settings therefore the default value of 20 will
+ # always be used.
maxRecentFiles = QtCore.QSettings().value(u'advanced/max recent files',
QtCore.QVariant(20)).toInt()[0]
if filename:
@@ -1009,4 +997,4 @@
self.recentFiles.insert(0, QtCore.QString(filename))
while self.recentFiles.count() > maxRecentFiles:
# Don't care what API says takeLast works, removeLast doesn't!
- self.recentFiles.takeLast()
\ No newline at end of file
+ self.recentFiles.takeLast()
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2010-12-26 11:04:47 +0000
+++ openlp/core/ui/slidecontroller.py 2010-12-28 10:43:53 +0000
@@ -73,6 +73,7 @@
else:
event.ignore()
+
class SlideController(QtGui.QWidget):
"""
SlideController is the slide controller widget. This widget is what the
@@ -183,41 +184,23 @@
translate('OpenLP.SlideController',
'Blank Screen'), self.HideMenu)
self.BlankScreen.setCheckable(True)
- QtCore.QObject.connect(self.BlankScreen,
- QtCore.SIGNAL("triggered(bool)"), self.onBlankDisplay)
self.ThemeScreen = QtGui.QAction(QtGui.QIcon(
u':/slides/slide_theme.png'),
translate('OpenLP.SlideController',
'Blank to Theme'), self.HideMenu)
self.ThemeScreen.setCheckable(True)
- QtCore.QObject.connect(self.ThemeScreen,
- QtCore.SIGNAL("triggered(bool)"), self.onThemeDisplay)
+ self.HideMenu.setDefaultAction(self.BlankScreen)
+ self.HideMenu.menu().addAction(self.BlankScreen)
+ self.HideMenu.menu().addAction(self.ThemeScreen)
if self.screens.display_count > 1:
self.DesktopScreen = QtGui.QAction(QtGui.QIcon(
u':/slides/slide_desktop.png'),
translate('OpenLP.SlideController',
- 'Show Desktop'), self.HideMenu)
+ 'Show Desktop'), self.HideMenu)
+ self.HideMenu.menu().addAction(self.DesktopScreen)
self.DesktopScreen.setCheckable(True)
QtCore.QObject.connect(self.DesktopScreen,
- QtCore.SIGNAL("triggered(bool)"), self.onHideDisplay)
- self.HideMenu.setDefaultAction(self.BlankScreen)
- self.HideMenu.menu().addAction(self.BlankScreen)
- self.HideMenu.menu().addAction(self.ThemeScreen)
- if self.screens.display_count > 1:
- self.HideMenu.menu().addAction(self.DesktopScreen)
- if not self.isLive:
- self.Toolbar.addToolbarSeparator(u'Close Separator')
- self.Toolbar.addToolbarButton(
- u'Go Live', u':/general/general_live.png',
- translate('OpenLP.SlideController', 'Move to live'),
- self.onGoLive)
- self.Toolbar.addToolbarSeparator(u'Close Separator')
- self.Toolbar.addToolbarButton(
- u'Edit Song', u':/general/general_edit.png',
- translate('OpenLP.SlideController',
- 'Edit and reload song preview'),
- self.onEditSong)
- if isLive:
+ QtCore.SIGNAL(u'triggered(bool)'), self.onHideDisplay)
self.Toolbar.addToolbarSeparator(u'Loop Separator')
self.Toolbar.addToolbarButton(
u'Start Loop', u':/media/media_time.png',
@@ -230,12 +213,23 @@
self.DelaySpinBox = QtGui.QSpinBox()
self.DelaySpinBox.setMinimum(1)
self.DelaySpinBox.setMaximum(180)
- self.Toolbar.addToolbarWidget(
- u'Image SpinBox', self.DelaySpinBox)
+ self.Toolbar.addToolbarWidget(u'Image SpinBox', self.DelaySpinBox)
self.DelaySpinBox.setSuffix(translate('OpenLP.SlideController',
's'))
self.DelaySpinBox.setToolTip(translate('OpenLP.SlideController',
'Delay between slides in seconds'))
+ else:
+ self.Toolbar.addToolbarSeparator(u'Close Separator')
+ self.Toolbar.addToolbarButton(
+ u'Go Live', u':/general/general_live.png',
+ translate('OpenLP.SlideController', 'Move to live'),
+ self.onGoLive)
+ self.Toolbar.addToolbarSeparator(u'Close Separator')
+ self.Toolbar.addToolbarButton(
+ u'Edit Song', u':/general/general_edit.png',
+ translate('OpenLP.SlideController',
+ 'Edit and reload song preview'),
+ self.onEditSong)
self.ControllerLayout.addWidget(self.Toolbar)
# Build a Media ToolBar
self.Mediabar = OpenLPToolbar(self)
@@ -251,42 +245,39 @@
u'Media Stop', u':/slides/media_playback_stop.png',
translate('OpenLP.SlideController', 'Start playing media'),
self.onMediaStop)
- if not self.isLive:
- self.seekSlider = Phonon.SeekSlider()
- self.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24))
- self.seekSlider.setObjectName(u'seekSlider')
- self.Mediabar.addToolbarWidget(
- u'Seek Slider', self.seekSlider)
- self.volumeSlider = Phonon.VolumeSlider()
- self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24))
- self.volumeSlider.setObjectName(u'volumeSlider')
- self.Mediabar.addToolbarWidget(u'Audio Volume', self.volumeSlider)
- else:
- self.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal)
- self.volumeSlider.setTickInterval(1)
- self.volumeSlider.setTickPosition(QtGui.QSlider.TicksAbove)
- self.volumeSlider.setMinimum(0)
- self.volumeSlider.setMaximum(10)
- self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24))
- self.volumeSlider.setObjectName(u'volumeSlider')
- self.Mediabar.addToolbarWidget(u'Audio Volume', self.volumeSlider)
- self.ControllerLayout.addWidget(self.Mediabar)
- # Build the Song Toolbar
- if isLive:
+ if self.isLive:
+ # Build the Song Toolbar
self.SongMenu = QtGui.QToolButton(self.Toolbar)
self.SongMenu.setText(translate('OpenLP.SlideController',
'Go To'))
self.SongMenu.setPopupMode(QtGui.QToolButton.InstantPopup)
self.Toolbar.addToolbarWidget(u'Song Menu', self.SongMenu)
self.SongMenu.setMenu(QtGui.QMenu(
- translate('OpenLP.SlideController', 'Go To'),
- self.Toolbar))
+ translate('OpenLP.SlideController', 'Go To'), self.Toolbar))
self.Toolbar.makeWidgetsInvisible([u'Song Menu'])
+ # Build the volumeSlider.
+ self.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal)
+ self.volumeSlider.setTickInterval(1)
+ self.volumeSlider.setTickPosition(QtGui.QSlider.TicksAbove)
+ self.volumeSlider.setMinimum(0)
+ self.volumeSlider.setMaximum(10)
+ else:
+ # Build the seekSlider.
+ self.seekSlider = Phonon.SeekSlider()
+ self.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24))
+ self.seekSlider.setObjectName(u'seekSlider')
+ self.Mediabar.addToolbarWidget(u'Seek Slider', self.seekSlider)
+ self.volumeSlider = Phonon.VolumeSlider()
+ self.volumeSlider.setGeometry(QtCore.QRect(90, 260, 221, 24))
+ self.volumeSlider.setObjectName(u'volumeSlider')
+ self.Mediabar.addToolbarWidget(u'Audio Volume', self.volumeSlider)
+ self.ControllerLayout.addWidget(self.Mediabar)
# Screen preview area
self.PreviewFrame = QtGui.QFrame(self.Splitter)
- self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 225))
+ self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 300 * self.ratio))
+ self.PreviewFrame.setMinimumHeight(100)
self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy(
- QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum,
+ QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored,
QtGui.QSizePolicy.Label))
self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel)
self.PreviewFrame.setFrameShadow(QtGui.QFrame.Sunken)
@@ -306,7 +297,6 @@
Phonon.createPath(self.mediaObject, self.audio)
if not self.isLive:
self.video.setGeometry(QtCore.QRect(0, 0, 300, 225))
- self.video.setVisible(False)
self.SlideLayout.insertWidget(0, self.video)
# Actual preview screen
self.SlidePreview = QtGui.QLabel(self)
@@ -330,18 +320,24 @@
# Signals
QtCore.QObject.connect(self.PreviewListWidget,
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
- if not self.isLive:
+ if self.isLive:
+ QtCore.QObject.connect(self.BlankScreen,
+ QtCore.SIGNAL(u'triggered(bool)'), self.onBlankDisplay)
+ QtCore.QObject.connect(self.ThemeScreen,
+ QtCore.SIGNAL(u'triggered(bool)'), self.onThemeDisplay)
+ QtCore.QObject.connect(self.volumeSlider,
+ QtCore.SIGNAL(u'sliderReleased()'), self.mediaVolume)
+ QtCore.QObject.connect(Receiver.get_receiver(),
+ QtCore.SIGNAL(u'maindisplay_active'), self.updatePreview)
+ QtCore.QObject.connect(Receiver.get_receiver(),
+ QtCore.SIGNAL(u'slidecontroller_live_spin_delay'),
+ self.receiveSpinDelay)
+ self.Toolbar.makeWidgetsInvisible(self.loopList)
+ self.Toolbar.actions[u'Stop Loop'].setVisible(False)
+ else:
QtCore.QObject.connect(self.PreviewListWidget,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'),
self.onGoLiveClick)
- if isLive:
- QtCore.QObject.connect(Receiver.get_receiver(),
- QtCore.SIGNAL(u'slidecontroller_live_spin_delay'),
- self.receiveSpinDelay)
- if isLive:
- self.Toolbar.makeWidgetsInvisible(self.loopList)
- self.Toolbar.actions[u'Stop Loop'].setVisible(False)
- else:
self.Toolbar.makeWidgetsInvisible(self.songEditList)
self.Mediabar.setVisible(False)
QtCore.QObject.connect(Receiver.get_receiver(),
@@ -381,54 +377,65 @@
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'slidecontroller_%s_text_request' % self.typePrefix),
self.onTextRequest)
+ QtCore.QObject.connect(self.parent.ControlSplitter,
+ QtCore.SIGNAL(u'splitterMoved(int, int)'), self.previewSizeChanged)
QtCore.QObject.connect(self.Splitter,
- QtCore.SIGNAL(u'splitterMoved(int, int)'), self.trackSplitter)
+ QtCore.SIGNAL(u'splitterMoved(int, int)'), self.previewSizeChanged)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'config_updated'), self.refreshServiceItem)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'config_screen_changed'), self.screenSizeChanged)
- if self.isLive:
- QtCore.QObject.connect(self.volumeSlider,
- QtCore.SIGNAL(u'sliderReleased()'), self.mediaVolume)
- QtCore.QObject.connect(Receiver.get_receiver(),
- QtCore.SIGNAL(u'maindisplay_active'), self.updatePreview)
+
+ def paintEvent(self, event):
+ """
+ When the Slidecontroller is painted, we need to make sure, that the
+ SlidePreview's size is updated.
+ """
+ # We need to make this circuit, because we have to consider the other
+ # slidecontroller as well.
+ self.parent.previewController.previewSizeChanged()
+ self.parent.liveController.previewSizeChanged()
def screenSizeChanged(self):
"""
Settings dialog has changed the screen size of adjust output and
- screen previews
+ screen previews.
"""
log.debug(u'screenSizeChanged live = %s' % self.isLive)
# rebuild display as screen size changed
self.display = MainDisplay(self, self.screens, self.isLive)
self.display.imageManager = self.parent.renderManager.image_manager
self.display.alertTab = self.alertTab
- self.ratio = float(self.screens.current[u'size'].width()) / \
- float(self.screens.current[u'size'].height())
self.display.setup()
- self.SlidePreview.setFixedSize(
- QtCore.QSize(self.settingsmanager.slidecontroller_image,
- self.settingsmanager.slidecontroller_image / self.ratio))
+ # The SlidePreview's ratio.
+ self.ratio = float(self.screens.current[u'size'].width()) / \
+ float(self.screens.current[u'size'].height())
+ self.previewSizeChanged()
- def widthChanged(self):
- """
- Handle changes of width from the splitter between the live and preview
- controller. Event only issues when changes have finished
- """
- log.debug(u'widthChanged live = %s' % self.isLive)
+ def previewSizeChanged(self):
+ """
+ Takes care of the SlidePreview's size. Is called when one of the the
+ splitters is moved or when the screen size is changed.
+ """
+ log.debug(u'previewSizeChanged live = %s' % self.isLive)
+ if self.ratio < float(self.PreviewFrame.width()) / float(
+ self.PreviewFrame.height()):
+ # We have to take the height as limit.
+ max_height = self.PreviewFrame.height() - self.grid.margin() * 2
+ self.SlidePreview.setFixedSize(QtCore.QSize(max_height * self.ratio,
+ max_height))
+ else:
+ # We have to take the width as limit.
+ max_width = self.PreviewFrame.width() - self.grid.margin() * 2
+ self.SlidePreview.setFixedSize(QtCore.QSize(max_width,
+ max_width / self.ratio))
width = self.parent.ControlSplitter.sizes()[self.split]
- height = width * self.parent.renderManager.screen_ratio
self.PreviewListWidget.setColumnWidth(0, width)
# Sort out image heights (Songs, bibles excluded)
if self.serviceItem and not self.serviceItem.is_text():
for framenumber in range(len(self.serviceItem.get_frames())):
- self.PreviewListWidget.setRowHeight(framenumber, height)
-
- def trackSplitter(self, tab, pos):
- """
- Splitter between the slide list and the preview panel
- """
- pass
+ self.PreviewListWidget.setRowHeight(
+ framenumber, width / self.ratio)
def onSongBarHandler(self):
request = unicode(self.sender().text())
@@ -1033,4 +1040,4 @@
self.mediaObject.clearQueue()
self.video.hide()
self.SlidePreview.clear()
- self.SlidePreview.show()
\ No newline at end of file
+ self.SlidePreview.show()
Follow ups