forked from openlp/openlp
parent
cf364ae208
commit
068f963077
|
@ -20,6 +20,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
from copy import deepcopy
|
||||||
from PyQt4 import *
|
from PyQt4 import *
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
from PyQt4.QtCore import *
|
from PyQt4.QtCore import *
|
||||||
|
@ -46,16 +47,16 @@ class ServiceData(QAbstractItemModel):
|
||||||
def rowCount(self, parent):
|
def rowCount(self, parent):
|
||||||
return len(self.items)
|
return len(self.items)
|
||||||
def insertRow(self, row, service_item):
|
def insertRow(self, row, service_item):
|
||||||
self.beginInsertRows(QModelIndex(),row,row)
|
# self.beginInsertRows(QModelIndex(),row,row)
|
||||||
log.info("insert row %d:%s"%(row,filename))
|
log.info("insert row %d:%s"%(row,service_item))
|
||||||
self.items.insert(row, service_item)
|
self.items.insert(row, service_item)
|
||||||
self.endInsertRows()
|
# self.endInsertRows()
|
||||||
def removeRow(self, row):
|
def removeRow(self, row):
|
||||||
self.beginRemoveRows(QModelIndex(), row,row)
|
self.beginRemoveRows(QModelIndex(), row,row)
|
||||||
self.items.pop(row)
|
self.items.pop(row)
|
||||||
self.endRemoveRows()
|
self.endRemoveRows()
|
||||||
def addRow(self, filename):
|
def addRow(self, item):
|
||||||
self.insertRow(len(self.items), filename)
|
self.insertRow(len(self.items), item)
|
||||||
|
|
||||||
|
|
||||||
def data(self, index, role):
|
def data(self, index, role):
|
||||||
|
@ -82,7 +83,9 @@ class ServiceData(QAbstractItemModel):
|
||||||
else:
|
else:
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
for i in self.items:
|
||||||
|
yield i
|
||||||
|
|
||||||
class ServiceManager(QWidget):
|
class ServiceManager(QWidget):
|
||||||
|
|
||||||
|
@ -124,8 +127,53 @@ class ServiceManager(QWidget):
|
||||||
|
|
||||||
def addServiceItem(self, item):
|
def addServiceItem(self, item):
|
||||||
"""Adds service item"""
|
"""Adds service item"""
|
||||||
pass
|
log.info("addServiceItem")
|
||||||
|
indexes=self.TreeView.selectedIndexes()
|
||||||
|
assert len(indexes) <= 1 # can only have one selected index in this view
|
||||||
|
if indexes == []:
|
||||||
|
log.info("No row")
|
||||||
|
row = 0
|
||||||
|
selected_item = None
|
||||||
|
else:
|
||||||
|
row=index.row()
|
||||||
|
# if currently selected is of correct type, add it to it
|
||||||
|
selected_item=self.service_data(row)
|
||||||
|
log.info("row:%d"%row)
|
||||||
|
if type(selected_item) == type(item):
|
||||||
|
log.info("Add to existing item")
|
||||||
|
selected_item.add(item)
|
||||||
|
else:
|
||||||
|
log.info("Create new item")
|
||||||
|
# otherwise create a new one
|
||||||
|
# print item
|
||||||
|
# print item.imgs
|
||||||
|
# i=deepcopy(item)
|
||||||
|
# print i
|
||||||
|
# print i.imgs
|
||||||
|
self.service_data.insertRow(row, item)
|
||||||
|
# for i in self.service_data:
|
||||||
|
# print item.imgs
|
||||||
|
# print i.imgs
|
||||||
def removeServiceItem(self):
|
def removeServiceItem(self):
|
||||||
"""Remove currently selected item"""
|
"""Remove currently selected item"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def oos_as_text(self):
|
||||||
|
text=[]
|
||||||
|
log.info( "oos as text")
|
||||||
|
log.info("Data:"+str(self.service_data))
|
||||||
|
for i in self.service_data:
|
||||||
|
text.append("# " + str(i))
|
||||||
|
text.append(i.get_oos_text())
|
||||||
|
return '\n'.join(text)
|
||||||
|
|
||||||
|
def write_oos(self, filename):
|
||||||
|
"""
|
||||||
|
Write a full OOS file out - iterate over plugins and call their respective methods
|
||||||
|
This format is totally arbitrary testing purposes - something sensible needs to go in here!
|
||||||
|
"""
|
||||||
|
oosfile=open(filename, "w")
|
||||||
|
oosfile.write("# BEGIN OOS\n")
|
||||||
|
oosfile.write(self.oos_as_text)
|
||||||
|
oosfile.write("# END OOS\n")
|
||||||
|
oosfile.close()
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
"""
|
||||||
|
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 time
|
||||||
|
import sys
|
||||||
|
import os, os.path
|
||||||
|
from PyQt4 import QtGui, QtCore
|
||||||
|
|
||||||
|
mypath=os.path.split(os.path.abspath(__file__))[0]
|
||||||
|
sys.path.insert(0,(os.path.join(mypath, '..','..', '..','..')))
|
||||||
|
from openlp.core.ui import ServiceManager
|
||||||
|
from openlp.plugins.images import ImageServiceItem
|
||||||
|
|
||||||
|
import logging
|
||||||
|
logging.basicConfig(filename="test_service_manager.log",level=logging.INFO, filemode="w")
|
||||||
|
|
||||||
|
# # from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66062
|
||||||
|
# def whoami(depth=1):
|
||||||
|
# return sys._getframe(depth).f_code.co_name
|
||||||
|
global app
|
||||||
|
global log
|
||||||
|
log=logging.getLogger("TestServiceManager")
|
||||||
|
class TestServiceManager_base:
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
# if not os.path.exists("test_results"):
|
||||||
|
# os.mkdir("test_results")
|
||||||
|
|
||||||
|
|
||||||
|
def setup_class(self):
|
||||||
|
log.info( "class setup"+str(self))
|
||||||
|
try:
|
||||||
|
if app is None:
|
||||||
|
app = QtGui.QApplication([])
|
||||||
|
except UnboundLocalError:
|
||||||
|
app = QtGui.QApplication([])
|
||||||
|
|
||||||
|
|
||||||
|
def teardown_class(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def setup_method(self, method):
|
||||||
|
log.info("Setup method:"+str(method))
|
||||||
|
self.expected_answer="Don't know yet"
|
||||||
|
self.answer=None
|
||||||
|
self.s=ServiceManager(None)
|
||||||
|
log.info("--------------- Setup Done -------------")
|
||||||
|
|
||||||
|
def teardown_method(self, method):
|
||||||
|
self.s=None
|
||||||
|
|
||||||
|
def test_easy(self):
|
||||||
|
log.info("test_easy")
|
||||||
|
item=ImageServiceItem(None)
|
||||||
|
item.add("test.gif")
|
||||||
|
self.s.addServiceItem(item)
|
||||||
|
answer = self.s.oos_as_text()
|
||||||
|
log.info("Answer = " + str(answer))
|
||||||
|
lines=answer.split("\n")
|
||||||
|
log.info("lines = " + str(lines))
|
||||||
|
assert lines[0].startswith("# <openlp.plugins.images.imageserviceitem.ImageServiceItem object")
|
||||||
|
assert lines[1] == "test.gif"
|
||||||
|
log.info("done")
|
||||||
|
|
||||||
|
if __name__=="__main__":
|
||||||
|
|
||||||
|
t=TestServiceManager_base()
|
||||||
|
t.setup_class()
|
||||||
|
t.setup_method(None)
|
||||||
|
t.test_easy()
|
||||||
|
t.teardown_method(None)
|
||||||
|
print "Pass"
|
||||||
|
log.info("Pass")
|
|
@ -0,0 +1,3 @@
|
||||||
|
from imageplugin import ImagePlugin
|
||||||
|
from imageserviceitem import ImageServiceItem
|
||||||
|
|
|
@ -38,6 +38,8 @@ class ImageServiceItem(ServiceItem):
|
||||||
When something goes live/previews -
|
When something goes live/previews -
|
||||||
it simply tells the slide controller to use it???
|
it simply tells the slide controller to use it???
|
||||||
|
|
||||||
|
It contains 1 or more images
|
||||||
|
|
||||||
"""
|
"""
|
||||||
global log
|
global log
|
||||||
log=logging.getLogger("ImageServiceItem")
|
log=logging.getLogger("ImageServiceItem")
|
||||||
|
@ -46,13 +48,14 @@ class ImageServiceItem(ServiceItem):
|
||||||
"""
|
"""
|
||||||
Init Method
|
Init Method
|
||||||
"""
|
"""
|
||||||
|
log.info("init")
|
||||||
self.imgs=ListWithPreviews()
|
self.imgs=ListWithPreviews()
|
||||||
self.slide_controller=controller
|
# self.slide_controller=controller
|
||||||
self.slide_controller.ControllerContents=QtGui.QListView()
|
# self.slide_controller.ControllerContents=QtGui.QListView()
|
||||||
c=self.slide_controller.ControllerContents
|
# c=self.slide_controller.ControllerContents
|
||||||
c.uniformItemSizes=True
|
# c.uniformItemSizes=True
|
||||||
c.setModel(self.imgs)
|
# c.setModel(self.imgs)
|
||||||
c.setGeometry(0,0,200,200)
|
# c.setGeometry(0,0,200,200)
|
||||||
|
|
||||||
def render(self):
|
def render(self):
|
||||||
"""
|
"""
|
||||||
|
@ -78,17 +81,26 @@ class ImageServiceItem(ServiceItem):
|
||||||
Manager.
|
Manager.
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
def add(self, filename):
|
def add(self, data):
|
||||||
"""
|
"""
|
||||||
append an image to the list
|
append an image to the list
|
||||||
"""
|
"""
|
||||||
log.info("add:"+filename)
|
if type(data)==type("string"):
|
||||||
self.imgs.addRow(filename)
|
log.info("add filename:"+data)
|
||||||
|
self.imgs.addRow(data)
|
||||||
|
else: # it's another service item to be merged in
|
||||||
|
log.info("add Item..."+str(data))
|
||||||
|
for filename in data.get_file_list():
|
||||||
|
self.add(filename)
|
||||||
|
|
||||||
|
|
||||||
def get_oos_text(self):
|
def get_oos_text(self):
|
||||||
"""
|
"""
|
||||||
Turn the image list into a set of filenames for storage in the oos file
|
Turn the image list into a set of filenames for storage in the oos file
|
||||||
"""
|
"""
|
||||||
|
log.info("Get oos text")
|
||||||
|
log.info(str(self.imgs))
|
||||||
|
log.info(str(self.imgs.get_file_list()))
|
||||||
return '\n'.join(self.imgs.get_file_list())
|
return '\n'.join(self.imgs.get_file_list())
|
||||||
|
|
||||||
def set_from_oos(self, text):
|
def set_from_oos(self, text):
|
||||||
|
|
|
@ -23,6 +23,7 @@ class ListWithPreviews(QAbstractListModel):
|
||||||
(prefix, shortfilename) = os.path.split(str(filename))
|
(prefix, shortfilename) = os.path.split(str(filename))
|
||||||
log.info("shortfilename=%s"%(shortfilename))
|
log.info("shortfilename=%s"%(shortfilename))
|
||||||
# create a preview image
|
# create a preview image
|
||||||
|
if os.path.exists(filename):
|
||||||
preview = QPixmap(str(filename))
|
preview = QPixmap(str(filename))
|
||||||
w=self.maximagewidth;h=self.rowheight
|
w=self.maximagewidth;h=self.rowheight
|
||||||
preview = preview.scaled(w,h, Qt.KeepAspectRatio)
|
preview = preview.scaled(w,h, Qt.KeepAspectRatio)
|
||||||
|
@ -32,6 +33,10 @@ class ListWithPreviews(QAbstractListModel):
|
||||||
p.fill(Qt.transparent)
|
p.fill(Qt.transparent)
|
||||||
painter=QPainter(p)
|
painter=QPainter(p)
|
||||||
painter.drawPixmap((w-realw)/2,(h-realh)/2,preview)
|
painter.drawPixmap((w-realw)/2,(h-realh)/2,preview)
|
||||||
|
else:
|
||||||
|
w=self.maximagewidth;h=self.rowheight
|
||||||
|
p=QPixmap(w,h)
|
||||||
|
p.fill(Qt.transparent)
|
||||||
# finally create the row
|
# finally create the row
|
||||||
self.items.insert(row, (filename, p, shortfilename))
|
self.items.insert(row, (filename, p, shortfilename))
|
||||||
self.endInsertRows()
|
self.endInsertRows()
|
||||||
|
|
Loading…
Reference in New Issue