Song fixes

Bug fixes to event receiver and presentations
This commit is contained in:
Tim Bentley 2009-06-04 17:14:10 +01:00
commit b365090544
12 changed files with 485 additions and 216 deletions

View File

@ -28,7 +28,7 @@ class EventReceiver(QtCore.QObject):
QtCore.QObject.__init__(self)
def send_message(self, event, msg=None):
self.emit(SIGNAL(event), msg)
self.emit(QtCore.SIGNAL(event), msg)
def received(self, msg=None):
print msg

View File

@ -65,7 +65,6 @@ class ServiceItem():
if len(self.frames) == 0 and len(self.raw_slides) > 0 :
for slide in self.raw_slides:
formated = self.plugin.render_manager.format_slide(slide)
#print formated
for format in formated:
frame = self.plugin.render_manager.generate_slide(format, self.raw_footer)
self.frames.append({u'title': format, u'image': frame})

View File

@ -23,12 +23,21 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import translate
class AboutForm(QtGui.QDialog):
"""
The About dialog
"""
def __init__(self, parent=None):
"""
Do some initialisation stuff
"""
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
def setupUi(self, AboutForm):
"""
Set up user interface
"""
AboutForm.setObjectName(u'AboutForm')
AboutForm.resize(470, 481)
icon = QtGui.QIcon()
@ -41,11 +50,10 @@ class AboutForm(QtGui.QDialog):
self.Logo = QtGui.QLabel(AboutForm)
self.Logo.setAutoFillBackground(False)
self.Logo.setStyleSheet(u'background-color: rgb(255, 255, 255);')
self.Logo.setFrameShape(QtGui.QFrame.StyledPanel)
self.Logo.setLineWidth(1)
self.Logo.setLineWidth(0)
self.Logo.setPixmap(QtGui.QPixmap(u':/graphics/openlp-about-logo.png'))
self.Logo.setScaledContents(False)
self.Logo.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.Logo.setAlignment(QtCore.Qt.AlignCenter)
self.Logo.setObjectName(u'Logo')
AboutFormLayout.addWidget(self.Logo)
self.AboutNotebook = QtGui.QTabWidget(AboutForm)
@ -60,22 +68,26 @@ class AboutForm(QtGui.QDialog):
self.CopyrightLabel.setObjectName(u'CopyrightLabel')
self.LicenseTabLayout.addWidget(self.CopyrightLabel)
self.AboutAuthors = QtGui.QLabel(self.LicenseTab)
self.AboutAuthors.setAlignment(QtCore.Qt.AlignJustify|QtCore.Qt.AlignVCenter)
self.AboutAuthors.setAlignment(
QtCore.Qt.AlignJustify | QtCore.Qt.AlignVCenter)
self.AboutAuthors.setWordWrap(True)
self.AboutAuthors.setObjectName(u'AboutAuthors')
self.LicenseTabLayout.addWidget(self.AboutAuthors)
self.License1Label = QtGui.QLabel(self.LicenseTab)
self.License1Label.setAlignment(QtCore.Qt.AlignJustify|QtCore.Qt.AlignVCenter)
self.License1Label.setAlignment(
QtCore.Qt.AlignJustify | QtCore.Qt.AlignVCenter)
self.License1Label.setWordWrap(True)
self.License1Label.setObjectName(u'License1Label')
self.LicenseTabLayout.addWidget(self.License1Label)
self.License2Label = QtGui.QLabel(self.LicenseTab)
self.License2Label.setAlignment(QtCore.Qt.AlignJustify|QtCore.Qt.AlignVCenter)
self.License2Label.setAlignment(
QtCore.Qt.AlignJustify | QtCore.Qt.AlignVCenter)
self.License2Label.setWordWrap(True)
self.License2Label.setObjectName(u'License2Label')
self.LicenseTabLayout.addWidget(self.License2Label)
self.License3Label = QtGui.QLabel(self.LicenseTab)
self.License3Label.setAlignment(QtCore.Qt.AlignJustify|QtCore.Qt.AlignVCenter)
self.License3Label.setAlignment(
QtCore.Qt.AlignJustify | QtCore.Qt.AlignVCenter)
self.License3Label.setWordWrap(True)
self.License3Label.setObjectName(u'License3Label')
self.LicenseTabLayout.addWidget(self.License3Label)
@ -83,8 +95,8 @@ class AboutForm(QtGui.QDialog):
self.CreditsTab = QtGui.QWidget()
self.CreditsTab.setObjectName(u'CreditsTab')
self.CreditsTabLayout = QtGui.QVBoxLayout(self.CreditsTab)
self.CreditsTabLayout.setSpacing(0) #
self.CreditsTabLayout.setMargin(8) #
self.CreditsTabLayout.setSpacing(0)
self.CreditsTabLayout.setMargin(8)
self.CreditsTabLayout.setObjectName(u'CreditsTabLayout')
self.CreditsTextEdit = QtGui.QTextEdit(self.CreditsTab)
self.CreditsTextEdit.setReadOnly(True)
@ -98,7 +110,8 @@ class AboutForm(QtGui.QDialog):
self.ButtonWidgetLayout.setSpacing(8)
self.ButtonWidgetLayout.setMargin(0)
self.ButtonWidgetLayout.setObjectName(u'ButtonWidgetLayout')
spacerItem = QtGui.QSpacerItem(275, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
spacerItem = QtGui.QSpacerItem(275, 20, QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Minimum)
self.ButtonWidgetLayout.addItem(spacerItem)
self.ContributeButton = QtGui.QPushButton(self.ButtonWidget)
self.ContributeButton.setObjectName(u'ContributeButton')
@ -109,39 +122,55 @@ class AboutForm(QtGui.QDialog):
AboutFormLayout.addWidget(self.ButtonWidget)
self.extContributeItem = QtGui.QAction(AboutForm)
self.extContributeItem.setObjectName(u'extContributeItem')
# Do translation
self.retranslateUi(AboutForm)
self.AboutNotebook.setCurrentIndex(0)
QtCore.QObject.connect(self.CloseButton, QtCore.SIGNAL(u'clicked()'), AboutForm.close)
QtCore.QObject.connect(self.CloseButton, QtCore.SIGNAL(u'clicked()'),
AboutForm.close)
QtCore.QObject.connect(self.ContributeButton,
QtCore.SIGNAL(u'clicked()'), self.onContributeButtonClicked)
QtCore.QMetaObject.connectSlotsByName(AboutForm)
QtCore.QObject.connect(self.ContributeButton, QtCore.SIGNAL(u'clicked()'), self.onContributeButtonClicked)
def retranslateUi(self, AboutForm):
AboutForm.setWindowTitle(translate(u'AboutDialog', u'About openlp.org',))
self.CopyrightLabel.setText(translate(u'AboutDialog', u'Copyright (c) 2004-2009 openlp.org Foundation'))
self.AboutAuthors.setText(translate(u'AboutDialog', u'openlp.org is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below.'))
self.License1Label.setText(translate(u'AboutDialog', u'This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.'))
self.License2Label.setText(translate(u'AboutDialog', u'You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.'))
self.License3Label.setText(translate(u'AboutDialog', u'This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.'))
self.AboutNotebook.setTabText(self.AboutNotebook.indexOf(self.LicenseTab), translate(u'AboutDialog', u'License'))
"""
Set up translation
"""
AboutForm.setWindowTitle(translate(u'AboutDialog', u'About openlp.org'))
self.CopyrightLabel.setText(translate(u'AboutDialog',
u'Copyright (c) 2004-2009 openlp.org Foundation'))
self.AboutAuthors.setText(translate(u'AboutDialog',
u'openlp.org is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below.'))
self.License1Label.setText(translate(u'AboutDialog',
u'This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.'))
self.License2Label.setText(translate(u'AboutDialog',
u'You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.'))
self.License3Label.setText(translate(u'AboutDialog',
u'This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.'))
self.AboutNotebook.setTabText(
self.AboutNotebook.indexOf(self.LicenseTab),
translate(u'AboutDialog', u'License'))
self.CreditsTextEdit.setPlainText(translate(u'AboutDialog',
u'Project Lead\n'
u' Raoul \"superfly\" Snyman\n'
u'\n'
u'Developers\n'
u' Tim \"TRB143\" Bentley\n'
u' Jonathan \"gushie\" Corwin\n'
u' Scott \"sguerrieri\" Guerrieri\n'
u' Raoul \"superfly\" Snyman\n'
u' Martin \"mijiti\" Thompson\n'
u' Carsten \"catini\" Tingaard'))
self.AboutNotebook.setTabText(self.AboutNotebook.indexOf(self.CreditsTab), translate(u'AboutDialog', u'Credits'))
u'Project Lead\n'
u' Raoul \"superfly\" Snyman\n'
u'\n'
u'Developers\n'
u' Tim \"TRB143\" Bentley\n'
u' Jonathan \"gushie\" Corwin\n'
u' Scott \"sguerrieri\" Guerrieri\n'
u' Raoul \"superfly\" Snyman\n'
u' Martin \"mijiti\" Thompson\n'
u' Carsten \"catini\" Tingaard'))
self.AboutNotebook.setTabText(
self.AboutNotebook.indexOf(self.CreditsTab),
translate(u'AboutDialog', u'Credits'))
self.ContributeButton.setText(translate(u'AboutDialog', u'Contribute'))
self.CloseButton.setText(translate(u'AboutDialog', u'Close'))
self.extContributeItem.setText(translate(u'AboutDialog', u'&Contribute'))
def onContributeButtonClicked(self):
"""
Launch a web browser and go to the contribute page on the site.
"""
import webbrowser
url = "http://www.openlp.org/en/documentation/introduction/contributing.html"
webbrowser.open_new(url)

