Cleanups - blank lines, line breaks, docstrings, correct string chars.

Remove unused exception
Dedupe presentation controller code
Fill out the range of Delphi colours to fix theme loading (Support 98)
Naming fixes including starting the attack on mainwindow.py.

bzr-revno: 1278
This commit is contained in:
Jon Tibble 2011-02-08 14:39:59 +00:00
commit d3bf2a216e
23 changed files with 307 additions and 309 deletions

View File

@ -86,10 +86,10 @@ class BaseModel(object):
""" """
Creates an instance of a class and populates it, returning the instance Creates an instance of a class and populates it, returning the instance
""" """
me = cls() instance = cls()
for key in kwargs: for key in kwargs:
me.__setattr__(key, kwargs[key]) instance.__setattr__(key, kwargs[key])
return me return instance
class Manager(object): class Manager(object):
""" """

View File

@ -60,8 +60,8 @@ class DisplayTags(object):
DisplayTags.html_expands.append(tag) DisplayTags.html_expands.append(tag)
@staticmethod @staticmethod
def remove_html_tag(id): def remove_html_tag(tag_id):
""" """
Removes amd individual html_expands list. Removes an individual html_expands tag.
""" """
DisplayTags.html_expands.pop(id) DisplayTags.html_expands.pop(tag_id)

View File

@ -61,10 +61,10 @@ class Image(object):
image = None image = None
image_bytes = None image_bytes = None
class ImageManager(QtCore.QObject): class ImageManager(QtCore.QObject):
""" """
Image Manager handles the conversion and sizing of images. Image Manager handles the conversion and sizing of images.
""" """
log.info(u'Image Manager loaded') log.info(u'Image Manager loaded')

View File

@ -44,6 +44,9 @@ class PluginStatus(object):
class StringContent(object): class StringContent(object):
"""
Provide standard strings for objects to use.
"""
Name = u'name' Name = u'name'
Import = u'import' Import = u'import'
Load = u'load' Load = u'load'

View File

