SVN commit 1167543 by piggz: Implemented 'addItem' for the project model. TODO: model/view needs sorting CCMAIL: staniek@kde.org M +1 -1 main/KexiMainWindow.cpp M +28 -13 widget/KexiProjectModel.cpp M +5 -4 widget/KexiProjectModel.h M +19 -0 widget/KexiProjectModelItem.cpp M +1 -0 widget/KexiProjectModelItem.h --- trunk/koffice/kexi/main/KexiMainWindow.cpp #1167542:1167543 @@ -2195,7 +2195,7 @@ } connect(d->prj, SIGNAL(newItemStored(KexiPart::Item&)), d->nav, SLOT(addItem(KexiPart::Item&))); - connect(d->prj, SIGNAL(newItemStored(KexiPart::Item&)), d->nav2, SLOT(slotAddItem(KexiPart::Item&))); //TODO new navigator + connect(d->prj, SIGNAL(newItemStored(KexiPart::Item&)), d->nav2->model(), SLOT(slotAddItem(KexiPart::Item&))); //TODO new navigator d->nav->setFocus(); if (d->forceShowProjectNavigatorOnCreation) { --- trunk/koffice/kexi/widget/KexiProjectModel.cpp #1167542:1167543 @@ -240,7 +240,7 @@ return m_itemsPartClass; } -KexiProjectModelItem *KexiProjectModel::addGroup(KexiPart::Info& info, KexiProjectModelItem *p) +KexiProjectModelItem *KexiProjectModel::addGroup(KexiPart::Info& info, KexiProjectModelItem *p) const { if (!info.isVisibleInNavigator()) return 0; @@ -249,19 +249,27 @@ return item; } -KexiProjectModelItem* KexiProjectModel::slotAddItem(KexiPart::Item& item) +void KexiProjectModel::slotAddItem(KexiPart::Item& item) { + kDebug() << item.name(); + QModelIndex idx; -// KexiProjectModelItem *parent = modelItemFromItem(item.partClass()); + KexiProjectModelItem *parent = modelItemFromName(item.partClass()); - //part object for this item -// KexiProjectModelItem *parent = item.partClass().isEmpty() -// ? 0 : m_baseItems.value(item.partClass().toLower()); -// return addItem(item, parent, parent->partInfo()); - return 0; + if (parent) { + kDebug() << "Got Parent" << parent->data(0); + idx = indexFromItem(parent); + beginInsertRows(idx, 0,0); + KexiProjectModelItem *itm = new KexiProjectModelItem(*(parent->partInfo()), item, parent); + if (itm) { + kDebug() << "Appending"; + parent->appendChild(itm); } + endInsertRows(); + } +} -KexiProjectModelItem* KexiProjectModel::addItem(KexiPart::Item &item, KexiPart::Info &info, KexiProjectModelItem *p) +KexiProjectModelItem* KexiProjectModel::addItem(KexiPart::Item &item, KexiPart::Info &info, KexiProjectModelItem *p) const { return new KexiProjectModelItem(info, item, p);; } @@ -289,16 +297,23 @@ QModelIndex KexiProjectModel::indexFromItem(KexiProjectModelItem* item) const { + kDebug(); if (item && item->parent()) { int row = item->row(); - //dbgUI << "Node index in image: " << index << ", parent has " << rowCount + 1 << " rows, inverted index becomes " << row; + kDebug() << row; return createIndex(row, 0, (void*)item); - } else { + } return QModelIndex(); } -} -KexiProjectModelItem* KexiProjectModel::modelItemFromItem(const KexiPart::Item& item) +KexiProjectModelItem* KexiProjectModel::modelItemFromItem(const KexiPart::Item& item) const { return m_rootItem->modelItemFromItem(item); } + +KexiProjectModelItem* KexiProjectModel::modelItemFromName(const QString& name) const +{ + kDebug() << name; + return m_rootItem->modelItemFromName(name); +} + --- trunk/koffice/kexi/widget/KexiProjectModel.h #1167542:1167543 @@ -45,20 +45,21 @@ virtual Qt::ItemFlags flags(const QModelIndex& index) const; public slots: - KexiProjectModelItem* slotAddItem(KexiPart::Item& item); + void slotAddItem(KexiPart::Item& item); void slotRemoveItem(const KexiPart::Item &item); private: void clear(); QModelIndex indexFromItem(KexiProjectModelItem *item) const; - KexiProjectModelItem *modelItemFromItem(const KexiPart::Item &item); + KexiProjectModelItem *modelItemFromItem(const KexiPart::Item &item) const; + KexiProjectModelItem *modelItemFromName(const QString &name) const; //!Part class to display QString m_itemsPartClass; - KexiProjectModelItem* addGroup(KexiPart::Info& info, KexiProjectModelItem*); - KexiProjectModelItem* addItem(KexiPart::Item& item, KexiPart::Info& info, KexiProjectModelItem*); + KexiProjectModelItem* addGroup(KexiPart::Info& info, KexiProjectModelItem*) const; + KexiProjectModelItem* addItem(KexiPart::Item& item, KexiPart::Info& info, KexiProjectModelItem*) const; KexiProjectModelItem *m_rootItem; --- trunk/koffice/kexi/widget/KexiProjectModelItem.cpp #1167542:1167543 @@ -130,8 +130,10 @@ { if (m_parentItem) { + //kDebug() << m_parentItem->m_childItems << this << data(0);; return m_parentItem->m_childItems.indexOf(this); } + kDebug() << "No parent item!"; return 0; } @@ -189,3 +191,20 @@ } return itm; } + +KexiProjectModelItem* KexiProjectModelItem::modelItemFromName(const QString& name) const +{ + KexiProjectModelItem* itm = 0; + + foreach(KexiProjectModelItem *child, m_childItems) { + if (!itm) { + if ((child->m_item && child->m_item->name() == name) || (child->m_info && child->m_info->partClass() == name) || (child->m_groupName == name)) { + itm = child; + } else { + itm = child->modelItemFromName(name); + } + } + } + return itm; +} + --- trunk/koffice/kexi/widget/KexiProjectModelItem.h #1167542:1167543 @@ -82,6 +82,7 @@ void debugPrint(); KexiProjectModelItem* modelItemFromItem(const KexiPart::Item &item) const; + KexiProjectModelItem* modelItemFromName(const QString& name) const; private: QList m_childItems;