From 9f04b6f478ff056fc1ea11336618725a5bc6a42e Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 26 Sep 2009 07:46:26 +0100 Subject: [PATCH] More audit changes and dynamic image backgrounds --- openlp/core/lib/renderer.py | 1 - openlp/core/lib/rendermanager.py | 17 ++ openlp/plugins/audit/lib/manager.py | 34 ++- openlp/plugins/images/lib/mediaitem.py | 55 +++- openlp/plugins/songs/lib/mediaitem.py | 4 + resources/forms/auditdetaildialog.ui | 343 +++++++++++++++++++++++++ 6 files changed, 439 insertions(+), 15 deletions(-) create mode 100644 resources/forms/auditdetaildialog.ui diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index a3b5b232c..27dfbb4f5 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -51,7 +51,6 @@ class Renderer(object): self._frame = None self.bg_frame = None self.bg_image = None - #self.bg_frame_small = None def set_debug(self, debug): """ diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index e785f83b5..ce43ad9c9 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -64,6 +64,9 @@ class RenderManager(object): self.theme = u'' self.service_theme = u'' self.global_style = u'' + self.override_background = None + self.save_bg_frame = None + self.override_background_changed = False def update_display(self, screen_number): """ @@ -134,6 +137,20 @@ class RenderManager(object): self.screen_list[self.current_display][u'size']) self.renderer.set_theme(self.themedata) self.build_text_rectangle(self.themedata) + #Replace the backgrount image from renderer with one from image + if self.override_background is not None: + if self.save_bg_frame is None: + self.save_bg_frame = self.renderer.bg_frame + if self.override_background_changed: + self.renderer.bg_frame = self.resize_image(self.override_background) + self.override_background_changed = False + else: + if self.override_background_changed: + self.renderer.bg_frame = self.resize_image(self.override_background) + self.override_background_changed = False + if self.save_bg_frame is not None: + self.renderer.bg_frame = self.save_bg_frame + self.save_bg_frame = None def build_text_rectangle(self, theme): """ diff --git a/openlp/plugins/audit/lib/manager.py b/openlp/plugins/audit/lib/manager.py index fc6a3d5d0..bb4ffff32 100644 --- a/openlp/plugins/audit/lib/manager.py +++ b/openlp/plugins/audit/lib/manager.py @@ -107,18 +107,26 @@ class AuditManager(): def delete_all(self): """ - Delete a audit record + Delete all audit records """ - id = 0 - if id !=0: - audititem = self.get_audit(id) - try: - self.session.delete(audititem) - self.session.commit() - return True - except: - self.session.rollback() - log.excertion(u'Audit Item failed to delete') - return False - else: + try: + self.session.query(AuditItem).delete(synchronize_session=False) + self.session.commit() return True + except: + self.session.rollback() + log.excertion(u'Failed to delete all audit items') + return False + + def delete_to_date(self, date): + """ + Delete audit records before given date + """ + try: + self.session.query(AuditItem).filter(AuditItem.auditdate <= date).delete(synchronize_session=False) + self.session.commit() + return True + except: + self.session.rollback() + log.excertion(u'Failed to delete all audit items to %s' % date) + return False diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index f46c91869..291a8e50f 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -26,7 +26,7 @@ import logging import os from PyQt4 import QtCore, QtGui -from openlp.core.lib import MediaManagerItem, BaseListWithDnD, buildIcon +from openlp.core.lib import MediaManagerItem, BaseListWithDnD, buildIcon, translate # We have to explicitly create separate classes for each plugin # in order for DnD to the Service manager to work correctly. @@ -59,6 +59,7 @@ class ImageMediaItem(MediaManagerItem): self.ServiceItemIconName = u':/media/media_image.png' self.servicePath = None MediaManagerItem.__init__(self, parent, icon, title) + self.overrideActive = False def initialise(self): self.ListView.setSelectionMode( @@ -70,6 +71,37 @@ class ImageMediaItem(MediaManagerItem): os.mkdir(self.servicePath) self.loadList(self.parent.config.load_list(self.ConfigSection)) + def addEndHeaderBar(self): + self.ImageWidget = QtGui.QWidget(self) + sizePolicy = QtGui.QSizePolicy( + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth( + self.ImageWidget.sizePolicy().hasHeightForWidth()) + self.ImageWidget.setSizePolicy(sizePolicy) + self.ImageWidget.setObjectName(u'ImageWidget') + self.OverrideLayout = QtGui.QVBoxLayout(self.ImageWidget) + self.OverrideLayout.setMargin(5) + self.OverrideLayout.setSpacing(4) + self.OverrideLayout.setObjectName(u'OverrideLayout') + self.OverrideCheckBox = QtGui.QCheckBox(self.ImageWidget) + self.OverrideCheckBox.setObjectName(u'OverrideCheckBox') + self.OverrideCheckBox.setCheckable(True) + self.OverrideCheckBox.setChecked(False) + self.OverrideCheckBox.setText(translate(u'ImagePlugin', u'Override background')) + self.OverrideCheckBox.setStatusTip( + translate(u'ImageMedia', u'Allow background of live slide to be overridden')) + self.OverrideLayout.addWidget(self.OverrideCheckBox) + self.OverrideLabel = QtGui.QLabel(self.ImageWidget) + self.OverrideLabel.setObjectName(u'OverrideLabel') + self.OverrideLayout.addWidget(self.OverrideLabel) + # Add the song widget to the page layout + self.PageLayout.addWidget(self.ImageWidget) + QtCore.QObject.connect(self.OverrideCheckBox, + QtCore.SIGNAL(u'stateChanged(int)'), + self.toggleOverrideState) + def onDeleteClick(self): item = self.ListView.currentItem() if item is not None: @@ -111,3 +143,24 @@ class ImageMediaItem(MediaManagerItem): (path, name) = os.path.split(filename) service_item.add_from_image(path, name, frame) return True + + def toggleOverrideState(self): + self.overrideActive = not self.overrideActive + if not self.overrideActive: + self.OverrideLabel.setText(u'') + self.parent.render_manager.override_background = None + + def onPreviewClick(self): + if self.overrideActive: + items = self.ListView.selectedIndexes() + if len(items) == 0: + return False + for item in items: + bitem = self.ListView.item(item.row()) + filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString()) + self.OverrideLabel.setText(bitem.text()) + frame = QtGui.QImage(unicode(filename)) + self.parent.render_manager.override_background = frame + self.parent.render_manager.override_background_changed = True + else: + MediaManagerItem.onPreviewClick(self) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 6f423cdd9..acaf1e71e 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -93,6 +93,8 @@ class SongMediaItem(MediaManagerItem): ':/songs/song_maintenance.png', self.onSongMaintenanceClick, 'SongMaintenanceItem') ## Add the SongListView widget ## + + # Create the tab widget self.SongWidget = QtGui.QWidget(self) sizePolicy = QtGui.QSizePolicy( @@ -127,6 +129,8 @@ class SongMediaItem(MediaManagerItem): self.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1) # Add the song widget to the page layout self.PageLayout.addWidget(self.SongWidget) + + self.ListView = SongListView() self.ListView.setAlternatingRowColors(True) self.ListView.setDragEnabled(True) diff --git a/resources/forms/auditdetaildialog.ui b/resources/forms/auditdetaildialog.ui new file mode 100644 index 000000000..f1d45d369 --- /dev/null +++ b/resources/forms/auditdetaildialog.ui @@ -0,0 +1,343 @@ + + + AuditDetailDialog + + + + 0 + 0 + 593 + 501 + + + + Audit Detail Extraction + + + + + 420 + 470 + 170 + 25 + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 370 + 571 + 70 + + + + Report Location + + + + + + + + + + + + + + + :/exports/export_load.png:/exports/export_load.png + + + + + + + + + + + 10 + 10 + 561 + 361 + + + + + + + Report Type + + + + + 50 + 40 + 481 + 23 + + + + + + + Summary + + + + + + + Detailed + + + true + + + + + + + + + + + Date Range + + + + + + + + dd/MM/yyyy + + + true + + + + + + + to + + + + + + + dd/MM/yyyy + + + true + + + + + + + + + + + + Time Periods + + + + + + + + First Service + + + true + + + + + + + hh:mm AP + + + + + + + + + + to + + + + + + + hh:mm AP + + + true + + + + + + + + + + + + + + Second Service + + + true + + + + + + + hh:mm AP + + + + + + + + + + to + + + + + + + hh:mm AP + + + + + + + + + + + Third Service + + + true + + + + + + + hh:mm AP + + + + + + + + + + to + + + + + + + hh:mm AP + + + + + + + + + + + + + + + + + + + + buttonBox + accepted() + AuditDetailDialog + accept() + + + 455 + 483 + + + 445 + 575 + + + + + buttonBox + rejected() + AuditDetailDialog + close() + + + 528 + 484 + + + 526 + 531 + + + + + + accept() + +