From 940eb089e93561c656df020bdddf7ce558b662d3 Mon Sep 17 00:00:00 2001 From: Martin Thompson Date: Wed, 4 Mar 2009 21:56:27 +0000 Subject: [PATCH] Merging multiple items done bzr-revno: 374 --- openlp/core/ui/servicemanager.py | 41 +++++++++++-------- openlp/core/ui/test/test_service_manager.py | 44 ++++++++++----------- openlp/plugins/images/imageplugin.py | 2 +- openlp/plugins/images/imageserviceitem.py | 2 +- 4 files changed, 49 insertions(+), 40 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index d5ddbe182..ed0ce8fc4 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -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 diff --git a/openlp/core/ui/test/test_service_manager.py b/openlp/core/ui/test/test_service_manager.py index 19d76b5ba..c688f0b83 100644 --- a/openlp/core/ui/test/test_service_manager.py +++ b/openlp/core/ui/test/test_service_manager.py @@ -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("#