Display handling cleanups and changes to service item flags

bzr-revno: 783
This commit is contained in:
Tim Bentley 2010-04-03 09:03:36 +01:00
commit 66054c44e4
18 changed files with 127 additions and 96 deletions

View File

@ -172,7 +172,7 @@ from mediamanageritem import MediaManagerItem
from xmlrootclass import XmlRootClass from xmlrootclass import XmlRootClass
from serviceitem import ServiceItem from serviceitem import ServiceItem
from serviceitem import ServiceItemType from serviceitem import ServiceItemType
from serviceitem import ServiceItem from serviceitem import ItemCapabilities
from toolbar import OpenLPToolbar from toolbar import OpenLPToolbar
from dockwidget import OpenLPDockWidget from dockwidget import OpenLPDockWidget
from songxmlhandler import SongXMLBuilder, SongXMLParser from songxmlhandler import SongXMLBuilder, SongXMLParser

View File

@ -109,6 +109,12 @@ class EventReceiver(QtCore.QObject):
``presentation types`` ``presentation types``
Informs all components of the presentation types supported. Informs all components of the presentation types supported.
``blank_check``
Check to see if th eblank display message is required
``version_check``
Version has changed so pop up window.
""" """
def __init__(self): def __init__(self):
""" """

View File

@ -49,7 +49,7 @@ class RenderManager(object):
""" """
log.info(u'RenderManager Loaded') log.info(u'RenderManager Loaded')
def __init__(self, theme_manager, screens, screen_number=0): def __init__(self, theme_manager, screens):
""" """
Initialise the render manager. Initialise the render manager.
""" """
@ -57,7 +57,6 @@ class RenderManager(object):
self.screens = screens self.screens = screens
self.theme_manager = theme_manager self.theme_manager = theme_manager
self.renderer = Renderer() self.renderer = Renderer()
self.screens.set_current_display(screen_number)
self.calculate_default(self.screens.current[u'size']) self.calculate_default(self.screens.current[u'size'])
self.theme = u'' self.theme = u''
self.service_theme = u'' self.service_theme = u''
@ -65,12 +64,9 @@ class RenderManager(object):
self.override_background = None self.override_background = None
self.themedata = None self.themedata = None
def update_display(self, screen_number): def update_display(self):
""" """
Updates the render manager's information about the current screen. Updates the render manager's information about the current screen.
``screen_number``
The updated index of the output/display screen.
""" """
log.debug(u'Update Display') log.debug(u'Update Display')
self.calculate_default(self.screens.current[u'size']) self.calculate_default(self.screens.current[u'size'])

View File

@ -42,6 +42,13 @@ class ServiceItemType(object):
Image = 2 Image = 2
Command = 3 Command = 3
class ItemCapabilities(object):
AllowsPreview = 1
AllowsEdit = 2
AllowsMaintain = 3
RequiresMedia = 4
class ServiceItem(object): class ServiceItem(object):
""" """
The service item is a base class for the plugins to use to interact with The service item is a base class for the plugins to use to interact with
@ -67,14 +74,18 @@ class ServiceItem(object):
self.raw_footer = None self.raw_footer = None
self.theme = None self.theme = None
self.service_item_type = None self.service_item_type = None
self.edit_enabled = False
self.maintain_allowed = False
self._raw_frames = [] self._raw_frames = []
self._display_frames = [] self._display_frames = []
self._uuid = unicode(uuid.uuid1()) self._uuid = unicode(uuid.uuid1())
self.auto_preview_allowed = False
self.notes = u'' self.notes = u''
self.from_plugin = False self.from_plugin = False
self.capabilities = []
def add_capability(self, capability):
self.capabilities.append(capability)
def is_capable(self, capability):
return capability in self.capabilities
def addIcon(self, icon): def addIcon(self, icon):
""" """
@ -207,10 +218,8 @@ class ServiceItem(object):
u'type':self.service_item_type, u'type':self.service_item_type,
u'audit':self.audit, u'audit':self.audit,
u'notes':self.notes, u'notes':self.notes,
u'preview':self.auto_preview_allowed, u'from_plugin':self.from_plugin,
u'edit':self.edit_enabled, u'capabilities':self.capabilities
u'maintain':self.maintain_allowed,
u'from_plugin':self.from_plugin
} }
service_data = [] service_data = []
if self.service_item_type == ServiceItemType.Text: if self.service_item_type == ServiceItemType.Text:
@ -244,11 +253,9 @@ class ServiceItem(object):
self.addIcon(header[u'icon']) self.addIcon(header[u'icon'])
self.raw_footer = header[u'footer'] self.raw_footer = header[u'footer']
self.audit = header[u'audit'] self.audit = header[u'audit']
self.auto_preview_allowed = header[u'preview']
self.notes = header[u'notes'] self.notes = header[u'notes']
self.edit_enabled = header[u'edit']
self.maintain_allowed = header[u'maintain']
self.from_plugin = header[u'from_plugin'] self.from_plugin = header[u'from_plugin']
self.capabilities = header[u'capabilities']
if self.service_item_type == ServiceItemType.Text: if self.service_item_type == ServiceItemType.Text:
for slide in serviceitem[u'serviceitem'][u'data']: for slide in serviceitem[u'serviceitem'][u'data']:
self._raw_frames.append(slide) self._raw_frames.append(slide)
@ -284,11 +291,8 @@ class ServiceItem(object):
""" """
return self._uuid != other._uuid return self._uuid != other._uuid
def is_song(self):
return self.name.lower() == u'songs'
def is_media(self): def is_media(self):
return self.name.lower() == u'media' return ItemCapabilities.RequiresMedia in self.capabilities
def is_command(self): def is_command(self):
return self.service_item_type == ServiceItemType.Command return self.service_item_type == ServiceItemType.Command

