Merge lp:~trb143/openlp/servicing2 into lp:openlp

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

Ok here it comes.
Changes to mediamanger superclass to allow it to work better with all plugins
removal of imagelistwithpreview from Images plugin.
Fixes to thememanager so delete does not eat ALL you themes.
Start of ImageSlideController plugin toolbar thinggy.

Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

If a class is a Python class, please use the Python naming convention. If your class is supposed to be a GUI class, please inherit it from QWidget.

450 +class BaseToolbar(object):
451 +
452 + def __init__(self, isLive):
453 + self.Toolbar = None
454 + self.PreviewListView = QtGui.QListWidget()
455 + self.PreviewListData = None
456 + self.isLive = isLive
457 + self.defineToolbar()

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp/core/lib/__init__.py'
2--- openlp/core/lib/__init__.py 2009-06-24 20:15:24 +0000
3+++ openlp/core/lib/__init__.py 2009-06-29 05:13:06 +0000
4@@ -39,7 +39,7 @@
5 ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
6 QtGui.QIcon.Off)
7 else:
8- ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QImage(icon)),
9+ ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
10 QtGui.QIcon.Normal, QtGui.QIcon.Off)
11 return ButtonIcon
12
13@@ -75,7 +75,7 @@
14 from renderer import Renderer
15 from rendermanager import RenderManager
16 from mediamanageritem import MediaManagerItem
17-from baselistwithdnd import BaseListWithDnD
18+from baselistwithdnd import BaseListWithDnD
19 from listwithpreviews import ListWithPreviews
20
21 __all__ = [ 'translate', 'file_to_xml', 'str_to_bool',
22
23=== modified file 'openlp/core/lib/baselistwithdnd.py'
24--- openlp/core/lib/baselistwithdnd.py 2009-06-26 16:17:55 +0000
25+++ openlp/core/lib/baselistwithdnd.py 2009-06-27 15:33:03 +0000
26@@ -24,13 +24,13 @@
27 from openlp.core.lib.toolbar import *
28 from openlp.core.lib import translate
29
30-class BaseListWithDnD(QtGui.QListView):
31+class BaseListWithDnD(QtGui.QListWidget):
32 """
33 Please put a short description of what this class does in here.
34 """
35
36 def __init__(self,parent = None):
37- QtGui.QListView.__init__(self,parent)
38+ QtGui.QListWidget.__init__(self,parent)
39 # this must be set by the class which is inheriting
40 assert(self.PluginName)
41
42
43=== modified file 'openlp/core/lib/mediamanageritem.py'
44--- openlp/core/lib/mediamanageritem.py 2009-06-26 16:40:49 +0000
45+++ openlp/core/lib/mediamanageritem.py 2009-06-29 05:07:32 +0000
46@@ -18,6 +18,7 @@
47 Place, Suite 330, Boston, MA 02111-1307 USA
48 """
49 import types
50+import os
51
52 from PyQt4 import QtCore, QtGui
53
54@@ -50,7 +51,6 @@
55 if title is not None:
56 self.title = title
57 self.Toolbar = None
58- #self.ConfigSection = None
59 self.PageLayout = QtGui.QVBoxLayout(self)
60 self.PageLayout.setSpacing(0)
61 self.PageLayout.setMargin(0)
62@@ -118,13 +118,17 @@
63 # self.PluginTextShort # eg "Image" for the image plugin
64 # self.ConfigSection - where the items in the media manager are stored
65 # this could potentially be self.PluginTextShort.lower()
66+ # self.IconPath=u'images/images' - allows specific icons to be used
67+ # self.hasFileIcon - Is the file Icon required
68+ # self.hasEditIcon - Is the edit Icon required
69+ # self.hasNewIcon - Is the new Icon required
70 #
71 # self.OnNewPrompt=u'Select Image(s)'
72 # self.OnNewFileMasks=u'Images (*.jpg *jpeg *.gif *.png *.bmp)'
73 # assumes that the new action is to load a file. If not, override onnew
74 # self.ListViewWithDnD_class - there is a base list class with DnD assigned to it (openlp.core.lib.BaseListWithDnD())
75- # each plugin needs to inherit a class from this and pass that *class* (not an instance) to here
76- # via the ListViewWithDnD_class member
77+ # each plugin needs to inherit a class from this and pass that *class* (not an instance) to here
78+ # via the ListViewWithDnD_class member
79 # The assumption is that given that at least two plugins are of the form
80 # "text with an icon" then all this will help
81 # even for plugins of another sort, the setup of the right-click menu, common toolbar
82@@ -139,16 +143,29 @@
83 # Add a toolbar
84 self.addToolbar()
85 # Create buttons for the toolbar
86- ## New Song Button ##
87- self.addToolbarButton(
88- translate(self.TranslationContext, u'Load '+self.PluginTextShort),
89- translate(self.TranslationContext, u'Load item into openlp.org'),
90- u':/images/image_load.png', self.onNewClick, u'ImageNewItem')
91- ## Delete Song Button ##
92+ ## File Button ##
93+ if self.hasFileIcon:
94+ self.addToolbarButton(
95+ translate(self.TranslationContext, u'Load '+self.PluginTextShort),
96+ translate(self.TranslationContext, u'Load a new '+self.PluginTextShort),
97+ u':'+self.IconPath+ u'_load.png', self.onFileClick, self.PluginTextShort+u'FileItem')
98+ ## New Button ##
99+ if self.hasNewIcon:
100+ self.addToolbarButton(
101+ translate(self.TranslationContext, u'New '+self.PluginTextShort),
102+ translate(self.TranslationContext, u'Add a new '+self.PluginTextShort),
103+ u':'+self.IconPath+ u'_load.png', self.onNewClick, self.PluginTextShort+u'NewItem')
104+ ## Edit Button ##
105+ if self.hasEditIcon:
106+ self.addToolbarButton(
107+ translate(self.TranslationContext, u'Edit '+self.PluginTextShort),
108+ translate(self.TranslationContext, u'Edit the selected '+self.PluginTextShort),
109+ u':'+self.IconPath+ u'_load.png', self.onEditClick, self.PluginTextShort+u'EditItem')
110+ ## Delete Button ##
111 self.addToolbarButton(
112 translate(self.TranslationContext, u'Delete '+self.PluginTextShort),
113 translate(self.TranslationContext, u'Delete the selected item'),
114- u':/images/image_delete.png', self.onDeleteClick, u'DeleteItem')
115+ u':'+self.IconPath+ u'_delete.png', self.onDeleteClick, self.PluginTextShort+u'DeleteItem')
116 ## Separator Line ##
117 self.addToolbarSeparator()
118 ## Preview Button ##
119@@ -166,20 +183,27 @@
120 translate(self.TranslationContext, u'Add '+self.PluginTextShort+u' To Service'),
121 translate(self.TranslationContext, u'Add the selected item(s) to the service'),
122 u':/system/system_add.png', self.onAddClick, self.PluginTextShort+u'AddItem')
123+ #Allow the plugin to define it's own header
124+ self.addHeaderBar()
125 #Add the List widget
126 self.ListView = self.ListViewWithDnD_class()
127 self.ListView.uniformItemSizes = True
128- self.ListData = ListWithPreviews()
129- self.ListView.setModel(self.ListData)
130 self.ListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
131 self.ListView.setSpacing(1)
132 self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
133 self.ListView.setAlternatingRowColors(True)
134 self.ListView.setDragEnabled(True)
135 self.ListView.setObjectName(self.PluginTextShort+u'ListView')
136+ #Add tp PageLayout
137 self.PageLayout.addWidget(self.ListView)
138 #define and add the context menu
139 self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
140+ if self.hasEditIcon:
141+ self.ListView.addAction(self.contextMenuAction(self.ListView,
142+ ':' +self.IconPath+u'_new.png',
143+ translate(self.TranslationContext, u'&Edit '+self.PluginTextShort),
144+ self.onEditClick))
145+ self.ListView.addAction(self.contextMenuSeparator(self.SongListWidget))
146 self.ListView.addAction(self.contextMenuAction(
147 self.ListView, ':/system/system_preview.png',
148 translate(self.TranslationContext, u'&Preview '+self.PluginTextShort),
149@@ -195,52 +219,63 @@
150 QtCore.QObject.connect(self.ListView,
151 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick)
152
153- def initialise(self):
154- self.loadList(self.parent.config.load_list(self.ConfigSection))
155+ def addHeaderBar(self):
156+ pass
157
158- def onNewClick(self):
159+ def onFileClick(self):
160 files = QtGui.QFileDialog.getOpenFileNames(None,
161 translate(self.TranslationContext, self.OnNewPrompt),
162 self.parent.config.get_last_dir(),
163 self.OnNewFileMasks)
164- log.info(u'New files(s)', unicode(files))
165+ log.info(u'New files(s)%s', unicode(files))
166 if len(files) > 0:
167 self.loadList(files)
168 dir, filename = os.path.split(unicode(files[0]))
169 self.parent.config.set_last_dir(dir)
170- self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList())
171+ #self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList())
172+
173+ def getFileList(self):
174+ count = 0
175+ while count < len(self.ListView):
176+ filelist = [set.ListView.item(count).text()]
177+ count += 1
178+ return filelist
179
180 def loadList(self, list):
181- for file in list:
182- self.ListData.addRow(file)
183+ raise NotImplementedError(u'MediaManagerItem.loadList needs to be defined by the plugin')
184+
185+ def onNewClick(self):
186+ raise NotImplementedError(u'MediaManagerItem.onNewClick needs to be defined by the plugin')
187+
188+ def onEditClick(self):
189+ raise NotImplementedError(u'MediaManagerItem.onEditClick needs to be defined by the plugin')
190
191 def onDeleteClick(self):
192- indexes = self.ListView.selectedIndexes()
193- for index in indexes:
194- current_row = int(index.row())
195- self.ListData.removeRow(current_row)
196- self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList())
197+ raise NotImplementedError(u'MediaManagerItem.onDeleteClick needs to be defined by the plugin')
198
199- def generateSlideData(self):
200+ def generateSlideData(self, item):
201 raise NotImplementedError(u'MediaManagerItem.generateSlideData needs to be defined by the plugin')
202
203 def onPreviewClick(self):
204 log.debug(self.PluginTextShort+u'Preview Requested')
205 service_item = ServiceItem(self.parent)
206- service_item.addIcon(u':/media/media_image.png')
207+ service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png')
208 self.generateSlideData(service_item)
209 self.parent.preview_controller.addServiceItem(service_item)
210+ self.ListView.clearSelection()
211
212 def onLiveClick(self):
213- log.debug(self.PluginTextShort+u' Live Requested')
214+ log.debug(self.PluginTextShort + u' Live Requested')
215 service_item = ServiceItem(self.parent)
216- service_item.addIcon(u':/media/media_image.png')
217+ service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png')
218 self.generateSlideData(service_item)
219 self.parent.live_controller.addServiceItem(service_item)
220+ self.ListView.clearSelection()
221
222 def onAddClick(self):
223 log.debug(self.PluginTextShort+u' Add Requested')
224 service_item = ServiceItem(self.parent)
225- service_item.addIcon(u':/media/media_image.png')
226+ service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png')
227 self.generateSlideData(service_item)
228 self.parent.service_manager.addServiceItem(service_item)
229+ self.ListView.clearSelection()
230
231=== modified file 'openlp/core/lib/plugin.py'
232--- openlp/core/lib/plugin.py 2009-06-24 20:15:24 +0000
233+++ openlp/core/lib/plugin.py 2009-06-28 06:54:12 +0000
234@@ -101,7 +101,8 @@
235 self.event_manager = plugin_helpers[u'event']
236 self.render_manager = plugin_helpers[u'render']
237 self.service_manager = plugin_helpers[u'service']
238- self.settings= plugin_helpers[u'settings']
239+ self.settings = plugin_helpers[u'settings']
240+ self.slideManager = plugin_helpers[u'slideManager']
241 self.dnd_id=None
242
243 def check_pre_conditions(self):
244
245=== modified file 'openlp/core/lib/toolbar.py'
246--- openlp/core/lib/toolbar.py 2009-06-16 18:21:24 +0000
247+++ openlp/core/lib/toolbar.py 2009-06-29 05:07:32 +0000
248@@ -28,7 +28,7 @@
249 Lots of toolbars around the place, so it makes sense to have a common way to manage them
250 """
251 def __init__(self, parent):
252- QtGui.QToolBar.__init__(self, parent)
253+ QtGui.QToolBar.__init__(self, None)
254 # useful to be able to reuse button icons...
255 self.icons = {}
256 self.log = logging.getLogger(u'OpenLPToolbar')
257
258=== modified file 'openlp/core/ui/__init__.py'
259--- openlp/core/ui/__init__.py 2009-06-26 16:39:16 +0000
260+++ openlp/core/ui/__init__.py 2009-06-29 05:07:32 +0000
261@@ -17,6 +17,7 @@
262 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
263 Place, Suite 330, Boston, MA 02111-1307 USA
264 """
265+from slidecontroller import BaseToolbar
266 from slidecontrollermanager import SlideControllerManager
267 from maindisplay import MainDisplay
268 from amendthemeform import AmendThemeForm
269@@ -32,5 +33,5 @@
270 from thememanager import ThemeManager
271 from mainwindow import MainWindow
272
273-__all__ = ['SplashScreen', 'AboutForm', 'SettingsForm',
274+__all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'BaseToolbar'
275 'MainWindow', 'MainDisplay', 'SlideController', 'ServiceManager', 'ThemeManager', 'AmendThemeForm']
276
277=== modified file 'openlp/core/ui/mainwindow.py'
278--- openlp/core/ui/mainwindow.py 2009-06-26 16:39:16 +0000
279+++ openlp/core/ui/mainwindow.py 2009-06-29 05:07:32 +0000
280@@ -50,7 +50,7 @@
281 self.alertForm = AlertForm(self)
282 self.aboutForm = AboutForm()
283 self.settingsForm = SettingsForm(self.screenList, self)
284- self.slideControllerManager = SlideControllerManager()
285+ self.slideControllerManager = SlideControllerManager(self)
286 # Set up the path with plugins
287 pluginpath = os.path.split(os.path.abspath(__file__))[0]
288 pluginpath = os.path.abspath(
289@@ -73,6 +73,7 @@
290 self.plugin_helpers[u'render'] = self.RenderManager
291 self.plugin_helpers[u'service'] = self.ServiceManagerContents
292 self.plugin_helpers[u'settings'] = self.settingsForm
293+ self.plugin_helpers[u'slideManager'] = self.slideControllerManager
294 self.plugin_manager.find_plugins(pluginpath, self.plugin_helpers,
295 self.EventManager)
296 # hook methods have to happen after find_plugins. Find plugins needs the
297@@ -168,11 +169,8 @@
298 self.ControlSplitter.setObjectName(u'ControlSplitter')
299 self.MainContentLayout.addWidget(self.ControlSplitter)
300 # Create slide controllers
301- PreviewController = SlideController(self.ControlSplitter, self)
302- LiveController = SlideController(self.ControlSplitter, self, True)
303- self.slideControllerManager.add_controllers(u'base', PreviewController, LiveController)
304- self.PreviewController = self.slideControllerManager.getPreviewController(u'base')
305- self.LiveController = self.slideControllerManager.getLiveController(u'base')
306+ self.PreviewController = SlideController(self)
307+ self.LiveController = SlideController(self, True)
308 # Create menu
309 self.MenuBar = QtGui.QMenuBar(self.mainWindow)
310 self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))
311
312=== modified file 'openlp/core/ui/servicemanager.py'
313--- openlp/core/ui/servicemanager.py 2009-06-26 16:39:16 +0000
314+++ openlp/core/ui/servicemanager.py 2009-06-29 17:37:46 +0000
315@@ -29,6 +29,22 @@
316 contextMenuAction, contextMenuSeparator
317 from openlp.core.utils import ConfigHelper
318
319+class ServiceManagerList(QtGui.QTreeWidget):
320+
321+ def __init__(self,parent=None,name=None):
322+ QtGui.QListView.__init__(self,parent)
323+ self.parent = parent
324+
325+ def keyPressEvent(self, event):
326+ if type(event) == QtGui.QKeyEvent:
327+ #here accept the event and do something
328+ if event.key() == QtCore.Qt.Key_Enter:
329+ self.parent.makeLive()
330+ event.accept()
331+ event.ignore()
332+ else:
333+ event.ignore()
334+
335 class ServiceManager(QtGui.QWidget):
336 """
337 Manages the orders of service. Currently this involves taking
338@@ -66,7 +82,7 @@
339 self.Toolbar.addAction(self.ThemeWidget)
340 self.Layout.addWidget(self.Toolbar)
341 # Create the service manager list
342- self.ServiceManagerList = QtGui.QTreeWidget(self)
343+ self.ServiceManagerList = ServiceManagerList(self)
344 self.ServiceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed)
345 self.ServiceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
346 self.ServiceManagerList.setAlternatingRowColors(True)
347
348=== modified file 'openlp/core/ui/slidecontroller.py'
349--- openlp/core/ui/slidecontroller.py 2009-06-23 16:25:40 +0000
350+++ openlp/core/ui/slidecontroller.py 2009-06-29 05:07:32 +0000
351@@ -122,20 +122,20 @@
352
353 class SlideController(QtGui.QWidget):
354 """
355- SlideController is THE slide controller widget. This widget is what the user
356+ SlideController is the slide controller widget. This widget is what the user
357 uses to control the displaying of verses/slides/etc on the screen.
358 """
359 global log
360 log = logging.getLogger(u'SlideController')
361
362- def __init__(self, controlSplitter, parent, isLive=False):
363+ def __init__(self, parent, isLive=False):
364 """
365 Set up the Slide Controller.
366 """
367 QtGui.QWidget.__init__(self, parent.mainWindow)
368 self.isLive = isLive
369 self.parent = parent
370- self.Panel = QtGui.QWidget(controlSplitter)
371+ self.Panel = QtGui.QWidget(parent.ControlSplitter)
372 self.Splitter = QtGui.QSplitter(self.Panel)
373 self.Splitter.setOrientation(QtCore.Qt.Vertical)
374 # Layout for holding panel
375@@ -166,39 +166,17 @@
376 self.PreviewListView.setSpacing(0)
377 self.PreviewListView.setObjectName(u'PreviewListView')
378 self.ControllerLayout.addWidget(self.PreviewListView)
379- # Controller toolbar
380- self.Toolbar = OpenLPToolbar(self.Controller)
381- sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
382- QtGui.QSizePolicy.Fixed)
383- sizeToolbarPolicy.setHorizontalStretch(0)
384- sizeToolbarPolicy.setVerticalStretch(0)
385- sizeToolbarPolicy.setHeightForWidth(
386- self.Toolbar.sizePolicy().hasHeightForWidth())
387- if self.isLive:
388- self.Toolbar.addToolbarButton(u'First Slide',
389- u':/slides/slide_first.png',
390- translate(u'SlideController', u'Move to first'),
391- self.onSlideSelectedFirst)
392- self.Toolbar.addToolbarButton(u'Last Slide',
393- u':/slides/slide_previous.png',
394- translate(u'SlideController', u'Move to previous'),
395- self.onSlideSelectedPrevious)
396- self.Toolbar.addToolbarButton(u'First Slide',
397- u':/slides/slide_next.png',
398- translate(u'SlideController', u'Move to next'),
399- self.onSlideSelectedNext)
400- if self.isLive:
401- self.Toolbar.addToolbarButton(u'Last Slide',
402- u':/slides/slide_last.png',
403- translate(u'SlideController', u'Move to last'),
404- self.onSlideSelectedLast)
405- self.Toolbar.addSeparator()
406- self.Toolbar.addToolbarButton(u'Close Screen',
407- u':/slides/slide_close.png',
408- translate(u'SlideController', u'Close Screen'),
409- self.onBlankScreen)
410- self.Toolbar.setSizePolicy(sizeToolbarPolicy)
411+ # Plugin the Base Toolbar class
412+ self.BaseToolbar = BaseToolbar(self.isLive)
413+ self.Toolbar = self.BaseToolbar.getToolbar()
414 self.ControllerLayout.addWidget(self.Toolbar)
415+ sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
416+ QtGui.QSizePolicy.Fixed)
417+ sizeToolbarPolicy.setHorizontalStretch(0)
418+ sizeToolbarPolicy.setVerticalStretch(0)
419+ sizeToolbarPolicy.setHeightForWidth(
420+ self.Toolbar.sizePolicy().hasHeightForWidth())
421+ self.Toolbar.setSizePolicy(sizeToolbarPolicy)
422 # Screen preview area
423 self.PreviewFrame = QtGui.QFrame(self.Splitter)
424 self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 250, 190))
425@@ -226,11 +204,69 @@
426 self.SlidePreview.setScaledContents(True)
427 self.SlidePreview.setObjectName(u'SlidePreview')
428 self.grid.addWidget(self.SlidePreview, 0, 0, 1, 1)
429- # Some events
430- QtCore.QObject.connect(self.PreviewListView,
431- QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
432- QtCore.QObject.connect(self.PreviewListView,
433- QtCore.SIGNAL(u'activated(QModelIndex)'), self.onSlideSelected)
434+ QtCore.QObject.connect(self.PreviewListView,
435+ QtCore.SIGNAL(u'clicked(QModelIndex)'), self.BaseToolbar.onSlideSelected)
436+ QtCore.QObject.connect(self.PreviewListView,
437+ QtCore.SIGNAL(u'activated(QModelIndex)'), self.BaseToolbar.onSlideSelected)
438+ # Add Late Arrivals
439+ self.BaseToolbar.PreviewListView = self.PreviewListView
440+ self.BaseToolbar.PreviewListData = self.PreviewListData
441+ self.BaseToolbar.SlidePreview = self.SlidePreview
442+ self.BaseToolbar.mainDisplay = self.parent.mainDisplay
443+
444+ def addServiceItem(self, item):
445+ self.BaseToolbar.addServiceItem(item)
446+
447+ def addServiceManagerItem(self, item, slideno):
448+ self.BaseToolbar.addServiceManagerItem(item, slideno)
449+
450+class BaseToolbar(object):
451+
452+ def __init__(self, isLive):
453+ self.Toolbar = None
454+ self.PreviewListView = QtGui.QListWidget()
455+ self.PreviewListData = None
456+ self.isLive = isLive
457+ self.defineToolbar()
458+
459+ def getToolbar(self):
460+ return self.Toolbar
461+
462+ def defineToolbar(self):
463+ # Controller toolbar
464+ #self.Toolbar = OpenLPToolbar(self.Controller)
465+ self.Toolbar = OpenLPToolbar(self)
466+ sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
467+ QtGui.QSizePolicy.Fixed)
468+ sizeToolbarPolicy.setHorizontalStretch(0)
469+ sizeToolbarPolicy.setVerticalStretch(0)
470+ sizeToolbarPolicy.setHeightForWidth(
471+ self.Toolbar.sizePolicy().hasHeightForWidth())
472+ self.Toolbar.setSizePolicy(sizeToolbarPolicy)
473+
474+ if self.isLive:
475+ self.Toolbar.addToolbarButton(u'First Slide',
476+ u':/slides/slide_first.png',
477+ translate(u'SlideController', u'Move to first'),
478+ self.onSlideSelectedFirst)
479+ self.Toolbar.addToolbarButton(u'Last Slide',
480+ u':/slides/slide_previous.png',
481+ translate(u'SlideController', u'Move to previous'),
482+ self.onSlideSelectedPrevious)
483+ self.Toolbar.addToolbarButton(u'First Slide',
484+ u':/slides/slide_next.png',
485+ translate(u'SlideController', u'Move to next'),
486+ self.onSlideSelectedNext)
487+ if self.isLive:
488+ self.Toolbar.addToolbarButton(u'Last Slide',
489+ u':/slides/slide_last.png',
490+ translate(u'SlideController', u'Move to last'),
491+ self.onSlideSelectedLast)
492+ self.Toolbar.addSeparator()
493+ self.Toolbar.addToolbarButton(u'Close Screen',
494+ u':/slides/slide_close.png',
495+ translate(u'SlideController', u'Close Screen'),
496+ self.onBlankScreen)
497
498 def onSlideSelectedFirst(self):
499 """
500@@ -308,7 +344,7 @@
501 if self.isLive:
502 no = frame[1]
503 LiveFrame = self.serviceitem.frames[no][u'image']
504- self.parent.mainDisplay.frameView(LiveFrame)
505+ self.mainDisplay.frameView(LiveFrame)
506
507 def addServiceItem(self, serviceitem):
508 """
509
510=== added file 'openlp/core/ui/slidecontrollermanager.py'
511--- openlp/core/ui/slidecontrollermanager.py 1970-01-01 00:00:00 +0000
512+++ openlp/core/ui/slidecontrollermanager.py 2009-06-28 06:54:12 +0000
513@@ -0,0 +1,52 @@
514+# -*- coding: utf-8 -*-
515+# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
516+"""
517+OpenLP - Open Source Lyrics Projection
518+Copyright (c) 2008 Raoul Snyman
519+Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley,
520+
521+This program is free software; you can redistribute it and/or modify it under
522+the terms of the GNU General Public License as published by the Free Software
523+Foundation; version 2 of the License.
524+
525+This program is distributed in the hope that it will be useful, but WITHOUT ANY
526+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
527+PARTICULAR PURPOSE. See the GNU General Public License for more details.
528+
529+You should have received a copy of the GNU General Public License along with
530+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
531+Place, Suite 330, Boston, MA 02111-1307 USA
532+"""
533+import logging
534+import os
535+
536+class SlideControllerManager():
537+ """
538+ This class controls which SlideController is availabe to the
539+ main window
540+ """
541+ global log
542+ log = logging.getLogger(u'SlideControllerManager')
543+
544+ def __init__(self, parent):
545+ """
546+ Set up the Slide Controller. Manager
547+ """
548+ self.parent = parent
549+ self.live = {}
550+ self.preview = {}
551+
552+ def add_controllers(self, handle, preview, live):
553+ self.live[handle] = live
554+ self.preview[handle] = preview
555+ print self.live
556+
557+ def getPreviewController(self, handle):
558+ return self.preview[handle]
559+
560+ def getLiveController(self, handle):
561+ print "---"
562+ print self.live
563+ print handle
564+ print self.live[handle]
565+ return self.live[handle]
566
567=== modified file 'openlp/core/ui/thememanager.py'
568--- openlp/core/ui/thememanager.py 2009-06-24 05:17:41 +0000
569+++ openlp/core/ui/thememanager.py 2009-06-29 05:07:32 +0000
570@@ -175,30 +175,33 @@
571
572 def onEditTheme(self):
573 items = self.ThemeListView.selectedIndexes()
574- for item in items:
575- data = self.themeData.getValue(item)
576- self.amendThemeForm.loadTheme(data[3])
577- self.amendThemeForm.exec_()
578+ if len(items) > 0:
579+ for item in items:
580+ print item
581+ data = self.themeData.getValue(item)
582+ self.amendThemeForm.loadTheme(data[3])
583+ self.amendThemeForm.exec_()
584
585 def onDeleteTheme(self):
586 items = self.ThemeListView.selectedIndexes()
587- theme = u''
588- for item in items:
589- data = self.themeData.getValue(item)
590- theme = data[3]
591- th = theme + u'.png'
592- try:
593- os.remove(os.path.join(self.path, th))
594- except:
595- #if not present do not worry
596- pass
597- try:
598- shutil.rmtree(os.path.join(self.path, theme))
599- except:
600- #if not present do not worry
601- pass
602- self.themeData.clearItems()
603- self.loadThemes()
604+ if len(items) > 0:
605+ theme = u''
606+ for item in items:
607+ data = self.themeData.getValue(item)
608+ theme = data[3]
609+ th = theme + u'.png'
610+ try:
611+ os.remove(os.path.join(self.path, th))
612+ except:
613+ #if not present do not worry
614+ pass
615+ try:
616+ shutil.rmtree(os.path.join(self.path, theme))
617+ except:
618+ #if not present do not worry
619+ pass
620+ self.themeData.clearItems()
621+ self.loadThemes()
622
623 def onExportTheme(self):
624 pass
625
626=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
627--- openlp/plugins/bibles/lib/mediaitem.py 2009-06-26 17:51:43 +0000
628+++ openlp/plugins/bibles/lib/mediaitem.py 2009-06-29 05:07:32 +0000
629@@ -57,8 +57,6 @@
630 self.TranslationContext = u'BiblePlugin'
631 self.PluginTextShort = u'Bible'
632 self.ConfigSection = u'bibles'
633-# self.OnNewPrompt = u'Select Image(s)'
634-# self.OnNewFileMasks = u'Images (*.jpg *jpeg *.gif *.png *.bmp)'
635 MediaManagerItem.__init__(self, parent, icon, title)
636 self.search_results = {} # place to store the search results
637 QtCore.QObject.connect(Receiver().get_receiver(),
638@@ -192,11 +190,11 @@
639 self.SearchTabWidget.addTab(self.AdvancedTab, u'Advanced')
640 # Add the search tab widget to the page layout
641 self.PageLayout.addWidget(self.SearchTabWidget)
642- self.BibleListWidget = BibleList()
643- self.BibleListWidget.setAlternatingRowColors(True)
644- self.BibleListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
645- self.BibleListWidget.setDragEnabled(True)
646- self.PageLayout.addWidget(self.BibleListWidget)
647+ self.ListView = BibleList()
648+ self.ListView.setAlternatingRowColors(True)
649+ self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
650+ self.ListView.setDragEnabled(True)
651+ self.PageLayout.addWidget(self.ListView)
652 # Combo Boxes
653 QtCore.QObject.connect(self.AdvancedVersionComboBox,
654 QtCore.SIGNAL(u'activated(int)'), self.onAdvancedVersionComboBox)
655@@ -213,18 +211,18 @@
656 QtCore.SIGNAL(u'pressed()'), self.onAdvancedSearchButton)
657 QtCore.QObject.connect(self.QuickSearchButton,
658 QtCore.SIGNAL(u'pressed()'), self.onQuickSearchButton)
659- QtCore.QObject.connect(self.BibleListWidget,
660+ QtCore.QObject.connect(self.ListView,
661 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onPreviewClick)
662 # Context Menus
663- self.BibleListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
664- self.BibleListWidget.addAction(self.contextMenuAction(
665- self.BibleListWidget, u':/system/system_preview.png',
666+ self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
667+ self.ListView.addAction(self.contextMenuAction(
668+ self.ListView, u':/system/system_preview.png',
669 translate(u'BibleMediaItem',u'&Preview Verse'), self.onPreviewClick))
670- self.BibleListWidget.addAction(self.contextMenuAction(
671- self.BibleListWidget, u':/system/system_live.png',
672+ self.ListView.addAction(self.contextMenuAction(
673+ self.ListView, u':/system/system_live.png',
674 translate(u'BibleMediaItem',u'&Show Live'), self.onLiveClick))
675- self.BibleListWidget.addAction(self.contextMenuAction(
676- self.BibleListWidget, u':/system/system_add.png',
677+ self.ListView.addAction(self.contextMenuAction(
678+ self.ListView, u':/system/system_add.png',
679 translate(u'BibleMediaItem',u'&Add to Service'), self.onAddClick))
680
681 def retranslateUi(self):
682@@ -309,7 +307,7 @@
683 self.search_results = self.parent.biblemanager.get_verse_text(bible, book,
684 chapter_from, chapter_to, verse_from, verse_to)
685 if self.ClearAdvancedSearchComboBox.currentIndex() == 0:
686- self.BibleListWidget.clear()
687+ self.ListView.clear()
688 self.displayResults(bible)
689
690 def onAdvancedFromChapter(self):
691@@ -327,7 +325,7 @@
692 bible = unicode(self.QuickVersionComboBox.currentText())
693 text = unicode(self.QuickSearchEdit.displayText())
694 if self.ClearQuickSearchComboBox.currentIndex() == 0:
695- self.BibleListWidget.clear()
696+ self.ListView.clear()
697 if self.QuickSearchComboBox.currentIndex() == 1:
698 self.search_results = self.parent.biblemanager.get_verse_from_text(bible, text)
699 else:
700@@ -335,33 +333,15 @@
701 if self.search_results is not None:
702 self.displayResults(bible)
703
704-# def onLiveClick(self):
705-# service_item = ServiceItem(self.parent)
706-# service_item.addIcon( u':/media/media_verse.png')
707-# self.generateSlideData(service_item)
708-# self.parent.live_controller.addServiceItem(service_item)
709-#
710-# def onAddClick(self):
711-# service_item = ServiceItem(self.parent)
712-# service_item.addIcon(u':/media/media_verse.png')
713-# self.generateSlideData(service_item)
714-# self.parent.service_manager.addServiceItem(service_item)
715-#
716-# def onPreviewClick(self):
717-# service_item = ServiceItem(self.parent)
718-# service_item.addIcon(u':/media/media_verse.png')
719-# self.generateSlideData(service_item)
720-# self.parent.preview_controller.addServiceItem(service_item)
721-
722 def generateSlideData(self, service_item):
723 log.debug(u'generating slide data')
724- items = self.BibleListWidget.selectedIndexes()
725+ items = self.ListView.selectedIndexes()
726 old_chapter = u''
727 raw_slides=[]
728 raw_footer = []
729 bible_text = u''
730 for item in items:
731- bitem = self.BibleListWidget.item(item.row())
732+ bitem = self.ListView.item(item.row())
733 text = unicode((bitem.data(QtCore.Qt.UserRole)).toString())
734 verse = text[:text.find(u'(')]
735 bible = text[text.find(u'(') + 1:text.find(u')')]
736@@ -440,7 +420,7 @@
737 bible_text = unicode(u' %s %d:%d (%s)'%(book , chap,vse, bible))
738 bible_verse = QtGui.QListWidgetItem(bible_text)
739 bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(bible_text))
740- self.BibleListWidget.addItem(bible_verse)
741+ self.ListView.addItem(bible_verse)
742
743 def searchByReference(self, bible, search):
744 log.debug(u'searchByReference %s ,%s', bible, search)
745
746=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
747--- openlp/plugins/custom/lib/mediaitem.py 2009-06-26 18:54:05 +0000
748+++ openlp/plugins/custom/lib/mediaitem.py 2009-06-27 19:55:55 +0000
749@@ -105,38 +105,38 @@
750 self.CustomWidget.setObjectName(u'CustomWidget')
751 # Add the Custom widget to the page layout
752 self.PageLayout.addWidget(self.CustomWidget)
753- self.CustomListWidget = CustomList()
754- self.CustomListWidget.setAlternatingRowColors(True)
755- self.CustomListWidget.setDragEnabled(True)
756- self.PageLayout.addWidget(self.CustomListWidget)
757+ self.ListView = CustomList()
758+ self.ListView.setAlternatingRowColors(True)
759+ self.ListView.setDragEnabled(True)
760+ self.PageLayout.addWidget(self.ListView)
761 # Signals
762- QtCore.QObject.connect(self.CustomListWidget,
763+ QtCore.QObject.connect(self.ListView,
764 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick)
765 #define and add the context menu
766- self.CustomListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
767- self.CustomListWidget.addAction(self.contextMenuAction(self.CustomListWidget,
768+ self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
769+ self.ListView.addAction(self.contextMenuAction(self.ListView,
770 ':/custom/custom_edit.png', translate(u'CustomMediaItem', u'&Edit Custom'),
771 self.onCustomEditClick))
772- self.CustomListWidget.addAction(self.contextMenuSeparator(self.CustomListWidget))
773- self.CustomListWidget.addAction(self.contextMenuAction(
774- self.CustomListWidget, ':/system/system_preview.png',
775+ self.ListView.addAction(self.contextMenuSeparator(self.ListView))
776+ self.ListView.addAction(self.contextMenuAction(
777+ self.ListView, ':/system/system_preview.png',
778 translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick))
779- self.CustomListWidget.addAction(self.contextMenuAction(
780- self.CustomListWidget, ':/system/system_live.png',
781+ self.ListView.addAction(self.contextMenuAction(
782+ self.ListView, ':/system/system_live.png',
783 translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick))
784- self.CustomListWidget.addAction(self.contextMenuAction(
785- self.CustomListWidget, ':/system/system_add.png',
786+ self.ListView.addAction(self.contextMenuAction(
787+ self.ListView, ':/system/system_add.png',
788 translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick))
789
790 def initialise(self):
791 self.loadCustomList(self.parent.custommanager.get_all_slides())
792
793 def loadCustomList(self, list):
794- self.CustomListWidget.clear()
795+ self.ListView.clear()
796 for CustomSlide in list:
797 custom_name = QtGui.QListWidgetItem(CustomSlide.title)
798 custom_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(CustomSlide.id))
799- self.CustomListWidget.addItem(custom_name)
800+ self.ListView.addItem(custom_name)
801
802 def onCustomNewClick(self):
803 self.parent.edit_custom_form.loadCustom(0)
804@@ -144,8 +144,7 @@
805 self.initialise()
806
807 def onCustomEditClick(self):
808- item = self.CustomListWidget.currentItem()
809- item = self.CustomListWidget.currentItem()
810+ item = self.ListView.currentItem()
811 if item is not None:
812 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
813 self.parent.edit_custom_form.loadCustom(item_id)
814@@ -153,12 +152,12 @@
815 self.initialise()
816
817 def onCustomDeleteClick(self):
818- item = self.CustomListWidget.currentItem()
819+ item = self.ListView.currentItem()
820 if item is not None:
821 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
822 self.parent.custommanager.delete_custom(item_id)
823- row = self.CustomListWidget.row(item)
824- self.CustomListWidget.takeItem(row)
825+ row = self.ListView.row(item)
826+ self.ListView.takeItem(row)
827
828 def onCustomPreviewClick(self):
829 log.debug(u'Custom Preview Requested')
830@@ -186,7 +185,7 @@
831 raw_footer = []
832 slide = None
833 theme = None
834- item = self.CustomListWidget.currentItem()
835+ item = self.ListView.currentItem()
836 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
837 customSlide = self.parent.custommanager.get_custom(item_id)
838 title = customSlide.title
839
840=== modified file 'openlp/plugins/images/imageplugin.py'
841--- openlp/plugins/images/imageplugin.py 2009-06-26 17:51:43 +0000
842+++ openlp/plugins/images/imageplugin.py 2009-06-27 15:33:03 +0000
843@@ -47,4 +47,3 @@
844
845 def initialise(self):
846 log.info(u'Plugin Initialising')
847-
848
849=== modified file 'openlp/plugins/images/lib/__init__.py'
850--- openlp/plugins/images/lib/__init__.py 2009-06-23 20:53:06 +0000
851+++ openlp/plugins/images/lib/__init__.py 2009-06-29 05:07:32 +0000
852@@ -17,6 +17,5 @@
853 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
854 Place, Suite 330, Boston, MA 02111-1307 USA
855 """
856-
857-from listwithpreviews import ListWithPreviews
858 from mediaitem import ImageMediaItem
859+from imageslidecontroller import ImageToolbar
860
861=== added file 'openlp/plugins/images/lib/imageslidecontroller.py'
862--- openlp/plugins/images/lib/imageslidecontroller.py 1970-01-01 00:00:00 +0000
863+++ openlp/plugins/images/lib/imageslidecontroller.py 2009-06-29 05:07:32 +0000
864@@ -0,0 +1,103 @@
865+# -*- coding: utf-8 -*-
866+# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
867+"""
868+OpenLP - Open Source Lyrics Projection
869+Copyright (c) 2008 Raoul Snyman
870+Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley,
871+
872+This program is free software; you can redistribute it and/or modify it under
873+the terms of the GNU General Public License as published by the Free Software
874+Foundation; version 2 of the License.
875+
876+This program is distributed in the hope that it will be useful, but WITHOUT ANY
877+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
878+PARTICULAR PURPOSE. See the GNU General Public License for more details.
879+
880+You should have received a copy of the GNU General Public License along with
881+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
882+Place, Suite 330, Boston, MA 02111-1307 USA
883+"""
884+import logging
885+import os
886+
887+from PyQt4 import QtCore, QtGui
888+from openlp.core.lib import OpenLPToolbar, translate
889+from openlp.core.ui.slidecontroller import BaseToolbar
890+
891+class ImageToolbar(BaseToolbar):
892+
893+ def __init__(self, isLive):
894+ self.Toolbar = None
895+ self.PreviewListView = QtGui.QListWidget()
896+ self.PreviewListData = None
897+ self.isLive = isLive
898+ self.defineToolbar()
899+
900+ def getToolbar(self):
901+ return self.Toolbar
902+
903+ def defineToolbar(self):
904+ # Controller toolbar
905+ #self.Toolbar = OpenLPToolbar(self.Controller)
906+ sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
907+ QtGui.QSizePolicy.Fixed)
908+ sizeToolbarPolicy.setHorizontalStretch(0)
909+ sizeToolbarPolicy.setVerticalStretch(0)
910+ sizeToolbarPolicy.setHeightForWidth(
911+ self.Toolbar.sizePolicy().hasHeightForWidth())
912+ if self.isLive:
913+ self.Toolbar.addToolbarButton(u'First Slide',
914+ u':/slides/slide_first.png',
915+ translate(u'SlideController', u'Move to first'),
916+ self.onSlideSelectedFirst)
917+ self.Toolbar.addToolbarButton(u'Last Slide',
918+ u':/slides/slide_previous.png',
919+ translate(u'SlideController', u'Move to previous'),
920+ self.onSlideSelectedPrevious)
921+ self.Toolbar.addToolbarButton(u'First Slide',
922+ u':/slides/slide_next.png',
923+ translate(u'SlideController', u'Move to next'),
924+ self.onSlideSelectedNext)
925+ if self.isLive:
926+ self.Toolbar.addToolbarButton(u'Last Slide',
927+ u':/slides/slide_last.png',
928+ translate(u'SlideController', u'Move to last'),
929+ self.onSlideSelectedLast)
930+ self.Toolbar.addSeparator()
931+ self.Toolbar.addToolbarButton(u'Close Screen',
932+ u':/slides/slide_close.png',
933+ translate(u'SlideController', u'Close Screen'),
934+ self.onBlankScreen)
935+ self.Toolbar.addSeparator()
936+ self.Toolbar.addToolbarButton(u'Start Loop',
937+ u':/slides/slide_last.png',
938+ translate(u'SlideController', u'Start continuous loop'),
939+ self.onStartLoop)
940+ self.Toolbar.addToolbarButton(u'Stop Loop',
941+ u':/slides/slide_last.png',
942+ translate(u'SlideController', u'Start continuous loop'),
943+ self.onStopLoop)
944+ self.Toolbar.setSizePolicy(sizeToolbarPolicy)
945+ self.ControllerLayout.addWidget(self.Toolbar)
946+
947+ def onStartLoop(self):
948+ """
949+ Go to the last slide.
950+ """
951+ row = self.PreviewListData.createIndex(
952+ self.PreviewListData.rowCount() - 1, 0)
953+ if row.isValid():
954+ self.PreviewListView.selectionModel().setCurrentIndex(row,
955+ QtGui.QItemSelectionModel.SelectCurrent)
956+ self.onSlideSelected(row)
957+
958+ def onStopLoop(self):
959+ """
960+ Go to the last slide.
961+ """
962+ row = self.PreviewListData.createIndex(
963+ self.PreviewListData.rowCount() - 1, 0)
964+ if row.isValid():
965+ self.PreviewListView.selectionModel().setCurrentIndex(row,
966+ QtGui.QItemSelectionModel.SelectCurrent)
967+ self.onSlideSelected(row)
968
969=== modified file 'openlp/plugins/images/lib/mediaitem.py'
970--- openlp/plugins/images/lib/mediaitem.py 2009-06-26 16:39:16 +0000
971+++ openlp/plugins/images/lib/mediaitem.py 2009-06-29 05:13:06 +0000
972@@ -21,10 +21,8 @@
973 import os
974
975 from PyQt4 import QtCore, QtGui
976-
977-# from openlp.plugins.images.lib import ListWithPreviews
978-from listwithpreviews import ListWithPreviews
979-from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD
980+from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon
981+from openlp.plugins.images.lib.imageslidecontroller import ImageToolbar
982
983 # We have to explicitly create separate classes for each plugin
984 # in order for DnD to the Service manager to work correctly.
985@@ -45,19 +43,50 @@
986 self.TranslationContext = u'ImagePlugin'
987 self.PluginTextShort = u'Image'
988 self.ConfigSection = u'images'
989+ self.IconPath = u'images/image'
990+ self.hasFileIcon = True
991+ self.hasNewIcon = False
992+ self.hasEditIcon = False
993 self.OnNewPrompt = u'Select Image(s)'
994 self.OnNewFileMasks = u'Images (*.jpg *jpeg *.gif *.png *.bmp)'
995+ self.slidecontroller = u'image'
996 # this next is a class, not an instance of a class - it will
997 # be instanced by the base MediaManagerItem
998 self.ListViewWithDnD_class = ImageListView
999 MediaManagerItem.__init__(self, parent, icon, title)
1000+ #create and install our own slide controllers
1001+ #a=c
1002+# live_controller = ImageSlideController(self.parent.slideManager.parent, True)
1003+# preview_controller = ImageSlideController(self.parent.slideManager.parent)
1004+# self.parent.slideManager.add_controllers(u'image', preview_controller, live_controller)
1005+
1006+ def initialise(self):
1007+ self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
1008+ self.ListView.setIconSize(QtCore.QSize(88,50))
1009+ self.loadList(self.parent.config.load_list(self.ConfigSection))
1010+
1011+ def onDeleteClick(self):
1012+ item = self.ListView.currentItem()
1013+ if item is not None:
1014+ item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
1015+ row = self.ListView.row(item)
1016+ self.ListView.takeItem(row)
1017+ self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList())
1018+
1019+ def loadList(self, list):
1020+ for file in list:
1021+ (path, filename) = os.path.split(unicode(file))
1022+ item_name = QtGui.QListWidgetItem(filename)
1023+ item_name.setIcon(buildIcon(file))
1024+ item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
1025+ self.ListView.addItem(item_name)
1026
1027 def generateSlideData(self, service_item):
1028- indexes = self.ListView.selectedIndexes()
1029+ items = self.ListView.selectedIndexes()
1030 service_item.title = u'Image(s)'
1031- for index in indexes:
1032- filename = self.ListData.getFilename(index)
1033+ for item in items:
1034+ bitem = self.ListView.item(item.row())
1035+ filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())
1036 frame = QtGui.QImage(unicode(filename))
1037 (path, name) = os.path.split(filename)
1038 service_item.add_from_image(path, name, frame)
1039-
1040
1041=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
1042--- openlp/plugins/presentations/lib/mediaitem.py 2009-06-26 16:39:16 +0000
1043+++ openlp/plugins/presentations/lib/mediaitem.py 2009-06-27 19:55:55 +0000
1044@@ -43,107 +43,52 @@
1045 self.TranslationContext = u'PresentationPlugin'
1046 self.PluginTextShort = u'Presentation'
1047 self.ConfigSection = u'presentation'
1048- self.OnNewPrompt = u'Select Image(s)'
1049- self.OnNewFileMasks = u'Images (*.ppt *.pps *.odp)'
1050+ self.hasFileIcon = True
1051+ self.hasNewIcon = False
1052+ self.hasEditIcon = False
1053+ self.IconPath = u'presentations/presentation'
1054+ self.OnNewPrompt = u'Select Presentation(s)'
1055+ self.OnNewFileMasks = u'Presentations (*.ppt *.pps *.odp)'
1056 # this next is a class, not an instance of a class - it will
1057 # be instanced by the base MediaManagerItem
1058 self.ListViewWithDnD_class = PresentationListView
1059 MediaManagerItem.__init__(self, parent, icon, title)
1060
1061-# def setupUi(self):
1062-# # Add a toolbar
1063-# self.addToolbar()
1064-# # Create buttons for the toolbar
1065-# ## New Presentation Button ##
1066-# self.addToolbarButton(
1067-# translate(u'PresentationsMediaItem',u'New presentations'),
1068-# translate(u'PresentationsMediaItem',u'Load presentations into openlp.org'),
1069-# ':/presentations/presentation_load.png', self.onPresentationNewClick, 'PresentationNewItem')
1070-# ## Delete Presentation Button ##
1071-# self.addToolbarButton(
1072-# translate(u'PresentationsMediaItem',u'Delete Presentation'),
1073-# translate(u'PresentationsMediaItem',u'Delete the selected presentation'),
1074-# ':/presentations/presentation_delete.png', self.onPresentationDeleteClick, 'PresentationDeleteItem')
1075-# ## Separator Line ##
1076-# self.addToolbarSeparator()
1077-# ## Preview Presentation Button ##
1078-# self.addToolbarButton(
1079-# translate(u'PresentationsMediaItem',u'Preview Presentation'),
1080-# translate(u'PresentationsMediaItem',u'Preview the selected Presentation'),
1081-# ':/system/system_preview.png', self.onPresentationPreviewClick, 'PresentationPreviewItem')
1082-# ## Live Presentation Button ##
1083-# self.addToolbarButton(
1084-# translate(u'PresentationsMediaItem',u'Go Live'),
1085-# translate(u'PresentationsMediaItem',u'Send the selected presentation live'),
1086-# ':/system/system_live.png', self.onPresentationLiveClick, 'PresentationLiveItem')
1087-# ## Add Presentation Button ##
1088-# self.addToolbarButton(
1089-# translate(u'PresentationsMediaItem',u'Add Presentation To Service'),
1090-# translate(u'PresentationsMediaItem',u'Add the selected Presentations(s) to the service'),
1091-# ':/system/system_add.png',self.onPresentationAddClick, 'PresentationsAddItem')
1092-# ## Add the Presentationlist widget ##
1093-#
1094-# self.PresentationWidget = QtGui.QWidget(self)
1095-# sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
1096-# sizePolicy.setHorizontalStretch(0)
1097-# sizePolicy.setVerticalStretch(0)
1098-# sizePolicy.setHeightForWidth(self.PresentationWidget.sizePolicy().hasHeightForWidth())
1099-# self.PresentationWidget.setSizePolicy(sizePolicy)
1100-# self.PresentationWidget.setObjectName(u'PresentationWidget')
1101-# self.DisplayLayout = QtGui.QGridLayout(self.PresentationWidget)
1102-# self.DisplayLayout.setObjectName(u'DisplayLayout')
1103-# self.DisplayTypeComboBox = QtGui.QComboBox(self.PresentationWidget)
1104-# self.DisplayTypeComboBox.setObjectName(u'DisplayTypeComboBox')
1105-# self.DisplayLayout.addWidget(self.DisplayTypeComboBox, 0, 1, 1, 2)
1106-# self.DisplayTypeLabel = QtGui.QLabel(self.PresentationWidget)
1107-# self.DisplayTypeLabel.setObjectName(u'SearchTypeLabel')
1108-# self.DisplayLayout.addWidget(self.DisplayTypeLabel, 0, 0, 1, 1)
1109-#
1110-# self.DisplayTypeLabel.setText(translate(u'PresentationMediaItem', u'Present using:'))
1111-#
1112-# # Add the song widget to the page layout
1113-# self.PageLayout.addWidget(self.PresentationWidget)
1114-#
1115-# self.PresentationsListView = QtGui.QListView()
1116-# self.PresentationsListView.setAlternatingRowColors(True)
1117-# self.PresentationsListData = FileListData()
1118-# self.PresentationsListView.setModel(self.PresentationsListData)
1119-#
1120-# self.PageLayout.addWidget(self.PresentationsListView)
1121-#
1122-# #define and add the context menu
1123-# self.PresentationsListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
1124-#
1125-# self.PresentationsListView.addAction(self.contextMenuAction(
1126-# self.PresentationsListView, ':/system/system_preview.png',
1127-# translate(u'PresentationsMediaItem',u'&Preview presentations'), self.onPresentationPreviewClick))
1128-# self.PresentationsListView.addAction(self.contextMenuAction(
1129-# self.PresentationsListView, ':/system/system_live.png',
1130-# translate(u'PresentationsMediaItem',u'&Show Live'), self.onPresentationLiveClick))
1131-# self.PresentationsListView.addAction(self.contextMenuAction(
1132-# self.PresentationsListView, ':/system/system_add.png',
1133-# translate(u'PresentationsMediaItem',u'&Add to Service'), self.onPresentationAddClick))
1134+ def addHeaderBar(self):
1135+ self.PresentationWidget = QtGui.QWidget(self)
1136+ sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
1137+ sizePolicy.setHorizontalStretch(0)
1138+ sizePolicy.setVerticalStretch(0)
1139+ sizePolicy.setHeightForWidth(self.PresentationWidget.sizePolicy().hasHeightForWidth())
1140+ self.PresentationWidget.setSizePolicy(sizePolicy)
1141+ self.PresentationWidget.setObjectName(u'PresentationWidget')
1142+ self.DisplayLayout = QtGui.QGridLayout(self.PresentationWidget)
1143+ self.DisplayLayout.setObjectName(u'DisplayLayout')
1144+ self.DisplayTypeComboBox = QtGui.QComboBox(self.PresentationWidget)
1145+ self.DisplayTypeComboBox.setObjectName(u'DisplayTypeComboBox')
1146+ self.DisplayLayout.addWidget(self.DisplayTypeComboBox, 0, 1, 1, 2)
1147+ self.DisplayTypeLabel = QtGui.QLabel(self.PresentationWidget)
1148+ self.DisplayTypeLabel.setObjectName(u'SearchTypeLabel')
1149+ self.DisplayLayout.addWidget(self.DisplayTypeLabel, 0, 0, 1, 1)
1150+
1151+ self.DisplayTypeLabel.setText(translate(u'PresentationMediaItem', u'Present using:'))
1152+
1153+ # Add the Presentation widget to the page layout
1154+ self.PageLayout.addWidget(self.PresentationWidget)
1155
1156 def initialise(self):
1157 list = self.parent.config.load_list(u'presentations')
1158 self.loadPresentationList(list)
1159-# self.DisplayTypeComboBox.addItem(u'Impress')
1160+ self.DisplayTypeComboBox.addItem(u'Impress')
1161 # self.DisplayTypeComboBox.addItem(u'Powerpoint')
1162 # self.DisplayTypeComboBox.addItem(u'Keynote')
1163
1164- def onPresentationNewClick(self):
1165- files = QtGui.QFileDialog.getOpenFileNames(None,
1166- translate(u'PresentationsMediaItem', u'Select presentations(s)'),
1167- self.parent.config.get_last_dir(), u'Presentations (*.ppt *.pps *.odp)')
1168- if len(files) > 0:
1169- self.loadPresentationList(files)
1170- dir, filename = os.path.split(unicode(files[0]))
1171- self.parent.config.set_last_dir(dir)
1172- self.parent.config.set_list(u'Presentations', self.PresentationsListData.getFileList())
1173-
1174- def getFileList(self):
1175- filelist = [item[0] for item in self.PresentationsListView];
1176- return filelist
1177+ def loadList(self, list):
1178+ for file in list:
1179+ (path, filename) = os.path.split(unicode(file))
1180+ item_name = QtGui.QListWidgetItem(filename)
1181+ item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
1182+ self.ListView.addItem(item_name)
1183
1184 def loadPresentationList(self, list):
1185 pass
1186
1187=== modified file 'openlp/plugins/songs/forms/editsongform.py'
1188--- openlp/plugins/songs/forms/editsongform.py 2009-06-17 05:11:16 +0000
1189+++ openlp/plugins/songs/forms/editsongform.py 2009-06-27 19:55:55 +0000
1190@@ -317,11 +317,6 @@
1191 self.TitleEditItem.setStyleSheet(u'background-color: red; color: white')
1192 else:
1193 self.TitleEditItem.setStyleSheet(u'')
1194- if len(self.CopyrightEditItem.displayText()) == 0:
1195- valid = False
1196- self.CopyrightEditItem.setStyleSheet(u'background-color: red; color: white')
1197- else:
1198- self.CopyrightEditItem.setStyleSheet(u'')
1199 if self.VerseListWidget.count() == 0:
1200 valid = False
1201 self.VerseListWidget.setStyleSheet(u'background-color: red; color: white')
1202
1203=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
1204--- openlp/plugins/songs/lib/mediaitem.py 2009-06-26 18:54:05 +0000
1205+++ openlp/plugins/songs/lib/mediaitem.py 2009-06-27 19:55:55 +0000
1206@@ -121,12 +121,12 @@
1207 self.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1)
1208 # Add the song widget to the page layout
1209 self.PageLayout.addWidget(self.SongWidget)
1210- self.SongListWidget = SongList()
1211- self.SongListWidget.setAlternatingRowColors(True)
1212- self.SongListWidget.setDragEnabled(True)
1213- self.SongListWidget.setObjectName(u'SongListWidget')
1214- self.PageLayout.addWidget(self.SongListWidget)
1215- self.SongListWidget.setDragEnabled(True)
1216+ self.ListView = SongList()
1217+ self.ListView.setAlternatingRowColors(True)
1218+ self.ListView.setDragEnabled(True)
1219+ self.ListView.setObjectName(u'ListView')
1220+ self.PageLayout.addWidget(self.ListView)
1221+ self.ListView.setDragEnabled(True)
1222 # Signals and slots
1223 QtCore.QObject.connect(self.SearchTextButton,
1224 QtCore.SIGNAL(u'pressed()'), self.onSearchTextButtonClick)
1225@@ -134,21 +134,21 @@
1226 QtCore.SIGNAL(u'pressed()'), self.onClearTextButtonClick)
1227 QtCore.QObject.connect(self.SearchTextEdit,
1228 QtCore.SIGNAL(u'textChanged(const QString&)'), self.onSearchTextEditChanged)
1229- QtCore.QObject.connect(self.SongListWidget,
1230+ QtCore.QObject.connect(self.ListView,
1231 QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onSongPreviewClick)
1232 #define and add the context menu
1233- self.SongListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
1234- self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget,
1235+ self.ListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
1236+ self.ListView.addAction(self.contextMenuAction(self.ListView,
1237 ':/songs/song_new.png', translate(u'SongMediaItem', u'&Edit Song'),
1238 self.onSongEditClick))
1239- self.SongListWidget.addAction(self.contextMenuSeparator(self.SongListWidget))
1240- self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget,
1241+ self.ListView.addAction(self.contextMenuSeparator(self.ListView))
1242+ self.ListView.addAction(self.contextMenuAction(self.ListView,
1243 ':/system/system_preview.png', translate(u'SongMediaItem', u'&Preview Song'),
1244 self.onSongPreviewClick))
1245- self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget,
1246+ self.ListView.addAction(self.contextMenuAction(self.ListView,
1247 ':/system/system_live.png', translate(u'SongMediaItem', u'&Show Live'),
1248 self.onSongLiveClick))
1249- self.SongListWidget.addAction(self.contextMenuAction(self.SongListWidget,
1250+ self.ListView.addAction(self.contextMenuAction(self.ListView,
1251 ':/system/system_add.png', translate(u'SongMediaItem', u'&Add to Service'),
1252 self.onSongAddClick))
1253
1254@@ -182,7 +182,7 @@
1255
1256 def displayResultsSong(self, searchresults):
1257 log.debug(u'display results Song')
1258- self.SongListWidget.clear()
1259+ self.ListView.clear()
1260 #log.debug(u'Records returned from search %s", len(searchresults))
1261 for song in searchresults:
1262 author_list = u''
1263@@ -193,17 +193,17 @@
1264 song_detail = unicode(u'%s (%s)' % (unicode(song.title), unicode(author_list)))
1265 song_name = QtGui.QListWidgetItem(song_detail)
1266 song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
1267- self.SongListWidget.addItem(song_name)
1268+ self.ListView.addItem(song_name)
1269
1270 def displayResultsAuthor(self, searchresults):
1271 log.debug(u'display results Author')
1272- self.SongListWidget.clear()
1273+ self.ListView.clear()
1274 for author in searchresults:
1275 for song in author.songs:
1276 song_detail = unicode(u'%s (%s)' % (unicode(author.display_name), unicode(song.title)))
1277 song_name = QtGui.QListWidgetItem(song_detail)
1278 song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
1279- self.SongListWidget.addItem(song_name)
1280+ self.ListView.addItem(song_name)
1281
1282 def onClearTextButtonClick(self):
1283 """
1284@@ -223,19 +223,19 @@
1285 self.edit_song_form.exec_()
1286
1287 def onSongEditClick(self):
1288- item = self.SongListWidget.currentItem()
1289+ item = self.ListView.currentItem()
1290 if item is not None:
1291 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
1292 self.edit_song_form.loadSong(item_id)
1293 self.edit_song_form.exec_()
1294
1295 def onSongDeleteClick(self):
1296- item = self.SongListWidget.currentItem()
1297+ item = self.ListView.currentItem()
1298 if item is not None:
1299 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
1300 self.parent.songmanager.delete_song(item_id)
1301- row = self.SongListWidget.row(item)
1302- self.SongListWidget.takeItem(row)
1303+ row = self.ListView.row(item)
1304+ self.ListView.takeItem(row)
1305
1306 def onSongPreviewClick(self):
1307 service_item = ServiceItem(self.parent)
1308@@ -248,7 +248,7 @@
1309 raw_footer = []
1310 author_list = u''
1311 ccl = u''
1312- item = self.SongListWidget.currentItem()
1313+ item = self.ListView.currentItem()
1314 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
1315 song = self.parent.songmanager.get_song(item_id)
1316 service_item.theme = song.theme_name