@ -583,8 +583,7 @@ class ThemeXML(object):
self.background_end_color, self.background_end_color,
self.background_direction) self.background_direction)
else: else:
filename = \ filename = os.path.split(self.background_filename)[1]
os.path.split(self.background_filename)[1]
self.add_background_image(filename) self.add_background_image(filename)
self.add_font(self.font_main_name, self.add_font(self.font_main_name,
self.font_main_color, self.font_main_color,

View File

@ -33,11 +33,14 @@ processing version 1 themes in OpenLP version 2.
from xml.etree.ElementTree import ElementTree, XML from xml.etree.ElementTree import ElementTree, XML
from PyQt4 import QtGui from PyQt4 import QtGui
DELPHI_COLORS = {u'clRed': 0xFF0000, DELPHI_COLORS = {
u'clBlue': 0x0000FF, u'clAqua': 0x00FFFF, u'clBlack': 0x000000, u'clBlue': 0x0000FF,
u'clYellow': 0xFFFF00, u'clFuchsia': 0xFF00FF, u'clGray': 0x808080, u'clGreen': 0x008000,
u'clBlack': 0x000000, u'clLime': 0x00FF00, u'clMaroon': 0x800000, u'clNavy': 0x000080,
u'clWhite': 0xFFFFFF} u'clOlive': 0x808000, u'clPurple': 0x800080, u'clRed': 0xFF0000,
u'clSilver': 0xC0C0C0, u'clTeal': 0x008080, u'clWhite': 0xFFFFFF,
u'clYellow': 0xFFFF00
}
BLANK_STYLE_XML = \ BLANK_STYLE_XML = \
'''<?xml version="1.0" encoding="iso-8859-1"?> '''<?xml version="1.0" encoding="iso-8859-1"?>
@ -184,7 +187,6 @@ class Theme(object):
if element.tag != u'Theme': if element.tag != u'Theme':
element_text = element.text element_text = element.text
val = 0 val = 0
# easy!
if element_text is None: if element_text is None:
val = element_text val = element_text
# strings need special handling to sort the colours out # strings need special handling to sort the colours out

View File

@ -23,27 +23,27 @@
# with this program; if not, write to the Free Software Foundation, Inc., 59 # # with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
''' """
The :mod:`DisplayTagTab` provides an Tag Edit facility. The Base set are The :mod:`DisplayTagTab` provides an Tag Edit facility. The Base set are
protected and included each time loaded. Custom tags can be defined and saved. protected and included each time loaded. Custom tags can be defined and saved.
The Custom Tag arrays are saved in a pickle so QSettings works on them. Base The Custom Tag arrays are saved in a pickle so QSettings works on them. Base
Tags cannot be changed. Tags cannot be changed.
"""
'''
import cPickle import cPickle
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import SettingsTab, translate, DisplayTags from openlp.core.lib import SettingsTab, translate, DisplayTags
from openlp.core.lib.ui import critical_error_message_box from openlp.core.lib.ui import critical_error_message_box
class DisplayTagTab(SettingsTab): class DisplayTagTab(SettingsTab):
''' """
The :class:`DisplayTagTab` manages the settings tab . The :class:`DisplayTagTab` manages the settings tab .
''' """
def __init__(self): def __init__(self):
''' """
Initialise the settings tab Initialise the settings tab
''' """
SettingsTab.__init__(self, u'Display Tags') SettingsTab.__init__(self, u'Display Tags')
def resizeEvent(self, event=None): def resizeEvent(self, event=None):
@ -67,9 +67,9 @@ class DisplayTagTab(SettingsTab):
self.selected = -1 self.selected = -1
def setupUi(self): def setupUi(self):
''' """
Configure the UI elements for the tab. Configure the UI elements for the tab.
''' """
self.setObjectName(u'DisplayTagTab') self.setObjectName(u'DisplayTagTab')
self.tabTitleVisible = \ self.tabTitleVisible = \
translate(u'OpenLP.DisplayTagTab', 'Display Tags') translate(u'OpenLP.DisplayTagTab', 'Display Tags')

View File

@ -326,8 +326,7 @@ class MainDisplay(DisplayWidget):
vol = float(volume)/float(10) vol = float(volume)/float(10)
if isBackground or not self.usePhonon: if isBackground or not self.usePhonon:
js = u'show_video("init", "%s", %s, true); show_video("play");' % \ js = u'show_video("init", "%s", %s, true); show_video("play");' % \
(videoPath.replace(u'\\', u'\\\\'), \ (videoPath.replace(u'\\', u'\\\\'), str(vol))
str(vol))
self.frame.evaluateJavaScript(js) self.frame.evaluateJavaScript(js)
else: else:
self.phononActive = True self.phononActive = True
@ -398,8 +397,7 @@ class MainDisplay(DisplayWidget):
if u'video' in self.override: if u'video' in self.override:
Receiver.send_message(u'video_background_replaced') Receiver.send_message(u'video_background_replaced')
self.override = {} self.override = {}
elif self.override[u'theme'] != \ elif self.override[u'theme'] != serviceItem.themedata.theme_name:
serviceItem.themedata.theme_name:
Receiver.send_message(u'live_theme_changed') Receiver.send_message(u'live_theme_changed')
self.override = {} self.override = {}
else: else:

View File

@ -77,10 +77,10 @@ class Ui_MainWindow(object):
self.MainContentLayout.setMargin(0) self.MainContentLayout.setMargin(0)
self.MainContentLayout.setObjectName(u'MainContentLayout') self.MainContentLayout.setObjectName(u'MainContentLayout')
mainWindow.setCentralWidget(self.MainContent) mainWindow.setCentralWidget(self.MainContent)
self.ControlSplitter = QtGui.QSplitter(self.MainContent) self.controlSplitter = QtGui.QSplitter(self.MainContent)
self.ControlSplitter.setOrientation(QtCore.Qt.Horizontal) self.controlSplitter.setOrientation(QtCore.Qt.Horizontal)
self.ControlSplitter.setObjectName(u'ControlSplitter') self.controlSplitter.setObjectName(u'controlSplitter')
self.MainContentLayout.addWidget(self.ControlSplitter) self.MainContentLayout.addWidget(self.controlSplitter)
# Create slide controllers # Create slide controllers
self.previewController = SlideController(self, self.settingsmanager, self.previewController = SlideController(self, self.settingsmanager,
self.screens) self.screens)
@ -102,9 +102,9 @@ class Ui_MainWindow(object):
self.FileExportMenu = QtGui.QMenu(self.FileMenu) self.FileExportMenu = QtGui.QMenu(self.FileMenu)
self.FileExportMenu.setObjectName(u'FileExportMenu') self.FileExportMenu.setObjectName(u'FileExportMenu')
# View Menu # View Menu
self.ViewMenu = QtGui.QMenu(self.MenuBar) self.viewMenu = QtGui.QMenu(self.MenuBar)
self.ViewMenu.setObjectName(u'ViewMenu') self.viewMenu.setObjectName(u'viewMenu')
self.ViewModeMenu = QtGui.QMenu(self.ViewMenu) self.ViewModeMenu = QtGui.QMenu(self.viewMenu)
self.ViewModeMenu.setObjectName(u'ViewModeMenu') self.ViewModeMenu.setObjectName(u'ViewModeMenu')
# Tools Menu # Tools Menu
self.ToolsMenu = QtGui.QMenu(self.MenuBar) self.ToolsMenu = QtGui.QMenu(self.MenuBar)
@ -125,38 +125,38 @@ class Ui_MainWindow(object):
self.DefaultThemeLabel.setObjectName(u'DefaultThemeLabel') self.DefaultThemeLabel.setObjectName(u'DefaultThemeLabel')
self.StatusBar.addPermanentWidget(self.DefaultThemeLabel) self.StatusBar.addPermanentWidget(self.DefaultThemeLabel)
# Create the MediaManager # Create the MediaManager
self.MediaManagerDock = OpenLPDockWidget(mainWindow, self.mediaManagerDock = OpenLPDockWidget(mainWindow,
u'MediaManagerDock', u':/system/system_mediamanager.png') u'mediaManagerDock', u':/system/system_mediamanager.png')
self.MediaManagerDock.setStyleSheet(MEDIA_MANAGER_STYLE) self.mediaManagerDock.setStyleSheet(MEDIA_MANAGER_STYLE)
self.MediaManagerDock.setMinimumWidth( self.mediaManagerDock.setMinimumWidth(
self.settingsmanager.mainwindow_left) self.settingsmanager.mainwindow_left)
# Create the media toolbox # Create the media toolbox
self.MediaToolBox = QtGui.QToolBox(self.MediaManagerDock) self.MediaToolBox = QtGui.QToolBox(self.mediaManagerDock)
self.MediaToolBox.setObjectName(u'MediaToolBox') self.MediaToolBox.setObjectName(u'MediaToolBox')
self.MediaManagerDock.setWidget(self.MediaToolBox) self.mediaManagerDock.setWidget(self.MediaToolBox)
mainWindow.addDockWidget(QtCore.Qt.LeftDockWidgetArea, mainWindow.addDockWidget(QtCore.Qt.LeftDockWidgetArea,
self.MediaManagerDock) self.mediaManagerDock)
# Create the service manager # Create the service manager
self.ServiceManagerDock = OpenLPDockWidget(mainWindow, self.serviceManagerDock = OpenLPDockWidget(mainWindow,
u'ServiceManagerDock', u':/system/system_servicemanager.png') u'serviceManagerDock', u':/system/system_servicemanager.png')
self.ServiceManagerDock.setMinimumWidth( self.serviceManagerDock.setMinimumWidth(
self.settingsmanager.mainwindow_right) self.settingsmanager.mainwindow_right)
self.ServiceManagerContents = ServiceManager(mainWindow, self.ServiceManagerContents = ServiceManager(mainWindow,
self.ServiceManagerDock) self.serviceManagerDock)
self.ServiceManagerDock.setWidget(self.ServiceManagerContents) self.serviceManagerDock.setWidget(self.ServiceManagerContents)
mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea, mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea,
self.ServiceManagerDock) self.serviceManagerDock)
# Create the theme manager # Create the theme manager
self.ThemeManagerDock = OpenLPDockWidget(mainWindow, self.themeManagerDock = OpenLPDockWidget(mainWindow,
u'ThemeManagerDock', u':/system/system_thememanager.png') u'themeManagerDock', u':/system/system_thememanager.png')
self.ThemeManagerDock.setMinimumWidth( self.themeManagerDock.setMinimumWidth(
self.settingsmanager.mainwindow_right) self.settingsmanager.mainwindow_right)
self.ThemeManagerContents = ThemeManager(mainWindow, self.ThemeManagerContents = ThemeManager(mainWindow,
self.ThemeManagerDock) self.themeManagerDock)
self.ThemeManagerContents.setObjectName(u'ThemeManagerContents') self.ThemeManagerContents.setObjectName(u'ThemeManagerContents')
self.ThemeManagerDock.setWidget(self.ThemeManagerContents) self.themeManagerDock.setWidget(self.ThemeManagerContents)
mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea, mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea,
self.ThemeManagerDock) self.themeManagerDock)
# Create the menu items # Create the menu items
self.FileNewItem = icon_action(mainWindow, u'FileNewItem', self.FileNewItem = icon_action(mainWindow, u'FileNewItem',
u':/general/general_new.png') u':/general/general_new.png')
@ -186,14 +186,14 @@ class Ui_MainWindow(object):
mainWindow.actionList.add_action(self.ExportLanguageItem, u'Export') mainWindow.actionList.add_action(self.ExportLanguageItem, u'Export')
self.ViewMediaManagerItem = icon_action(mainWindow, self.ViewMediaManagerItem = icon_action(mainWindow,
u'ViewMediaManagerItem', u':/system/system_mediamanager.png', u'ViewMediaManagerItem', u':/system/system_mediamanager.png',
self.MediaManagerDock.isVisible()) self.mediaManagerDock.isVisible())
self.ViewThemeManagerItem = icon_action(mainWindow, self.ViewThemeManagerItem = icon_action(mainWindow,
u'ViewThemeManagerItem', u':/system/system_thememanager.png', u'ViewThemeManagerItem', u':/system/system_thememanager.png',
self.ThemeManagerDock.isVisible()) self.themeManagerDock.isVisible())
mainWindow.actionList.add_action(self.ViewMediaManagerItem, u'View') mainWindow.actionList.add_action(self.ViewMediaManagerItem, u'View')
self.ViewServiceManagerItem = icon_action(mainWindow, self.ViewServiceManagerItem = icon_action(mainWindow,
u'ViewServiceManagerItem', u':/system/system_servicemanager.png', u'ViewServiceManagerItem', u':/system/system_servicemanager.png',
self.ServiceManagerDock.isVisible()) self.serviceManagerDock.isVisible())
mainWindow.actionList.add_action(self.ViewServiceManagerItem, u'View') mainWindow.actionList.add_action(self.ViewServiceManagerItem, u'View')
self.ViewPreviewPanel = checkable_action(mainWindow, self.ViewPreviewPanel = checkable_action(mainWindow,
u'ViewPreviewPanel', previewVisible) u'ViewPreviewPanel', previewVisible)
@ -215,9 +215,9 @@ class Ui_MainWindow(object):
self.ToolsAddToolItem = icon_action(mainWindow, u'ToolsAddToolItem', self.ToolsAddToolItem = icon_action(mainWindow, u'ToolsAddToolItem',
u':/tools/tools_add.png') u':/tools/tools_add.png')
mainWindow.actionList.add_action(self.ToolsAddToolItem, u'Tools') mainWindow.actionList.add_action(self.ToolsAddToolItem, u'Tools')
self.SettingsPluginListItem = icon_action(mainWindow, self.settingsPluginListItem = icon_action(mainWindow,
u'SettingsPluginListItem', u':/system/settings_plugin_list.png') u'settingsPluginListItem', u':/system/settings_plugin_list.png')
mainWindow.actionList.add_action(self.SettingsPluginListItem, mainWindow.actionList.add_action(self.settingsPluginListItem,
u'Settings') u'Settings')
# i18n Language Items # i18n Language Items
self.AutoLanguageItem = checkable_action(mainWindow, self.AutoLanguageItem = checkable_action(mainWindow,
@ -264,14 +264,14 @@ class Ui_MainWindow(object):
self.FileExportMenu.menuAction(), self.FileExitItem) self.FileExportMenu.menuAction(), self.FileExitItem)
add_actions(self.ViewModeMenu, (self.ModeDefaultItem, add_actions(self.ViewModeMenu, (self.ModeDefaultItem,
self.ModeSetupItem, self.ModeLiveItem)) self.ModeSetupItem, self.ModeLiveItem))
add_actions(self.ViewMenu, (self.ViewModeMenu.menuAction(), add_actions(self.viewMenu, (self.ViewModeMenu.menuAction(),
None, self.ViewMediaManagerItem, self.ViewServiceManagerItem, None, self.ViewMediaManagerItem, self.ViewServiceManagerItem,
self.ViewThemeManagerItem, None, self.ViewPreviewPanel, self.ViewThemeManagerItem, None, self.ViewPreviewPanel,
self.ViewLivePanel)) self.ViewLivePanel))
# i18n add Language Actions # i18n add Language Actions
add_actions(self.SettingsLanguageMenu, (self.AutoLanguageItem, None)) add_actions(self.SettingsLanguageMenu, (self.AutoLanguageItem, None))
add_actions(self.SettingsLanguageMenu, self.LanguageGroup.actions()) add_actions(self.SettingsLanguageMenu, self.LanguageGroup.actions())
add_actions(self.SettingsMenu, (self.SettingsPluginListItem, add_actions(self.SettingsMenu, (self.settingsPluginListItem,
self.SettingsLanguageMenu.menuAction(), None, self.SettingsLanguageMenu.menuAction(), None,
self.SettingsShortcutsItem, self.SettingsConfigureItem)) self.SettingsShortcutsItem, self.SettingsConfigureItem))
add_actions(self.ToolsMenu, (self.ToolsAddToolItem, None)) add_actions(self.ToolsMenu, (self.ToolsAddToolItem, None))
@ -279,7 +279,7 @@ class Ui_MainWindow(object):
self.HelpOnlineHelpItem, None, self.HelpWebSiteItem, self.HelpOnlineHelpItem, None, self.HelpWebSiteItem,
self.HelpAboutItem)) self.HelpAboutItem))
add_actions(self.MenuBar, (self.FileMenu.menuAction(), add_actions(self.MenuBar, (self.FileMenu.menuAction(),
self.ViewMenu.menuAction(), self.ToolsMenu.menuAction(), self.viewMenu.menuAction(), self.ToolsMenu.menuAction(),
self.SettingsMenu.menuAction(), self.HelpMenu.menuAction())) self.SettingsMenu.menuAction(), self.HelpMenu.menuAction()))
# Initialise the translation # Initialise the translation
self.retranslateUi(mainWindow) self.retranslateUi(mainWindow)
@ -300,18 +300,18 @@ class Ui_MainWindow(object):
self.FileMenu.setTitle(translate('OpenLP.MainWindow', '&File')) self.FileMenu.setTitle(translate('OpenLP.MainWindow', '&File'))
self.FileImportMenu.setTitle(translate('OpenLP.MainWindow', '&Import')) self.FileImportMenu.setTitle(translate('OpenLP.MainWindow', '&Import'))
self.FileExportMenu.setTitle(translate('OpenLP.MainWindow', '&Export')) self.FileExportMenu.setTitle(translate('OpenLP.MainWindow', '&Export'))
self.ViewMenu.setTitle(translate('OpenLP.MainWindow', '&View')) self.viewMenu.setTitle(translate('OpenLP.MainWindow', '&View'))
self.ViewModeMenu.setTitle(translate('OpenLP.MainWindow', 'M&ode')) self.ViewModeMenu.setTitle(translate('OpenLP.MainWindow', 'M&ode'))
self.ToolsMenu.setTitle(translate('OpenLP.MainWindow', '&Tools')) self.ToolsMenu.setTitle(translate('OpenLP.MainWindow', '&Tools'))
self.SettingsMenu.setTitle(translate('OpenLP.MainWindow', '&Settings')) self.SettingsMenu.setTitle(translate('OpenLP.MainWindow', '&Settings'))
self.SettingsLanguageMenu.setTitle(translate('OpenLP.MainWindow', self.SettingsLanguageMenu.setTitle(translate('OpenLP.MainWindow',
'&Language')) '&Language'))
self.HelpMenu.setTitle(translate('OpenLP.MainWindow', '&Help')) self.HelpMenu.setTitle(translate('OpenLP.MainWindow', '&Help'))
self.MediaManagerDock.setWindowTitle( self.mediaManagerDock.setWindowTitle(
translate('OpenLP.MainWindow', 'Media Manager')) translate('OpenLP.MainWindow', 'Media Manager'))
self.ServiceManagerDock.setWindowTitle( self.serviceManagerDock.setWindowTitle(
translate('OpenLP.MainWindow', 'Service Manager')) translate('OpenLP.MainWindow', 'Service Manager'))
self.ThemeManagerDock.setWindowTitle( self.themeManagerDock.setWindowTitle(
translate('OpenLP.MainWindow', 'Theme Manager')) translate('OpenLP.MainWindow', 'Theme Manager'))
self.FileNewItem.setText(translate('OpenLP.MainWindow', '&New')) self.FileNewItem.setText(translate('OpenLP.MainWindow', '&New'))
self.FileNewItem.setToolTip( self.FileNewItem.setToolTip(
@ -403,11 +403,11 @@ class Ui_MainWindow(object):
'Toggle the visibility of the live panel.')) 'Toggle the visibility of the live panel.'))
self.ViewLivePanel.setShortcut( self.ViewLivePanel.setShortcut(
translate('OpenLP.MainWindow', 'F12')) translate('OpenLP.MainWindow', 'F12'))
self.SettingsPluginListItem.setText(translate('OpenLP.MainWindow', self.settingsPluginListItem.setText(translate('OpenLP.MainWindow',
'&Plugin List')) '&Plugin List'))
self.SettingsPluginListItem.setStatusTip( self.settingsPluginListItem.setStatusTip(
translate('OpenLP.MainWindow', 'List the Plugins')) translate('OpenLP.MainWindow', 'List the Plugins'))
self.SettingsPluginListItem.setShortcut( self.settingsPluginListItem.setShortcut(
translate('OpenLP.MainWindow', 'Alt+F7')) translate('OpenLP.MainWindow', 'Alt+F7'))
self.HelpDocumentationItem.setText( self.HelpDocumentationItem.setText(
translate('OpenLP.MainWindow', '&User Guide')) translate('OpenLP.MainWindow', '&User Guide'))
@ -501,20 +501,20 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
QtCore.SIGNAL(u'toggled(bool)'), self.setPreviewPanelVisibility) QtCore.SIGNAL(u'toggled(bool)'), self.setPreviewPanelVisibility)
QtCore.QObject.connect(self.ViewLivePanel, QtCore.QObject.connect(self.ViewLivePanel,
QtCore.SIGNAL(u'toggled(bool)'), self.setLivePanelVisibility) QtCore.SIGNAL(u'toggled(bool)'), self.setLivePanelVisibility)
QtCore.QObject.connect(self.MediaManagerDock, QtCore.QObject.connect(self.mediaManagerDock,
QtCore.SIGNAL(u'visibilityChanged(bool)'), QtCore.SIGNAL(u'visibilityChanged(bool)'),
self.ViewMediaManagerItem.setChecked) self.ViewMediaManagerItem.setChecked)
QtCore.QObject.connect(self.ServiceManagerDock, QtCore.QObject.connect(self.serviceManagerDock,
QtCore.SIGNAL(u'visibilityChanged(bool)'), QtCore.SIGNAL(u'visibilityChanged(bool)'),
self.ViewServiceManagerItem.setChecked) self.ViewServiceManagerItem.setChecked)
QtCore.QObject.connect(self.ThemeManagerDock, QtCore.QObject.connect(self.themeManagerDock,
QtCore.SIGNAL(u'visibilityChanged(bool)'), QtCore.SIGNAL(u'visibilityChanged(bool)'),
self.ViewThemeManagerItem.setChecked) self.ViewThemeManagerItem.setChecked)
QtCore.QObject.connect(self.HelpWebSiteItem, QtCore.QObject.connect(self.HelpWebSiteItem,
QtCore.SIGNAL(u'triggered()'), self.onHelpWebSiteClicked) QtCore.SIGNAL(u'triggered()'), self.onHelpWebSiteClicked)
QtCore.QObject.connect(self.HelpAboutItem, QtCore.QObject.connect(self.HelpAboutItem,
QtCore.SIGNAL(u'triggered()'), self.onHelpAboutItemClicked) QtCore.SIGNAL(u'triggered()'), self.onHelpAboutItemClicked)
QtCore.QObject.connect(self.SettingsPluginListItem, QtCore.QObject.connect(self.settingsPluginListItem,
QtCore.SIGNAL(u'triggered()'), self.onPluginItemClicked) QtCore.SIGNAL(u'triggered()'), self.onPluginItemClicked)
QtCore.QObject.connect(self.SettingsConfigureItem, QtCore.QObject.connect(self.SettingsConfigureItem,
QtCore.SIGNAL(u'triggered()'), self.onSettingsConfigureItemClicked) QtCore.SIGNAL(u'triggered()'), self.onSettingsConfigureItemClicked)
@ -748,9 +748,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
settings = QtCore.QSettings() settings = QtCore.QSettings()
settings.setValue(u'%s/view mode' % self.generalSettingsSection, settings.setValue(u'%s/view mode' % self.generalSettingsSection,
mode) mode)
self.MediaManagerDock.setVisible(media) self.mediaManagerDock.setVisible(media)
self.ServiceManagerDock.setVisible(service) self.serviceManagerDock.setVisible(service)
self.ThemeManagerDock.setVisible(theme) self.themeManagerDock.setVisible(theme)
self.setPreviewPanelVisibility(preview) self.setPreviewPanelVisibility(preview)
self.setLivePanelVisibility(live) self.setLivePanelVisibility(live)
@ -867,16 +867,16 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
theme) theme)
def toggleMediaManager(self, visible): def toggleMediaManager(self, visible):
if self.MediaManagerDock.isVisible() != visible: if self.mediaManagerDock.isVisible() != visible:
self.MediaManagerDock.setVisible(visible) self.mediaManagerDock.setVisible(visible)
def toggleServiceManager(self, visible): def toggleServiceManager(self, visible):
if self.ServiceManagerDock.isVisible() != visible: if self.serviceManagerDock.isVisible() != visible:
self.ServiceManagerDock.setVisible(visible) self.serviceManagerDock.setVisible(visible)
def toggleThemeManager(self, visible): def toggleThemeManager(self, visible):
if self.ThemeManagerDock.isVisible() != visible: if self.themeManagerDock.isVisible() != visible:
self.ThemeManagerDock.setVisible(visible) self.themeManagerDock.setVisible(visible)
def setPreviewPanelVisibility(self, visible): def setPreviewPanelVisibility(self, visible):
""" """

