Merging multiple items done

bzr-revno: 374
This commit is contained in:
Martin Thompson 2009-03-04 21:56:27 +00:00
parent 5660ef45fd
commit 940eb089e9
4 changed files with 49 additions and 40 deletions

View File

@ -42,14 +42,18 @@ class ServiceData(QAbstractItemModel):
global log
log=logging.getLogger("ServiceData")
def __init__(self):
QAbstractItemModel.__init__(self)
self.items=[]
log.info("Starting")
def columnCount(self, parent):
return 1; # always only a single column (for now)
def rowCount(self, parent):
return len(self.items)
def insertRow(self, row, service_item):
# self.beginInsertRows(QModelIndex(),row,row)
log.info("insert row %d:%s"%(row,service_item))
self.items.insert(row, service_item)
log.info("Items: %s" % self.items)
# self.endInsertRows()
def removeRow(self, row):
self.beginRemoveRows(QModelIndex(), row,row)
@ -58,7 +62,11 @@ class ServiceData(QAbstractItemModel):
def addRow(self, item):
self.insertRow(len(self.items), item)
def index(self, row, col, parent = QModelIndex()):
return self.createIndex(row,col)
def parent(self, index=QModelIndex()):
return QModelIndex() # no children as yet
def data(self, index, role):
"""
Called by the service manager to draw us in the service window
@ -87,12 +95,19 @@ class ServiceData(QAbstractItemModel):
for i in self.items:
yield i
def item(self, row):
log.info("Get Item:%d -> %s" %(row, str(self.items)))
return self.items[row]
class ServiceManager(QWidget):
"""Manages the orders of service. Currently this involves taking
text strings from plugins and adding them to an OOS file. In
future, it will also handle zipping up all the resources used into
one lump"""
one lump.
Also handles the UI tasks of moving things up and down etc.
"""
def __init__(self, parent):
QWidget.__init__(self)
@ -122,7 +137,7 @@ class ServiceManager(QWidget):
self.TreeView = QtGui.QTreeView(self)
self.service_data=ServiceData()
# self.TreeView.setModel(self.service_data)
self.TreeView.setModel(self.service_data)
self.Layout.addWidget(self.TreeView)
def addServiceItem(self, item):
@ -132,28 +147,22 @@ class ServiceManager(QWidget):
assert len(indexes) <= 1 # can only have one selected index in this view
if indexes == []:
log.info("No row")
row = 0
row = None
selected_item = None
else:
row=index.row()
row=indexes[0].row()
# if currently selected is of correct type, add it to it
selected_item=self.service_data(row)
log.info("row:%d"%row)
selected_item=self.service_data.item(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+1, item)
# for i in self.service_data:
# print item.imgs
# print i.imgs
if row is None:
self.service_data.addRow(item)
else:
self.service_data.insertRow(row+1, item)
def removeServiceItem(self):
"""Remove currently selected item"""
pass

View File

@ -20,7 +20,8 @@ import time
import sys
import os, os.path
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import *
from PyQt4.QtGui import *
mypath=os.path.split(os.path.abspath(__file__))[0]
sys.path.insert(0,(os.path.join(mypath, '..','..', '..','..')))
from openlp.core.ui import ServiceManager
@ -59,6 +60,8 @@ class TestServiceManager_base:
self.expected_answer="Don't know yet"
self.answer=None
self.s=ServiceManager(None)
# get a selection model so we can pretend to be a user and click different items
# self.sm_selection_model=self.s.service_data.selectionModel()
log.info("--------------- Setup Done -------------")
def teardown_method(self, method):
@ -103,8 +106,18 @@ class TestServiceManager_base:
log.info("test_2items_merged")
item=ImageServiceItem(None)
item.add("test.gif")
# now select the line
self.s.addServiceItem(item)
# now select the line we just added
# first get the index
i=self.s.service_data.index(0,0)
# make a selection of it
sm=QItemSelectionModel(self.s.service_data)
# selection=QItemSelection(i,i)
sm.select(i, QItemSelectionModel.ClearAndSelect)
log.info(str(sm.selectedIndexes()))
self.s.TreeView.setSelectionModel(sm)
log.info("Slected indexes = " + str(self.s.TreeView.selectedIndexes()))
item=ImageServiceItem(None)
item.add("test2.gif")
item.add("test3.gif")
@ -118,26 +131,13 @@ class TestServiceManager_base:
assert lines[2] == "test2.gif"
assert lines[3] == "test3.gif"
log.info("done")
# def test_moving_selection(self):
# log.info("test_easy")
# item=ImageServiceItem(None)
# item.add("test1.gif")
# item.add("test2.gif")
# item.add("test3.gif")
# item.add("test2a.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] == "test1.gif"
# assert lines[2] == "test2.gif"
# assert lines[3] == "test2a.gif"
# assert lines[4] == "test3.gif"
# log.info("done")
# add different types of service item
# move up, down
# move to top, bottom
# new and save as
# deleting items
if __name__=="__main__":
t=TestServiceManager_base()

View File

@ -92,7 +92,7 @@ class ImagePlugin(Plugin, PluginUtils):
self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
self.ImageListView.setSpacing(1)
self.ImageListView.setAlternatingRowColors(True)
# return self.MediaManagerItem
return self.MediaManagerItem
def initialise(self):
log.info("Plugin Initialising")

View File

@ -90,7 +90,7 @@ class ImageServiceItem(ServiceItem):
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():
for filename in data.imgs.get_file_list():
self.add(filename)