View File

@ -54,6 +54,7 @@ class SettingsTab(QtGui.QWidget):
self.config = PluginConfig(title) self.config = PluginConfig(title)
else: else:
self.config = PluginConfig(section) self.config = PluginConfig(section)
self.preLoad()
self.load() self.load()
def setupUi(self): def setupUi(self):
@ -62,6 +63,12 @@ class SettingsTab(QtGui.QWidget):
""" """
pass pass
def preLoad(self):
"""
Setup the tab's interface.
"""
pass
def retranslateUi(self): def retranslateUi(self):
""" """
Setup the interface translation strings. Setup the interface translation strings.

View File

@ -25,16 +25,29 @@
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import SettingsTab, str_to_bool from openlp.core.lib import SettingsTab, str_to_bool, Receiver
class GeneralTab(SettingsTab): class GeneralTab(SettingsTab):
""" """
GeneralTab is the general settings tab in the settings dialog. GeneralTab is the general settings tab in the settings dialog.
""" """
def __init__(self, screen_list): def __init__(self, screens):
self.screen_list = screen_list self.screens = screens
SettingsTab.__init__(self, u'General') SettingsTab.__init__(self, u'General')
def preLoad(self):
"""
Set up the display screen and set correct screen
values.
If not set before default to last screen.
"""
self.MonitorNumber = int(self.config.get_config(u'monitor',
self.screens.monitor_number))
self.screens.set_current_display(self.MonitorNumber)
self.screens.monitor_number = self.MonitorNumber
self.DisplayOnMonitor = str_to_bool(self.config.get_config(u'display on monitor', u'True'))
self.screens.display = self.DisplayOnMonitor
def setupUi(self): def setupUi(self):
self.setObjectName(u'GeneralTab') self.setObjectName(u'GeneralTab')
self.tabTitleVisible = self.trUtf8('General') self.tabTitleVisible = self.trUtf8('General')
@ -60,6 +73,10 @@ class GeneralTab(SettingsTab):
self.MonitorComboBox = QtGui.QComboBox(self.MonitorGroupBox) self.MonitorComboBox = QtGui.QComboBox(self.MonitorGroupBox)
self.MonitorComboBox.setObjectName(u'MonitorComboBox') self.MonitorComboBox.setObjectName(u'MonitorComboBox')
self.MonitorLayout.addWidget(self.MonitorComboBox) self.MonitorLayout.addWidget(self.MonitorComboBox)
self.MonitorLayout.addWidget(self.MonitorComboBox)
self.DisplayOnMonitorCheck = QtGui.QCheckBox(self.MonitorGroupBox)
self.DisplayOnMonitorCheck.setObjectName(u'MonitorComboBox')
self.MonitorLayout.addWidget(self.DisplayOnMonitorCheck)
self.GeneralLeftLayout.addWidget(self.MonitorGroupBox) self.GeneralLeftLayout.addWidget(self.MonitorGroupBox)
self.StartupGroupBox = QtGui.QGroupBox(self.GeneralLeftWidget) self.StartupGroupBox = QtGui.QGroupBox(self.GeneralLeftWidget)
self.StartupGroupBox.setObjectName(u'StartupGroupBox') self.StartupGroupBox.setObjectName(u'StartupGroupBox')
@ -133,6 +150,8 @@ class GeneralTab(SettingsTab):
self.GeneralLayout.addWidget(self.GeneralRightWidget) self.GeneralLayout.addWidget(self.GeneralRightWidget)
QtCore.QObject.connect(self.MonitorComboBox, QtCore.QObject.connect(self.MonitorComboBox,
QtCore.SIGNAL(u'activated(int)'), self.onMonitorComboBoxChanged) QtCore.SIGNAL(u'activated(int)'), self.onMonitorComboBoxChanged)
QtCore.QObject.connect(self.DisplayOnMonitorCheck,
QtCore.SIGNAL(u'stateChanged(int)'), self.onDisplayOnMonitorCheckChanged)
QtCore.QObject.connect(self.WarningCheckBox, QtCore.QObject.connect(self.WarningCheckBox,
QtCore.SIGNAL(u'stateChanged(int)'), self.onWarningCheckBoxChanged) QtCore.SIGNAL(u'stateChanged(int)'), self.onWarningCheckBoxChanged)
QtCore.QObject.connect(self.AutoOpenCheckBox, QtCore.QObject.connect(self.AutoOpenCheckBox,
@ -153,6 +172,7 @@ class GeneralTab(SettingsTab):
def retranslateUi(self): def retranslateUi(self):
self.MonitorGroupBox.setTitle(self.trUtf8('Monitors')) self.MonitorGroupBox.setTitle(self.trUtf8('Monitors'))
self.MonitorLabel.setText(self.trUtf8('Select monitor for output display:')) self.MonitorLabel.setText(self.trUtf8('Select monitor for output display:'))
self.DisplayOnMonitorCheck.setText(self.trUtf8('Display if in single screen'))
self.StartupGroupBox.setTitle(self.trUtf8('Application Startup')) self.StartupGroupBox.setTitle(self.trUtf8('Application Startup'))
self.WarningCheckBox.setText(self.trUtf8('Show blank screen warning')) self.WarningCheckBox.setText(self.trUtf8('Show blank screen warning'))
self.AutoOpenCheckBox.setText(self.trUtf8('Automatically open the last service')) self.AutoOpenCheckBox.setText(self.trUtf8('Automatically open the last service'))
@ -168,6 +188,9 @@ class GeneralTab(SettingsTab):
def onMonitorComboBoxChanged(self): def onMonitorComboBoxChanged(self):
self.MonitorNumber = self.MonitorComboBox.currentIndex() self.MonitorNumber = self.MonitorComboBox.currentIndex()
def onDisplayOnMonitorCheckChanged(self, value):
self.DisplayOnMonitor = (value == QtCore.Qt.Checked)
def onAutoOpenCheckBoxChanged(self, value): def onAutoOpenCheckBoxChanged(self, value):
self.AutoOpen = (value == QtCore.Qt.Checked) self.AutoOpen = (value == QtCore.Qt.Checked)
@ -193,13 +216,12 @@ class GeneralTab(SettingsTab):
self.Password = self.PasswordEdit.displayText() self.Password = self.PasswordEdit.displayText()
def load(self): def load(self):
for screen in self.screen_list.screen_list: for screen in self.screens.screen_list:
screen_name = u'%s %d' % (self.trUtf8('Screen'), screen[u'number'] + 1) screen_name = u'%s %d' % (self.trUtf8('Screen'), screen[u'number'] + 1)
if screen[u'primary']: if screen[u'primary']:
screen_name = u'%s (%s)' % (screen_name, self.trUtf8('primary')) screen_name = u'%s (%s)' % (screen_name, self.trUtf8('primary'))
self.MonitorComboBox.addItem(screen_name) self.MonitorComboBox.addItem(screen_name)
# Get the configs # Get the configs
self.MonitorNumber = int(self.config.get_config(u'monitor', u'0'))
self.Warning = str_to_bool(self.config.get_config(u'blank warning', u'False')) self.Warning = str_to_bool(self.config.get_config(u'blank warning', u'False'))
self.AutoOpen = str_to_bool(self.config.get_config(u'auto open', u'False')) self.AutoOpen = str_to_bool(self.config.get_config(u'auto open', u'False'))
self.ShowSplash = str_to_bool(self.config.get_config(u'show splash', u'True')) self.ShowSplash = str_to_bool(self.config.get_config(u'show splash', u'True'))
@ -211,6 +233,7 @@ class GeneralTab(SettingsTab):
self.SaveCheckServiceCheckBox.setChecked(self.PromptSaveService) self.SaveCheckServiceCheckBox.setChecked(self.PromptSaveService)
# Set a few things up # Set a few things up
self.MonitorComboBox.setCurrentIndex(self.MonitorNumber) self.MonitorComboBox.setCurrentIndex(self.MonitorNumber)
self.DisplayOnMonitorCheck.setChecked(self.DisplayOnMonitor)
self.WarningCheckBox.setChecked(self.Warning) self.WarningCheckBox.setChecked(self.Warning)
self.AutoOpenCheckBox.setChecked(self.AutoOpen) self.AutoOpenCheckBox.setChecked(self.AutoOpen)
self.ShowSplashCheckBox.setChecked(self.ShowSplash) self.ShowSplashCheckBox.setChecked(self.ShowSplash)
@ -221,6 +244,7 @@ class GeneralTab(SettingsTab):
def save(self): def save(self):
self.config.set_config(u'monitor', self.MonitorNumber) self.config.set_config(u'monitor', self.MonitorNumber)
self.config.set_config(u'display on monitor', self.DisplayOnMonitor)
self.config.set_config(u'blank warning', self.Warning) self.config.set_config(u'blank warning', self.Warning)
self.config.set_config(u'auto open', self.AutoOpen) self.config.set_config(u'auto open', self.AutoOpen)
self.config.set_config(u'show splash', self.ShowSplash) self.config.set_config(u'show splash', self.ShowSplash)
@ -229,3 +253,9 @@ class GeneralTab(SettingsTab):
self.config.set_config(u'ccli number', self.CCLINumber) self.config.set_config(u'ccli number', self.CCLINumber)
self.config.set_config(u'songselect username', self.Username) self.config.set_config(u'songselect username', self.Username)
self.config.set_config(u'songselect password', self.Password) self.config.set_config(u'songselect password', self.Password)
self.screens.display = self.DisplayOnMonitor
#Monitor Number has changed.
if self.screens.monitor_number != self.MonitorNumber:
self.screens.monitor_number = self.MonitorNumber
self.screens.set_current_display(self.MonitorNumber)
Receiver.send_message(u'screen_changed')

View File

@ -130,13 +130,15 @@ class MainDisplay(DisplayWidget):
QtCore.SIGNAL(u'media_pause'), self.onMediaPause) QtCore.SIGNAL(u'media_pause'), self.onMediaPause)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'media_stop'), self.onMediaStop) QtCore.SIGNAL(u'media_stop'), self.onMediaStop)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'update_config'), self.setup)
def setup(self, screenNumber): def setup(self):
""" """
Sets up the screen on a particular screen. Sets up the screen on a particular screen.
@param (integer) screen This is the screen number.
""" """
log.debug(u'Setup %s for %s ' %(self.screens, screenNumber)) log.debug(u'Setup %s for %s ' %(self.screens,
self.screens.monitor_number))
self.setVisible(False) self.setVisible(False)
self.screen = self.screens.current self.screen = self.screens.current
#Sort out screen locations and sizes #Sort out screen locations and sizes
@ -183,7 +185,6 @@ class MainDisplay(DisplayWidget):
else: else:
self.setVisible(False) self.setVisible(False)
self.primary = True self.primary = True
Receiver.send_message(u'screen_changed')
def resetDisplay(self): def resetDisplay(self):
Receiver.send_message(u'stop_display_loop') Receiver.send_message(u'stop_display_loop')
@ -247,7 +248,7 @@ class MainDisplay(DisplayWidget):
else: else:
self.display_text.setPixmap(QtGui.QPixmap.fromImage(frame)) self.display_text.setPixmap(QtGui.QPixmap.fromImage(frame))
self.display_frame = frame self.display_frame = frame
if not self.isVisible(): if not self.isVisible() and self.screens.display:
self.setVisible(True) self.setVisible(True)
self.showFullScreen() self.showFullScreen()
else: else:

View File

@ -496,6 +496,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
QtCore.SIGNAL(u'version_check'), self.versionCheck) QtCore.SIGNAL(u'version_check'), self.versionCheck)
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'blank_check'), self.blankCheck) QtCore.SIGNAL(u'blank_check'), self.blankCheck)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'screen_changed'), self.screenChanged)
QtCore.QObject.connect(self.FileNewItem, QtCore.QObject.connect(self.FileNewItem,
QtCore.SIGNAL(u'triggered()'), QtCore.SIGNAL(u'triggered()'),
self.ServiceManagerContents.onNewService) self.ServiceManagerContents.onNewService)
@ -512,7 +514,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
#RenderManager needs to call ThemeManager and #RenderManager needs to call ThemeManager and
#ThemeManager needs to call RenderManager #ThemeManager needs to call RenderManager
self.RenderManager = RenderManager(self.ThemeManagerContents, self.RenderManager = RenderManager(self.ThemeManagerContents,
self.screens, self.getMonitorNumber()) self.screens)
#Define the media Dock Manager #Define the media Dock Manager
self.mediaDockManager = MediaDockManager(self.MediaToolBox) self.mediaDockManager = MediaDockManager(self.MediaToolBox)
log.info(u'Load Plugins') log.info(u'Load Plugins')
@ -563,24 +565,13 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
QtGui.QMessageBox.Ok) QtGui.QMessageBox.Ok)
def getMonitorNumber(self):
"""
Set up the default behaviour of the monitor configuration in
here. Currently it is set to default to monitor 0 if the saved
monitor number does not exist.
"""
screen_number = int(self.generalConfig.get_config(u'monitor', 0))
if not self.screens.screen_exists(screen_number):
screen_number = 0
return screen_number
def show(self): def show(self):
""" """
Show the main form, as well as the display form Show the main form, as well as the display form
""" """
self.showMaximized() self.showMaximized()
screen_number = self.getMonitorNumber() #screen_number = self.getMonitorNumber()
self.mainDisplay.setup(screen_number) self.mainDisplay.setup()
if self.mainDisplay.isVisible(): if self.mainDisplay.isVisible():
self.mainDisplay.setFocus() self.mainDisplay.setFocus()
self.activateWindow() self.activateWindow()
@ -598,7 +589,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
QtGui.QMessageBox.Ok) QtGui.QMessageBox.Ok)
def versionThread(self): def versionThread(self):
#app_version = self.applicationVersion[u'full']
vT = VersionThread(self, self.applicationVersion, self.generalConfig) vT = VersionThread(self, self.applicationVersion, self.generalConfig)
vT.start() vT.start()
@ -621,13 +611,10 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
Show the Settings dialog Show the Settings dialog
""" """
self.settingsForm.exec_() self.settingsForm.exec_()
updated_display = self.getMonitorNumber()
if updated_display != self.screens.current_display: def screenChanged(self):
self.screens.set_current_display(updated_display) self.RenderManager.update_display()
self.RenderManager.update_display(updated_display) self.mainDisplay.setup()
self.mainDisplay.setup(updated_display)
#Trigger after changes have been made
Receiver.send_message(u'config_updated')
self.activateWindow() self.activateWindow()
def closeEvent(self, event): def closeEvent(self, event):

