Merge lp:~raoul-snyman/openlp/bugfixes into lp:openlp

Proposed by Raoul Snyman
Status: Merged
Merged at revision: not available
Proposed branch: lp:~raoul-snyman/openlp/bugfixes
Merge into: lp:openlp
Diff against target: None lines
To merge this branch: bzr merge lp:~raoul-snyman/openlp/bugfixes
Reviewer Review Type Date Requested Status
Tim Bentley Approve
Review via email: mp+9940@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

Let's see what changes there are between my few bugfixes, and trunk.

Revision history for this message
Tim Bentley (trb143) wrote :

Approved though you missed a bug fix!

review: Approve
lp:~raoul-snyman/openlp/bugfixes updated
505. By Raoul Snyman

Merge from bugfixes

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp.pyw'
2--- openlp.pyw 2009-07-08 06:55:08 +0000
3+++ openlp.pyw 2009-08-09 17:58:37 +0000
4@@ -71,7 +71,7 @@
5 self.mainWindow = MainWindow(screens)
6 self.mainWindow.show()
7 # now kill the splashscreen
8- self.splash.finish(self.mainWindow.mainWindow)
9+ self.splash.finish(self.mainWindow)
10 sys.exit(app.exec_())
11
12 if __name__ == u'__main__':
13
14=== modified file 'openlp/core/lib/event.py'
15--- openlp/core/lib/event.py 2009-07-10 15:45:17 +0000
16+++ openlp/core/lib/event.py 2009-08-09 17:58:37 +0000
17@@ -28,6 +28,7 @@
18 # "Default" event - a non-event
19 Default = 0
20 # General application events
21+ Ready = 10
22 # Service events
23 LoadServiceItem = 20
24 # Preview events
25@@ -43,6 +44,7 @@
26 """
27 Provides an Event class to encapsulate events within openlp.org.
28 """
29- def __init__(self, event_type=EventType.Default, payload=None):
30+ def __init__(self, event_type=EventType.Default, payload=None, sender=None):
31 self.event_type = event_type
32 self.payload = payload
33+ self.sender = sender
34
35=== modified file 'openlp/core/lib/eventmanager.py'
36--- openlp/core/lib/eventmanager.py 2009-07-11 05:18:34 +0000
37+++ openlp/core/lib/eventmanager.py 2009-08-09 17:58:37 +0000
38@@ -25,10 +25,10 @@
39
40 class EventManager(object):
41 """
42- A mechanism to send events to all registered endpoints
43- the endpoints are registered and listen with a handle_event method
44- the endpoint will decide whether to do somthing with the event or ignore it
45-
46+ A mechanism to send events to all registered endpoints. The
47+ endpoints are registered and listen with a handle_event method.
48+ The endpoint will decide whether to do somthing with the event or
49+ ignore it.
50 """
51 global log
52 log = logging.getLogger(u'EventManager')
53
54=== modified file 'openlp/core/ui/maindisplay.py'
55--- openlp/core/ui/maindisplay.py 2009-08-06 21:30:14 +0000
56+++ openlp/core/ui/maindisplay.py 2009-08-09 12:05:54 +0000
57@@ -60,10 +60,6 @@
58 Sets up the screen on a particular screen.
59 @param (integer) screen This is the screen number.
60 """
61- # Temporary fix until I can speak to Tim Bentley.
62- if screenNumber not in self.screens:
63- screenNumber = 0
64- # /Temporary fix
65 screen = self.screens[screenNumber]
66 if screen[u'number'] != screenNumber:
67 # We will most probably never actually hit this bit, but just in
68@@ -79,20 +75,23 @@
69 else:
70 self.showMinimized()
71 #Build a custom splash screen
72- self.InitialFrame = QtGui.QImage(screen[u'size'].width(),
73- screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied)
74+ self.InitialFrame = QtGui.QImage(
75+ screen[u'size'].width(), screen[u'size'].height(),
76+ QtGui.QImage.Format_ARGB32_Premultiplied)
77 splash_image = QtGui.QImage(u':/graphics/openlp-splash-screen.png')
78 painter_image = QtGui.QPainter()
79 painter_image.begin(self.InitialFrame)
80 painter_image.fillRect(self.InitialFrame.rect(), QtCore.Qt.white)
81- painter_image.drawImage((screen[u'size'].width() - splash_image.width()) / 2,
82- (screen[u'size'].height() - splash_image.height()) / 2,
83- splash_image)
84+ painter_image.drawImage(
85+ (screen[u'size'].width() - splash_image.width()) / 2,
86+ (screen[u'size'].height() - splash_image.height()) / 2,
87+ splash_image)
88 self.frameView(self.InitialFrame)
89 #Build a Black screen
90 painter = QtGui.QPainter()
91- self.blankFrame = QtGui.QImage(screen[u'size'].width(),
92- screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied)
93+ self.blankFrame = QtGui.QImage(
94+ screen[u'size'].width(), screen[u'size'].height(),
95+ QtGui.QImage.Format_ARGB32_Premultiplied)
96 painter.begin(self.blankFrame)
97 painter.fillRect(self.blankFrame.rect(), QtCore.Qt.black)
98
99
100=== modified file 'openlp/core/ui/mainwindow.py'
101--- openlp/core/ui/mainwindow.py 2009-08-06 21:30:14 +0000
102+++ openlp/core/ui/mainwindow.py 2009-08-09 17:58:37 +0000
103@@ -22,178 +22,32 @@
104
105 from PyQt4 import QtCore, QtGui
106
107-from openlp.core.ui import AboutForm, SettingsForm, AlertForm, ServiceManager, \
108- ThemeManager, MainDisplay, SlideController
109-from openlp.core.lib import translate, Plugin, MediaManagerItem, SettingsTab, \
110- EventManager, RenderManager, PluginConfig, SettingsManager, PluginManager
111-
112-class MainWindow(object):
113- """
114- The main window.
115- """
116- global log
117- log = logging.getLogger(u'MainWindow')
118- log.info(u'MainWindow loaded')
119-
120- def __init__(self, screens):
121- """
122- This constructor sets up the interface, the various managers, and the
123- plugins.
124- """
125- self.oosNotSaved = False
126- self.settingsmanager = SettingsManager(screens)
127- self.mainWindow = QtGui.QMainWindow()
128- self.mainWindow.__class__.closeEvent = self.onCloseEvent
129- self.mainDisplay = MainDisplay(None, screens)
130- self.screenList = screens
131- self.EventManager = EventManager()
132- self.generalConfig = PluginConfig(u'General')
133- self.alertForm = AlertForm(self)
134- self.aboutForm = AboutForm()
135- self.settingsForm = SettingsForm(self.screenList, self)
136- # Set up the path with plugins
137- pluginpath = os.path.split(os.path.abspath(__file__))[0]
138- pluginpath = os.path.abspath(
139- os.path.join(pluginpath, u'..', u'..', u'plugins'))
140- self.plugin_manager = PluginManager(pluginpath)
141- self.plugin_helpers = {}
142- # Set up the interface
143- self.setupUi()
144- #warning cyclic dependency
145- #RenderManager needs to call ThemeManager and
146- #ThemeManager needs to call RenderManager
147- self.RenderManager = RenderManager(self.ThemeManagerContents,
148- self.screenList, int(self.generalConfig.get_config(u'Monitor', 0)))
149- log.info(u'Load Plugins')
150- #make the controllers available to the plugins
151- self.plugin_helpers[u'preview'] = self.PreviewController
152- self.plugin_helpers[u'live'] = self.LiveController
153- self.plugin_helpers[u'event'] = self.EventManager
154- self.plugin_helpers[u'theme'] = self.ThemeManagerContents
155- self.plugin_helpers[u'render'] = self.RenderManager
156- self.plugin_helpers[u'service'] = self.ServiceManagerContents
157- self.plugin_helpers[u'settings'] = self.settingsForm
158- self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers,
159- self.EventManager)
160- # hook methods have to happen after find_plugins. Find plugins needs the
161- # controllers hence the hooks have moved from setupUI() to here
162-
163- # Find and insert settings tabs
164- log.info(u'hook settings')
165- self.plugin_manager.hook_settings_tabs(self.settingsForm)
166- # Find and insert media manager items
167- log.info(u'hook media')
168- self.plugin_manager.hook_media_manager(self.MediaToolBox)
169- # Call the hook method to pull in import menus.
170- log.info(u'hook menus')
171- self.plugin_manager.hook_import_menu(self.FileImportMenu)
172- # Call the hook method to pull in export menus.
173- self.plugin_manager.hook_export_menu(self.FileExportMenu)
174- # Call the initialise method to setup plugins.
175- log.info(u'initialise plugins')
176- self.plugin_manager.initialise_plugins()
177- # Once all components are initialised load the Themes
178- log.info(u'Load Themes')
179- self.ThemeManagerContents.loadThemes()
180-
181- def show(self):
182- """
183- Show the main form, as well as the display form
184- """
185- self.mainWindow.showMaximized()
186- self.mainDisplay.setup(self.settingsForm.GeneralTab.MonitorNumber)
187-
188- def onHelpAboutItemClicked(self):
189- """
190- Show the About form
191- """
192- self.aboutForm.exec_()
193-
194- def onToolsAlertItemClicked(self):
195- """
196- Show the Alert form
197- """
198- self.alertForm.exec_()
199-
200- def onOptionsSettingsItemClicked(self):
201- """
202- Show the Settings dialog
203- """
204- self.settingsForm.exec_()
205- screen_number = int(self.generalConfig.get_config(u'Monitor', 0))
206- self.RenderManager.update_display(screen_number)
207- self.mainDisplay.setup(screen_number)
208-
209- def onCloseEvent(self, event):
210- """
211- Hook to close the main window and display windows on exit
212- """
213- if self.oosNotSaved == True:
214- ret = QtGui.QMessageBox.question(None,
215- translate(u'mainWindow', u'Save Changes to Service?'),
216- translate(u'mainWindow', u'Your service has been changed, do you want to save those changes?'),
217- QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Cancel | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Save),
218- QtGui.QMessageBox.Save)
219- if ret == QtGui.QMessageBox.Save:
220- self.ServiceManagerContents.onSaveService()
221- self.mainDisplay.close()
222- self.cleanUp()
223- event.accept()
224- elif ret == QtGui.QMessageBox.Discard:
225- self.mainDisplay.close()
226- self.cleanUp()
227- event.accept()
228- else:
229- event.ignore()
230- else:
231- self.mainDisplay.close()
232- self.cleanUp()
233- event.accept()
234-
235- def cleanUp(self):
236- # Call the cleanup method to shutdown plugins.
237- log.info(u'cleanup plugins')
238- self.plugin_manager.initialise_plugins()
239-
240- def OosChanged(self, reset = False, oosName = None):
241- """
242- Hook to change the title if the OOS has been changed
243- reset - tells if the OOS has been cleared or saved
244- oosName - is the name of the OOS (if it has one)
245- """
246- if reset == True:
247- self.oosNotSaved = False
248- if oosName is None:
249- title = self.mainTitle
250- else:
251- title = self.mainTitle + u' - (' + oosName + u')'
252- else:
253- self.oosNotSaved = True
254- if oosName is None:
255- title = self.mainTitle + u' - *'
256- else:
257- title = self.mainTitle + u' - *(' + oosName + u')'
258- self.mainWindow.setWindowTitle(title)
259-
260- def setupUi(self):
261+from openlp.core.ui import AboutForm, SettingsForm, AlertForm, \
262+ ServiceManager, ThemeManager, MainDisplay, SlideController
263+from openlp.core.lib import translate, Plugin, MediaManagerItem, \
264+ SettingsTab, EventManager, RenderManager, PluginConfig, \
265+ SettingsManager, PluginManager, EventType
266+
267+class Ui_MainWindow(object):
268+ def setupUi(self, MainWindow):
269 """
270 Set up the user interface
271 """
272- self.mainWindow.setObjectName(u'mainWindow')
273- self.mainWindow.resize(self.settingsmanager.width, self.settingsmanager.height)
274+ MainWindow.setObjectName(u'MainWindow')
275+ MainWindow.resize(self.settingsmanager.width, self.settingsmanager.height)
276 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
277 QtGui.QSizePolicy.Expanding)
278 sizePolicy.setHorizontalStretch(0)
279 sizePolicy.setVerticalStretch(0)
280 sizePolicy.setHeightForWidth(
281- self.mainWindow.sizePolicy().hasHeightForWidth())
282- self.mainWindow.setSizePolicy(sizePolicy)
283+ MainWindow.sizePolicy().hasHeightForWidth())
284+ MainWindow.setSizePolicy(sizePolicy)
285 main_icon = QtGui.QIcon()
286 main_icon.addPixmap(QtGui.QPixmap(u':/icon/openlp-logo-16x16.png'),
287 QtGui.QIcon.Normal, QtGui.QIcon.Off)
288- self.mainWindow.setWindowIcon(main_icon)
289+ MainWindow.setWindowIcon(main_icon)
290 # Set up the main container, which contains all the other form widgets
291- self.MainContent = QtGui.QWidget(self.mainWindow)
292+ self.MainContent = QtGui.QWidget(MainWindow)
293 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
294 QtGui.QSizePolicy.Expanding)
295 sizePolicy.setHorizontalStretch(0)
296@@ -206,7 +60,7 @@
297 self.MainContentLayout.setSpacing(0)
298 self.MainContentLayout.setMargin(0)
299 self.MainContentLayout.setObjectName(u'MainContentLayout')
300- self.mainWindow.setCentralWidget(self.MainContent)
301+ MainWindow.setCentralWidget(self.MainContent)
302 self.ControlSplitter = QtGui.QSplitter(self.MainContent)
303 self.ControlSplitter.setOrientation(QtCore.Qt.Horizontal)
304 self.ControlSplitter.setObjectName(u'ControlSplitter')
305@@ -215,7 +69,7 @@
306 self.PreviewController = SlideController(self)
307 self.LiveController = SlideController(self, True)
308 # Create menu
309- self.MenuBar = QtGui.QMenuBar(self.mainWindow)
310+ self.MenuBar = QtGui.QMenuBar(MainWindow)
311 self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))
312 self.MenuBar.setObjectName(u'MenuBar')
313 self.FileMenu = QtGui.QMenu(self.MenuBar)
314@@ -236,12 +90,15 @@
315 self.ToolsMenu.setObjectName(u'ToolsMenu')
316 self.HelpMenu = QtGui.QMenu(self.MenuBar)
317 self.HelpMenu.setObjectName(u'HelpMenu')
318- self.mainWindow.setMenuBar(self.MenuBar)
319- self.StatusBar = QtGui.QStatusBar(self.mainWindow)
320+ MainWindow.setMenuBar(self.MenuBar)
321+ self.StatusBar = QtGui.QStatusBar(MainWindow)
322 self.StatusBar.setObjectName(u'StatusBar')
323- self.mainWindow.setStatusBar(self.StatusBar)
324+ MainWindow.setStatusBar(self.StatusBar)
325+ self.DefaultThemeLabel = QtGui.QLabel(self.StatusBar)
326+ self.DefaultThemeLabel.setObjectName(u'DefaultThemeLabel')
327+ self.StatusBar.addPermanentWidget(self.DefaultThemeLabel)
328 # Create the MediaManager
329- self.MediaManagerDock = QtGui.QDockWidget(self.mainWindow)
330+ self.MediaManagerDock = QtGui.QDockWidget(MainWindow)
331 icon = QtGui.QIcon()
332 icon.addPixmap(QtGui.QPixmap(u':/system/system_mediamanager.png'),
333 QtGui.QIcon.Normal, QtGui.QIcon.Off)
334@@ -258,10 +115,10 @@
335 self.MediaToolBox.setObjectName(u'MediaToolBox')
336 self.MediaManagerLayout.addWidget(self.MediaToolBox)
337 self.MediaManagerDock.setWidget(self.MediaManagerContents)
338- self.mainWindow.addDockWidget(
339+ MainWindow.addDockWidget(
340 QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock)
341 # Create the service manager
342- self.ServiceManagerDock = QtGui.QDockWidget(self.mainWindow)
343+ self.ServiceManagerDock = QtGui.QDockWidget(MainWindow)
344 ServiceManagerIcon = QtGui.QIcon()
345 ServiceManagerIcon.addPixmap(
346 QtGui.QPixmap(u':/system/system_servicemanager.png'),
347@@ -273,10 +130,10 @@
348 self.ServiceManagerDock.setMinimumWidth(300)
349 self.ServiceManagerContents = ServiceManager(self)
350 self.ServiceManagerDock.setWidget(self.ServiceManagerContents)
351- self.mainWindow.addDockWidget(
352+ MainWindow.addDockWidget(
353 QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock)
354 # Create the theme manager
355- self.ThemeManagerDock = QtGui.QDockWidget(self.mainWindow)
356+ self.ThemeManagerDock = QtGui.QDockWidget(MainWindow)
357 ThemeManagerIcon = QtGui.QIcon()
358 ThemeManagerIcon.addPixmap(
359 QtGui.QPixmap(u':/system/system_thememanager.png'),
360@@ -286,97 +143,97 @@
361 self.ThemeManagerDock.setObjectName(u'ThemeManagerDock')
362 self.ThemeManagerContents = ThemeManager(self)
363 self.ThemeManagerDock.setWidget(self.ThemeManagerContents)
364- self.mainWindow.addDockWidget(
365+ MainWindow.addDockWidget(
366 QtCore.Qt.DockWidgetArea(2), self.ThemeManagerDock)
367 # Create the menu items
368- self.FileNewItem = QtGui.QAction(self.mainWindow)
369+ self.FileNewItem = QtGui.QAction(MainWindow)
370 self.FileNewItem.setIcon(
371 self.ServiceManagerContents.Toolbar.getIconFromTitle(u'New Service'))
372 self.FileNewItem.setObjectName(u'FileNewItem')
373- self.FileOpenItem = QtGui.QAction(self.mainWindow)
374+ self.FileOpenItem = QtGui.QAction(MainWindow)
375 self.FileOpenItem.setIcon(
376 self.ServiceManagerContents.Toolbar.getIconFromTitle(u'Open Service'))
377 self.FileOpenItem.setObjectName(u'FileOpenItem')
378- self.FileSaveItem = QtGui.QAction(self.mainWindow)
379+ self.FileSaveItem = QtGui.QAction(MainWindow)
380 self.FileSaveItem.setIcon(
381 self.ServiceManagerContents.Toolbar.getIconFromTitle(u'Save Service'))
382 self.FileSaveItem.setObjectName(u'FileSaveItem')
383- self.FileSaveAsItem = QtGui.QAction(self.mainWindow)
384+ self.FileSaveAsItem = QtGui.QAction(MainWindow)
385 self.FileSaveAsItem.setObjectName(u'FileSaveAsItem')
386- self.FileExitItem = QtGui.QAction(self.mainWindow)
387+ self.FileExitItem = QtGui.QAction(MainWindow)
388 ExitIcon = QtGui.QIcon()
389 ExitIcon.addPixmap(QtGui.QPixmap(u':/system/system_exit.png'),
390 QtGui.QIcon.Normal, QtGui.QIcon.Off)
391 self.FileExitItem.setIcon(ExitIcon)
392 self.FileExitItem.setObjectName(u'FileExitItem')
393- self.ImportThemeItem = QtGui.QAction(self.mainWindow)
394+ self.ImportThemeItem = QtGui.QAction(MainWindow)
395 self.ImportThemeItem.setObjectName(u'ImportThemeItem')
396- self.ImportLanguageItem = QtGui.QAction(self.mainWindow)
397+ self.ImportLanguageItem = QtGui.QAction(MainWindow)
398 self.ImportLanguageItem.setObjectName(u'ImportLanguageItem')
399- self.ExportThemeItem = QtGui.QAction(self.mainWindow)
400+ self.ExportThemeItem = QtGui.QAction(MainWindow)
401 self.ExportThemeItem.setObjectName(u'ExportThemeItem')
402- self.ExportLanguageItem = QtGui.QAction(self.mainWindow)
403+ self.ExportLanguageItem = QtGui.QAction(MainWindow)
404 self.ExportLanguageItem.setObjectName(u'ExportLanguageItem')
405- self.actionLook_Feel = QtGui.QAction(self.mainWindow)
406+ self.actionLook_Feel = QtGui.QAction(MainWindow)
407 self.actionLook_Feel.setObjectName(u'actionLook_Feel')
408- self.OptionsSettingsItem = QtGui.QAction(self.mainWindow)
409+ self.OptionsSettingsItem = QtGui.QAction(MainWindow)
410 SettingsIcon = QtGui.QIcon()
411 SettingsIcon.addPixmap(QtGui.QPixmap(u':/system/system_settings.png'),
412 QtGui.QIcon.Normal, QtGui.QIcon.Off)
413 self.OptionsSettingsItem.setIcon(SettingsIcon)
414 self.OptionsSettingsItem.setObjectName(u'OptionsSettingsItem')
415- self.ViewMediaManagerItem = QtGui.QAction(self.mainWindow)
416+ self.ViewMediaManagerItem = QtGui.QAction(MainWindow)
417 self.ViewMediaManagerItem.setCheckable(True)
418 self.ViewMediaManagerItem.setChecked(True)
419 self.ViewMediaManagerItem.setIcon(icon)
420 self.ViewMediaManagerItem.setObjectName(u'ViewMediaManagerItem')
421- self.ViewThemeManagerItem = QtGui.QAction(self.mainWindow)
422+ self.ViewThemeManagerItem = QtGui.QAction(MainWindow)
423 self.ViewThemeManagerItem.setCheckable(True)
424 self.ViewThemeManagerItem.setChecked(True)
425 self.ViewThemeManagerItem.setIcon(ThemeManagerIcon)
426 self.ViewThemeManagerItem.setObjectName(u'ViewThemeManagerItem')
427- self.ViewServiceManagerItem = QtGui.QAction(self.mainWindow)
428+ self.ViewServiceManagerItem = QtGui.QAction(MainWindow)
429 self.ViewServiceManagerItem.setCheckable(True)
430 self.ViewServiceManagerItem.setChecked(True)
431 self.ViewServiceManagerItem.setIcon(ServiceManagerIcon)
432 self.ViewServiceManagerItem.setObjectName(u'ViewServiceManagerItem')
433- self.ToolsAlertItem = QtGui.QAction(self.mainWindow)
434+ self.ToolsAlertItem = QtGui.QAction(MainWindow)
435 AlertIcon = QtGui.QIcon()
436 AlertIcon.addPixmap(QtGui.QPixmap(u':/tools/tools_alert.png'),
437 QtGui.QIcon.Normal, QtGui.QIcon.Off)
438 self.ToolsAlertItem.setIcon(AlertIcon)
439 self.ToolsAlertItem.setObjectName(u'ToolsAlertItem')
440- self.HelpDocumentationItem = QtGui.QAction(self.mainWindow)
441+ self.HelpDocumentationItem = QtGui.QAction(MainWindow)
442 ContentsIcon = QtGui.QIcon()
443 ContentsIcon.addPixmap(QtGui.QPixmap(u':/system/system_help_contents.png'),
444 QtGui.QIcon.Normal, QtGui.QIcon.Off)
445 self.HelpDocumentationItem.setIcon(ContentsIcon)
446 self.HelpDocumentationItem.setObjectName(u'HelpDocumentationItem')
447- self.HelpAboutItem = QtGui.QAction(self.mainWindow)
448+ self.HelpAboutItem = QtGui.QAction(MainWindow)
449 AboutIcon = QtGui.QIcon()
450 AboutIcon.addPixmap(QtGui.QPixmap(u':/system/system_about.png'),
451 QtGui.QIcon.Normal, QtGui.QIcon.Off)
452 self.HelpAboutItem.setIcon(AboutIcon)
453 self.HelpAboutItem.setObjectName(u'HelpAboutItem')
454- self.HelpOnlineHelpItem = QtGui.QAction(self.mainWindow)
455+ self.HelpOnlineHelpItem = QtGui.QAction(MainWindow)
456 self.HelpOnlineHelpItem.setObjectName(u'HelpOnlineHelpItem')
457- self.HelpWebSiteItem = QtGui.QAction(self.mainWindow)
458+ self.HelpWebSiteItem = QtGui.QAction(MainWindow)
459 self.HelpWebSiteItem.setObjectName(u'HelpWebSiteItem')
460- self.LanguageTranslateItem = QtGui.QAction(self.mainWindow)
461+ self.LanguageTranslateItem = QtGui.QAction(MainWindow)
462 self.LanguageTranslateItem.setObjectName(u'LanguageTranslateItem')
463- self.LanguageEnglishItem = QtGui.QAction(self.mainWindow)
464+ self.LanguageEnglishItem = QtGui.QAction(MainWindow)
465 self.LanguageEnglishItem.setObjectName(u'LanguageEnglishItem')
466- self.ToolsAddToolItem = QtGui.QAction(self.mainWindow)
467+ self.ToolsAddToolItem = QtGui.QAction(MainWindow)
468 AddToolIcon = QtGui.QIcon()
469 AddToolIcon.addPixmap(QtGui.QPixmap(u':/tools/tools_add.png'),
470 QtGui.QIcon.Normal, QtGui.QIcon.Off)
471 self.ToolsAddToolItem.setIcon(AddToolIcon)
472 self.ToolsAddToolItem.setObjectName(u'ToolsAddToolItem')
473- self.action_Preview_Panel = QtGui.QAction(self.mainWindow)
474+ self.action_Preview_Panel = QtGui.QAction(MainWindow)
475 self.action_Preview_Panel.setCheckable(True)
476 self.action_Preview_Panel.setChecked(True)
477 self.action_Preview_Panel.setObjectName(u'action_Preview_Panel')
478- self.ModeLiveItem = QtGui.QAction(self.mainWindow)
479+ self.ModeLiveItem = QtGui.QAction(MainWindow)
480 self.ModeLiveItem.setObjectName(u'ModeLiveItem')
481 self.FileImportMenu.addAction(self.ImportThemeItem)
482 self.FileImportMenu.addAction(self.ImportLanguageItem)
483@@ -419,43 +276,20 @@
484 self.MenuBar.addAction(self.ToolsMenu.menuAction())
485 self.MenuBar.addAction(self.HelpMenu.menuAction())
486 # Initialise the translation
487- self.retranslateUi()
488+ self.retranslateUi(MainWindow)
489 self.MediaToolBox.setCurrentIndex(0)
490 # Connect up some signals and slots
491 QtCore.QObject.connect(self.FileExitItem,
492- QtCore.SIGNAL(u'triggered()'), self.mainWindow.close)
493- QtCore.QObject.connect(self.ImportThemeItem,
494- QtCore.SIGNAL(u'triggered()'), self.ThemeManagerContents.onImportTheme)
495- QtCore.QObject.connect(self.ExportThemeItem,
496- QtCore.SIGNAL(u'triggered()'), self.ThemeManagerContents.onExportTheme)
497- QtCore.QObject.connect(self.ViewMediaManagerItem,
498- QtCore.SIGNAL(u'triggered(bool)'), self.MediaManagerDock.setVisible)
499- QtCore.QObject.connect(self.ViewServiceManagerItem,
500- QtCore.SIGNAL(u'triggered(bool)'), self.ServiceManagerDock.setVisible)
501- QtCore.QObject.connect(self.ViewThemeManagerItem,
502- QtCore.SIGNAL(u'triggered(bool)'), self.ThemeManagerDock.setVisible)
503- QtCore.QObject.connect(self.action_Preview_Panel,
504- QtCore.SIGNAL(u'toggled(bool)'), self.PreviewController.Panel.setVisible)
505- QtCore.QObject.connect(self.MediaManagerDock,
506- QtCore.SIGNAL(u'visibilityChanged(bool)'), self.ViewMediaManagerItem.setChecked)
507- QtCore.QObject.connect(self.ServiceManagerDock,
508- QtCore.SIGNAL(u'visibilityChanged(bool)'), self.ViewServiceManagerItem.setChecked)
509- QtCore.QObject.connect(self.ThemeManagerDock,
510- QtCore.SIGNAL(u'visibilityChanged(bool)'), self.ViewThemeManagerItem.setChecked)
511- QtCore.QObject.connect(self.HelpAboutItem,
512- QtCore.SIGNAL(u'triggered()'), self.onHelpAboutItemClicked)
513- QtCore.QObject.connect(self.ToolsAlertItem,
514- QtCore.SIGNAL(u'triggered()'), self.onToolsAlertItemClicked)
515- QtCore.QObject.connect(self.OptionsSettingsItem,
516- QtCore.SIGNAL(u'triggered()'), self.onOptionsSettingsItemClicked)
517- QtCore.QMetaObject.connectSlotsByName(self.mainWindow)
518+ QtCore.SIGNAL(u'triggered()'), MainWindow.close)
519+ QtCore.QMetaObject.connectSlotsByName(MainWindow)
520
521- def retranslateUi(self):
522+ def retranslateUi(self, MainWindow):
523 """
524 Set up the translation system
525 """
526- self.mainTitle = translate(u'mainWindow', u'OpenLP 2.0')
527- self.mainWindow.setWindowTitle(self.mainTitle)
528+ MainWindow.mainTitle = translate(u'mainWindow', u'OpenLP 2.0')
529+ MainWindow.defaultThemeText = translate(u'mainWindow', 'Default Theme: ')
530+ MainWindow.setWindowTitle(MainWindow.mainTitle)
531 self.FileMenu.setTitle(translate(u'mainWindow', u'&File'))
532 self.FileImportMenu.setTitle(translate(u'mainWindow', u'&Import'))
533 self.FileExportMenu.setTitle(translate(u'mainWindow', u'&Export'))
534@@ -471,6 +305,8 @@
535 translate(u'mainWindow', u'Service Manager'))
536 self.ThemeManagerDock.setWindowTitle(
537 translate(u'mainWindow', u'Theme Manager'))
538+ self.DefaultThemeLabel.setText(MainWindow.defaultThemeText + \
539+ self.ThemeManagerContents.getDefault())
540 self.FileNewItem.setText(translate(u'mainWindow', u'&New'))
541 self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service'))
542 self.FileNewItem.setStatusTip(
543@@ -548,3 +384,198 @@
544 self.action_Preview_Panel.setText(
545 translate(u'mainWindow', u'&Preview Pane'))
546 self.ModeLiveItem.setText(translate(u'mainWindow', u'&Live'))
547+
548+
549+class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
550+ """
551+ The main window.
552+ """
553+ global log
554+ log = logging.getLogger(u'MainWindow')
555+ log.info(u'MainWindow loaded')
556+
557+ def __init__(self, screens):
558+ """
559+ This constructor sets up the interface, the various managers, and the
560+ plugins.
561+ """
562+ QtGui.QMainWindow.__init__(self)
563+ self.closeEvent = self.onCloseEvent
564+ self.screenList = screens
565+ self.oosNotSaved = False
566+ self.settingsmanager = SettingsManager(screens)
567+ self.mainDisplay = MainDisplay(None, screens)
568+ self.EventManager = EventManager()
569+ self.generalConfig = PluginConfig(u'General')
570+ self.alertForm = AlertForm(self)
571+ self.aboutForm = AboutForm()
572+ self.settingsForm = SettingsForm(self.screenList, self)
573+ # Set up the path with plugins
574+ pluginpath = os.path.split(os.path.abspath(__file__))[0]
575+ pluginpath = os.path.abspath(
576+ os.path.join(pluginpath, u'..', u'..', u'plugins'))
577+ self.plugin_manager = PluginManager(pluginpath)
578+ self.plugin_helpers = {}
579+ # Set up the interface
580+ self.setupUi(self)
581+ # Set up signals and slots
582+ QtCore.QObject.connect(self.ImportThemeItem,
583+ QtCore.SIGNAL(u'triggered()'), self.ThemeManagerContents.onImportTheme)
584+ QtCore.QObject.connect(self.ExportThemeItem,
585+ QtCore.SIGNAL(u'triggered()'), self.ThemeManagerContents.onExportTheme)
586+ QtCore.QObject.connect(self.ViewMediaManagerItem,
587+ QtCore.SIGNAL(u'triggered(bool)'), self.MediaManagerDock.setVisible)
588+ QtCore.QObject.connect(self.ViewServiceManagerItem,
589+ QtCore.SIGNAL(u'triggered(bool)'), self.ServiceManagerDock.setVisible)
590+ QtCore.QObject.connect(self.ViewThemeManagerItem,
591+ QtCore.SIGNAL(u'triggered(bool)'), self.ThemeManagerDock.setVisible)
592+ QtCore.QObject.connect(self.action_Preview_Panel,
593+ QtCore.SIGNAL(u'toggled(bool)'), self.PreviewController.Panel.setVisible)
594+ QtCore.QObject.connect(self.MediaManagerDock,
595+ QtCore.SIGNAL(u'visibilityChanged(bool)'), self.ViewMediaManagerItem.setChecked)
596+ QtCore.QObject.connect(self.ServiceManagerDock,
597+ QtCore.SIGNAL(u'visibilityChanged(bool)'), self.ViewServiceManagerItem.setChecked)
598+ QtCore.QObject.connect(self.ThemeManagerDock,
599+ QtCore.SIGNAL(u'visibilityChanged(bool)'), self.ViewThemeManagerItem.setChecked)
600+ QtCore.QObject.connect(self.HelpAboutItem,
601+ QtCore.SIGNAL(u'triggered()'), self.onHelpAboutItemClicked)
602+ QtCore.QObject.connect(self.ToolsAlertItem,
603+ QtCore.SIGNAL(u'triggered()'), self.onToolsAlertItemClicked)
604+ QtCore.QObject.connect(self.OptionsSettingsItem,
605+ QtCore.SIGNAL(u'triggered()'), self.onOptionsSettingsItemClicked)
606+ #warning cyclic dependency
607+ #RenderManager needs to call ThemeManager and
608+ #ThemeManager needs to call RenderManager
609+ self.RenderManager = RenderManager(self.ThemeManagerContents,
610+ self.screenList, self.getMonitorNumber())
611+ log.info(u'Load Plugins')
612+ #make the controllers available to the plugins
613+ self.plugin_helpers[u'preview'] = self.PreviewController
614+ self.plugin_helpers[u'live'] = self.LiveController
615+ self.plugin_helpers[u'event'] = self.EventManager
616+ self.plugin_helpers[u'theme'] = self.ThemeManagerContents
617+ self.plugin_helpers[u'render'] = self.RenderManager
618+ self.plugin_helpers[u'service'] = self.ServiceManagerContents
619+ self.plugin_helpers[u'settings'] = self.settingsForm
620+ self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers,
621+ self.EventManager)
622+ # hook methods have to happen after find_plugins. Find plugins needs the
623+ # controllers hence the hooks have moved from setupUI() to here
624+
625+ # Find and insert settings tabs
626+ log.info(u'hook settings')
627+ self.plugin_manager.hook_settings_tabs(self.settingsForm)
628+ # Find and insert media manager items
629+ log.info(u'hook media')
630+ self.plugin_manager.hook_media_manager(self.MediaToolBox)
631+ # Call the hook method to pull in import menus.
632+ log.info(u'hook menus')
633+ self.plugin_manager.hook_import_menu(self.FileImportMenu)
634+ # Call the hook method to pull in export menus.
635+ self.plugin_manager.hook_export_menu(self.FileExportMenu)
636+ # Call the initialise method to setup plugins.
637+ log.info(u'initialise plugins')
638+ self.plugin_manager.initialise_plugins()
639+ # Once all components are initialised load the Themes
640+ log.info(u'Load Themes')
641+ self.ThemeManagerContents.loadThemes()
642+ # Register the main form as an event consumer.
643+ self.EventManager.register(self)
644+
645+ def getMonitorNumber(self):
646+ """
647+ Set up the default behaviour of the monitor configuration in
648+ here. Currently it is set to default to monitor 0 if the saved
649+ monitor number does not exist.
650+ """
651+ screen_number = int(self.generalConfig.get_config(u'Monitor', 0))
652+ if screen_number not in self.screenList:
653+ screen_number = 0
654+ return screen_number
655+
656+ def show(self):
657+ """
658+ Show the main form, as well as the display form
659+ """
660+ self.showMaximized()
661+ screen_number = self.getMonitorNumber()
662+ self.mainDisplay.setup(screen_number)
663+ self.setFocus()
664+
665+ def onHelpAboutItemClicked(self):
666+ """
667+ Show the About form
668+ """
669+ self.aboutForm.exec_()
670+
671+ def onToolsAlertItemClicked(self):
672+ """
673+ Show the Alert form
674+ """
675+ self.alertForm.exec_()
676+
677+ def onOptionsSettingsItemClicked(self):
678+ """
679+ Show the Settings dialog
680+ """
681+ self.settingsForm.exec_()
682+ screen_number = self.getMonitorNumber()
683+ self.RenderManager.update_display(screen_number)
684+ self.mainDisplay.setup(screen_number)
685+
686+ def onCloseEvent(self, event):
687+ """
688+ Hook to close the main window and display windows on exit
689+ """
690+ if self.oosNotSaved == True:
691+ ret = QtGui.QMessageBox.question(None,
692+ translate(u'mainWindow', u'Save Changes to Service?'),
693+ translate(u'mainWindow', u'Your service has been changed, do you want to save those changes?'),
694+ QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Cancel | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Save),
695+ QtGui.QMessageBox.Save)
696+ if ret == QtGui.QMessageBox.Save:
697+ self.ServiceManagerContents.onSaveService()
698+ self.mainDisplay.close()
699+ self.cleanUp()
700+ event.accept()
701+ elif ret == QtGui.QMessageBox.Discard:
702+ self.mainDisplay.close()
703+ self.cleanUp()
704+ event.accept()
705+ else:
706+ event.ignore()
707+ else:
708+ self.mainDisplay.close()
709+ self.cleanUp()
710+ event.accept()
711+
712+ def cleanUp(self):
713+ # Call the cleanup method to shutdown plugins.
714+ log.info(u'cleanup plugins')
715+ self.plugin_manager.initialise_plugins()
716+
717+ def OosChanged(self, reset=False, oosName=None):
718+ """
719+ Hook to change the title if the OOS has been changed
720+ reset - tells if the OOS has been cleared or saved
721+ oosName - is the name of the OOS (if it has one)
722+ """
723+ if not oosName:
724+ service_name = u'(unsaved service)'
725+ else:
726+ service_name = oosName
727+ if reset == True:
728+ self.oosNotSaved = False
729+ title = u'%s - %s' % (self.mainTitle, service_name)
730+ else:
731+ self.oosNotSaved = True
732+ title = u'%s - %s*' % (self.mainTitle, service_name)
733+ self.setWindowTitle(title)
734+
735+ def handle_event(self, event):
736+ if event.event_type == EventType.ThemeListChanged:
737+ themes = self.ThemeManagerContents.getThemes()
738+ self.ServiceManagerContents.updateThemeList(themes)
739+ self.settingsForm.ThemesTab.updateThemeList(themes)
740+ self.DefaultThemeLabel.setText(self.defaultThemeText + \
741+ self.ThemeManagerContents.getDefault())
742
743=== modified file 'openlp/core/ui/slidecontroller.py'
744--- openlp/core/ui/slidecontroller.py 2009-07-12 20:38:34 +0000
745+++ openlp/core/ui/slidecontroller.py 2009-08-09 12:05:54 +0000
746@@ -24,9 +24,12 @@
747 from openlp.core.lib import OpenLPToolbar, translate, buildIcon
748
749 class SlideList(QtGui.QTableWidget):
750-
751- def __init__(self,parent=None,name=None):
752- QtGui.QTableWidget.__init__(self,parent.Controller)
753+ """
754+ Customised version of QTableWidget which can respond to keyboard
755+ events.
756+ """
757+ def __init__(self, parent=None, name=None):
758+ QtGui.QTableWidget.__init__(self, parent.Controller)
759 self.parent = parent
760
761 def keyPressEvent(self, event):
762@@ -56,7 +59,7 @@
763 global log
764 log = logging.getLogger(u'SlideController')
765
766- def __init__(self, parent, isLive=False):
767+ def __init__(self, parent, isLive=False):
768 """
769 Set up the Slide Controller.
770 """
771
772=== modified file 'openlp/core/ui/thememanager.py'
773--- openlp/core/ui/thememanager.py 2009-08-07 19:05:00 +0000
774+++ openlp/core/ui/thememanager.py 2009-08-09 17:58:37 +0000
775@@ -28,7 +28,9 @@
776
777 from openlp.core.ui import AmendThemeForm, ServiceManager
778 from openlp.core.theme import Theme
779-from openlp.core.lib import PluginConfig, Event, EventType, EventManager, OpenLPToolbar, ThemeXML, Renderer, translate, file_to_xml, buildIcon
780+from openlp.core.lib import PluginConfig, Event, EventType, \
781+ EventManager, OpenLPToolbar, ThemeXML, Renderer, translate, \
782+ file_to_xml, buildIcon
783 from openlp.core.utils import ConfigHelper
784
785 class ThemeManager(QtGui.QWidget):
786@@ -39,7 +41,7 @@
787 log = logging.getLogger(u'ThemeManager')
788
789 def __init__(self, parent):
790- QtGui.QWidget.__init__(self)
791+ QtGui.QWidget.__init__(self, parent)
792 self.parent = parent
793 self.Layout = QtGui.QVBoxLayout(self)
794 self.Layout.setSpacing(0)
795@@ -81,6 +83,9 @@
796 self.servicePath = self.config.get_data_path()
797 self.global_theme = unicode(self.config.get_config(u'theme global theme', u''))
798
799+ def getDefault(self):
800+ return self.global_theme
801+
802 def changeGlobal(self, index):
803 for count in range (0, self.ThemeListWidget.count()):
804 item = self.ThemeListWidget.item(count)
805@@ -91,10 +96,10 @@
806 #Set the new name
807 if count == index.row():
808 self.global_theme = unicode(self.ThemeListWidget.item(count).text())
809- name = (u'(%s):%s' % (translate(u'ThemeManager', u'default'), self.global_theme))
810+ name = u'%s (%s)' % (self.global_theme, translate(u'ThemeManager', u'default'))
811 self.ThemeListWidget.item(count).setText(name)
812 self.config.set_config(u'theme global theme', self.global_theme)
813- self.push_themes()
814+ self.pushThemes()
815
816 def onAddTheme(self):
817 self.amendThemeForm.loadTheme(None)
818@@ -134,7 +139,7 @@
819 pass
820 #As we do not reload the themes push out the change
821 #Reaload the list as the internal lists and events need to be triggered
822- self.push_themes()
823+ self.pushThemes()
824
825 def onExportTheme(self):
826 pass
827@@ -168,7 +173,7 @@
828 (path, filename) = os.path.split(unicode(file))
829 textName = os.path.splitext(name)[0]
830 if textName == self.global_theme:
831- name = (u'(%s):%s' % (translate(u'ThemeManager', u'default'), textName))
832+ name = u'%s (%s)' % (textName, translate(u'ThemeManager', u'default'))
833 else:
834 name = textName
835 item_name = QtGui.QListWidgetItem(name)
836@@ -176,12 +181,10 @@
837 item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(textName))
838 self.ThemeListWidget.addItem(item_name)
839 self.themelist.append(textName)
840- self.push_themes()
841+ self.pushThemes()
842
843- def push_themes(self):
844+ def pushThemes(self):
845 self.parent.EventManager.post_event(Event(EventType.ThemeListChanged))
846- self.parent.ServiceManagerContents.updateThemeList(self.getThemes())
847- self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes())
848
849 def getThemes(self):
850 return self.themelist
851
852=== modified file 'openlp/plugins/images/lib/imageslidecontroller.py'
853--- openlp/plugins/images/lib/imageslidecontroller.py 2009-07-06 16:34:13 +0000
854+++ openlp/plugins/images/lib/imageslidecontroller.py 2009-08-09 17:58:37 +0000
855@@ -93,7 +93,7 @@
856 Go to the last slide.
857 """
858 if self.PreviewListWidget.rowCount() > 1:
859- self.timer_id = self.startTimer(int(self.TimeoutSpinBox.value()) * 1000)
860+ self.timer_id = self.startTimer(int(self.TimeoutSpinBox.value()) * 1000)
861
862 def onStopLoop(self):
863 """