diff options
author | Arno <am@disconnect.de> | 2012-09-30 04:34:22 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2012-09-30 04:34:22 +0200 |
commit | 887c2cd696c54af0cd6fdd54950d006626afeacc (patch) | |
tree | 2ad296208a7d8e44ac249612dfcd09919e7ba07d | |
parent | 5addc8a8ec89c1e354949bcf5c3152fea4fe44b9 (diff) | |
download | SheMov-887c2cd696c54af0cd6fdd54950d006626afeacc.tar.gz SheMov-887c2cd696c54af0cd6fdd54950d006626afeacc.tar.bz2 SheMov-887c2cd696c54af0cd6fdd54950d006626afeacc.zip |
Foremost a fix for SmTreeModel
Not working again, but I eventually have to commit the changes. Fixes to
SmTreeModel:
* Fix SmTreeModel::index(). The previous comment was quite valid. I'm
surprised that it worked at all. I have no clue why to return an invalid
QModelIndex if the column isn't 0. Now an index with any valid column
number can be created.
* Fix SmTreeModel::parent(). Again, why shouldn't we create a parent
index with a column other than 0? No idea...
* Fix SmTreeModel::headerData(). Add some sanity checks.
* Fix SmTreeModel::findRecursive(). Well, what is there to say. It never
worked for models with a depth > 1, but obviously it didn't really
matter until now. To make it work I had to change SmTreeItem as well.
SmTreeItem::next() returns the next valid parent/sibling, or 0 if there
isn't one.
There may be some fallout from these changes, but they're yet to be
seen.
Changes to PictureView:
* fix selecting an item according to the new datasbase layout
* same goes for editing items. If an update actually works has to be
checked.
Overall, it's an intermediate commit that should have been a sane series
of commits. Can't be changed now...
-rw-r--r-- | mappingtreemodel.cpp | 48 | ||||
-rw-r--r-- | mappingtreemodel.h | 2 | ||||
-rw-r--r-- | mappingtreewidget.cpp | 34 | ||||
-rw-r--r-- | mappingtreewidget.h | 2 | ||||
-rw-r--r-- | pictureswidget.cpp | 49 | ||||
-rw-r--r-- | pictureswidget.h | 4 | ||||
-rw-r--r-- | pictureviewer2.cpp | 1 | ||||
-rw-r--r-- | propertiesdialog.cpp | 4 | ||||
-rw-r--r-- | seriestreemodel.cpp | 3 | ||||
-rw-r--r-- | seriestreewidget.cpp | 19 | ||||
-rw-r--r-- | smtreeitem.cpp | 11 | ||||
-rw-r--r-- | smtreeitem.h | 1 | ||||
-rw-r--r-- | smtreemodel.cpp | 74 | ||||
-rw-r--r-- | smtreemodel.h | 3 |
14 files changed, 180 insertions, 75 deletions
diff --git a/mappingtreemodel.cpp b/mappingtreemodel.cpp index 9bb278d..ff7d7d3 100644 --- a/mappingtreemodel.cpp +++ b/mappingtreemodel.cpp @@ -11,6 +11,8 @@ #include <algorithm> +#include <QDebug> + #include "mappingtreemodel.h" #include "smtreeitem.h" @@ -148,7 +150,7 @@ QVariant MappingTreeModel::data(const QModelIndex &index, int role) const{ } QList<QVariant> MappingTreeModel::childList(const QVariant &value, int column) const{ - QModelIndex itemIdx = findRecursive(value, column, createIndex(0, 0, root())); + QModelIndex itemIdx = findRecursive(value, column, createIndex(0, column, root())); SmTreeItem *item = static_cast<SmTreeItem*>(itemIdx.internalPointer()); if(item){ if(item->childCount()){ @@ -169,6 +171,23 @@ QList<QVariant> MappingTreeModel::mappingsForFile(const QVariant &fileId) const{ return retval; } +QStringList MappingTreeModel::path(QModelIndex &idx) const{ + if(!idx.isValid()){ + return QStringList(); + } + QStringList retval; + SmTreeItem *item = static_cast<SmTreeItem*>(idx.internalPointer()); + do { + QString d = item->data(MappingTreeModel::Name).toString(); + if(!d.isEmpty()){ + retval << d; + } + item = item->parent(); + }while(item); + std::reverse(retval.begin(), retval.end()); + return retval; +} + QModelIndex MappingTreeModel::indexFromPath(const QString &path, int column) const{ QStringList items = path.split("/"); if(items.isEmpty() || column >= NumFields){ @@ -362,14 +381,37 @@ int MappingTreeModel::childCount(const QModelIndex &idx) const{ return item->childCount(); } +MappingData MappingTreeModel::mappingDataFromIndex(QModelIndex &idx) const{ + MappingData retval = { -1, QString(), QStringList() }; + if(!idx.isValid()){ + return retval; + } + retval.id = idx.data(MappingTreeModel::IdRole).toInt(); + retval.name = idx.data(MappingTreeModel::NameRole).toString(); + retval.path = path(idx); + return retval; +} + +//continue here! MappingData MappingTreeModel::mappingDataFromId(int mappingId) const{ MappingData retval = { -1, QString(), QStringList() }; - foreach(MappingData d, mValidMappings){ + QModelIndex mapIdx = findRecursive(mappingId, MappingTreeModel::Id, rootIndex()); + //REMOVE ME + Q_ASSERT(mapIdx.isValid()); + retval.id = mappingId; + retval.name = mapIdx.data(MappingTreeModel::NameRole).toString(); + qDebug() << "mapping" << retval.id << retval.name; + SmTreeItem *mapItem = static_cast<SmTreeItem*>(mapIdx.internalPointer()); + //REMOVE ME + Q_ASSERT(mapItem); + //retval.path = path(mapItem); + + /*foreach(MappingData d, mValidMappings){ if(d.id == mappingId){ retval = d; break; } - } + }*/ return retval; } diff --git a/mappingtreemodel.h b/mappingtreemodel.h index 4b45f09..f2771c9 100644 --- a/mappingtreemodel.h +++ b/mappingtreemodel.h @@ -40,6 +40,7 @@ class MappingTreeModel : public SmTreeModel { QVariant data(const QModelIndex &index, int role) const; QList<QVariant> childList(const QVariant &value, int column = 0) const; QList<QVariant> mappingsForFile(const QVariant &fileId) const; + QStringList path(QModelIndex &idx) const; QModelIndex indexFromPath(const QString &path, int column = 0) const; bool setData(const QModelIndex &index, const QVariant &value, int role); void move(const QModelIndex &source, const QModelIndex &dest); @@ -48,6 +49,7 @@ class MappingTreeModel : public SmTreeModel { bool addChild(const QVariant &name, const QModelIndex &parent); bool deleteChild(const QModelIndex &idx); int childCount(const QModelIndex &idx) const; + MappingData mappingDataFromIndex(QModelIndex &idx) const; MappingData mappingDataFromId(int mappingId) const; QStringList paths() const; const QString &forbidden() const { return mForbidden; } diff --git a/mappingtreewidget.cpp b/mappingtreewidget.cpp index e4e9e76..82a1490 100644 --- a/mappingtreewidget.cpp +++ b/mappingtreewidget.cpp @@ -92,28 +92,13 @@ MappingTreeWidget::MappingTreeWidget(QWidget *parent) : QWidget(parent){ } MappingData MappingTreeWidget::selectedItem() const { - MappingData retval; + MappingData retval = { -1, QString(), QStringList() }; QModelIndex sel = selected(); if(!sel.isValid()){ - retval.id = -1; - }else{ - QModelIndex real = mProxy->mapToSource(sel); - if(mModel->childCount(real)){ - retval.id = -1; - }else{ - retval.id = sel.data(MappingTreeModel::IdRole).toInt(); - } - retval.name = sel.data(MappingTreeModel::NameRole).toString(); - QStringList p; - QModelIndex parent = sel; - while(parent.isValid()){ - p << parent.data().toString(); - parent = parent.parent(); - } - std::reverse(p.begin(), p.end()); - retval.path = p; + return retval; } - return retval; + QModelIndex real = mProxy->mapToSource(sel); + return mModel->mappingDataFromIndex(real); } void MappingTreeWidget::addChild(){ @@ -308,17 +293,18 @@ void MappingEditWidget::removeMapping(){ mResultModel->removeRows(firstIdx.row(), 1, firstIdx.parent()); } -void MappingEditWidget::setMappings(const QList<int> &mappings){ +void MappingEditWidget::setMappings(const QList<MappingData> &mappings){ if(mappings.isEmpty()){ return; } - MappingTreeModel *mModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); + //MappingTreeModel *mModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); mResultModel->clearData(); - foreach(int i, mappings){ - MappingData curData = mModel->mappingDataFromId(i); + foreach(MappingData d, mappings){ + mResultModel->addItem(d); + /*MappingData curData = mModel->mappingDataFromId(i); if(curData.id != -1){ mResultModel->addItem(curData); - } + }*/ } mMappingResult->expandAll(); } diff --git a/mappingtreewidget.h b/mappingtreewidget.h index ae0f81e..60bbecc 100644 --- a/mappingtreewidget.h +++ b/mappingtreewidget.h @@ -88,7 +88,7 @@ class MappingEditWidget : public QWidget { public slots: void addMapping(); void removeMapping(); - void setMappings(const QList<int> &mappings); + void setMappings(const QList<MappingData> &mappings); private: MappingTreeWidget *mMappingTree; diff --git a/pictureswidget.cpp b/pictureswidget.cpp index d5caa76..bc4b143 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -72,8 +72,13 @@ void PicturesWidget::readSettings(){ } void PicturesWidget::editMappings(){ - QList<int> currentMappings = mPictureView->fileMappings(); - mEditDialog->editWidget()->setMappings(currentMappings); + QModelIndexList selectedFids = mPictureView->selectionModel()->selectedRows(PicFilesModel::Id); + QList<int> fileIds; + foreach(QModelIndex idx, selectedFids){ + fileIds << idx.data().toInt(); + } + QList<MappingData> mappings = mPictureView->filesModel()->mappingDataFromFiles(fileIds); + mEditDialog->editWidget()->setMappings(mappings); int retval = mEditDialog->exec(); if(retval == QDialog::Accepted){ QList<int> selMappings = mEditDialog->editWidget()->mappingIds(); @@ -272,12 +277,14 @@ PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTr //setup database mDb = QSqlDatabase::database("treedb"); mPopulateQS = QString("SELECT DISTINCT(pics.ipicsid), pics.tfilename, pics.isize, pics.tformat, pics.dtadded, pics.cmd5sum FROM pics, pics_mappings2 WHERE pics_mappings2.imappings_parents_id IN (%1) AND pics_mappings2.ipics_id = pics.ipicsid ORDER BY pics.tfilename"); + mMappingsQS = QString("SELECT DISTINCT(pics_mappings2.imappings_parents_id) FROM pics_mappings2, pics WHERE pics_mappings2.ipics_id IN (%1)"); mDeleteFileQ = new QSqlQuery(mDb); mDeleteFileQ->prepare("DELETE FROM pics WHERE ipicsid = :id"); mDeleteMappingsQ = new QSqlQuery(mDb); - mDeleteMappingsQ->prepare("DELETE FROM pics_mappings WHERE ipics_id = :id"); + mDeleteMappingsQ->prepare("DELETE FROM pics_mappings2 WHERE ipics_id = :id"); mAddMappingsQ = new QSqlQuery(mDb); - mAddMappingsQ->prepare("INSERT INTO pics_mappings(ipics_id, imapping_id) VALUES(:pid, :id)"); + mAddMappingsQ->prepare("INSERT INTO pics_mappings2(ipics_id, imapping_id) VALUES(:pid, :id)"); + } PicFilesModel::~PicFilesModel(){ @@ -399,6 +406,40 @@ bool PicFilesModel::changeMappings(const QList<int> &fileIds, const QList<int> & return false; } +QList<MappingData> PicFilesModel::mappingDataFromFiles(const QList<int> fileIds) const{ + QList<int> parentIds = mappingPIdsFromFiles(fileIds); + if(parentIds.isEmpty()){ + return QList<MappingData>(); + } + QList<MappingData> retval; + foreach(int pId, parentIds){ + QModelIndex curIdx = mMappingTreeModel->findRecursive(pId, MappingTreeModel::MapParentId, mMappingTreeModel->rootIndex()); + MappingData curData; + curData.id = curIdx.data(MappingTreeModel::IdRole).toInt(); + curData.name = curIdx.data(MappingTreeModel::NameRole).toString(); + curData.path = mMappingTreeModel->path(curIdx); + retval << curData; + } + return retval; +} + +QList<int> PicFilesModel::mappingPIdsFromFiles(QList<int> fileIds) const{ + if(fileIds.isEmpty()){ + return QList<int>(); + } + QStringList idList; + foreach(int id, fileIds){ + idList << QString::number(id); + } + QString query = mMappingsQS.arg(idList.join(",")); + QSqlQuery q(query, mDb); + QList<int> retval; + while(q.next()){ + retval << q.value(0).toInt(); + } + return retval; +} + void PicFilesModel::populate(){ SmTreeItem *root = new SmTreeItem(NumFields); QStringList idList; diff --git a/pictureswidget.h b/pictureswidget.h index cc1578d..b2da8ea 100644 --- a/pictureswidget.h +++ b/pictureswidget.h @@ -28,6 +28,7 @@ class QEvent; class HoverWindow; class PictureViewer2; class QAction; +struct MappingData; class PicturesWidget : public QWidget { Q_OBJECT @@ -119,14 +120,17 @@ class PicFilesModel : public SmTreeModel { QList<QList<QVariant> > allFiles() const; void removeFiles(const QList<QPersistentModelIndex> &files); bool changeMappings(const QList<int> &fileIds, const QList<int> &mappingIds); + QList<MappingData> mappingDataFromFiles(const QList<int> fileIds) const; public slots: void populate(); private: + QList<int> mappingPIdsFromFiles(QList<int> fileIds) const; QSqlDatabase mDb; MappingTreeModel *mMappingTreeModel; QString mPopulateQS; + QString mMappingsQS; QSqlQuery *mDeleteFileQ; QSqlQuery *mDeleteMappingsQ; QSqlQuery *mAddMappingsQ; diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index bf2dbce..36701ff 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -306,6 +306,7 @@ void PictureViewer2::constructInfoItem(const PicData &data, QSize picSize){ mScene->addItem(mFnItem); } +//FIXME! void PictureViewer2::constructMappingItem(const PicData &file){ MappingTreeModel *mappingModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); QList<QVariant> mappings = mappingModel->mappingsForFile(file.at(PicFilesModel::Id)); diff --git a/propertiesdialog.cpp b/propertiesdialog.cpp index 485df6b..2068cdf 100644 --- a/propertiesdialog.cpp +++ b/propertiesdialog.cpp @@ -66,7 +66,7 @@ void PropertiesDialog::populate(int seriesPartId){ mDisplayModel->setRoot(root); //setup caption - QModelIndex seriesIdx = mSeriesModel->findRecursive(seriesPartId, SeriesTreeModel::SeriesPartId, QModelIndex()); + QModelIndex seriesIdx = mSeriesModel->findRecursive(seriesPartId, SeriesTreeModel::SeriesPartId, mSeriesModel->rootIndex()); Q_ASSERT(seriesIdx.isValid()); QString captionString = QString(tr("Properties for %1")).arg(mSeriesModel->index(seriesIdx.row(), SeriesTreeModel::Name, seriesIdx.parent()).data().toString()); mCaption->setText(captionString); @@ -88,7 +88,7 @@ void PropertiesDialog::showPicture(QModelIndex current, QModelIndex previous){ QPixmap pic = SmGlobals::instance()->frameCache()->entry(current.data().toString()); mPictureLabel->setPixmap(pic); }else if(nodeType == PictureFileNode){ - QModelIndex fileIdx = mFilesModel->findRecursive(fileId, FilesTreeModel::FilesId, mFilesModel->index(0, 0, QModelIndex())); + QModelIndex fileIdx = mFilesModel->findRecursive(fileId, FilesTreeModel::FilesId, mFilesModel->rootIndex()); if(fileIdx.isValid()){ QString fullPath = fileIdx.data(FilesTreeModel::FullPathRole).toString(); mPictureLabel->setPixmap(fullPath); diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp index 2319c51..c8260c4 100644 --- a/seriestreemodel.cpp +++ b/seriestreemodel.cpp @@ -526,6 +526,9 @@ void SeriesTreeModel::readSettings(){ } void SeriesTreeModel::conditionalUpdate(const QModelIndex &parent, int field, const QVariant &value){ + if(!parent.isValid()){ + return; + } SmTreeItem *item = static_cast<SmTreeItem*>(parent.internalPointer()); if(item->childCount() > 0){ //series diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index 1f96a11..2a487fb 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -68,12 +68,12 @@ SeriesTreeWidget::SeriesTreeWidget(QWidget *parent) : QWidget(parent){ mView = new SeriesTreeView; mProxy = new SeriesTreeSortModel(this); mModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel")); - mProxy->setSourceModel(mModel); - mView->setModel(mProxy); - mView->setSortingEnabled(true); - for(int i = 1; i < SeriesTreeModel::NumFields; ++i){ + mProxy->setSourceModel(mModel); + mView->setModel(mProxy); + mView->setSortingEnabled(true); + for(int i = 1; i < SeriesTreeModel::NumFields; ++i){ mView->setColumnHidden(i, true); - } + } mView->resizeColumnToContents(0); mView->setSelectionMode(QAbstractItemView::ExtendedSelection); mView->setEditTriggers(QAbstractItemView::NoEditTriggers); @@ -495,9 +495,14 @@ bool SeriesTreeSortModel::lessThan(const QModelIndex &left, const QModelIndex &r } bool SeriesTreeSortModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { - SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(sourceModel()); + SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(sourceModel()); int rowFilter = seriesModel->rowFilter(); - QModelIndex curIdx = sourceModel()->index(source_row, 0, source_parent); + /*QModelIndex parent = source_parent; + if(!parent.isValid()){ + parent = seriesModel->rootIndex(); + }*/ + QModelIndex curIdx = sourceModel()->index(source_row, 0, source_parent); + //QModelIndex curIdx = source_parent; QString name = curIdx.data(SeriesTreeModel::NameRole).toString(); QRegExp filterRe = filterRegExp(); if(rowFilter == SeriesTreeModel::All){ diff --git a/smtreeitem.cpp b/smtreeitem.cpp index ed9f73e..ab5e636 100644 --- a/smtreeitem.cpp +++ b/smtreeitem.cpp @@ -42,6 +42,17 @@ SmTreeItem *SmTreeItem::child(int row) const{ return 0; } +SmTreeItem *SmTreeItem::next() const{ + int pos = row(); + if(pos + 1 < parent()->childCount()){ + return parent()->child(pos + 1); + } + if(parent() == 0){ + return 0; + } + return parent()->next(); +} + int SmTreeItem::childCount() const{ return mChildren.count(); } diff --git a/smtreeitem.h b/smtreeitem.h index b0b9ca7..61e121e 100644 --- a/smtreeitem.h +++ b/smtreeitem.h @@ -19,6 +19,7 @@ class SmTreeItem { ~SmTreeItem(); void appendChild(SmTreeItem *child); SmTreeItem *child(int row) const; + SmTreeItem *next() const; int childCount() const; int columnCount() const; int row() const; diff --git a/smtreemodel.cpp b/smtreemodel.cpp index 7df30d3..98fa4c8 100644 --- a/smtreemodel.cpp +++ b/smtreemodel.cpp @@ -9,6 +9,8 @@ #include <QSettings> #include <QBrush> +#include <QDebug> + #include "smtreemodel.h" #include "smtreeitem.h" #include "smglobals.h" @@ -40,16 +42,20 @@ int SmTreeModel::columnCount(const QModelIndex &parent) const{ } QModelIndex SmTreeModel::index(int row, int column, const QModelIndex &parent) const{ - //this is totally bogus! Why? Tentatively leaving it in for now... - if(parent.isValid() && (parent.column() != 0)){ - return QModelIndex(); + // return child from root if parent is invalid + // this was difficult to figure this out! + if(!parent.isValid()){ + return createIndex(row, column, mRootItem->child(row)); } - SmTreeItem *parentItem = itemAt(parent); - SmTreeItem *childItem = parentItem->child(row); - if(childItem){ - return createIndex(row, column, childItem); - } - return QModelIndex(); + SmTreeItem *parentItem = static_cast<SmTreeItem*>(parent.internalPointer()); + if( (parentItem == 0) || + (row < 0) || + (column < 0) || + (row >= parentItem->childCount()) || + (column > parentItem->columnCount())){ + return QModelIndex(); + } + return createIndex(row, column, parentItem->child(row)); } QModelIndex SmTreeModel::parent(const QModelIndex &child) const{ @@ -57,13 +63,13 @@ QModelIndex SmTreeModel::parent(const QModelIndex &child) const{ return QModelIndex(); } - SmTreeItem *childItem = itemAt(child); + SmTreeItem *childItem = static_cast<SmTreeItem*>(child.internalPointer()); SmTreeItem *parentItem = childItem->parent(); - if(parentItem == mRootItem){ + if(parentItem == 0){ return QModelIndex(); } - return createIndex(parentItem->row(), 0, parentItem); + return createIndex(parentItem->row(), child.column(), parentItem); } Qt::ItemFlags SmTreeModel::flags(const QModelIndex &index) const{ @@ -74,7 +80,7 @@ Qt::ItemFlags SmTreeModel::flags(const QModelIndex &index) const{ } QVariant SmTreeModel::headerData(int section, Qt::Orientation orientation, int role) const{ - if((orientation == Qt::Horizontal) && (role == Qt::DisplayRole)){ + if((orientation == Qt::Horizontal) && (role == Qt::DisplayRole) && (section > -1) && (section < mHeaders.count())){ return mHeaders.at(section); } return QVariant(); @@ -142,30 +148,28 @@ QModelIndex SmTreeModel::find(const QVariant &value, int column, const QModelInd return QModelIndex(); } -QModelIndex SmTreeModel::findRecursive(const QVariant &value, int column, const QModelIndex &parent) const{ - SmTreeItem *parentItem = 0; - if(!parent.isValid()){ - parentItem = mRootItem; - }else{ - parentItem = static_cast<SmTreeItem*>(parent.internalPointer()); - } - if(parentItem->data(column) == value){ - return parent; +QModelIndex SmTreeModel::findRecursive(const QVariant &value, int column, const QModelIndex &start) const{ + if(!start.isValid()){ + return QModelIndex(); } - for(int i = 0; i < parentItem->childCount(); ++i){ - SmTreeItem *child = parentItem->child(i); + SmTreeItem *startItem = static_cast<SmTreeItem*>(start.internalPointer()); + if(startItem->data(column) == value){ + return start; + } + for(int i = 0; i < startItem->childCount(); ++i){ + SmTreeItem *child = startItem->child(i); if(child->data(column) == value){ return createIndex(i, column, child); } - if(child->childCount()){ - return findRecursive(value, column, createIndex(i, column, child)); - } - } - QModelIndex next = index(parent.row() + 1, column, parent.parent()); - if(!next.isValid()){ - return QModelIndex(); - } - return findRecursive(value, column, next); + if(child->childCount()){ + return findRecursive(value, column, createIndex(i, column, child)); + } + } + SmTreeItem *next = startItem->next(); + if(next){ + return findRecursive(value, column, createIndex(next->row(), column, next)); + } + return QModelIndex(); } bool SmTreeModel::setRoot(SmTreeItem *rootItem){ @@ -179,6 +183,10 @@ bool SmTreeModel::setRoot(SmTreeItem *rootItem){ return false; } +QModelIndex SmTreeModel::rootIndex() const { + return createIndex(0, 0, mRootItem); +} + SmTreeItem *SmTreeModel::parentItem(const QModelIndex &child) const{ QModelIndex parent = child.parent(); if(parent == QModelIndex()){ diff --git a/smtreemodel.h b/smtreemodel.h index 515f7b3..7037e4c 100644 --- a/smtreemodel.h +++ b/smtreemodel.h @@ -37,11 +37,12 @@ class SmTreeModel : public QAbstractItemModel { virtual QVariant data(const QModelIndex &index, int role) const; virtual bool setData(const QModelIndex &index, const QVariant &value, int role); virtual QModelIndex find(const QVariant &value, int column = 0, const QModelIndex &parent = QModelIndex()) const; - virtual QModelIndex findRecursive(const QVariant &value, int column = 0, const QModelIndex &parent = QModelIndex()) const; + virtual QModelIndex findRecursive(const QVariant &value, int column, const QModelIndex &start) const; // root + parent item bool setRoot(SmTreeItem *rootItem); SmTreeItem *root() const { return mRootItem; } + QModelIndex rootIndex() const; SmTreeItem *parentItem(const QModelIndex &child) const; void reparent(const QModelIndex &idx, const QModelIndex &newParent, bool sorted = false); |