View File

@ -37,14 +37,17 @@ class ScreenList(object):
self.preview = None self.preview = None
self.current = None self.current = None
self.screen_list = [] self.screen_list = []
self.count = 0 self.display_count = 0
#actual display number
self.current_display = 0 self.current_display = 0
#save config display number
self.monitor_number = 0
def add_screen(self, screen): def add_screen(self, screen):
if screen[u'primary']: if screen[u'primary']:
self.current = screen self.current = screen
self.screen_list.append(screen) self.screen_list.append(screen)
self.count += 1 self.display_count += 1
def screen_exists(self, number): def screen_exists(self, number):
for screen in self.screen_list: for screen in self.screen_list:
@ -53,21 +56,15 @@ class ScreenList(object):
return False return False
def set_current_display(self, number): def set_current_display(self, number):
if number + 1 > self.count: """
Set up the current screen dimensions
"""
if number + 1 > self.display_count:
self.current = self.screen_list[0] self.current = self.screen_list[0]
self.current_display = 0 self.current_display = 0
else: else:
self.current = self.screen_list[number] self.current = self.screen_list[number]
self.preview = self.current self.preview = self.current
self.current_display = number self.current_display = number
if self.count == 1: if self.display_count == 1:
self.preview = self.screen_list[0] self.preview = self.screen_list[0]
# if self.screen[u'number'] != screenNumber:
# # We will most probably never actually hit this bit, but just in
# # case the index in the list doesn't match the screen number, we
# # search for it.
# for scrn in self.screens:
# if scrn[u'number'] == screenNumber:
# self.screen = scrn
# break