View File

@ -34,7 +34,9 @@ from plugindialog import Ui_PluginViewDialog
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): class PluginForm(QtGui.QDialog, Ui_PluginViewDialog):
"""
The plugin form provides user control over the plugins OpenLP uses.
"""
def __init__(self, parent=None): def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent) QtGui.QDialog.__init__(self, parent)
self.parent = parent self.parent = parent

View File

@ -78,7 +78,7 @@ class SlideController(QtGui.QWidget):
self.selectedRow = 0 self.selectedRow = 0
self.serviceItem = None self.serviceItem = None
self.alertTab = None self.alertTab = None
self.panel = QtGui.QWidget(parent.ControlSplitter) self.panel = QtGui.QWidget(parent.controlSplitter)
self.slideList = {} self.slideList = {}
# Layout for holding panel # Layout for holding panel
self.panelLayout = QtGui.QVBoxLayout(self.panel) self.panelLayout = QtGui.QVBoxLayout(self.panel)
@ -455,7 +455,7 @@ class SlideController(QtGui.QWidget):
self.previewListWidget.resizeRowsToContents() self.previewListWidget.resizeRowsToContents()
else: else:
# Sort out image heights. # Sort out image heights.
width = self.parent.ControlSplitter.sizes()[self.split] width = self.parent.controlSplitter.sizes()[self.split]
for framenumber in range(len(self.serviceItem.get_frames())): for framenumber in range(len(self.serviceItem.get_frames())):
self.previewListWidget.setRowHeight( self.previewListWidget.setRowHeight(
framenumber, width / self.ratio) framenumber, width / self.ratio)
@ -584,7 +584,7 @@ class SlideController(QtGui.QWidget):
Receiver.send_message(u'%s_start' % serviceItem.name.lower(), Receiver.send_message(u'%s_start' % serviceItem.name.lower(),
[serviceItem, self.isLive, blanked, slideno]) [serviceItem, self.isLive, blanked, slideno])
self.slideList = {} self.slideList = {}
width = self.parent.ControlSplitter.sizes()[self.split] width = self.parent.controlSplitter.sizes()[self.split]
self.serviceItem = serviceItem self.serviceItem = serviceItem
self.previewListWidget.clear() self.previewListWidget.clear()
self.previewListWidget.setRowCount(0) self.previewListWidget.setRowCount(0)