View File

@ -19,22 +19,28 @@ Place, Suite 330, Boston, MA 02111-1307 USA
"""
import os
import logging
from time import sleep
from PyQt4 import QtCore, QtGui
from openlp.core.ui import AboutForm, SettingsForm, AlertForm, \
SlideController, ServiceManager, ThemeManager, MainDisplay
from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab, EventManager, RenderManager, translate
from openlp.core.ui import AboutForm, SettingsForm, AlertForm, ServiceManager, \
ThemeManager, MainDisplay, SlideController
from openlp.core.lib import translate, Plugin, MediaManagerItem, SettingsTab, \
EventManager, RenderManager
from openlp.core import PluginManager
class MainWindow(object):
"""
The main window.
"""
global log
log = logging.getLogger(u'MainWindow')
log.info(u'MainWindow loaded')
def __init__(self, screens):
"""
This constructor sets up the interface, the various managers, and the
plugins.
"""
self.mainWindow = QtGui.QMainWindow()
self.mainWindow.__class__.closeEvent = self.onCloseEvent
self.mainDisplay = MainDisplay(None, screens)
@ -43,19 +49,18 @@ class MainWindow(object):
self.alertForm = AlertForm(self)
self.aboutForm = AboutForm()
self.settingsForm = SettingsForm(self.screenList, self)
# Set up the path with plugins
pluginpath = os.path.split(os.path.abspath(__file__))[0]
pluginpath = os.path.abspath(os.path.join(pluginpath, u'..', u'..', u'plugins'))
pluginpath = os.path.abspath(
os.path.join(pluginpath, u'..', u'..', u'plugins'))
self.plugin_manager = PluginManager(pluginpath)
self.plugin_helpers = {}
# Set up the interface
self.setupUi()
#warning cyclic dependency
#RenderManager needs to call ThemeManager and
#ThemeManager needs to call RenderManager
self.RenderManager = RenderManager(self.ThemeManagerContents, self.screenList)
log.info(u'Load Plugins')
self.plugin_helpers[u'preview'] = self.PreviewController
self.plugin_helpers[u'live'] = self.LiveController
@ -63,60 +68,54 @@ class MainWindow(object):
self.plugin_helpers[u'theme'] = self.ThemeManagerContents
self.plugin_helpers[u'render'] = self.RenderManager
self.plugin_helpers[u'service'] = self.ServiceManagerContents
self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers, self.EventManager)
# hook methods have to happen after find_plugins. Find plugins needs the controllers
# hence the hooks have moved from setupUI() to here
self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers,
self.EventManager)
# hook methods have to happen after find_plugins. Find plugins needs the
# controllershence the hooks have moved from setupUI() to here
# Find and insert media manager items
log.info(u'hook media')
self.plugin_manager.hook_media_manager(self.MediaToolBox)
# Find and insert settings tabs
log.info(u'hook settings')
self.plugin_manager.hook_settings_tabs(self.settingsForm)
# Call the hook method to pull in import menus.
log.info(u'hook menus')
self.plugin_manager.hook_import_menu(self.FileImportMenu)
# Call the hook method to pull in export menus.
self.plugin_manager.hook_export_menu(self.FileExportMenu)
# Call the initialise method to setup plugins.
log.info(u'initialise plugins')
self.plugin_manager.initialise_plugins()
# Once all components are initialised load the Themes
log.info(u'Load Themes')
self.ThemeManagerContents.loadThemes()
def onCloseEvent(self, event):
"""
Hook to close the main window and display windows on exit
"""
self.mainDisplay.close()
event.accept()
def setupUi(self):
"""
Set up the user interface
"""
self.mainWindow.setObjectName(u'mainWindow')
self.mainWindow.resize(1087, 847)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.mainWindow.sizePolicy().hasHeightForWidth())
sizePolicy.setHeightForWidth(
self.mainWindow.sizePolicy().hasHeightForWidth())
self.mainWindow.setSizePolicy(sizePolicy)
main_icon = QtGui.QIcon()
main_icon.addPixmap(QtGui.QPixmap(u':/icon/openlp-logo-16x16.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.mainWindow.setWindowIcon(main_icon)
# Set up the main container, which contains all the other form widgets
self.MainContent = QtGui.QWidget(self.mainWindow)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.MainContent.sizePolicy().hasHeightForWidth())
sizePolicy.setHeightForWidth(
self.MainContent.sizePolicy().hasHeightForWidth())
self.MainContent.setSizePolicy(sizePolicy)
self.MainContent.setObjectName(u'MainContent')
self.MainContentLayout = QtGui.QHBoxLayout(self.MainContent)
@ -128,10 +127,10 @@ class MainWindow(object):
self.ControlSplitter.setOrientation(QtCore.Qt.Horizontal)
self.ControlSplitter.setObjectName(u'ControlSplitter')
self.MainContentLayout.addWidget(self.ControlSplitter)
self.PreviewController = SlideController( self.ControlSplitter, self, False)
self.LiveController = SlideController(self.ControlSplitter, self, True)
# Create slide controllers
self.PreviewController = SlideController(self.ControlSplitter, self)
self.LiveController = SlideController(self.ControlSplitter, self, True)
# Create menu
self.MenuBar = QtGui.QMenuBar(self.mainWindow)
self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))
self.MenuBar.setObjectName(u'MenuBar')
@ -139,7 +138,6 @@ class MainWindow(object):
self.FileMenu.setObjectName(u'FileMenu')
self.FileImportMenu = QtGui.QMenu(self.FileMenu)
self.FileImportMenu.setObjectName(u'FileImportMenu')
self.FileExportMenu = QtGui.QMenu(self.FileMenu)
self.FileExportMenu.setObjectName(u'FileExportMenu')
self.OptionsMenu = QtGui.QMenu(self.MenuBar)
@ -158,65 +156,55 @@ class MainWindow(object):
self.StatusBar = QtGui.QStatusBar(self.mainWindow)
self.StatusBar.setObjectName(u'StatusBar')
self.mainWindow.setStatusBar(self.StatusBar)
# Create the MediaManager
self.MediaManagerDock = QtGui.QDockWidget(self.mainWindow)
#MmSizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
#MmSizePolicy.setHorizontalStretch(0)
#MmSizePolicy.setVerticalStretch(0)
#MmSizePolicy.setHeightForWidth(self.MediaManagerDock.sizePolicy().hasHeightForWidth())
#self.MediaManagerDock.setSizePolicy(MmSizePolicy)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(u':/system/system_mediamanager.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.MediaManagerDock.setWindowIcon(icon)
self.MediaManagerDock.setFloating(False)
self.MediaManagerDock.setObjectName(u'MediaManagerDock')
self.MediaManagerDock.setMinimumWidth(250)
self.MediaManagerDock.setMinimumWidth(300)
self.MediaManagerContents = QtGui.QWidget()
#sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
#sizePolicy.setHorizontalStretch(0)
#sizePolicy.setVerticalStretch(0)
#sizePolicy.setHeightForWidth(self.MediaManagerContents.sizePolicy().hasHeightForWidth())
#self.MediaManagerContents.setSizePolicy(sizePolicy)
self.MediaManagerContents.setObjectName(u'MediaManagerContents')
self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents)
self.MediaManagerLayout.setContentsMargins(0, 2, 0, 0)
self.MediaManagerLayout.setObjectName(u'MediaManagerLayout')
self.MediaToolBox = QtGui.QToolBox(self.MediaManagerContents)
self.MediaToolBox.setObjectName(u'MediaToolBox')
self.MediaManagerLayout.addWidget(self.MediaToolBox)
self.MediaManagerDock.setWidget(self.MediaManagerContents)
self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock)
#Sevice Manager Defined
self.mainWindow.addDockWidget(
QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock)
# Create the service manager
self.ServiceManagerDock = QtGui.QDockWidget(self.mainWindow)
ServiceManagerIcon = QtGui.QIcon()
ServiceManagerIcon.addPixmap(QtGui.QPixmap(u':/system/system_servicemanager.png'),
ServiceManagerIcon.addPixmap(
QtGui.QPixmap(u':/system/system_servicemanager.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.ServiceManagerDock.setWindowIcon(ServiceManagerIcon)
self.ServiceManagerDock.setFeatures(QtGui.QDockWidget.AllDockWidgetFeatures)
self.ServiceManagerDock.setFeatures(
QtGui.QDockWidget.AllDockWidgetFeatures)
self.ServiceManagerDock.setObjectName(u'ServiceManagerDock')
self.ServiceManagerDock.setMinimumWidth(300)
self.ServiceManagerContents = ServiceManager(self)
self.ServiceManagerDock.setWidget(self.ServiceManagerContents)
self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock)
#Theme Manager Defined
self.mainWindow.addDockWidget(
QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock)
# Create the theme manager
self.ThemeManagerDock = QtGui.QDockWidget(self.mainWindow)
ThemeManagerIcon = QtGui.QIcon()
ThemeManagerIcon.addPixmap(QtGui.QPixmap(u':/system/system_thememanager.png'),
ThemeManagerIcon.addPixmap(
QtGui.QPixmap(u':/system/system_thememanager.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.ThemeManagerDock.setWindowIcon(ThemeManagerIcon)
self.ThemeManagerDock.setFloating(False)
self.ThemeManagerDock.setObjectName(u'ThemeManagerDock')
self.ThemeManagerContents = ThemeManager(self)
self.ThemeManagerDock.setWidget(self.ThemeManagerContents)
self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ThemeManagerDock)
#Menu Items define
self.mainWindow.addDockWidget(
QtCore.Qt.DockWidgetArea(2), self.ThemeManagerDock)
# Create the menu items
self.FileNewItem = QtGui.QAction(self.mainWindow)
self.FileNewItem.setIcon(
self.ServiceManagerContents.Toolbar.getIconFromTitle(u'New Service'))
@ -346,9 +334,10 @@ class MainWindow(object):
self.MenuBar.addAction(self.OptionsMenu.menuAction())
self.MenuBar.addAction(self.ToolsMenu.menuAction())
self.MenuBar.addAction(self.HelpMenu.menuAction())
# Initialise the translation
self.retranslateUi()
self.MediaToolBox.setCurrentIndex(0)
# Connect up some signals and slots
QtCore.QObject.connect(self.FileExitItem,
QtCore.SIGNAL(u'triggered()'), self.mainWindow.close)
QtCore.QObject.connect(self.ViewMediaManagerItem,
@ -373,9 +362,11 @@ class MainWindow(object):
QtCore.SIGNAL(u'triggered()'), self.onOptionsSettingsItemClicked)
QtCore.QMetaObject.connectSlotsByName(self.mainWindow)
def retranslateUi(self):
self.mainWindow.setWindowTitle(translate(u'mainWindow', u'openlp.org 2.0'))
"""
Set up the translation system
"""
self.mainWindow.setWindowTitle(translate(u'mainWindow', u'OpenLP 2.0'))
self.FileMenu.setTitle(translate(u'mainWindow', u'&File'))
self.FileImportMenu.setTitle(translate(u'mainWindow', u'&Import'))
self.FileExportMenu.setTitle(translate(u'mainWindow', u'&Export'))
@ -385,27 +376,35 @@ class MainWindow(object):
self.OptionsLanguageMenu.setTitle(translate(u'mainWindow', u'&Language'))
self.ToolsMenu.setTitle(translate(u'mainWindow', u'&Tools'))
self.HelpMenu.setTitle(translate(u'mainWindow', u'&Help'))
self.MediaManagerDock.setWindowTitle(translate(u'mainWindow', u'Media Manager'))
self.ServiceManagerDock.setWindowTitle(translate(u'mainWindow', u'Service Manager'))
self.ThemeManagerDock.setWindowTitle(translate(u'mainWindow', u'Theme Manager'))
self.MediaManagerDock.setWindowTitle(
translate(u'mainWindow', u'Media Manager'))
self.ServiceManagerDock.setWindowTitle(
translate(u'mainWindow', u'Service Manager'))
self.ThemeManagerDock.setWindowTitle(
translate(u'mainWindow', u'Theme Manager'))
self.FileNewItem.setText(translate(u'mainWindow', u'&New'))
self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service'))
self.FileNewItem.setStatusTip(translate(u'mainWindow', u'Create a new Service'))
self.FileNewItem.setStatusTip(
translate(u'mainWindow', u'Create a new Service'))
self.FileNewItem.setShortcut(translate(u'mainWindow', u'Ctrl+N'))
self.FileOpenItem.setText(translate(u'mainWindow', u'&Open'))
self.FileOpenItem.setToolTip(translate(u'mainWindow', u'Open Service'))
self.FileOpenItem.setStatusTip(translate(u'mainWindow', u'Open an existing service'))
self.FileOpenItem.setStatusTip(
translate(u'mainWindow', u'Open an existing service'))
self.FileOpenItem.setShortcut(translate(u'mainWindow', u'Ctrl+O'))
self.FileSaveItem.setText(translate(u'mainWindow', u'&Save'))
self.FileSaveItem.setToolTip(translate(u'mainWindow', u'Save Service'))
self.FileSaveItem.setStatusTip(translate(u'mainWindow', u'Save the current service to disk'))
self.FileSaveItem.setStatusTip(
translate(u'mainWindow', u'Save the current service to disk'))
self.FileSaveItem.setShortcut(translate(u'mainWindow', u'Ctrl+S'))
self.FileSaveAsItem.setText(translate(u'mainWindow', u'Save &As...'))
self.FileSaveAsItem.setToolTip(translate(u'mainWindow', u'Save Service As'))
self.FileSaveAsItem.setStatusTip(translate(u'mainWindow', u'Save the current service under a new name'))
self.FileSaveAsItem.setToolTip(
translate(u'mainWindow', u'Save Service As'))
self.FileSaveAsItem.setStatusTip(translate(u'mainWindow',
u'Save the current service under a new name'))
self.FileSaveAsItem.setShortcut(translate(u'mainWindow', u'F12'))
self.FileExitItem.setText(translate(u'mainWindow', u'E&xit'))
self.FileExitItem.setStatusTip(translate(u'mainWindow', u'Quit OpenLP 2.0'))
self.FileExitItem.setStatusTip(translate(u'mainWindow', u'Quit OpenLP'))
self.FileExitItem.setShortcut(translate(u'mainWindow', u'Alt+F4'))
self.ImportThemeItem.setText(translate(u'mainWindow', u'&Theme'))
self.ImportLanguageItem.setText(translate(u'mainWindow', u'&Language'))
@ -413,46 +412,83 @@ class MainWindow(object):
self.ExportLanguageItem.setText(translate(u'mainWindow', u'&Language'))
self.actionLook_Feel.setText(translate(u'mainWindow', u'Look && &Feel'))
self.OptionsSettingsItem.setText(translate(u'mainWindow', u'&Settings'))
self.ViewMediaManagerItem.setText(translate(u'mainWindow', u'&Media Manager'))
self.ViewMediaManagerItem.setToolTip(translate(u'mainWindow', u'Toggle Media Manager'))
self.ViewMediaManagerItem.setStatusTip(translate(u'mainWindow', u'Toggle the visibility of the Media Manager'))
self.ViewMediaManagerItem.setText(
translate(u'mainWindow', u'&Media Manager'))
self.ViewMediaManagerItem.setToolTip(
translate(u'mainWindow', u'Toggle Media Manager'))
self.ViewMediaManagerItem.setStatusTip(translate(u'mainWindow',
u'Toggle the visibility of the Media Manager'))
self.ViewMediaManagerItem.setShortcut(translate(u'mainWindow', u'F8'))
self.ViewThemeManagerItem.setText(translate(u'mainWindow', u'&Theme Manager'))
self.ViewThemeManagerItem.setToolTip(translate(u'mainWindow', u'Toggle Theme Manager'))
self.ViewThemeManagerItem.setStatusTip(translate(u'mainWindow', u'Toggle the visibility of the Theme Manager'))
self.ViewThemeManagerItem.setText(
translate(u'mainWindow', u'&Theme Manager'))
self.ViewThemeManagerItem.setToolTip(
translate(u'mainWindow', u'Toggle Theme Manager'))
self.ViewThemeManagerItem.setStatusTip(translate(u'mainWindow',
u'Toggle the visibility of the Theme Manager'))
self.ViewThemeManagerItem.setShortcut(translate(u'mainWindow', u'F10'))
self.ViewServiceManagerItem.setText(translate(u'mainWindow', u'&Service Manager'))
self.ViewServiceManagerItem.setToolTip(translate(u'mainWindow', u'Toggle Service Manager'))
self.ViewServiceManagerItem.setStatusTip(translate(u'mainWindow', u'Toggle the visibility of the Service Manager'))
self.ViewServiceManagerItem.setText(
translate(u'mainWindow', u'&Service Manager'))
self.ViewServiceManagerItem.setToolTip(
translate(u'mainWindow', u'Toggle Service Manager'))
self.ViewServiceManagerItem.setStatusTip(translate(u'mainWindow',
u'Toggle the visibility of the Service Manager'))
self.ViewServiceManagerItem.setShortcut(translate(u'mainWindow', u'F9'))
self.ToolsAlertItem.setText(translate(u'mainWindow', u'&Alert'))
self.ToolsAlertItem.setStatusTip(translate(u'mainWindow', u'Show an alert message'))
self.ToolsAlertItem.setStatusTip(
translate(u'mainWindow', u'Show an alert message'))
self.ToolsAlertItem.setShortcut(translate(u'mainWindow', u'F7'))
self.HelpDocumentationItem.setText(translate(u'mainWindow', u'&User Guide'))
self.HelpDocumentationItem.setText(
translate(u'mainWindow', u'&User Guide'))
self.HelpAboutItem.setText(translate(u'mainWindow', u'&About'))
self.HelpAboutItem.setStatusTip(translate(u'mainWindow', u'More information about OpenLP'))
self.HelpAboutItem.setStatusTip(
translate(u'mainWindow', u'More information about OpenLP'))
self.HelpAboutItem.setShortcut(translate(u'mainWindow', u'Ctrl+F1'))
self.HelpOnlineHelpItem.setText(translate(u'mainWindow', u'&Online Help'))
self.HelpOnlineHelpItem.setText(
translate(u'mainWindow', u'&Online Help'))
self.HelpWebSiteItem.setText(translate(u'mainWindow', u'&Web Site'))
self.LanguageTranslateItem.setText(translate(u'mainWindow', u'&Translate'))
self.LanguageTranslateItem.setStatusTip(translate(u'mainWindow', u'Translate the interface to your language'))
self.LanguageTranslateItem.setText(
translate(u'mainWindow', u'&Translate'))
self.LanguageTranslateItem.setStatusTip(translate(u'mainWindow',
u'Translate the interface to your language'))
self.LanguageEnglishItem.setText(translate(u'mainWindow', u'English'))
self.LanguageEnglishItem.setStatusTip(translate(u'mainWindow', u'Set the interface language to English'))
self.LanguageEnglishItem.setStatusTip(translate(u'mainWindow',
u'Set the interface language to English'))
self.ToolsAddToolItem.setText(translate(u'mainWindow', u'&Add Tool...'))
self.ToolsAddToolItem.setStatusTip(translate(u'mainWindow', u'Add an application to the list of tools'))
self.action_Preview_Panel.setText(translate(u'mainWindow', u'&Preview Pane'))
self.ToolsAddToolItem.setStatusTip(translate(u'mainWindow',
u'Add an application to the list of tools'))
self.action_Preview_Panel.setText(
translate(u'mainWindow', u'&Preview Pane'))
self.ModeLiveItem.setText(translate(u'mainWindow', u'&Live'))
def show(self):
"""
Show the main form, as well as the display form
"""
self.mainWindow.showMaximized()
self.mainDisplay.setup(self.settingsForm.GeneralTab.MonitorNumber)
self.mainDisplay.show()
def onHelpAboutItemClicked(self):
"""
Show the About form
"""
self.aboutForm.exec_()
def onToolsAlertItemClicked(self):
"""
Show the Alert form
"""
self.alertForm.exec_()
def onOptionsSettingsItemClicked(self):
"""
Show the Settings dialog
"""
self.settingsForm.exec_()
def onCloseEvent(self, event):
"""
Hook to close the main window and display windows on exit
"""
self.mainDisplay.close()
event.accept()

View File

@ -132,7 +132,7 @@ class ServiceManager(QtGui.QWidget):
def addServiceItem(self, item):
self.serviceItems.append({u'data': item, u'order': len(self.serviceItems)+1})
treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
treewidgetitem.setText(0,item.title + u':' + item.shortname)
treewidgetitem.setText(0,item.title) # + u':' + item.shortname)
treewidgetitem.setIcon(0,item.iconic_representation)
treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(len(self.serviceItems)))
treewidgetitem.setExpanded(True)

View File

@ -31,13 +31,13 @@ class SlideData(QtCore.QAbstractListModel):
Root contains a list of ThemeItems
"""
global log
log=logging.getLogger(u'SlideData')
log = logging.getLogger(u'SlideData')
def __init__(self):
QtCore.QAbstractListModel.__init__(self)
self.items = []
self.rowheight = 50
self.maximagewidth = self.rowheight * 16/9.0;
self.maximagewidth = self.rowheight * 16 / 9.0;
log.info(u'Starting')
def clear(self):
@ -50,16 +50,17 @@ class SlideData(QtCore.QAbstractListModel):
return len(self.items)
def insertRow(self, row, frame, framenumber):
self.beginInsertRows(QtCore.QModelIndex(),row,row)
self.beginInsertRows(QtCore.QModelIndex(), row, row)
log.info(u'insert row %d' % row)
# create a preview image
frame1 = frame.scaled(QtCore.QSize(300,225), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
self.items.insert(row,(frame1, framenumber))
frame1 = frame.scaled(QtCore.QSize(300, 225), QtCore.Qt.KeepAspectRatio,
QtCore.Qt.SmoothTransformation)
self.items.insert(row, (frame1, framenumber))
log.info(u'Items: %s' % self.items)
self.endInsertRows()
def removeRow(self, row):
self.beginRemoveRows(QtCore.QModelIndex(), row,row)
self.beginRemoveRows(QtCore.QModelIndex(), row, row)
self.items.pop(row)
self.endRemoveRows()
@ -67,21 +68,23 @@ class SlideData(QtCore.QAbstractListModel):
self.insertRow(len(self.items), frame, framenumber)
def data(self, index, role):
row=index.row()
if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
row = index.row()
if row > len(self.items):
# if the last row is selected and deleted, we then get called with
# an empty row!
return QtCore.QVariant()
if role == QtCore.Qt.DecorationRole:
retval= self.items[row][0]
retval = self.items[row][0]
else:
retval= QtCore.QVariant()
retval = QtCore.QVariant()
if type(retval) is not type(QtCore.QVariant):
return QtCore.QVariant(retval)
else:
return retval
def __iter__(self):
for i in self.items:
yield i
for item in self.items:
yield item
def getValue(self, index):
row = index.row()
@ -97,29 +100,38 @@ class SlideData(QtCore.QAbstractListModel):
class SlideController(QtGui.QWidget):
"""
SlideController is THE slide controller widget. This widget is what the user
uses to control the displaying of verses/slides/etc on the screen.
"""
global log
log = logging.getLogger(u'SlideController')
def __init__(self, control_splitter, parent, isLive):
def __init__(self, controlSplitter, parent, isLive=False):
"""
Set up the Slide Controller.
"""
QtGui.QWidget.__init__(self, parent.mainWindow)
self.isLive = isLive
self.parent = parent
self.Panel = QtGui.QWidget(control_splitter)
self.Panel = QtGui.QWidget(controlSplitter)
self.Splitter = QtGui.QSplitter(self.Panel)
self.Splitter.setOrientation(QtCore.Qt.Vertical)
# Layout for holding panel
self.PanelLayout = QtGui.QVBoxLayout(self.Panel)
self.PanelLayout.addWidget(self.Splitter)
self.PanelLayout.setSpacing(0)
self.PanelLayout.setMargin(0)
# Actual controller section
self.Controller = QtGui.QWidget(self.Splitter)
self.Controller.setGeometry(QtCore.QRect(0, 0, 800, 536))
self.Controller.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum))
self.Controller.setSizePolicy(
QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,
QtGui.QSizePolicy.Maximum))
self.ControllerLayout = QtGui.QVBoxLayout(self.Controller)
self.ControllerLayout.setSpacing(0)
self.ControllerLayout.setMargin(0)
# Controller list view
self.PreviewListView = QtGui.QListView(self.Controller)
self.PreviewListData = SlideData()
self.PreviewListView.isLive = self.isLive
@ -128,35 +140,43 @@ class SlideController(QtGui.QWidget):
self.PreviewListView.setWrapping(False)
self.PreviewListView.setModel(self.PreviewListData)
#self.PreviewListView.setSelectionRectVisible(True)
self.PreviewListView.setSpacing(0)
self.PreviewListView.setObjectName("PreviewListView")
self.PreviewListView.setObjectName(u'PreviewListView')
self.ControllerLayout.addWidget(self.PreviewListView)
# Controller toolbar
self.Toolbar = OpenLPToolbar(self.Controller)
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
QtGui.QSizePolicy.Fixed)
sizeToolbarPolicy.setHorizontalStretch(0)
sizeToolbarPolicy.setVerticalStretch(0)
sizeToolbarPolicy.setHeightForWidth(self.Toolbar.sizePolicy().hasHeightForWidth())
sizeToolbarPolicy.setHeightForWidth(
self.Toolbar.sizePolicy().hasHeightForWidth())
if self.isLive:
self.Toolbar.addToolbarButton(u'First Slide', u':/slides/slide_first.png',
translate(u'SlideController', u'Move to first'), self.onSlideSelectedFirst)
self.Toolbar.addToolbarButton(u'Last Slide', u':/slides/slide_previous.png',
translate(u'SlideController', u'Move to previous'), self.onSlideSelectedPrevious)
self.Toolbar.addToolbarButton(u'First Slide', u':/slides/slide_next.png',
translate(u'SlideController', u'Move to next'), self.onSlideSelectedNext)
self.Toolbar.addToolbarButton(u'First Slide',
u':/slides/slide_first.png',
translate(u'SlideController', u'Move to first'),
self.onSlideSelectedFirst)
self.Toolbar.addToolbarButton(u'Last Slide',
u':/slides/slide_previous.png',
translate(u'SlideController', u'Move to previous'),
self.onSlideSelectedPrevious)
self.Toolbar.addToolbarButton(u'First Slide',
u':/slides/slide_next.png',
translate(u'SlideController', u'Move to next'),
self.onSlideSelectedNext)
if self.isLive:
self.Toolbar.addToolbarButton(u'Last Slide', u':/slides/slide_last.png',
translate(u'SlideController', u'Move to last'), self.onSlideSelectedLast)
self.Toolbar.addToolbarButton(u'Last Slide',
u':/slides/slide_last.png',
translate(u'SlideController', u'Move to last'),
self.onSlideSelectedLast)
self.Toolbar.addSeparator()
self.Toolbar.addToolbarButton(u'Close Screen', u':/slides/slide_close.png',
translate(u'SlideController', u'Close Screen'), self.onBlankScreen)
self.Toolbar.addToolbarButton(u'Close Screen',
u':/slides/slide_close.png',
translate(u'SlideController', u'Close Screen'),
self.onBlankScreen)
self.Toolbar.setSizePolicy(sizeToolbarPolicy)
self.ControllerLayout.addWidget(self.Toolbar)
# Screen preview area
self.PreviewFrame = QtGui.QFrame(self.Splitter)
self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 250, 190))
self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy(
@ -164,16 +184,17 @@ class SlideController(QtGui.QWidget):
self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel)
self.PreviewFrame.setFrameShadow(QtGui.QFrame.Sunken)
self.PreviewFrame.setObjectName(u'PreviewFrame')
self.grid = QtGui.QGridLayout(self.PreviewFrame)
self.grid.setMargin(8)
self.grid.setObjectName(u'grid')
# Actual preview screen
self.SlidePreview = QtGui.QLabel(self.PreviewFrame)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.SlidePreview.sizePolicy().hasHeightForWidth())
sizePolicy.setHeightForWidth(
self.SlidePreview.sizePolicy().hasHeightForWidth())
self.SlidePreview.setSizePolicy(sizePolicy)
self.SlidePreview.setMinimumSize(QtCore.QSize(250, 190))
self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
@ -182,19 +203,26 @@ class SlideController(QtGui.QWidget):
self.SlidePreview.setScaledContents(True)
self.SlidePreview.setObjectName(u'SlidePreview')
self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1)
# Some events
QtCore.QObject.connect(self.PreviewListView,
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
QtCore.QObject.connect(self.PreviewListView,
QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
def onSlideSelectedFirst(self):
"""
Go to the first slide.
"""
row = self.PreviewListData.createIndex(0, 0)
if row.isValid():
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
self.PreviewListView.selectionModel().setCurrentIndex(row,
QtGui.QItemSelectionModel.SelectCurrent)
self.onSlideSelected(row)
def onSlideSelectedNext(self):
"""
Go to the next slide.
"""
indexes = self.PreviewListView.selectedIndexes()
rowNumber = 0
for index in indexes:
@ -202,12 +230,16 @@ class SlideController(QtGui.QWidget):
rowNumber = 0
else:
rowNumber = index.row() + 1
row = self.PreviewListData.createIndex(rowNumber , 0)
row = self.PreviewListData.createIndex(rowNumber, 0)
if row.isValid():
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
self.PreviewListView.selectionModel().setCurrentIndex(row,
QtGui.QItemSelectionModel.SelectCurrent)
self.onSlideSelected(row)
def onSlideSelectedPrevious(self):
"""
Go to the previous slide.
"""
indexes = self.PreviewListView.selectedIndexes()
rowNumber = 0
for index in indexes:
@ -215,25 +247,40 @@ class SlideController(QtGui.QWidget):
rowNumber = self.PreviewListData.rowCount() - 1
else:
rowNumber = index.row() - 1
row = self.PreviewListData.createIndex(rowNumber , 0)
row = self.PreviewListData.createIndex(rowNumber, 0)
if row.isValid():
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
self.PreviewListView.selectionModel().setCurrentIndex(row,
QtGui.QItemSelectionModel.SelectCurrent)
self.onSlideSelected(row)
def onSlideSelectedLast(self):
row = self.PreviewListData.createIndex(self.PreviewListData.rowCount() - 1 , 0)
"""
Go to the last slide.
"""
row = self.PreviewListData.createIndex(
self.PreviewListData.rowCount() - 1, 0)
if row.isValid():
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
self.PreviewListView.selectionModel().setCurrentIndex(row,
QtGui.QItemSelectionModel.SelectCurrent)
self.onSlideSelected(row)
def onBlankScreen(self):
"""
Blank the screen.
"""
self.mainDisplay.blankDisplay()
def onSlideSelected(self, index):
"""
Generate the preview when you click on a slide.
"""
frame = self.PreviewListData.getValue(index)
self.previewFrame(frame)
def previewFrame(self, frame):
"""
Generates a preview of the current slide.
"""
self.SlidePreview.setPixmap(frame[0])
if self.isLive:
no = frame[1]
@ -241,6 +288,9 @@ class SlideController(QtGui.QWidget):
self.parent.mainDisplay.frameView(LiveFrame)
def addServiceItem(self, serviceitem):
"""
Loads a ServiceItem.
"""
log.debug(u'addServiceItem')
self.serviceitem = serviceitem
self.serviceitem.render()
@ -249,15 +299,19 @@ class SlideController(QtGui.QWidget):
for frame in self.serviceitem.frames:
self.PreviewListData.addRow(frame[u'image'], framenumber)
framenumber += 1
row = self.PreviewListData.createIndex(0, 0)
if row.isValid():
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
self.PreviewListView.selectionModel().setCurrentIndex(row,
QtGui.QItemSelectionModel.SelectCurrent)
self.onSlideSelected(row)
def addServiceManagerItem(self, serviceitem, slideno):
"""
Loads a ServiceManagerItem.
"""
self.addServiceItem(serviceitem)
row = self.PreviewListData.createIndex(slideno, 0)
if row.isValid():
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
self.PreviewListView.selectionModel().setCurrentIndex(row,
QtGui.QItemSelectionModel.SelectCurrent)
self.onSlideSelected(row)

View File

@ -119,7 +119,7 @@ class PresentationMediaItem(MediaManagerItem):
def onPresentationNewClick(self):
files = QtGui.QFileDialog.getOpenFileNames(None,
translate('PresentationsMediaItem', u'Select presentations(s)'),
self.parent.config.get_last_dir(), u'Presentations (*.ppt *.pps *.odi)')
self.parent.config.get_last_dir(), u'Presentations (*.ppt *.pps *.odp)')
if len(files) > 0:
self.loadPresentationList(files)
dir, filename = os.path.split(str(files[0]))

View File

@ -106,7 +106,7 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
An Author has been selected display it
If the author is attached to a Song prevent delete
"""
print index
self.currentRow = index.row()
id = int(self.AuthorListData.getId(index))
self.author = self.songmanager.get_author(id)
@ -122,7 +122,8 @@ class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
self._validate_form()
def _validate_form(self):
if len(self.DisplayEdit.displayText()) == 0: # We need at lease a display name
# We need at lease a display name
if len(self.DisplayEdit.displayText()) == 0:
self.AddUpdateButton.setEnabled(False)
else:
self.AddUpdateButton.setEnabled(True)

View File

@ -8,6 +8,7 @@
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
from openlp.plugins.songs.lib import TextListData
class Ui_SongBookDialog(object):
def setupUi(self, SongBookDialog):
@ -17,10 +18,17 @@ class Ui_SongBookDialog(object):
self.DialogLayout.setSpacing(8)
self.DialogLayout.setMargin(8)
self.DialogLayout.setObjectName("DialogLayout")
self.BookSongListView = QtGui.QTableWidget(SongBookDialog)
self.BookSongListView.setObjectName("BookSongListView")
self.BookSongListView.setColumnCount(0)
self.BookSongListView.setRowCount(0)
# self.BookSongListView = QtGui.QTableWidget(SongBookDialog)
# self.BookSongListView.setObjectName("BookSongListView")
# self.BookSongListView.setColumnCount(0)
# self.BookSongListView.setRowCount(0)
self.BookSongListView = QtGui.QListView()
self.BookSongListView.setAlternatingRowColors(True)
self.BookSongListData = TextListData()
self.BookSongListView.setModel(self.BookSongListData)
self.DialogLayout.addWidget(self.BookSongListView)
self.DialogLayout.addWidget(self.BookSongListView)
self.SongBookGroup = QtGui.QGroupBox(SongBookDialog)
self.SongBookGroup.setMinimumSize(QtCore.QSize(0, 200))

View File

@ -33,27 +33,91 @@ class SongBookForm(QDialog, Ui_SongBookDialog):
QDialog.__init__(self, parent)
self.setupUi(self)
self.songmanager = songmanager
self.currentRow = 0
self.songbook = None
QtCore.QObject.connect(self.DeleteButton,
QtCore.SIGNAL('pressed()'), self.onDeleteButtonClick)
QtCore.QObject.connect(self.ClearButton,
QtCore.SIGNAL('pressed()'), self.onClearButtonClick)
QtCore.QObject.connect(self.AddUpdateButton,
QtCore.SIGNAL('pressed()'), self.onAddUpdateButtonClick)
QtCore.QObject.connect(self.DisplayEdit,
QtCore.SIGNAL('pressed()'), self.onDisplayEditLostFocus)
QtCore.QObject.connect(self.SongBookListView,
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSongBookListViewItemClicked)
def load_form(self):
A = 1
"""
Refresh the screen and rest fields
"""
self.SongBookListData.resetStore()
self.onClearButtonClick() # tidy up screen
SongBooks = self.songmanager.get_SongBooks()
for SongBook in SongBooks:
self.SongBookListData.addRow(SongBook.id,SongBook.display_name)
row_count = self.SongBookListData.rowCount(None)
if self.currentRow > row_count:
# in case we have delete the last row of the table
self.currentRow = row_count
row = self.SongBookListData.createIndex(self.currentRow, 0)
if row.isValid():
self.SongBookListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
self._validate_form()
@pyqtSignature("QTableWidgetItem*")
def on_BookSongListView_itemClicked(self, item):
def onDeleteButtonClick(self):
"""
Slot documentation goes here.
Delete the SongBook is the SongBook is not attached to any songs
"""
print "bslv ic " + str(item)
self.songmanager.delete_SongBook(self.SongBook.id)
self.onClearButtonClick()
self.load_form()
@pyqtSignature("")
def on_DeleteButton_clicked(self):
"""
Slot documentation goes here.
"""
print "db c "
def onDisplayEditLostFocus(self):
self._validate_form()
@pyqtSignature("")
def on_AddUpdateButton_clicked(self):
def onAddUpdateButtonClick(self):
"""
Slot documentation goes here.
Sent New or update details to the database
"""
print "au c "
if self.SongBook == None:
self.SongBook = SongBook()
self.SongBook.display_name = unicode(self.DisplayEdit.displayText())
self.songmanager.save_SongBook(self.SongBook)
self.onClearButtonClick()
self.load_form()
self._validate_form()
def onClearButtonClick(self):
"""
Tidy up screen if clear button pressed
"""
self.DisplayEdit.setText(u'')
self.MessageLabel.setText(u'')
self.DeleteButton.setEnabled(False)
self.SongBook = None
self._validate_form()
def onSongBookListViewItemClicked(self, index):
"""
An SongBook has been selected display it
If the SongBook is attached to a Song prevent delete
"""
self.currentRow = index.row()
id = int(self.SongBookListData.getId(index))
self.SongBook = self.songmanager.get_SongBook(id)
self.DisplayEdit.setText(self.SongBook.display_name)
if len(self.SongBook.songs) > 0:
self.MessageLabel.setText("SongBook in use 'Delete' is disabled")
self.DeleteButton.setEnabled(False)
else:
self.MessageLabel.setText("SongBook is not used")
self.DeleteButton.setEnabled(True)
self._validate_form()
def _validate_form(self):
if len(self.DisplayEdit.displayText()) == 0: # We need at lease a display name
self.AddUpdateButton.setEnabled(False)
else:
self.AddUpdateButton.setEnabled(True)

View File

@ -8,6 +8,7 @@
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
from openlp.plugins.songs.lib import TextListData
class Ui_TopicsDialog(object):
def setupUi(self, TopicsDialog):
@ -49,11 +50,18 @@ class Ui_TopicsDialog(object):
self.MessageLabel = QtGui.QLabel(TopicsDialog)
self.MessageLabel.setObjectName("MessageLabel")
self.gridLayout_2.addWidget(self.MessageLabel, 3, 0, 1, 1)
self.TopicsListView = QtGui.QTableWidget(TopicsDialog)
self.TopicsListView.setObjectName("TopicsListView")
self.TopicsListView.setColumnCount(0)
self.TopicsListView.setRowCount(0)
# self.TopicsListView = QtGui.QTableWidget(TopicsDialog)
# self.TopicsListView.setObjectName("TopicsListView")
# self.TopicsListView.setColumnCount(0)
# self.TopicsListView.setRowCount(0)
self.TopicsListView = QtGui.QListView()
self.TopicsListView.setAlternatingRowColors(True)
self.TopicsListData = TextListData()
self.TopicsListView.setModel(self.TopicsListData)
self.gridLayout_2.addWidget(self.TopicsListView, 0, 0, 1, 1)
self.ButtonBox = QtGui.QDialogButtonBox(TopicsDialog)
self.ButtonBox.setOrientation(QtCore.Qt.Horizontal)
self.ButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok)

View File

@ -34,21 +34,91 @@ class TopicsForm(QDialog, Ui_TopicsDialog):
QDialog.__init__(self, parent)
self.setupUi(self)
self.songmanager = songmanager
#self.connect()
self.currentRow = 0
self.songbook = None
QtCore.QObject.connect(self.DeleteButton,
QtCore.SIGNAL('pressed()'), self.onDeleteButtonClick)
QtCore.QObject.connect(self.ClearButton,
QtCore.SIGNAL('pressed()'), self.onClearButtonClick)
QtCore.QObject.connect(self.AddUpdateButton,
QtCore.SIGNAL('pressed()'), self.onAddUpdateButtonClick)
QtCore.QObject.connect(self.DisplayEdit,
QtCore.SIGNAL('pressed()'), self.onDisplayEditLostFocus)
QtCore.QObject.connect(self.TopicListView,
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onTopicListViewItemClicked)
def load_form(self):
A = 1
"""
Refresh the screen and rest fields
"""
self.TopicListData.resetStore()
self.onClearButtonClick() # tidy up screen
Topics = self.songmanager.get_Topics()
for Topic in Topics:
self.TopicListData.addRow(Topic.id,Topic.display_name)
row_count = self.TopicListData.rowCount(None)
if self.currentRow > row_count:
# in case we have delete the last row of the table
self.currentRow = row_count
row = self.TopicListData.createIndex(self.currentRow, 0)
if row.isValid():
self.TopicListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
self._validate_form()
#@pyqtSignature("")
def onDeleteButtonClicked(self):
def onDeleteButtonClick(self):
"""
Slot documentation goes here.
Delete the Topic is the Topic is not attached to any songs
"""
print "db clicked"
self.songmanager.delete_Topic(self.Topic.id)
self.onClearButtonClick()
self.load_form()
#@pyqtSignature("")
def onAddUpdateButtonClicked(self):
def onDisplayEditLostFocus(self):
self._validate_form()
def onAddUpdateButtonClick(self):
"""
Slot documentation goes here.
Sent New or update details to the database
"""
print "au clicked"
if self.Topic == None:
self.Topic = Topic()
self.Topic.display_name = unicode(self.DisplayEdit.displayText())
self.songmanager.save_Topic(self.Topic)
self.onClearButtonClick()
self.load_form()
self._validate_form()
def onClearButtonClick(self):
"""
Tidy up screen if clear button pressed
"""
self.DisplayEdit.setText(u'')
self.MessageLabel.setText(u'')
self.DeleteButton.setEnabled(False)
self.Topic = None
self._validate_form()
def onTopicListViewItemClicked(self, index):
"""
An Topic has been selected display it
If the Topic is attached to a Song prevent delete
"""
self.currentRow = index.row()
id = int(self.TopicListData.getId(index))
self.Topic = self.songmanager.get_Topic(id)
self.DisplayEdit.setText(self.Topic.display_name)
if len(self.Topic.songs) > 0:
self.MessageLabel.setText("Topic in use 'Delete' is disabled")
self.DeleteButton.setEnabled(False)
else:
self.MessageLabel.setText("Topic is not used")
self.DeleteButton.setEnabled(True)
self._validate_form()
def _validate_form(self):
if len(self.DisplayEdit.displayText()) == 0: # We need at lease a display name
self.AddUpdateButton.setEnabled(False)
else:
self.AddUpdateButton.setEnabled(True)