openlp/openlp/core/ui/mainwindow.py

1035 lines
48 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
###############################################################################
# OpenLP - Open Source Lyrics Projection #
# --------------------------------------------------------------------------- #
2010-12-26 11:04:47 +00:00
# Copyright (c) 2008-2011 Raoul Snyman #
# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael #
2011-03-24 19:04:02 +00:00
# Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, Armin Köhler, #
# Andreas Preikschat, Mattias Põldaru, Christian Richter, Philip Ridout, #
# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund #
# --------------------------------------------------------------------------- #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the Free #
# Software Foundation; version 2 of the License. #
# #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
# more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
###############################################################################
import logging
import os
from tempfile import gettempdir
from PyQt4 import QtCore, QtGui
2011-03-28 18:12:46 +00:00
from openlp.core.lib import Renderer, build_icon, OpenLPDockWidget, \
2011-05-05 11:51:47 +00:00
PluginManager, Receiver, translate, ImageManager
2011-02-09 05:04:12 +00:00
from openlp.core.lib.ui import UiStrings, base_action, checkable_action, \
2011-03-31 18:53:50 +00:00
icon_action, shortcut_action
2010-04-23 18:30:53 +00:00
from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \
2010-10-07 21:27:26 +00:00
ThemeManager, SlideController, PluginForm, MediaDockManager, \
2011-02-20 15:35:52 +00:00
ShortcutListForm, DisplayTagForm
from openlp.core.utils import AppLocation, add_actions, LanguageManager, \
2011-04-29 07:40:19 +00:00
get_application_version
2011-04-09 16:11:02 +00:00
from openlp.core.utils.actions import ActionList, CategoryOrder
2010-02-27 15:31:23 +00:00
log = logging.getLogger(__name__)
2010-07-07 14:44:22 +00:00
MEDIA_MANAGER_STYLE = """
2010-07-22 19:55:09 +00:00
QToolBox {
padding-bottom: 2px;
}
QToolBox::tab {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
2010-07-22 20:01:03 +00:00
stop: 0 palette(button), stop: 0.5 palette(button),
stop: 1.0 palette(mid));
border: 1px groove palette(mid);
border-radius: 5px;
}
QToolBox::tab:selected {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
2010-07-22 20:01:03 +00:00
stop: 0 palette(light), stop: 0.5 palette(midlight),
stop: 1.0 palette(dark));
border: 1px groove palette(dark);
font-weight: bold;
}
"""
2010-02-02 20:05:21 +00:00
2009-08-09 17:58:37 +00:00
class Ui_MainWindow(object):
2011-01-21 19:09:56 +00:00
def setupUi(self, mainWindow):
"""
Set up the user interface
"""
2011-01-21 19:09:56 +00:00
mainWindow.setObjectName(u'MainWindow')
2011-04-22 06:30:07 +00:00
mainWindow.setWindowIcon(build_icon(u':/icon/openlp-logo-64x64.png'))
2011-01-21 19:09:56 +00:00
mainWindow.setDockNestingEnabled(True)
2010-12-26 14:44:07 +00:00
# Set up the main container, which contains all the other form widgets.
2011-01-21 19:09:56 +00:00
self.MainContent = QtGui.QWidget(mainWindow)
self.MainContent.setObjectName(u'MainContent')
2011-02-17 02:33:12 +00:00
self.mainContentLayout = QtGui.QHBoxLayout(self.MainContent)
self.mainContentLayout.setSpacing(0)
self.mainContentLayout.setMargin(0)
self.mainContentLayout.setObjectName(u'mainContentLayout')
2011-01-21 19:09:56 +00:00
mainWindow.setCentralWidget(self.MainContent)
2011-02-07 22:07:48 +00:00
self.controlSplitter = QtGui.QSplitter(self.MainContent)
self.controlSplitter.setOrientation(QtCore.Qt.Horizontal)
self.controlSplitter.setObjectName(u'controlSplitter')
2011-02-17 02:33:12 +00:00
self.mainContentLayout.addWidget(self.controlSplitter)
# Create slide controllers
2011-05-05 11:51:47 +00:00
self.previewController = SlideController(self)
self.liveController = SlideController(self, True)
2010-10-07 21:27:26 +00:00
previewVisible = QtCore.QSettings().value(
u'user interface/preview panel', QtCore.QVariant(True)).toBool()
2011-02-01 18:05:59 +00:00
self.previewController.panel.setVisible(previewVisible)
2010-10-07 21:27:26 +00:00
liveVisible = QtCore.QSettings().value(u'user interface/live panel',
QtCore.QVariant(True)).toBool()
2011-02-01 18:05:59 +00:00
self.liveController.panel.setVisible(liveVisible)
# Create menu
2011-01-21 19:09:56 +00:00
self.MenuBar = QtGui.QMenuBar(mainWindow)
self.MenuBar.setObjectName(u'MenuBar')
self.FileMenu = QtGui.QMenu(self.MenuBar)
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')
2010-07-03 20:39:29 +00:00
# View Menu
2011-02-07 22:07:48 +00:00
self.viewMenu = QtGui.QMenu(self.MenuBar)
self.viewMenu.setObjectName(u'viewMenu')
self.ViewModeMenu = QtGui.QMenu(self.viewMenu)
self.ViewModeMenu.setObjectName(u'ViewModeMenu')
2010-07-03 20:39:29 +00:00
# Tools Menu
self.ToolsMenu = QtGui.QMenu(self.MenuBar)
self.ToolsMenu.setObjectName(u'ToolsMenu')
2010-07-03 20:39:29 +00:00
# Settings Menu
self.SettingsMenu = QtGui.QMenu(self.MenuBar)
self.SettingsMenu.setObjectName(u'SettingsMenu')
self.SettingsLanguageMenu = QtGui.QMenu(self.SettingsMenu)
self.SettingsLanguageMenu.setObjectName(u'SettingsLanguageMenu')
# Help Menu
self.HelpMenu = QtGui.QMenu(self.MenuBar)
self.HelpMenu.setObjectName(u'HelpMenu')
2011-01-21 19:09:56 +00:00
mainWindow.setMenuBar(self.MenuBar)
2011-04-28 18:13:19 +00:00
self.statusBar = QtGui.QStatusBar(mainWindow)
self.statusBar.setObjectName(u'statusBar')
mainWindow.setStatusBar(self.statusBar)
self.loadProgressBar = QtGui.QProgressBar(self.statusBar)
self.loadProgressBar.setObjectName(u'loadProgressBar')
self.statusBar.addPermanentWidget(self.loadProgressBar)
2011-04-29 07:40:19 +00:00
self.loadProgressBar.hide()
2011-04-28 18:13:19 +00:00
self.loadProgressBar.setValue(0)
self.defaultThemeLabel = QtGui.QLabel(self.statusBar)
self.defaultThemeLabel.setObjectName(u'defaultThemeLabel')
self.statusBar.addPermanentWidget(self.defaultThemeLabel)
# Create the MediaManager
2011-02-07 22:07:48 +00:00
self.mediaManagerDock = OpenLPDockWidget(mainWindow,
u'mediaManagerDock', u':/system/system_mediamanager.png')
self.mediaManagerDock.setStyleSheet(MEDIA_MANAGER_STYLE)
# Create the media toolbox
2011-02-07 22:07:48 +00:00
self.MediaToolBox = QtGui.QToolBox(self.mediaManagerDock)
self.MediaToolBox.setObjectName(u'MediaToolBox')
2011-02-07 22:07:48 +00:00
self.mediaManagerDock.setWidget(self.MediaToolBox)
2011-01-21 19:09:56 +00:00
mainWindow.addDockWidget(QtCore.Qt.LeftDockWidgetArea,
2011-02-07 22:07:48 +00:00
self.mediaManagerDock)
# Create the service manager
2011-02-07 22:07:48 +00:00
self.serviceManagerDock = OpenLPDockWidget(mainWindow,
u'serviceManagerDock', u':/system/system_servicemanager.png')
2011-01-21 19:09:56 +00:00
self.ServiceManagerContents = ServiceManager(mainWindow,
2011-02-07 22:07:48 +00:00
self.serviceManagerDock)
self.serviceManagerDock.setWidget(self.ServiceManagerContents)
2011-01-21 19:09:56 +00:00
mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea,
2011-02-07 22:07:48 +00:00
self.serviceManagerDock)
# Create the theme manager
2011-02-07 22:07:48 +00:00
self.themeManagerDock = OpenLPDockWidget(mainWindow,
u'themeManagerDock', u':/system/system_thememanager.png')
2011-02-17 02:33:12 +00:00
self.themeManagerContents = ThemeManager(mainWindow,
2011-02-07 22:07:48 +00:00
self.themeManagerDock)
2011-02-17 02:33:12 +00:00
self.themeManagerContents.setObjectName(u'themeManagerContents')
self.themeManagerDock.setWidget(self.themeManagerContents)
2011-01-21 19:09:56 +00:00
mainWindow.addDockWidget(QtCore.Qt.RightDockWidgetArea,
2011-02-07 22:07:48 +00:00
self.themeManagerDock)
# Create the menu items
2011-04-09 16:11:02 +00:00
action_list = ActionList.get_instance()
action_list.add_category(UiStrings().File, CategoryOrder.standardMenu)
2011-03-31 18:53:50 +00:00
self.FileNewItem = shortcut_action(mainWindow, u'FileNewItem',
[QtGui.QKeySequence(u'Ctrl+N')],
self.ServiceManagerContents.onNewServiceClicked,
u':/general/general_new.png', category=UiStrings().File)
2011-03-31 18:53:50 +00:00
self.FileOpenItem = shortcut_action(mainWindow, u'FileOpenItem',
[QtGui.QKeySequence(u'Ctrl+O')],
self.ServiceManagerContents.onLoadServiceClicked,
u':/general/general_open.png', category=UiStrings().File)
2011-03-31 18:53:50 +00:00
self.FileSaveItem = shortcut_action(mainWindow, u'FileSaveItem',
[QtGui.QKeySequence(u'Ctrl+S')],
self.ServiceManagerContents.saveFile,
u':/general/general_save.png', category=UiStrings().File)
2011-03-31 18:53:50 +00:00
self.FileSaveAsItem = shortcut_action(mainWindow, u'FileSaveAsItem',
[QtGui.QKeySequence(u'Ctrl+Shift+S')],
self.ServiceManagerContents.saveFileAs, category=UiStrings().File)
2011-03-31 18:53:50 +00:00
self.printServiceOrderItem = shortcut_action(mainWindow,
u'printServiceItem', [QtGui.QKeySequence(u'Ctrl+P')],
2011-04-03 11:36:43 +00:00
self.ServiceManagerContents.printServiceOrder,
category=UiStrings().File)
2011-03-31 18:53:50 +00:00
self.FileExitItem = shortcut_action(mainWindow, u'FileExitItem',
[QtGui.QKeySequence(u'Alt+F4')], mainWindow.close,
u':/system/system_exit.png', category=UiStrings().File)
action_list.add_category(UiStrings().Import, CategoryOrder.standardMenu)
2011-03-29 16:44:36 +00:00
self.ImportThemeItem = base_action(
mainWindow, u'ImportThemeItem', UiStrings().Import)
2011-03-29 16:44:36 +00:00
self.ImportLanguageItem = base_action(
mainWindow, u'ImportLanguageItem')#, UiStrings().Import)
action_list.add_category(UiStrings().Export, CategoryOrder.standardMenu)
2011-03-29 16:44:36 +00:00
self.ExportThemeItem = base_action(
mainWindow, u'ExportThemeItem', UiStrings().Export)
2011-03-29 16:44:36 +00:00
self.ExportLanguageItem = base_action(
mainWindow, u'ExportLanguageItem')#, UiStrings().Export)
action_list.add_category(UiStrings().View, CategoryOrder.standardMenu)
2011-03-31 18:53:50 +00:00
self.ViewMediaManagerItem = shortcut_action(mainWindow,
u'ViewMediaManagerItem', [QtGui.QKeySequence(u'F8')],
self.toggleMediaManager, u':/system/system_mediamanager.png',
self.mediaManagerDock.isVisible(), UiStrings().View)
2011-03-31 18:53:50 +00:00
self.ViewThemeManagerItem = shortcut_action(mainWindow,
u'ViewThemeManagerItem', [QtGui.QKeySequence(u'F10')],
2011-03-31 18:53:50 +00:00
self.toggleThemeManager, u':/system/system_thememanager.png',
self.themeManagerDock.isVisible(), UiStrings().View)
2011-03-31 18:53:50 +00:00
self.ViewServiceManagerItem = shortcut_action(mainWindow,
u'ViewServiceManagerItem', [QtGui.QKeySequence(u'F9')],
2011-03-31 18:53:50 +00:00
self.toggleServiceManager, u':/system/system_servicemanager.png',
self.serviceManagerDock.isVisible(), UiStrings().View)
self.ViewPreviewPanel = shortcut_action(mainWindow,
u'ViewPreviewPanel', [QtGui.QKeySequence(u'F11')],
2011-04-03 11:36:43 +00:00
self.setPreviewPanelVisibility, checked=previewVisible,
category=UiStrings().View)
self.ViewLivePanel = shortcut_action(mainWindow, u'ViewLivePanel',
[QtGui.QKeySequence(u'F12')], self.setLivePanelVisibility,
checked=liveVisible, category=UiStrings().View)
action_list.add_category(UiStrings().ViewMode, CategoryOrder.standardMenu)
2011-03-29 16:44:36 +00:00
self.ModeDefaultItem = checkable_action(
mainWindow, u'ModeDefaultItem', category=UiStrings().ViewMode)
2011-03-29 16:44:36 +00:00
self.ModeSetupItem = checkable_action(
mainWindow, u'ModeLiveItem', category=UiStrings().ViewMode)
2011-03-29 16:44:36 +00:00
self.ModeLiveItem = checkable_action(
mainWindow, u'ModeLiveItem', True, UiStrings().ViewMode)
2011-01-21 19:09:56 +00:00
self.ModeGroup = QtGui.QActionGroup(mainWindow)
2010-07-06 20:05:48 +00:00
self.ModeGroup.addAction(self.ModeDefaultItem)
self.ModeGroup.addAction(self.ModeSetupItem)
self.ModeGroup.addAction(self.ModeLiveItem)
self.ModeDefaultItem.setChecked(True)
action_list.add_category(UiStrings().Tools, CategoryOrder.standardMenu)
2011-02-04 01:56:19 +00:00
self.ToolsAddToolItem = icon_action(mainWindow, u'ToolsAddToolItem',
u':/tools/tools_add.png', category=UiStrings().Tools)
2011-04-03 11:36:43 +00:00
self.ToolsOpenDataFolder = icon_action(mainWindow,
u'ToolsOpenDataFolder', u':/general/general_open.png',
category=UiStrings().Tools)
action_list.add_category(UiStrings().Settings, CategoryOrder.standardMenu)
self.settingsPluginListItem = shortcut_action(mainWindow,
u'settingsPluginListItem', [QtGui.QKeySequence(u'Alt+F7')],
self.onPluginItemClicked, u':/system/settings_plugin_list.png',
category=UiStrings().Settings)
2010-12-26 14:44:07 +00:00
# i18n Language Items
2011-02-04 01:56:19 +00:00
self.AutoLanguageItem = checkable_action(mainWindow,
2011-03-04 17:46:59 +00:00
u'AutoLanguageItem', LanguageManager.auto_language)
2011-01-21 19:09:56 +00:00
self.LanguageGroup = QtGui.QActionGroup(mainWindow)
self.LanguageGroup.setExclusive(True)
self.LanguageGroup.setObjectName(u'LanguageGroup')
add_actions(self.LanguageGroup, [self.AutoLanguageItem])
2010-10-07 21:27:26 +00:00
qmList = LanguageManager.get_qm_list()
savedLanguage = LanguageManager.get_language()
for key in sorted(qmList.keys()):
2011-03-04 17:46:59 +00:00
languageItem = checkable_action(
mainWindow, key, qmList[key] == savedLanguage)
2010-10-07 21:27:26 +00:00
add_actions(self.LanguageGroup, [languageItem])
2011-02-04 01:56:19 +00:00
self.SettingsShortcutsItem = icon_action(mainWindow,
2011-02-14 19:52:05 +00:00
u'SettingsShortcutsItem',
2011-04-03 11:36:43 +00:00
u':/system/system_configure_shortcuts.png',
category=UiStrings().Settings)
2011-02-20 15:35:52 +00:00
self.DisplayTagItem = icon_action(mainWindow,
2011-04-03 11:36:43 +00:00
u'DisplayTagItem', u':/system/tag_editor.png',
category=UiStrings().Settings)
2011-02-04 01:56:19 +00:00
self.SettingsConfigureItem = icon_action(mainWindow,
2011-03-29 16:44:36 +00:00
u'SettingsConfigureItem', u':/system/system_settings.png',
category=UiStrings().Settings)
action_list.add_category(UiStrings().Help, CategoryOrder.standardMenu)
2011-02-04 01:56:19 +00:00
self.HelpDocumentationItem = icon_action(mainWindow,
2011-03-29 16:44:36 +00:00
u'HelpDocumentationItem', u':/system/system_help_contents.png',
category=None)#UiStrings().Help)
2010-10-07 21:27:26 +00:00
self.HelpDocumentationItem.setEnabled(False)
self.HelpAboutItem = shortcut_action(mainWindow, u'HelpAboutItem',
[QtGui.QKeySequence(u'Ctrl+F1')], self.onHelpAboutItemClicked,
u':/system/system_about.png', category=UiStrings().Help)
2011-03-29 16:44:36 +00:00
self.HelpOnlineHelpItem = base_action(
mainWindow, u'HelpOnlineHelpItem', category=UiStrings().Help)
2011-03-29 16:44:36 +00:00
self.helpWebSiteItem = base_action(
mainWindow, u'helpWebSiteItem', category=UiStrings().Help)
2010-04-23 18:30:53 +00:00
add_actions(self.FileImportMenu,
(self.ImportThemeItem, self.ImportLanguageItem))
add_actions(self.FileExportMenu,
(self.ExportThemeItem, self.ExportLanguageItem))
self.FileMenuActions = (self.FileNewItem, self.FileOpenItem,
self.FileSaveItem, self.FileSaveAsItem, None,
2011-02-01 18:22:48 +00:00
self.printServiceOrderItem, None, self.FileImportMenu.menuAction(),
self.FileExportMenu.menuAction(), self.FileExitItem)
2010-07-06 20:05:48 +00:00
add_actions(self.ViewModeMenu, (self.ModeDefaultItem,
self.ModeSetupItem, self.ModeLiveItem))
2011-02-07 22:07:48 +00:00
add_actions(self.viewMenu, (self.ViewModeMenu.menuAction(),
2010-04-23 18:30:53 +00:00
None, self.ViewMediaManagerItem, self.ViewServiceManagerItem,
2010-07-06 20:05:48 +00:00
self.ViewThemeManagerItem, None, self.ViewPreviewPanel,
self.ViewLivePanel))
2010-12-26 14:44:07 +00:00
# i18n add Language Actions
2010-07-03 20:39:29 +00:00
add_actions(self.SettingsLanguageMenu, (self.AutoLanguageItem, None))
add_actions(self.SettingsLanguageMenu, self.LanguageGroup.actions())
2011-02-07 22:07:48 +00:00
add_actions(self.SettingsMenu, (self.settingsPluginListItem,
2010-07-03 20:39:29 +00:00
self.SettingsLanguageMenu.menuAction(), None,
2011-02-24 16:55:17 +00:00
self.DisplayTagItem, self.SettingsShortcutsItem,
2011-02-20 15:35:52 +00:00
self.SettingsConfigureItem))
add_actions(self.ToolsMenu, (self.ToolsAddToolItem, None))
2011-02-09 22:53:35 +00:00
add_actions(self.ToolsMenu, (self.ToolsOpenDataFolder, None))
add_actions(self.HelpMenu, (self.HelpDocumentationItem,
2011-02-17 02:33:12 +00:00
self.HelpOnlineHelpItem, None, self.helpWebSiteItem,
self.HelpAboutItem))
add_actions(self.MenuBar, (self.FileMenu.menuAction(),
2011-02-07 22:07:48 +00:00
self.viewMenu.menuAction(), self.ToolsMenu.menuAction(),
self.SettingsMenu.menuAction(), self.HelpMenu.menuAction()))
# Initialise the translation
2011-01-21 19:09:56 +00:00
self.retranslateUi(mainWindow)
self.MediaToolBox.setCurrentIndex(0)
# Connect up some signals and slots
2010-04-23 18:30:53 +00:00
QtCore.QObject.connect(self.FileMenu,
QtCore.SIGNAL(u'aboutToShow()'), self.updateFileMenu)
2011-01-21 19:09:56 +00:00
QtCore.QMetaObject.connectSlotsByName(mainWindow)
2011-03-15 20:53:36 +00:00
# Hide the entry, as it does not have any functionality yet.
self.ToolsAddToolItem.setVisible(False)
self.ImportLanguageItem.setVisible(False)
self.ExportLanguageItem.setVisible(False)
self.HelpDocumentationItem.setVisible(False)
2011-01-21 19:09:56 +00:00
def retranslateUi(self, mainWindow):
"""
Set up the translation system
"""
mainWindow.mainTitle = UiStrings().OLPV2
2011-01-21 19:09:56 +00:00
mainWindow.setWindowTitle(mainWindow.mainTitle)
2010-07-21 05:20:03 +00:00
self.FileMenu.setTitle(translate('OpenLP.MainWindow', '&File'))
self.FileImportMenu.setTitle(translate('OpenLP.MainWindow', '&Import'))
self.FileExportMenu.setTitle(translate('OpenLP.MainWindow', '&Export'))
2011-02-07 22:07:48 +00:00
self.viewMenu.setTitle(translate('OpenLP.MainWindow', '&View'))
2010-07-21 05:20:03 +00:00
self.ViewModeMenu.setTitle(translate('OpenLP.MainWindow', 'M&ode'))
self.ToolsMenu.setTitle(translate('OpenLP.MainWindow', '&Tools'))
self.SettingsMenu.setTitle(translate('OpenLP.MainWindow', '&Settings'))
self.SettingsLanguageMenu.setTitle(translate('OpenLP.MainWindow',
2010-07-03 20:39:29 +00:00
'&Language'))
2010-07-21 05:20:03 +00:00
self.HelpMenu.setTitle(translate('OpenLP.MainWindow', '&Help'))
2011-02-07 22:07:48 +00:00
self.mediaManagerDock.setWindowTitle(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'Media Manager'))
2011-02-07 22:07:48 +00:00
self.serviceManagerDock.setWindowTitle(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'Service Manager'))
2011-02-07 22:07:48 +00:00
self.themeManagerDock.setWindowTitle(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'Theme Manager'))
self.FileNewItem.setText(translate('OpenLP.MainWindow', '&New'))
self.FileNewItem.setToolTip(UiStrings().NewService)
self.FileNewItem.setStatusTip(UiStrings().CreateService)
2010-07-21 05:20:03 +00:00
self.FileOpenItem.setText(translate('OpenLP.MainWindow', '&Open'))
self.FileOpenItem.setToolTip(UiStrings().OpenService)
2010-05-25 16:16:43 +00:00
self.FileOpenItem.setStatusTip(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'Open an existing service.'))
self.FileSaveItem.setText(translate('OpenLP.MainWindow', '&Save'))
self.FileSaveItem.setToolTip(UiStrings().SaveService)
self.FileSaveItem.setStatusTip(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'Save the current service to disk.'))
self.FileSaveAsItem.setText(
translate('OpenLP.MainWindow', 'Save &As...'))
2010-05-25 16:16:43 +00:00
self.FileSaveAsItem.setToolTip(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'Save Service As'))
self.FileSaveAsItem.setStatusTip(translate('OpenLP.MainWindow',
2010-07-03 20:39:29 +00:00
'Save the current service under a new name.'))
self.printServiceOrderItem.setText(UiStrings().PrintServiceOrder)
2011-02-01 18:22:48 +00:00
self.printServiceOrderItem.setStatusTip(translate('OpenLP.MainWindow',
'Print the current Service Order.'))
2010-07-21 05:20:03 +00:00
self.FileExitItem.setText(
translate('OpenLP.MainWindow', 'E&xit'))
self.FileExitItem.setStatusTip(
translate('OpenLP.MainWindow', 'Quit OpenLP'))
self.ImportThemeItem.setText(
translate('OpenLP.MainWindow', '&Theme'))
self.ImportLanguageItem.setText(
translate('OpenLP.MainWindow', '&Language'))
self.ExportThemeItem.setText(
translate('OpenLP.MainWindow', '&Theme'))
self.ExportLanguageItem.setText(
translate('OpenLP.MainWindow', '&Language'))
2010-10-07 21:27:26 +00:00
self.SettingsShortcutsItem.setText(
translate('OpenLP.MainWindow', 'Configure &Shortcuts...'))
2011-02-20 15:35:52 +00:00
self.DisplayTagItem.setText(
translate('OpenLP.MainWindow', '&Configure Display Tags'))
2010-07-21 05:20:03 +00:00
self.SettingsConfigureItem.setText(
translate('OpenLP.MainWindow', '&Configure OpenLP...'))
2010-05-25 16:16:43 +00:00
self.ViewMediaManagerItem.setText(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', '&Media Manager'))
2010-04-28 14:17:42 +00:00
self.ViewMediaManagerItem.setToolTip(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'Toggle Media Manager'))
self.ViewMediaManagerItem.setStatusTip(translate('OpenLP.MainWindow',
2010-07-03 20:39:29 +00:00
'Toggle the visibility of the media manager.'))
2010-05-25 16:16:43 +00:00
self.ViewThemeManagerItem.setText(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', '&Theme Manager'))
2010-04-28 14:17:42 +00:00
self.ViewThemeManagerItem.setToolTip(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'Toggle Theme Manager'))
self.ViewThemeManagerItem.setStatusTip(translate('OpenLP.MainWindow',
2010-07-03 20:39:29 +00:00
'Toggle the visibility of the theme manager.'))
2010-05-25 16:16:43 +00:00
self.ViewServiceManagerItem.setText(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', '&Service Manager'))
self.ViewServiceManagerItem.setToolTip(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'Toggle Service Manager'))
self.ViewServiceManagerItem.setStatusTip(translate('OpenLP.MainWindow',
2010-07-03 20:39:29 +00:00
'Toggle the visibility of the service manager.'))
self.ViewPreviewPanel.setText(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', '&Preview Panel'))
2010-07-03 20:39:29 +00:00
self.ViewPreviewPanel.setToolTip(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'Toggle Preview Panel'))
self.ViewPreviewPanel.setStatusTip(translate('OpenLP.MainWindow',
2010-07-03 20:39:29 +00:00
'Toggle the visibility of the preview panel.'))
2010-07-06 20:05:48 +00:00
self.ViewLivePanel.setText(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', '&Live Panel'))
2010-07-06 20:05:48 +00:00
self.ViewLivePanel.setToolTip(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'Toggle Live Panel'))
self.ViewLivePanel.setStatusTip(translate('OpenLP.MainWindow',
2010-07-06 20:05:48 +00:00
'Toggle the visibility of the live panel.'))
2011-02-07 22:07:48 +00:00
self.settingsPluginListItem.setText(translate('OpenLP.MainWindow',
2010-07-03 20:39:29 +00:00
'&Plugin List'))
2011-02-07 22:07:48 +00:00
self.settingsPluginListItem.setStatusTip(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'List the Plugins'))
2010-05-25 16:16:43 +00:00
self.HelpDocumentationItem.setText(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', '&User Guide'))
self.HelpAboutItem.setText(translate('OpenLP.MainWindow', '&About'))
self.HelpAboutItem.setStatusTip(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'More information about OpenLP'))
self.HelpOnlineHelpItem.setText(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', '&Online Help'))
2011-03-24 21:20:38 +00:00
# Uncomment after 1.9.5 beta string freeze
#self.HelpOnlineHelpItem.setShortcut(
# translate('OpenLP.MainWindow', 'F1'))
2011-02-17 02:33:12 +00:00
self.helpWebSiteItem.setText(
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', '&Web Site'))
2010-05-11 19:00:21 +00:00
for item in self.LanguageGroup.actions():
item.setText(item.objectName())
2010-07-21 05:20:03 +00:00
item.setStatusTip(unicode(translate('OpenLP.MainWindow',
'Set the interface language to %s')) % item.objectName())
self.AutoLanguageItem.setText(
translate('OpenLP.MainWindow', '&Autodetect'))
self.AutoLanguageItem.setStatusTip(translate('OpenLP.MainWindow',
'Use the system language, if available.'))
2010-07-21 05:20:03 +00:00
self.ToolsAddToolItem.setText(
translate('OpenLP.MainWindow', 'Add &Tool...'))
2011-01-21 19:09:56 +00:00
self.ToolsAddToolItem.setStatusTip(translate('OpenLP.MainWindow',
'Add an application to the list of tools.'))
2011-02-09 22:53:35 +00:00
self.ToolsOpenDataFolder.setText(
translate('OpenLP.MainWindow', 'Open &Data Folder...'))
self.ToolsOpenDataFolder.setStatusTip(translate('OpenLP.MainWindow',
'Open the folder where songs, bibles and other data resides.'))
2010-07-21 05:20:03 +00:00
self.ModeDefaultItem.setText(
translate('OpenLP.MainWindow', '&Default'))
2011-01-21 19:09:56 +00:00
self.ModeDefaultItem.setStatusTip(translate('OpenLP.MainWindow',
'Set the view mode back to the default.'))
2010-07-21 05:20:03 +00:00
self.ModeSetupItem.setText(translate('OpenLP.MainWindow', '&Setup'))
2010-07-06 20:05:48 +00:00
self.ModeSetupItem.setStatusTip(
2011-01-21 19:09:56 +00:00
translate('OpenLP.MainWindow', 'Set the view mode to Setup.'))
2010-07-21 05:20:03 +00:00
self.ModeLiveItem.setText(translate('OpenLP.MainWindow', '&Live'))
2010-07-06 20:05:48 +00:00
self.ModeLiveItem.setStatusTip(
2011-01-21 19:09:56 +00:00
translate('OpenLP.MainWindow', 'Set the view mode to Live.'))
2009-08-09 17:58:37 +00:00
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
"""
The main window.
"""
log.info(u'MainWindow loaded')
def __init__(self, clipboard, arguments):
2009-08-09 17:58:37 +00:00
"""
This constructor sets up the interface, the various managers, and the
plugins.
"""
QtGui.QMainWindow.__init__(self)
self.clipboard = clipboard
self.arguments = arguments
2010-04-30 01:31:41 +00:00
# Set up settings sections for the main application
# (not for use by plugins)
self.uiSettingsSection = u'user interface'
self.generalSettingsSection = u'general'
self.serviceSettingsSection = u'servicemanager'
self.songsSettingsSection = u'songs'
2009-09-19 21:45:50 +00:00
self.serviceNotSaved = False
2011-03-25 16:29:39 +00:00
self.aboutForm = AboutForm(self)
self.settingsForm = SettingsForm(self, self)
2011-02-20 17:06:58 +00:00
self.displayTagForm = DisplayTagForm(self)
2010-10-07 21:27:26 +00:00
self.shortcutForm = ShortcutListForm(self)
2010-06-11 13:26:24 +00:00
self.recentFiles = QtCore.QStringList()
2009-08-09 17:58:37 +00:00
# Set up the path with plugins
pluginpath = AppLocation.get_directory(AppLocation.PluginsDir)
2010-12-11 20:49:50 +00:00
self.pluginManager = PluginManager(pluginpath)
self.pluginHelpers = {}
2011-05-05 15:16:55 +00:00
self.image_manager = ImageManager()
2009-08-09 17:58:37 +00:00
# Set up the interface
self.setupUi(self)
2010-04-28 01:28:37 +00:00
# Load settings after setupUi so default UI sizes are overwritten
2010-04-23 18:30:53 +00:00
self.loadSettings()
# Once settings are loaded update FileMenu with recentFiles
self.updateFileMenu()
2009-10-06 21:07:12 +00:00
self.pluginForm = PluginForm(self)
2009-08-09 17:58:37 +00:00
# Set up signals and slots
QtCore.QObject.connect(self.ImportThemeItem,
QtCore.SIGNAL(u'triggered()'),
2011-02-17 02:33:12 +00:00
self.themeManagerContents.onImportTheme)
2009-08-09 17:58:37 +00:00
QtCore.QObject.connect(self.ExportThemeItem,
QtCore.SIGNAL(u'triggered()'),
2011-02-17 02:33:12 +00:00
self.themeManagerContents.onExportTheme)
2011-02-07 22:07:48 +00:00
QtCore.QObject.connect(self.mediaManagerDock,
QtCore.SIGNAL(u'visibilityChanged(bool)'),
self.ViewMediaManagerItem.setChecked)
2011-02-07 22:07:48 +00:00
QtCore.QObject.connect(self.serviceManagerDock,
QtCore.SIGNAL(u'visibilityChanged(bool)'),
self.ViewServiceManagerItem.setChecked)
2011-02-07 22:07:48 +00:00
QtCore.QObject.connect(self.themeManagerDock,
QtCore.SIGNAL(u'visibilityChanged(bool)'),
self.ViewThemeManagerItem.setChecked)
2011-02-17 02:33:12 +00:00
QtCore.QObject.connect(self.helpWebSiteItem,
QtCore.SIGNAL(u'triggered()'), self.onHelpWebSiteClicked)
2011-03-24 21:20:38 +00:00
QtCore.QObject.connect(self.HelpOnlineHelpItem,
QtCore.SIGNAL(u'triggered()'), self.onHelpOnLineHelpClicked)
2011-02-09 22:53:35 +00:00
QtCore.QObject.connect(self.ToolsOpenDataFolder,
QtCore.SIGNAL(u'triggered()'), self.onToolsOpenDataFolderClicked)
2011-02-20 15:35:52 +00:00
QtCore.QObject.connect(self.DisplayTagItem,
QtCore.SIGNAL(u'triggered()'), self.onDisplayTagItemClicked)
2010-07-03 20:39:29 +00:00
QtCore.QObject.connect(self.SettingsConfigureItem,
2010-10-07 21:27:26 +00:00
QtCore.SIGNAL(u'triggered()'), self.onSettingsConfigureItemClicked)
QtCore.QObject.connect(self.SettingsShortcutsItem,
QtCore.SIGNAL(u'triggered()'), self.onSettingsShortcutsItemClicked)
2010-10-30 09:29:59 +00:00
# i18n set signals for languages
2010-04-19 19:12:34 +00:00
self.LanguageGroup.triggered.connect(LanguageManager.set_language)
2010-07-06 20:05:48 +00:00
QtCore.QObject.connect(self.ModeDefaultItem,
2010-09-18 18:15:54 +00:00
QtCore.SIGNAL(u'triggered()'), self.onModeDefaultItemClicked)
2010-07-06 20:05:48 +00:00
QtCore.QObject.connect(self.ModeSetupItem,
2010-07-30 22:48:09 +00:00
QtCore.SIGNAL(u'triggered()'), self.onModeSetupItemClicked)
2010-07-06 20:05:48 +00:00
QtCore.QObject.connect(self.ModeLiveItem,
2010-07-30 22:48:09 +00:00
QtCore.SIGNAL(u'triggered()'), self.onModeLiveItemClicked)
2010-07-06 20:05:48 +00:00
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'theme_update_global'), self.defaultThemeChanged)
QtCore.QObject.connect(Receiver.get_receiver(),
2010-07-30 22:48:09 +00:00
QtCore.SIGNAL(u'openlp_version_check'), self.versionNotice)
2010-07-06 20:05:48 +00:00
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'maindisplay_blank_check'), self.blankCheck)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'config_screen_changed'), self.screenChanged)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'maindisplay_status_text'), self.showStatusMessage)
2011-01-01 11:44:16 +00:00
Receiver.send_message(u'cursor_busy')
2011-01-01 10:33:14 +00:00
# Simple message boxes
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'openlp_error_message'), self.onErrorMessage)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'openlp_warning_message'), self.onWarningMessage)
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'openlp_information_message'),
self.onInformationMessage)
2010-10-30 09:29:59 +00:00
# warning cyclic dependency
2011-03-28 18:12:46 +00:00
# renderer needs to call ThemeManager and
2011-03-28 18:56:39 +00:00
# ThemeManager needs to call Renderer
2011-05-05 15:16:55 +00:00
self.renderer = Renderer(self.image_manager, self.themeManagerContents)
2010-10-30 09:29:59 +00:00
# Define the media Dock Manager
self.mediaDockManager = MediaDockManager(self.MediaToolBox)
2009-08-09 17:58:37 +00:00
log.info(u'Load Plugins')
2010-10-30 09:29:59 +00:00
# make the controllers available to the plugins
2010-12-11 20:49:50 +00:00
self.pluginHelpers[u'preview'] = self.previewController
self.pluginHelpers[u'live'] = self.liveController
2011-03-28 18:56:39 +00:00
self.pluginHelpers[u'renderer'] = self.renderer
2010-12-11 20:49:50 +00:00
self.pluginHelpers[u'service'] = self.ServiceManagerContents
self.pluginHelpers[u'settings form'] = self.settingsForm
self.pluginHelpers[u'toolbox'] = self.mediaDockManager
self.pluginHelpers[u'pluginmanager'] = self.pluginManager
self.pluginHelpers[u'formparent'] = self
self.pluginManager.find_plugins(pluginpath, self.pluginHelpers)
2009-09-19 21:45:50 +00:00
# hook methods have to happen after find_plugins. Find plugins needs
# the controllers hence the hooks have moved from setupUI() to here
2009-08-09 17:58:37 +00:00
# Find and insert settings tabs
log.info(u'hook settings')
2010-12-11 20:49:50 +00:00
self.pluginManager.hook_settings_tabs(self.settingsForm)
2009-08-09 17:58:37 +00:00
# Find and insert media manager items
log.info(u'hook media')
2010-12-11 20:49:50 +00:00
self.pluginManager.hook_media_manager(self.mediaDockManager)
2009-08-09 17:58:37 +00:00
# Call the hook method to pull in import menus.
log.info(u'hook menus')
2010-12-11 20:49:50 +00:00
self.pluginManager.hook_import_menu(self.FileImportMenu)
2009-08-09 17:58:37 +00:00
# Call the hook method to pull in export menus.
2010-12-11 20:49:50 +00:00
self.pluginManager.hook_export_menu(self.FileExportMenu)
2009-09-17 18:24:13 +00:00
# Call the hook method to pull in tools menus.
2010-12-11 20:49:50 +00:00
self.pluginManager.hook_tools_menu(self.ToolsMenu)
2009-08-09 17:58:37 +00:00
# Call the initialise method to setup plugins.
log.info(u'initialise plugins')
2010-12-11 20:49:50 +00:00
self.pluginManager.initialise_plugins()
2009-08-29 07:17:56 +00:00
log.info(u'Load data from Settings')
if QtCore.QSettings().value(u'advanced/save current plugin',
QtCore.QVariant(False)).toBool():
savedPlugin = QtCore.QSettings().value(
u'advanced/current media plugin', QtCore.QVariant()).toInt()[0]
if savedPlugin != -1:
self.MediaToolBox.setCurrentIndex(savedPlugin)
2009-08-29 07:17:56 +00:00
self.settingsForm.postSetUp()
# Once all components are initialised load the Themes
log.info(u'Load Themes')
self.themeManagerContents.loadThemes(True)
2011-01-01 11:44:16 +00:00
Receiver.send_message(u'cursor_normal')
2009-10-11 05:47:38 +00:00
2010-04-16 22:06:28 +00:00
def setAutoLanguage(self, value):
2010-05-11 19:00:21 +00:00
self.LanguageGroup.setDisabled(value)
LanguageManager.auto_language = value
2010-04-19 19:12:34 +00:00
LanguageManager.set_language(self.LanguageGroup.checkedAction())
2010-04-16 22:06:28 +00:00
2010-07-30 22:48:09 +00:00
def versionNotice(self, version):
"""
2010-07-30 22:48:09 +00:00
Notifies the user that a newer version of OpenLP is available.
Triggered by delay thread.
"""
2010-07-21 05:20:03 +00:00
version_text = unicode(translate('OpenLP.MainWindow',
'Version %s of OpenLP is now available for download (you are '
'currently running version %s). \n\nYou can download the latest '
'version from http://openlp.org/.'))
2010-02-25 21:09:27 +00:00
QtGui.QMessageBox.question(self,
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow', 'OpenLP Version Updated'),
2011-03-25 16:29:39 +00:00
version_text % (version, get_application_version()[u'full']))
2009-08-09 17:58:37 +00:00
def show(self):
"""
Show the main form, as well as the display form
"""
2010-04-23 21:31:54 +00:00
QtGui.QWidget.show(self)
2010-12-11 20:49:50 +00:00
if self.liveController.display.isVisible():
self.liveController.display.setFocus()
self.activateWindow()
# On Windows, arguments contains the entire commandline
# So args[0]=='python' args[1]=='openlp.pyw'
# Therefore this approach is not going to work
# Bypass for now.
if len(self.arguments) and os.name != u'nt':
2011-03-19 10:08:05 +00:00
args = []
for a in self.arguments:
2011-03-19 10:08:05 +00:00
args.extend([a])
self.ServiceManagerContents.loadFile(unicode(args[0]))
elif QtCore.QSettings().value(
self.generalSettingsSection + u'/auto open',
2010-04-28 14:17:42 +00:00
QtCore.QVariant(False)).toBool():
self.ServiceManagerContents.loadLastFile()
2010-09-18 17:14:27 +00:00
view_mode = QtCore.QSettings().value(u'%s/view mode' % \
self.generalSettingsSection, u'default')
if view_mode == u'default':
self.ModeDefaultItem.setChecked(True)
elif view_mode == u'setup':
self.setViewMode(True, True, False, True, False)
self.ModeSetupItem.setChecked(True)
elif view_mode == u'live':
self.setViewMode(False, True, False, False, True)
self.ModeLiveItem.setChecked(True)
2010-04-10 10:28:57 +00:00
def firstTime(self):
# Import themes if first time
Receiver.send_message(u'openlp_process_events')
for plugin in self.pluginManager.plugins:
if hasattr(plugin, u'firstTime'):
Receiver.send_message(u'openlp_process_events')
plugin.firstTime()
Receiver.send_message(u'openlp_process_events')
temp_dir = os.path.join(unicode(gettempdir()), u'openlp')
for filename in os.listdir(temp_dir):
os.remove(os.path.join(temp_dir, filename))
os.removedirs(temp_dir)
def blankCheck(self):
"""
Check and display message if screen blank on setup.
Triggered by delay thread.
"""
2010-04-28 14:17:42 +00:00
settings = QtCore.QSettings()
2010-09-18 17:14:27 +00:00
if settings.value(u'%s/screen blank' % self.generalSettingsSection,
QtCore.QVariant(False)).toBool():
2010-12-11 20:49:50 +00:00
self.liveController.mainDisplaySetBackground()
2010-06-17 21:07:01 +00:00
if settings.value(u'blank warning',
QtCore.QVariant(False)).toBool():
QtGui.QMessageBox.question(self,
2010-07-21 05:20:03 +00:00
translate('OpenLP.MainWindow',
'OpenLP Main Display Blanked'),
translate('OpenLP.MainWindow',
'The Main Display has been blanked out'))
2009-08-09 17:58:37 +00:00
2011-01-01 10:33:14 +00:00
def onErrorMessage(self, data):
QtGui.QMessageBox.critical(self, data[u'title'], data[u'message'])
def onWarningMessage(self, data):
QtGui.QMessageBox.warning(self, data[u'title'], data[u'message'])
def onInformationMessage(self, data):
QtGui.QMessageBox.information(self, data[u'title'], data[u'message'])
def onHelpWebSiteClicked(self):
"""
Load the OpenLP website
"""
import webbrowser
webbrowser.open_new(u'http://openlp.org/')
2011-03-24 21:20:38 +00:00
def onHelpOnLineHelpClicked(self):
"""
Load the online OpenLP manual
"""
import webbrowser
webbrowser.open_new(u'http://manual.openlp.org/')
2009-08-09 17:58:37 +00:00
def onHelpAboutItemClicked(self):
"""
Show the About form
"""
self.aboutForm.exec_()
def onPluginItemClicked(self):
"""
Show the Plugin form
"""
self.pluginForm.load()
self.pluginForm.exec_()
2011-02-09 22:53:35 +00:00
def onToolsOpenDataFolderClicked(self):
"""
Open data folder
"""
path = AppLocation.get_data_path()
QtGui.QDesktopServices.openUrl(QtCore.QUrl("file:///" + path))
2011-02-20 15:35:52 +00:00
def onDisplayTagItemClicked(self):
"""
Show the Settings dialog
"""
self.displayTagForm.exec_()
2010-10-07 21:27:26 +00:00
def onSettingsConfigureItemClicked(self):
2009-08-09 17:58:37 +00:00
"""
Show the Settings dialog
"""
self.settingsForm.exec_()
2010-04-02 18:12:54 +00:00
def paintEvent(self, event):
"""
We need to make sure, that the SlidePreview's size is correct.
"""
self.previewController.previewSizeChanged()
self.liveController.previewSizeChanged()
2010-10-07 21:27:26 +00:00
def onSettingsShortcutsItemClicked(self):
"""
Show the shortcuts dialog
"""
if self.shortcutForm.exec_():
2011-03-30 17:50:36 +00:00
self.shortcutForm.save()
2010-10-07 21:27:26 +00:00
2010-09-18 18:15:54 +00:00
def onModeDefaultItemClicked(self):
2010-09-18 17:14:27 +00:00
"""
Put OpenLP into "Default" view mode.
"""
2011-02-02 05:31:11 +00:00
self.setViewMode(True, True, True, True, True, u'default')
2010-09-18 17:14:27 +00:00
2010-07-06 20:05:48 +00:00
def onModeSetupItemClicked(self):
"""
Put OpenLP into "Setup" view mode.
"""
2011-02-02 05:31:11 +00:00
self.setViewMode(True, True, False, True, False, u'setup')
2010-07-06 20:05:48 +00:00
def onModeLiveItemClicked(self):
"""
Put OpenLP into "Live" view mode.
"""
2011-02-02 05:31:11 +00:00
self.setViewMode(False, True, False, False, True, u'live')
2010-07-30 22:48:09 +00:00
def setViewMode(self, media=True, service=True, theme=True, preview=True,
2011-02-02 05:31:11 +00:00
live=True, mode=u''):
2010-07-30 22:48:09 +00:00
"""
Set OpenLP to a different view mode.
"""
2011-02-02 05:31:11 +00:00
if mode:
settings = QtCore.QSettings()
settings.setValue(u'%s/view mode' % self.generalSettingsSection,
mode)
2011-02-07 22:07:48 +00:00
self.mediaManagerDock.setVisible(media)
self.serviceManagerDock.setVisible(service)
self.themeManagerDock.setVisible(theme)
2010-07-30 22:48:09 +00:00
self.setPreviewPanelVisibility(preview)
self.setLivePanelVisibility(live)
2010-07-06 20:05:48 +00:00
2010-04-02 18:12:54 +00:00
def screenChanged(self):
"""
The screen has changed to so tell the displays to update_display
their locations
"""
2010-08-26 16:51:27 +00:00
log.debug(u'screenChanged')
2011-05-05 11:51:47 +00:00
self.renderer.update_display()
2011-05-05 15:16:55 +00:00
self.setFocus()
self.activateWindow()
2009-08-09 17:58:37 +00:00
2009-10-16 21:29:38 +00:00
def closeEvent(self, event):
2009-08-09 17:58:37 +00:00
"""
Hook to close the main window and display windows on exit
"""
if self.ServiceManagerContents.isModified():
2011-01-26 16:05:55 +00:00
ret = self.ServiceManagerContents.saveModifiedService()
2009-08-09 17:58:37 +00:00
if ret == QtGui.QMessageBox.Save:
if self.ServiceManagerContents.saveFile():
self.cleanUp()
event.accept()
else:
event.ignore()
2009-08-09 17:58:37 +00:00
elif ret == QtGui.QMessageBox.Discard:
self.cleanUp()
event.accept()
else:
event.ignore()
else:
2011-01-03 08:56:17 +00:00
if QtCore.QSettings().value(u'advanced/enable exit confirmation',
2011-01-02 16:42:30 +00:00
QtCore.QVariant(True)).toBool():
ret = QtGui.QMessageBox.question(self,
translate('OpenLP.MainWindow', 'Close OpenLP'),
2011-01-04 09:19:53 +00:00
translate('OpenLP.MainWindow',
'Are you sure you want to close OpenLP?'),
2011-01-02 16:42:30 +00:00
QtGui.QMessageBox.StandardButtons(
QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No),
QtGui.QMessageBox.Yes)
if ret == QtGui.QMessageBox.Yes:
self.cleanUp()
event.accept()
else:
event.ignore()
else:
2010-12-29 12:45:16 +00:00
self.cleanUp()
event.accept()
2011-01-02 16:42:30 +00:00
2009-08-09 17:58:37 +00:00
def cleanUp(self):
2009-09-19 23:05:30 +00:00
"""
Runs all the cleanup code before OpenLP shuts down
"""
# Clean temporary files used by services
self.ServiceManagerContents.cleanUp()
if QtCore.QSettings().value(u'advanced/save current plugin',
QtCore.QVariant(False)).toBool():
QtCore.QSettings().setValue(u'advanced/current media plugin',
QtCore.QVariant(self.MediaToolBox.currentIndex()))
2009-08-09 17:58:37 +00:00
# Call the cleanup method to shutdown plugins.
log.info(u'cleanup plugins')
2010-12-11 20:49:50 +00:00
self.pluginManager.finalise_plugins()
2010-04-23 18:30:53 +00:00
# Save settings
self.saveSettings()
2010-10-30 11:09:36 +00:00
# Close down the display
2010-12-11 20:49:50 +00:00
self.liveController.display.close()
2009-08-09 17:58:37 +00:00
2009-09-19 21:45:50 +00:00
def serviceChanged(self, reset=False, serviceName=None):
2009-08-09 17:58:37 +00:00
"""
2010-04-19 18:43:20 +00:00
Hook to change the main window title when the service changes
2009-09-19 21:45:50 +00:00
``reset``
Shows if the service has been cleared or saved
``serviceName``
The name of the service (if it has one)
2009-08-09 17:58:37 +00:00
"""
2009-09-19 21:45:50 +00:00
if not serviceName:
2009-08-09 17:58:37 +00:00
service_name = u'(unsaved service)'
else:
2009-09-19 21:45:50 +00:00
service_name = serviceName
2009-11-03 15:13:52 +00:00
if reset:
2009-09-19 21:45:50 +00:00
self.serviceNotSaved = False
2009-08-09 17:58:37 +00:00
title = u'%s - %s' % (self.mainTitle, service_name)
else:
2009-09-19 21:45:50 +00:00
self.serviceNotSaved = True
2009-08-09 17:58:37 +00:00
title = u'%s - %s*' % (self.mainTitle, service_name)
self.setWindowTitle(title)
def setServiceModified(self, modified, fileName):
"""
This method is called from the ServiceManager to set the title of the
main window.
``modified``
Whether or not this service has been modified.
``fileName``
The file name of the service file.
"""
if modified:
title = u'%s - %s*' % (self.mainTitle, fileName)
else:
title = u'%s - %s' % (self.mainTitle, fileName)
self.setWindowTitle(title)
def showStatusMessage(self, message):
2011-04-28 18:13:19 +00:00
self.statusBar.showMessage(message)
def defaultThemeChanged(self, theme):
2011-04-28 18:13:19 +00:00
self.defaultThemeLabel.setText(
2010-07-26 15:19:11 +00:00
unicode(translate('OpenLP.MainWindow', 'Default Theme: %s')) %
theme)
2011-03-31 18:53:50 +00:00
def toggleMediaManager(self):
self.mediaManagerDock.setVisible(not self.mediaManagerDock.isVisible())
2011-03-31 18:53:50 +00:00
def toggleServiceManager(self):
self.serviceManagerDock.setVisible(not self.serviceManagerDock.isVisible())
2011-03-31 18:53:50 +00:00
def toggleThemeManager(self):
self.themeManagerDock.setVisible(not self.themeManagerDock.isVisible())
2011-04-17 11:00:44 +00:00
def setPreviewPanelVisibility(self, visible):
2010-07-06 21:18:55 +00:00
"""
Sets the visibility of the preview panel including saving the setting
and updating the menu.
``visible``
A bool giving the state to set the panel to
True - Visible
False - Hidden
"""
2011-02-01 18:05:59 +00:00
self.previewController.panel.setVisible(visible)
2010-07-23 00:01:06 +00:00
QtCore.QSettings().setValue(u'user interface/preview panel',
QtCore.QVariant(visible))
2010-07-06 20:05:48 +00:00
self.ViewPreviewPanel.setChecked(visible)
2011-04-17 11:00:44 +00:00
def setLivePanelVisibility(self, visible):
2010-07-06 21:18:55 +00:00
"""
Sets the visibility of the live panel including saving the setting and
updating the menu.
``visible``
A bool giving the state to set the panel to
True - Visible
False - Hidden
"""
2011-02-01 18:05:59 +00:00
self.liveController.panel.setVisible(visible)
2010-07-23 00:01:06 +00:00
QtCore.QSettings().setValue(u'user interface/live panel',
QtCore.QVariant(visible))
2010-07-06 20:05:48 +00:00
self.ViewLivePanel.setChecked(visible)
2010-04-23 18:30:53 +00:00
def loadSettings(self):
2010-07-09 21:32:32 +00:00
"""
Load the main window settings.
"""
2010-04-23 18:30:53 +00:00
log.debug(u'Loading QSettings')
settings = QtCore.QSettings()
settings.beginGroup(self.generalSettingsSection)
2010-04-30 01:31:41 +00:00
self.recentFiles = settings.value(u'recent files').toStringList()
settings.endGroup()
settings.beginGroup(self.uiSettingsSection)
2010-04-28 14:17:42 +00:00
self.move(settings.value(u'main window position',
2010-04-23 21:31:54 +00:00
QtCore.QVariant(QtCore.QPoint(0, 0))).toPoint())
2010-04-28 14:17:42 +00:00
self.restoreGeometry(
settings.value(u'main window geometry').toByteArray())
self.restoreState(settings.value(u'main window state').toByteArray())
settings.endGroup()
2010-04-23 18:30:53 +00:00
def saveSettings(self):
2010-07-09 21:32:32 +00:00
"""
Save the main window settings.
"""
2010-04-23 18:30:53 +00:00
log.debug(u'Saving QSettings')
settings = QtCore.QSettings()
settings.beginGroup(self.generalSettingsSection)
2010-04-23 18:30:53 +00:00
recentFiles = QtCore.QVariant(self.recentFiles) \
if self.recentFiles else QtCore.QVariant()
2010-04-30 01:31:41 +00:00
settings.setValue(u'recent files', recentFiles)
settings.endGroup()
settings.beginGroup(self.uiSettingsSection)
2010-04-28 14:17:42 +00:00
settings.setValue(u'main window position',
2010-04-26 16:41:31 +00:00
QtCore.QVariant(self.pos()))
2010-04-28 14:17:42 +00:00
settings.setValue(u'main window state',
2010-04-26 16:41:31 +00:00
QtCore.QVariant(self.saveState()))
2010-04-28 14:17:42 +00:00
settings.setValue(u'main window geometry',
2010-04-26 16:41:31 +00:00
QtCore.QVariant(self.saveGeometry()))
2010-04-28 14:17:42 +00:00
settings.endGroup()
2010-04-23 18:30:53 +00:00
def updateFileMenu(self):
2010-07-09 21:32:32 +00:00
"""
Updates the file menu with the latest list of service files accessed.
"""
recentFileCount = QtCore.QSettings().value(
u'advanced/recent file count', QtCore.QVariant(4)).toInt()[0]
2010-04-23 18:30:53 +00:00
self.FileMenu.clear()
add_actions(self.FileMenu, self.FileMenuActions[:-1])
2011-02-04 01:56:19 +00:00
existingRecentFiles = [recentFile for recentFile in self.recentFiles
if QtCore.QFile.exists(recentFile)]
2010-07-09 21:32:32 +00:00
recentFilesToDisplay = existingRecentFiles[0:recentFileCount]
if recentFilesToDisplay:
2010-04-23 18:30:53 +00:00
self.FileMenu.addSeparator()
2010-07-09 21:32:32 +00:00
for fileId, filename in enumerate(recentFilesToDisplay):
log.debug('Recent file name: %s', filename)
2011-04-04 16:15:38 +00:00
action = base_action(self, u'')
2011-04-28 18:13:19 +00:00
action.setText(u'&%d %s' %
2011-04-04 16:15:38 +00:00
(fileId + 1, QtCore.QFileInfo(filename).fileName()))
2010-04-23 18:30:53 +00:00
action.setData(QtCore.QVariant(filename))
self.connect(action, QtCore.SIGNAL(u'triggered()'),
self.ServiceManagerContents.onRecentServiceClicked)
2010-04-23 18:30:53 +00:00
self.FileMenu.addAction(action)
self.FileMenu.addSeparator()
self.FileMenu.addAction(self.FileMenuActions[-1])
def addRecentFile(self, filename):
2010-07-09 21:32:32 +00:00
"""
Adds a service to the list of recently used files.
``filename``
The service filename to add
"""
# The maxRecentFiles value does not have an interface and so never gets
2010-12-26 14:44:07 +00:00
# actually stored in the settings therefore the default value of 20 will
# always be used.
2010-07-09 21:32:32 +00:00
maxRecentFiles = QtCore.QSettings().value(u'advanced/max recent files',
QtCore.QVariant(20)).toInt()[0]
2010-06-30 11:59:09 +00:00
if filename:
position = self.recentFiles.indexOf(filename)
if position != -1:
self.recentFiles.removeAt(position)
2010-05-28 00:18:26 +00:00
self.recentFiles.insert(0, QtCore.QString(filename))
2010-07-10 10:44:23 +00:00
while self.recentFiles.count() > maxRecentFiles:
2010-07-10 01:01:14 +00:00
# Don't care what API says takeLast works, removeLast doesn't!
2011-04-17 11:00:44 +00:00
self.recentFiles.takeLast()
2011-04-28 18:13:19 +00:00
def displayProgressBar(self, size):
"""
Make Progress bar visible and set size
"""
self.loadProgressBar.show()
self.loadProgressBar.setMaximum(size)
self.loadProgressBar.setValue(0)
Receiver.send_message(u'openlp_process_events')
def incrementProgressBar(self):
"""
2011-04-29 07:40:19 +00:00
Increase the Progress Bar value by 1
2011-04-28 18:13:19 +00:00
"""
self.loadProgressBar.setValue(self.loadProgressBar.value() + 1)
Receiver.send_message(u'openlp_process_events')
def finishedProgressBar(self):
"""
2011-04-29 07:40:19 +00:00
Trigger it's removal after 2.5 second
2011-04-28 18:13:19 +00:00
"""
2011-04-29 07:40:19 +00:00
self.timer_id = self.startTimer(2500)
2011-04-28 18:13:19 +00:00
2011-04-29 07:40:19 +00:00
def timerEvent(self, event):
2011-04-28 18:13:19 +00:00
"""
Remove the Progress bar from view.
"""
2011-04-29 07:40:19 +00:00
if event.timerId() == self.timer_id:
2011-04-29 08:54:11 +00:00
self.timer_id = 0
2011-04-29 07:40:19 +00:00
self.loadProgressBar.hide()
Receiver.send_message(u'openlp_process_events')