View File

@ -33,7 +33,7 @@ log = logging.getLogger(__name__)
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \ from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \
contextMenuAction, Receiver, str_to_bool, build_icon contextMenuAction, Receiver, str_to_bool, build_icon, ItemCapabilities
from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm
class ServiceManagerList(QtGui.QTreeWidget): class ServiceManagerList(QtGui.QTreeWidget):
@ -233,9 +233,9 @@ class ServiceManager(QtGui.QWidget):
self.editAction.setVisible(False) self.editAction.setVisible(False)
self.maintainAction.setVisible(False) self.maintainAction.setVisible(False)
self.notesAction.setVisible(False) self.notesAction.setVisible(False)
if serviceItem[u'service_item'].edit_enabled: if serviceItem[u'service_item'].is_capable(ItemCapabilities.AllowsEdit):
self.editAction.setVisible(True) self.editAction.setVisible(True)
if serviceItem[u'service_item'].maintain_allowed: if serviceItem[u'service_item'].is_capable(ItemCapabilities.AllowsMaintain):
self.maintainAction.setVisible(True) self.maintainAction.setVisible(True)
if item.parent() is None: if item.parent() is None:
self.notesAction.setVisible(True) self.notesAction.setVisible(True)
@ -713,7 +713,7 @@ class ServiceManager(QtGui.QWidget):
get_config(u'auto preview', u'False')): get_config(u'auto preview', u'False')):
item += 1 item += 1
if self.serviceItems and item < len(self.serviceItems) and \ if self.serviceItems and item < len(self.serviceItems) and \
self.serviceItems[item][u'service_item'].auto_preview_allowed: serviceItem[u'service_item'].is_capable(ItemCapabilities.AllowsPreview):
self.parent.PreviewController.addServiceManagerItem( self.parent.PreviewController.addServiceManagerItem(
self.serviceItems[item][u'service_item'], 0) self.serviceItems[item][u'service_item'], 0)
@ -722,7 +722,7 @@ class ServiceManager(QtGui.QWidget):
Posts a remote edit message to a plugin to allow item to be edited. Posts a remote edit message to a plugin to allow item to be edited.
""" """
item, count = self.findServiceItem() item, count = self.findServiceItem()
if self.serviceItems[item][u'service_item'].edit_enabled: if serviceItem[u'service_item'].is_capable(ItemCapabilities.AllowsEdit):
self.remoteEditTriggered = True self.remoteEditTriggered = True
Receiver.send_message(u'%s_edit' % Receiver.send_message(u'%s_edit' %
self.serviceItems[item][u'service_item'].name, u'L:%s' % self.serviceItems[item][u'service_item'].name, u'L:%s' %

View File

@ -34,11 +34,11 @@ log = logging.getLogger(__name__)
class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): class SettingsForm(QtGui.QDialog, Ui_SettingsDialog):
def __init__(self, screen_list, mainWindow, parent=None): def __init__(self, screens, mainWindow, parent=None):
QtGui.QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
# General tab # General tab
self.GeneralTab = GeneralTab(screen_list) self.GeneralTab = GeneralTab(screens)
self.addTab(u'General', self.GeneralTab) self.addTab(u'General', self.GeneralTab)
# Themes tab # Themes tab
self.ThemesTab = ThemesTab(mainWindow) self.ThemesTab = ThemesTab(mainWindow)

View File

@ -375,8 +375,7 @@ class SlideController(QtGui.QWidget):
self.Toolbar.makeWidgetsInvisible(self.image_list) self.Toolbar.makeWidgetsInvisible(self.image_list)
if item.is_text(): if item.is_text():
self.Toolbar.makeWidgetsInvisible(self.image_list) self.Toolbar.makeWidgetsInvisible(self.image_list)
if item.is_song() and \ if str_to_bool(self.songsconfig.get_config(u'show songbar', True)) \
str_to_bool(self.songsconfig.get_config(u'show songbar', True)) \
and len(self.slideList) > 0: and len(self.slideList) > 0:
self.Toolbar.makeWidgetsVisible([u'Song Menu']) self.Toolbar.makeWidgetsVisible([u'Song Menu'])
elif item.is_image(): elif item.is_image():
@ -395,7 +394,8 @@ class SlideController(QtGui.QWidget):
self.Toolbar.setVisible(True) self.Toolbar.setVisible(True)
self.Mediabar.setVisible(False) self.Mediabar.setVisible(False)
self.Toolbar.makeWidgetsInvisible(self.song_edit_list) self.Toolbar.makeWidgetsInvisible(self.song_edit_list)
if item.edit_enabled and item.from_plugin: if serviceItem[u'service_item'].is_capable(ItemCapabilities.AllowsEdit)\
and item.from_plugin:
self.Toolbar.makeWidgetsVisible(self.song_edit_list) self.Toolbar.makeWidgetsVisible(self.song_edit_list)
elif item.is_media(): elif item.is_media():
self.Toolbar.setVisible(False) self.Toolbar.setVisible(False)
@ -494,7 +494,8 @@ class SlideController(QtGui.QWidget):
bits = frame[u'verseTag'].split(u':') bits = frame[u'verseTag'].split(u':')
tag = None tag = None
#If verse handle verse number else tag only #If verse handle verse number else tag only
if bits[0] == self.trUtf8('Verse'): if bits[0] == self.trUtf8('Verse') or \
bits[0] == self.trUtf8('Chorus'):
tag = u'%s%s' % (bits[0][0], bits[1][0:] ) tag = u'%s%s' % (bits[0][0], bits[1][0:] )
row = bits[1][0:] row = bits[1][0:]
else: else:
@ -759,7 +760,7 @@ class SlideController(QtGui.QWidget):
else: else:
self.mediaObject.stop() self.mediaObject.stop()
self.mediaObject.clearQueue() self.mediaObject.clearQueue()
file = os.path.join(item.service_item_path, item.get_frame_title()) file = os.path.join(item.get_frame_path(), item.get_frame_title())
self.mediaObject.setCurrentSource(Phonon.MediaSource(file)) self.mediaObject.setCurrentSource(Phonon.MediaSource(file))
self.onMediaPlay() self.onMediaPlay()

View File

@ -29,7 +29,7 @@ import time
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, Receiver, str_to_bool, \ from openlp.core.lib import MediaManagerItem, Receiver, str_to_bool, \
BaseListWithDnD BaseListWithDnD, ItemCapabilities
from openlp.plugins.bibles.forms import ImportWizardForm from openlp.plugins.bibles.forms import ImportWizardForm
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -449,7 +449,7 @@ class BibleMediaItem(MediaManagerItem):
raw_slides = [] raw_slides = []
raw_footer = [] raw_footer = []
bible_text = u'' bible_text = u''
service_item.auto_preview_allowed = True service_item.add_capability(ItemCapabilities.AllowsPreview)
#If we want to use a 2nd translation / version #If we want to use a 2nd translation / version
bible2 = u'' bible2 = u''
if self.SearchTabWidget.currentIndex() == 0: if self.SearchTabWidget.currentIndex() == 0:

View File

@ -28,7 +28,7 @@ import logging
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, SongXMLParser, BaseListWithDnD,\ from openlp.core.lib import MediaManagerItem, SongXMLParser, BaseListWithDnD,\
Receiver, str_to_bool Receiver, str_to_bool, ItemCapabilities
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -144,11 +144,11 @@ class CustomMediaItem(MediaManagerItem):
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
else: else:
item_id = self.remoteCustom item_id = self.remoteCustom
service_item.auto_preview_allowed = True service_item.add_capability(ItemCapabilities.AllowsEdit)
service_item.add_capability(ItemCapabilities.AllowsPreview)
customSlide = self.parent.custommanager.get_custom(item_id) customSlide = self.parent.custommanager.get_custom(item_id)
title = customSlide.title title = customSlide.title
credit = customSlide.credits credit = customSlide.credits
service_item.edit_enabled = True
service_item.editId = item_id service_item.editId = item_id
theme = customSlide.theme_name theme = customSlide.theme_name
if theme: if theme:

View File

@ -28,7 +28,7 @@ import os
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \ from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \
contextMenuAction contextMenuAction, ItemCapabilities
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -140,8 +140,8 @@ class ImageMediaItem(MediaManagerItem):
items = self.ListView.selectedIndexes() items = self.ListView.selectedIndexes()
if items: if items:
service_item.title = self.trUtf8('Image(s)') service_item.title = self.trUtf8('Image(s)')
service_item.auto_preview_allowed = True service_item.add_capability(ItemCapabilities.AllowsMaintain)
service_item.maintain_allowed = True service_item.add_capability(ItemCapabilities.AllowsPreview)
for item in items: for item in items:
bitem = self.ListView.item(item.row()) bitem = self.ListView.item(item.row())
filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())