View File

@ -33,6 +33,13 @@ import re
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
def get_reference_match(match_type): def get_reference_match(match_type):
"""
Provides the regexes and matches to use while parsing strings for bible
references.
``match_type``
The type of reference information trying to be extracted in this call.
"""
local_separator = unicode(u':;;\s*[:vV]\s*;;-;;\s*-\s*;;,;;\s*,\s*;;end' local_separator = unicode(u':;;\s*[:vV]\s*;;-;;\s*-\s*;;,;;\s*,\s*;;end'
).split(u';;') # English ).split(u';;') # English
# local_separator = unicode(u',;;\s*,\s*;;-;;\s*-\s*;;.;;\.;;[Ee]nde' # local_separator = unicode(u',;;\s*,\s*;;-;;\s*-\s*;;.;;\.;;[Ee]nde'

View File

@ -84,8 +84,6 @@ class ImageMediaItem(MediaManagerItem):
def initialise(self): def initialise(self):
log.debug(u'initialise') log.debug(u'initialise')
self.listView.clear() self.listView.clear()
self.listView.setSelectionMode(
QtGui.QAbstractItemView.ExtendedSelection)
self.listView.setIconSize(QtCore.QSize(88, 50)) self.listView.setIconSize(QtCore.QSize(88, 50))
self.servicePath = os.path.join( self.servicePath = os.path.join(
AppLocation.get_section_data_path(self.settingsSection), AppLocation.get_section_data_path(self.settingsSection),

View File

@ -151,8 +151,6 @@ class MediaMediaItem(MediaManagerItem):
return False return False
def initialise(self): def initialise(self):
self.listView.setSelectionMode(
QtGui.QAbstractItemView.ExtendedSelection)
self.listView.setIconSize(QtCore.QSize(88, 50)) self.listView.setIconSize(QtCore.QSize(88, 50))
self.loadList(SettingsManager.load_list(self.settingsSection, self.loadList(SettingsManager.load_list(self.settingsSection,
self.settingsSection)) self.settingsSection))

View File

@ -69,7 +69,8 @@ class ImpressController(PresentationController):
Initialise the class Initialise the class
""" """
log.debug(u'Initialising') log.debug(u'Initialising')
PresentationController.__init__(self, plugin, u'Impress') PresentationController.__init__(self, plugin, u'Impress',
ImpressDocument)
self.supports = [u'odp'] self.supports = [u'odp']
self.alsosupports = [u'ppt', u'pps', u'pptx', u'ppsx'] self.alsosupports = [u'ppt', u'pps', u'pptx', u'ppsx']
self.process = None self.process = None
@ -183,14 +184,6 @@ class ImpressController(PresentationController):
except: except:
log.exception(u'Failed to terminate OpenOffice') log.exception(u'Failed to terminate OpenOffice')
def add_doc(self, name):
"""
Called when a new Impress document is opened
"""
log.debug(u'Add Doc OpenOffice')
doc = ImpressDocument(self, name)
self.docs.append(doc)
return doc
class ImpressDocument(PresentationDocument): class ImpressDocument(PresentationDocument):
""" """
@ -431,35 +424,36 @@ class ImpressDocument(PresentationDocument):
def get_slide_text(self, slide_no): def get_slide_text(self, slide_no):
""" """
Returns the text on the slide Returns the text on the slide.
``slide_no`` ``slide_no``
The slide the text is required for, starting at 1 The slide the text is required for, starting at 1
"""
return __get_text_from_slide(slide_no)
def get_slide_notes(self, slide_no):
"""
Returns the text in the slide notes.
``slide_no``
The slide the notes are required for, starting at 1
"""
return __get_text_from_page(slide_no, True)
def __get_text_from_page(self, slide_no, notes=False):
"""
Return any text extracted from the presentation page.
``notes``
A boolean. If set the method searches the notes of the slide.
""" """
doc = self.document
pages = doc.getDrawPages()
text = '' text = ''
pages = self.document.getDrawPages()
page = pages.getByIndex(slide_no - 1) page = pages.getByIndex(slide_no - 1)
if notes:
page = page.getNotesPage()
for idx in range(page.getCount()): for idx in range(page.getCount()):
shape = page.getByIndex(idx) shape = page.getByIndex(idx)
if shape.supportsService("com.sun.star.drawing.Text"): if shape.supportsService("com.sun.star.drawing.Text"):
text += shape.getString() + '\n' text += shape.getString() + '\n'
return text return text
def get_slide_notes(self, slide_no):
"""
Returns the text on the slide
``slide_no``
The slide the notes are required for, starting at 1
"""
doc = self.document
pages = doc.getDrawPages()
text = ''
page = pages.getByIndex(slide_no - 1)
notes = page.getNotesPage()
for idx in range(notes.getCount()):
shape = notes.getByIndex(idx)
if shape.supportsService("com.sun.star.drawing.Text"):
text += shape.getString() + '\n'
return text

View File

@ -186,7 +186,7 @@ class PresentationMediaItem(MediaManagerItem):
controller_name = self.findControllerByType(filename) controller_name = self.findControllerByType(filename)
if controller_name: if controller_name:
controller = self.controllers[controller_name] controller = self.controllers[controller_name]
doc = controller.add_doc(unicode(file)) doc = controller.add_document(unicode(file))
thumb = os.path.join(doc.get_thumbnail_folder(), u'icon.png') thumb = os.path.join(doc.get_thumbnail_folder(), u'icon.png')
preview = doc.get_thumbnail_path(1, True) preview = doc.get_thumbnail_path(1, True)
if not preview and not initialLoad: if not preview and not initialLoad:
@ -226,7 +226,7 @@ class PresentationMediaItem(MediaManagerItem):
filepath = unicode(item.data( filepath = unicode(item.data(
QtCore.Qt.UserRole).toString()) QtCore.Qt.UserRole).toString())
for cidx in self.controllers: for cidx in self.controllers:
doc = self.controllers[cidx].add_doc(filepath) doc = self.controllers[cidx].add_document(filepath)
doc.presentation_deleted() doc.presentation_deleted()
doc.close_presentation() doc.close_presentation()
for row in row_list: for row in row_list:
@ -260,7 +260,7 @@ class PresentationMediaItem(MediaManagerItem):
return False return False
controller = self.controllers[service_item.shortname] controller = self.controllers[service_item.shortname]
(path, name) = os.path.split(filename) (path, name) = os.path.split(filename)
doc = controller.add_doc(filename) doc = controller.add_document(filename)
if doc.get_thumbnail_path(1, True) is None: if doc.get_thumbnail_path(1, True) is None:
doc.load_presentation() doc.load_presentation()
i = 1 i = 1

View File

@ -59,7 +59,7 @@ class Controller(object):
self.controller = controller self.controller = controller
if self.doc is not None: if self.doc is not None:
self.shutdown() self.shutdown()
self.doc = self.controller.add_doc(file) self.doc = self.controller.add_document(file)
if not self.doc.load_presentation(): if not self.doc.load_presentation():
# Display error message to user # Display error message to user
# Inform slidecontroller that the action failed? # Inform slidecontroller that the action failed?

View File

@ -53,7 +53,8 @@ class PowerpointController(PresentationController):
Initialise the class Initialise the class
""" """
log.debug(u'Initialising') log.debug(u'Initialising')
PresentationController.__init__(self, plugin, u'Powerpoint') PresentationController.__init__(self, plugin, u'Powerpoint',
PowerpointDocument)
self.supports = [u'ppt', u'pps', u'pptx', u'ppsx'] self.supports = [u'ppt', u'pps', u'pptx', u'ppsx']
self.process = None self.process = None
@ -97,14 +98,6 @@ class PowerpointController(PresentationController):
pass pass
self.process = None self.process = None
def add_doc(self, name):
"""
Called when a new powerpoint document is opened
"""
log.debug(u'Add Doc PowerPoint')
doc = PowerpointDocument(self, name)
self.docs.append(doc)
return doc
class PowerpointDocument(PresentationDocument): class PowerpointDocument(PresentationDocument):
""" """
@ -291,13 +284,7 @@ class PowerpointDocument(PresentationDocument):
``slide_no`` ``slide_no``
The slide the text is required for, starting at 1. The slide the text is required for, starting at 1.
""" """
text = '' return _get_text_from_shapes(self.presentation.Slides(slide_no).Shapes)
shapes = self.presentation.Slides(slide_no).Shapes
for idx in range(shapes.Count):
shape = shapes(idx + 1)
if shape.HasTextFrame:
text += shape.TextFrame.TextRange.Text + '\n'
return text
def get_slide_notes(self, slide_no): def get_slide_notes(self, slide_no):
""" """
@ -306,10 +293,19 @@ class PowerpointDocument(PresentationDocument):
``slide_no`` ``slide_no``
The slide the notes are required for, starting at 1. The slide the notes are required for, starting at 1.
""" """
text = '' return _get_text_from_shapes(
shapes = self.presentation.Slides(slide_no).NotesPage.Shapes self.presentation.Slides(slide_no).NotesPage.Shapes)
for idx in range(shapes.Count):
shape = shapes(idx + 1) def _get_text_from_shapes(shapes):
if shape.HasTextFrame: """
text += shape.TextFrame.TextRange.Text + '\n' Returns any text extracted from the shapes on a presentation slide.
return text
``shapes``
A set of shapes to search for text.
"""
text = ''
for idx in range(shapes.Count):
shape = shapes(idx + 1)
if shape.HasTextFrame:
text += shape.TextFrame.TextRange.Text + '\n'
return text

View File

@ -49,7 +49,8 @@ class PptviewController(PresentationController):
""" """
log.debug(u'Initialising') log.debug(u'Initialising')
self.process = None self.process = None
PresentationController.__init__(self, plugin, u'Powerpoint Viewer') PresentationController.__init__(self, plugin, u'Powerpoint Viewer',
PptviewDocument)
self.supports = [u'ppt', u'pps', u'pptx', u'ppsx'] self.supports = [u'ppt', u'pps', u'pptx', u'ppsx']
def check_available(self): def check_available(self):
@ -93,14 +94,6 @@ class PptviewController(PresentationController):
while self.docs: while self.docs:
self.docs[0].close_presentation() self.docs[0].close_presentation()
def add_doc(self, name):
"""
Called when a new powerpoint document is opened
"""
log.debug(u'Add Doc PPTView')
doc = PptviewDocument(self, name)
self.docs.append(doc)
return doc
class PptviewDocument(PresentationDocument): class PptviewDocument(PresentationDocument):
""" """
@ -247,4 +240,4 @@ class PptviewDocument(PresentationDocument):
""" """
Triggers the previous slide on the running presentation Triggers the previous slide on the running presentation
""" """
self.controller.process.PrevStep(self.pptid) self.controller.process.PrevStep(self.pptid)

View File

@ -35,151 +35,6 @@ from openlp.core.utils import AppLocation
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class PresentationController(object):
"""
This class is used to control interactions with presentation applications
by creating a runtime environment. This is a base class for presentation
controllers to inherit from.
To create a new controller, take a copy of this file and name it so it ends
with ``controller.py``, i.e. ``foobarcontroller.py``. Make sure it inherits
:class:`~openlp.plugins.presentations.lib.presentationcontroller.PresentationController`,
and then fill in the blanks. If possible try to make sure it loads on all
platforms, usually by using :mod:``os.name`` checks, although
``__init__``, ``check_available`` and ``presentation_deleted`` should
always be implemented.
See :class:`~openlp.plugins.presentations.lib.impresscontroller.ImpressController`,
:class:`~openlp.plugins.presentations.lib.powerpointcontroller.PowerpointController` or
:class:`~openlp.plugins.presentations.lib.pptviewcontroller.PptviewController`
for examples.
**Basic Attributes**
``name``
The name that appears in the options and the media manager
``enabled``
The controller is enabled
``available``
The controller is available on this machine. Set by init via
call to check_available
``plugin``
The presentationplugin object
``supports``
The primary native file types this application supports
``alsosupports``
Other file types the application can import, although not necessarily
the first choice due to potential incompatibilities
**Hook Functions**
``kill()``
Called at system exit to clean up any running presentations
``check_available()``
Returns True if presentation application is installed/can run on this
machine
``presentation_deleted()``
Deletes presentation specific files, e.g. thumbnails
"""
log.info(u'PresentationController loaded')
def __init__(self, plugin=None, name=u'PresentationController'):
"""
This is the constructor for the presentationcontroller object. This
provides an easy way for descendent plugins to populate common data.
This method *must* be overridden, like so::
class MyPresentationController(PresentationController):
def __init__(self, plugin):
PresentationController.__init(
self, plugin, u'My Presenter App')
``plugin``
Defaults to *None*. The presentationplugin object
``name``
Name of the application, to appear in the application
"""
self.supports = []
self.alsosupports = []
self.docs = []
self.plugin = plugin
self.name = name
self.settings_section = self.plugin.settingsSection
self.available = self.check_available()
self.temp_folder = os.path.join(
AppLocation.get_section_data_path(self.settings_section), name)
self.thumbnail_folder = os.path.join(
AppLocation.get_section_data_path(self.settings_section),
u'thumbnails')
self.thumbnail_prefix = u'slide'
if not os.path.isdir(self.thumbnail_folder):
os.makedirs(self.thumbnail_folder)
if not os.path.isdir(self.temp_folder):
os.makedirs(self.temp_folder)
def enabled(self):
"""
Return whether the controller is currently enabled
"""
if self.available:
return QtCore.QSettings().value(
self.settings_section + u'/' + self.name,
QtCore.QVariant(QtCore.Qt.Checked)).toInt()[0] == \
QtCore.Qt.Checked
else:
return False
def check_available(self):
"""
Presentation app is able to run on this machine
"""
return False
def start_process(self):
"""
Loads a running version of the presentation application in the
background.
"""
pass
def kill(self):
"""
Called at system exit to clean up any running presentations and
close the application
"""
log.debug(u'Kill')
self.close_presentation()
def add_doc(self, name):
"""
Called when a new presentation document is opened
"""
doc = PresentationDocument(self, name)
self.docs.append(doc)
return doc
def remove_doc(self, doc=None):
"""
Called to remove an open document from the collection
"""
log.debug(u'remove_doc Presentation')
if doc is None:
return
if doc in self.docs:
self.docs.remove(doc)
def close_presentation(self):
pass
class PresentationDocument(object): class PresentationDocument(object):
""" """
Base class for presentation documents to inherit from. Base class for presentation documents to inherit from.
@ -440,4 +295,152 @@ class PresentationDocument(object):
``slide_no`` ``slide_no``
The slide the notes are required for, starting at 1 The slide the notes are required for, starting at 1
""" """
return '' return ''
class PresentationController(object):
"""
This class is used to control interactions with presentation applications
by creating a runtime environment. This is a base class for presentation
controllers to inherit from.
To create a new controller, take a copy of this file and name it so it ends
with ``controller.py``, i.e. ``foobarcontroller.py``. Make sure it inherits
:class:`~openlp.plugins.presentations.lib.presentationcontroller.PresentationController`,
and then fill in the blanks. If possible try to make sure it loads on all
platforms, usually by using :mod:``os.name`` checks, although
``__init__``, ``check_available`` and ``presentation_deleted`` should
always be implemented.
See :class:`~openlp.plugins.presentations.lib.impresscontroller.ImpressController`,
:class:`~openlp.plugins.presentations.lib.powerpointcontroller.PowerpointController` or
:class:`~openlp.plugins.presentations.lib.pptviewcontroller.PptviewController`
for examples.
**Basic Attributes**
``name``
The name that appears in the options and the media manager
``enabled``
The controller is enabled
``available``
The controller is available on this machine. Set by init via
call to check_available
``plugin``
The presentationplugin object
``supports``
The primary native file types this application supports
``alsosupports``
Other file types the application can import, although not necessarily
the first choice due to potential incompatibilities
**Hook Functions**
``kill()``
Called at system exit to clean up any running presentations
``check_available()``
Returns True if presentation application is installed/can run on this
machine
``presentation_deleted()``
Deletes presentation specific files, e.g. thumbnails
"""
log.info(u'PresentationController loaded')
def __init__(self, plugin=None, name=u'PresentationController',
document_class=PresentationDocument):
"""
This is the constructor for the presentationcontroller object. This
provides an easy way for descendent plugins to populate common data.
This method *must* be overridden, like so::
class MyPresentationController(PresentationController):
def __init__(self, plugin):
PresentationController.__init(
self, plugin, u'My Presenter App')
``plugin``
Defaults to *None*. The presentationplugin object
``name``
Name of the application, to appear in the application
"""
self.supports = []
self.alsosupports = []
self.docs = []
self.plugin = plugin
self.name = name
self.document_class = document_class
self.settings_section = self.plugin.settingsSection
self.available = self.check_available()
self.temp_folder = os.path.join(
AppLocation.get_section_data_path(self.settings_section), name)
self.thumbnail_folder = os.path.join(
AppLocation.get_section_data_path(self.settings_section),
u'thumbnails')
self.thumbnail_prefix = u'slide'
if not os.path.isdir(self.thumbnail_folder):
os.makedirs(self.thumbnail_folder)
if not os.path.isdir(self.temp_folder):
os.makedirs(self.temp_folder)
def enabled(self):
"""
Return whether the controller is currently enabled
"""
if self.available:
return QtCore.QSettings().value(
self.settings_section + u'/' + self.name,
QtCore.QVariant(QtCore.Qt.Checked)).toInt()[0] == \
QtCore.Qt.Checked
else:
return False
def check_available(self):
"""
Presentation app is able to run on this machine
"""
return False
def start_process(self):
"""
Loads a running version of the presentation application in the
background.
"""
pass
def kill(self):
"""
Called at system exit to clean up any running presentations and
close the application
"""
log.debug(u'Kill')
self.close_presentation()
def add_document(self, name):
"""
Called when a new presentation document is opened
"""
document = self.document_class(self, name)
self.docs.append(document)
return document
def remove_doc(self, doc=None):
"""
Called to remove an open document from the collection
"""
log.debug(u'remove_doc Presentation')
if doc is None:
return
if doc in self.docs:
self.docs.remove(doc)
def close_presentation(self):
pass

View File

@ -104,6 +104,15 @@ class VerseType(object):
def retrieve_windows_encoding(recommendation=None): def retrieve_windows_encoding(recommendation=None):
"""
Determines which encoding to use on an information source. The process uses
both automated detection, which is passed to this method as a
recommendation, and user confirmation to return an encoding.
``recommendation``
A recommended encoding discovered programmatically for the user to
confirm.
"""
# map chardet result to compatible windows standard code page # map chardet result to compatible windows standard code page
codepage_mapping = {'IBM866': u'cp866', 'TIS-620': u'cp874', codepage_mapping = {'IBM866': u'cp866', 'TIS-620': u'cp874',
'SHIFT_JIS': u'cp932', 'GB2312': u'cp936', 'HZ-GB-2312': u'cp936', 'SHIFT_JIS': u'cp932', 'GB2312': u'cp936', 'HZ-GB-2312': u'cp936',

View File

@ -71,7 +71,6 @@ class Topic(BaseModel):
def init_schema(url): def init_schema(url):
""" """
Setup the songs database connection and initialise the database schema. Setup the songs database connection and initialise the database schema.

View File

@ -36,9 +36,6 @@ from openlp.plugins.songs.lib.songimport import SongImport
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class OpenSongImportError(Exception):
pass
class OpenSongImport(SongImport): class OpenSongImport(SongImport):
""" """
Import songs exported from OpenSong Import songs exported from OpenSong