diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 67b1d8a69..2323dbdd6 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -20,9 +20,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA import logging import os, os.path import sys -#from copy import copy -from PyQt4 import QtGui, QtCore, Qt +from PyQt4 import QtGui, QtCore class Renderer: """ @@ -36,7 +35,6 @@ class Renderer: def __init__(self): self._rect = None self._debug = 0 - #self.words = None self._right_margin = 64 # the amount of right indent self._shadow_offset = 5 self._outline_offset = 2 @@ -140,7 +138,7 @@ class Renderer: # reset the frame. first time do not worry about what you paint on. #self._frame = QtGui.QPixmap(self._frame.width(), self._frame.height()) #(self._bg_frame) #self._frame.fill(QtCore.Qt.transparent) - # reset the frame. first time do not worrk about what you paint on. + # reset the frame. first time do not worry about what you paint on. self._frame = QtGui.QImage(self._bg_frame) x, y = self._correctAlignment(self._rect, bbox) bbox = self._render_lines_unaligned(lines, False, (x, y), True) diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index b8b67f868..e2b9b9934 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -21,9 +21,8 @@ import logging import os, os.path import sys -from datetime import * -from PyQt4 import QtGui, QtCore, Qt -from renderer import Renderer +from PyQt4 import QtGui, QtCore +from renderer import Renderer import sys import linecache diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 9eb011c43..4fd03b8bf 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -113,25 +113,47 @@ class ServiceManager(QtGui.QWidget): """ Move the current ServiceItem to the top of the list """ - pass + item, count = self.findServiceItem() + if item < len(self.serviceItems) and item is not -1: + temp = self.serviceItems[item] + self.serviceItems.remove(self.serviceItems[item]) + self.serviceItems.insert(0, temp) + self.repaintServiceList() def onServiceUp(self): """ Move the current ServiceItem up in the list + Note move up means move to top of area ie 0. """ - pass + item, count = self.findServiceItem() + if item > 0: + temp = self.serviceItems[item] + self.serviceItems.remove(self.serviceItems[item]) + self.serviceItems.insert(item - 1, temp) + self.repaintServiceList() def onServiceDown(self): """ Move the current ServiceItem down in the list + Note move down means move to bottom of area i.e len(). """ - pass + item, count = self.findServiceItem() + if item < len(self.serviceItems) and item is not -1: + temp = self.serviceItems[item] + self.serviceItems.remove(self.serviceItems[item]) + self.serviceItems.insert(item + 1, temp) + self.repaintServiceList() def onServiceEnd(self): """ Move the current ServiceItem to the bottom of the list """ - pass + item, count = self.findServiceItem() + if item < len(self.serviceItems) and item is not -1: + temp = self.serviceItems[item] + self.serviceItems.remove(self.serviceItems[item]) + self.serviceItems.insert(len(self.serviceItems), temp) + self.repaintServiceList() def onNewService(self): """ @@ -144,7 +166,32 @@ class ServiceManager(QtGui.QWidget): """ Remove the current ServiceItem from the list """ - pass + item, count = self.findServiceItem() + if item is not -1: + self.serviceItems.remove(self.serviceItems[item]) + self.repaintServiceList() + + def repaintServiceList(self): + #Correct order of idems in array + count = 1 + for item in self.serviceItems: + item[u'order'] = count + count += 1 + #Repaint the screen + self.ServiceManagerList.clear() + for item in self.serviceItems: + serviceitem = item[u'data'] + treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList) + treewidgetitem.setText(0,serviceitem.title) + treewidgetitem.setIcon(0,serviceitem.iconic_representation) + treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order'])) + count = 0 + for frame in serviceitem.frames: + treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem) + text = frame[u'title'] + treewidgetitem1.setText(0,text[:40]) + treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count)) + count = count + 1 def onSaveService(self): """ @@ -233,11 +280,10 @@ class ServiceManager(QtGui.QWidget): pos = 0 count = 0 for item in items: - childCount = item.childCount() - if childCount >= 1: + parentitem = item.parent() + if parentitem is None: pos = item.data(0, QtCore.Qt.UserRole).toInt()[0] else: - parentitem = item.parent() pos = parentitem.data(0, QtCore.Qt.UserRole).toInt()[0] count = item.data(0, QtCore.Qt.UserRole).toInt()[0] #adjuest for zero based arrays @@ -274,4 +320,4 @@ class ServiceManager(QtGui.QWidget): id = 0 self.service_theme = u'' self.ThemeComboBox.setCurrentIndex(id) - self.parent.RenderManager.set_service_theme(self.service_theme) \ No newline at end of file + self.parent.RenderManager.set_service_theme(self.service_theme) diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 61418f836..e02050059 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -142,17 +142,20 @@ class CustomMediaItem(MediaManagerItem): def onCustomEditClick(self): item = self.CustomListWidget.currentItem() - item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] - self.parent.edit_custom_form.loadCustom(item_id) - self.parent.edit_custom_form.exec_() - self.initialise() + item = self.CustomListWidget.currentItem() + if item is not None: + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + self.parent.edit_custom_form.loadCustom(item_id) + self.parent.edit_custom_form.exec_() + self.initialise() def onCustomDeleteClick(self): item = self.CustomListWidget.currentItem() - item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] - self.parent.custommanager.delete_custom(item_id) - row = self.CustomListWidget.row(item) - self.CustomListWidget.takeItem(row) + if item is not None: + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + self.parent.custommanager.delete_custom(item_id) + row = self.CustomListWidget.row(item) + self.CustomListWidget.takeItem(row) def onCustomPreviewClick(self): log.debug(u'Custom Preview Requested') diff --git a/openlp/plugins/images/lib/imageserviceitem.py b/openlp/plugins/images/lib/imageserviceitem.py deleted file mode 100644 index a1d965ce7..000000000 --- a/openlp/plugins/images/lib/imageserviceitem.py +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 -""" -OpenLP - Open Source Lyrics Projection -Copyright (c) 2008 Raoul Snyman -Portions copyright (c) 2008 Martin Thompson, Tim Bentley - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A -PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA -""" -import logging -from PyQt4 import QtCore, QtGui -from openlp.core.lib import ServiceItem -from listwithpreviews import ListWithPreviews - -class ImageServiceItem(ServiceItem): - """ - The service item is a base class for the plugins to use to interact with - * the service manager (and hence the OOS disk files), - * the slide controller(s - both preview and live) - * and the renderer - which produces the - main screen - the preview preview and - the live preview - - The image plugin passes one of these to the preview/live when requested - The preview/live controllers keep hold of it - The service manager has one in its service structure for each Image item in the OOS - When something goes live/previews - - it simply tells the slide controller to use it??? - - It contains 1 or more images - - """ - global log - log=logging.getLogger(u'ImageServiceItem') - log.info(u'ImageServiceItem loaded') - def __init__(self, controller): - """ - Init Method - """ - log.info(u'init') - self.imgs=ListWithPreviews() -# self.slide_controller=controller -# self.slide_controller.ControllerContents=QtGui.QListView() -# c=self.slide_controller.ControllerContents -# c.uniformItemSizes=True -# c.setModel(self.imgs) -# c.setGeometry(0,0,200,200) - - def render(self): - """ - The render method is what the plugin uses to render its meda to the - screen. - """ - # render the "image chooser first" -# for f in self.imgs: -# fl , nm = os.path.split(unicode(f)) -# c = self.slide_controller.rowCount() -# self.slide_controller.setRowCount(c+1) -# twi = QtGui.QTableWidgetItem(unicode(f)) -# self.slide_controller.setItem(c , 0, twi) -# twi = QtGui.QTableWidgetItem(unicode(nm)) -# self.slide_controller.setItem(c , 1, twi) -# self.slide_controller.setRowHeight(c, 80) - - # render the preview screen here - - def get_parent_node(self): - """ - This method returns a parent node to be inserted into the Service - Manager. - """ - pass - def add(self, data): - """ - append an image to the list - """ - if type(data)==type(u'string'): - log.info(u'add filename:'+data) - self.imgs.addRow(data) - else: # it's another service item to be merged in - log.info(u'add Item...'+unicode(data)) - for filename in data.get_file_list(): - self.add(filename) - - - def get_oos_text(self): - """ - Turn the image list into a set of filenames for storage in the oos file - """ - log.info(u'Get oos text') - log.info(unicode(self.imgs)) -# log.info(unicode(self.imgs.get_file_list())) - return '\n'.join(self.imgs.get_file_list()) - - def set_from_oos(self, text): - """ - get text from the OOS file and setup the internal structure - """ - log.info(u'Set from OOS:'+text) - files=text.split(u'\n') - for f in files: - self.imgs.addRow(f) diff --git a/openlp/plugins/images/lib/listwithpreviews.py b/openlp/plugins/images/lib/listwithpreviews.py index d738bdae0..35c78a729 100644 --- a/openlp/plugins/images/lib/listwithpreviews.py +++ b/openlp/plugins/images/lib/listwithpreviews.py @@ -5,11 +5,11 @@ OpenLP - Open Source Lyrics Projection Copyright (c) 2008 Raoul Snyman Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley -This program is free software; you can redistribute it and/or modify it under +This program is free software; you can rediunicodeibute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. -This program is distributed in the hope that it will be useful, but WITHOUT ANY +This program is diunicodeibuted in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -21,10 +21,9 @@ import os import logging from PyQt4 import QtCore, QtGui - class ListWithPreviews(QtCore.QAbstractListModel): """ - An abstract list of strings and the preview icon to go with them + An abstract list of unicodeings and the preview icon to go with them """ global log log = logging.getLogger(u'ListWithPreviews') @@ -32,7 +31,8 @@ class ListWithPreviews(QtCore.QAbstractListModel): def __init__(self): QtCore.QAbstractListModel.__init__(self) - self.items = [] # will be a list of (full filename, QPixmap, shortname) tuples + # will be a list of (full filename, QPixmap, shortname) tuples + self.items = [] self.rowheight = 50 self.maximagewidth = self.rowheight*16/9.0; @@ -41,10 +41,10 @@ class ListWithPreviews(QtCore.QAbstractListModel): def insertRow(self, row, filename): self.beginInsertRows(QtCore.QModelIndex(),row,row) - log.info(u'insert row %d:%s'% (row,filename)) + #log.info(u'insert row %d:%s' % (row,filename)) # get short filename to display next to image (prefix, shortfilename) = os.path.split(unicode(filename)) - log.info(u'shortfilename=%s'% (shortfilename)) + #log.info(u'shortfilename=%s' % (shortfilename)) # create a preview image if os.path.exists(filename): preview = QtGui.QPixmap(unicode(filename)) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index e9d3ad3b1..9c1ab7f86 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -122,7 +122,7 @@ class ImageMediaItem(MediaManagerItem): files = QtGui.QFileDialog.getOpenFileNames(None, translate(u'ImageMediaItem', u'Select Image(s)'), self.parent.config.get_last_dir(), - u'Images (*.jpg *.gif *.png *.bmp)') + u'Images (*.jpg *jpeg *.gif *.png *.bmp)') log.info(u'New image(s)', unicode(files)) if len(files) > 0: self.loadImageList(files) @@ -169,4 +169,4 @@ class ImageMediaItem(MediaManagerItem): service_item = ServiceItem(self.parent) service_item.addIcon(u':/media/media_image.png') self.generateSlideData(service_item) - self.parent.service_manager.addServiceItem(service_item) \ No newline at end of file + self.parent.service_manager.addServiceItem(service_item) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 1db9bd416..08704501a 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -209,16 +209,18 @@ class SongMediaItem(MediaManagerItem): def onSongEditClick(self): item = self.SongListWidget.currentItem() - item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] - self.edit_song_form.loadSong(item_id) - self.edit_song_form.exec_() + if item is not None: + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + self.edit_song_form.loadSong(item_id) + self.edit_song_form.exec_() def onSongDeleteClick(self): item = self.SongListWidget.currentItem() - item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] - self.parent.songmanager.delete_song(item_id) - row = self.SongListWidget.row(item) - self.SongListWidget.takeItem(row) + if item is not None: + item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + self.parent.songmanager.delete_song(item_id) + row = self.SongListWidget.row(item) + self.SongListWidget.takeItem(row) def onSongPreviewClick(self): service_item = ServiceItem(self.parent)