View File

@ -28,7 +28,8 @@ import os
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \
ItemCapabilities
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -82,6 +83,7 @@ class MediaMediaItem(MediaManagerItem):
if len(items) > 1: if len(items) > 1:
return False return False
service_item.title = unicode(self.trUtf8('Media')) service_item.title = unicode(self.trUtf8('Media'))
service_item.add_capability(ItemCapabilities.Requires_media)
for item in items: for item in items:
bitem = self.ListView.item(item.row()) bitem = self.ListView.item(item.row())
filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())

View File

@ -152,7 +152,6 @@ class PresentationMediaItem(MediaManagerItem):
service_item.title = unicode(self.DisplayTypeComboBox.currentText()) service_item.title = unicode(self.DisplayTypeComboBox.currentText())
service_item.shortname = unicode(self.DisplayTypeComboBox.currentText()) service_item.shortname = unicode(self.DisplayTypeComboBox.currentText())
shortname = service_item.shortname shortname = service_item.shortname
for item in items: for item in items:
bitem = self.ListView.item(item.row()) bitem = self.ListView.item(item.row())
filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())

View File

@ -28,7 +28,7 @@ import logging
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import MediaManagerItem, SongXMLParser, \ from openlp.core.lib import MediaManagerItem, SongXMLParser, \
BaseListWithDnD, Receiver, str_to_bool BaseListWithDnD, Receiver, str_to_bool, ItemCapabilities
from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -290,10 +290,10 @@ class SongMediaItem(MediaManagerItem):
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
else: else:
item_id = self.remoteSong item_id = self.remoteSong
service_item.auto_preview_allowed = True service_item.add_capability(ItemCapabilities.AllowsEdit)
service_item.add_capability(ItemCapabilities.AllowsPreview)
song = self.parent.songmanager.get_song(item_id) song = self.parent.songmanager.get_song(item_id)
service_item.theme = song.theme_name service_item.theme = song.theme_name
service_item.edit_enabled = True
service_item.editId = item_id service_item.editId = item_id
if song.lyrics.startswith(u'<?xml version='): if song.lyrics.startswith(u'<?xml version='):
songXML = SongXMLParser(song.lyrics) songXML = SongXMLParser(song.lyrics)
@ -310,7 +310,8 @@ class SongMediaItem(MediaManagerItem):
break break
for verse in verseList: for verse in verseList:
if verse[1]: if verse[1]:
if verse[0][u'type'] == "Verse": if verse[0][u'type'] == "Verse" \
or verse[0][u'type'] == "Chorus":
if verse[0][u'label'] == order[1:]: if verse[0][u'label'] == order[1:]:
verseTag = u'%s:%s' % \ verseTag = u'%s:%s' % \
(verse[0][u'type'], verse[0][u'label']) (verse[0][u'type'], verse[0][u'label'])