insilmaril@825: #include "findresultwidget.h" insilmaril@825: insilmaril@825: #include insilmaril@825: #include insilmaril@825: insilmaril@829: #include "findresultitem.h" insilmaril@825: #include "findresultmodel.h" insilmaril@829: #include "vymmodel.h" insilmaril@825: insilmaril@825: extern QString iconPath; insilmaril@825: insilmaril@829: FindResultWidget::FindResultWidget(VymModel *m, QWidget *) insilmaril@825: { insilmaril@829: model=m; insilmaril@829: insilmaril@829: // Create results model insilmaril@829: resultsModel=new FindResultModel; insilmaril@825: insilmaril@825: // Create TreeView insilmaril@829: view = new QTreeView (this); insilmaril@829: view->setModel (resultsModel); insilmaril@825: insilmaril@825: QVBoxLayout* mainLayout = new QVBoxLayout; insilmaril@825: insilmaril@829: // FIXME-4 feature: show number of hits at bottom of FindResultWidget insilmaril@825: insilmaril@829: /* FIXME-3 testing QMenuBar *mb=new QMenuBar; insilmaril@825: QAction *a=new QAction ("Foo action",NULL); insilmaril@825: mb->addAction (a); insilmaril@825: mb->insertSeparator(); insilmaril@825: mainLayout->addWidget(mb); insilmaril@829: */ insilmaril@825: mainLayout->addWidget(view); insilmaril@825: insilmaril@825: setLayout (mainLayout); insilmaril@829: insilmaril@829: model=m; insilmaril@829: insilmaril@829: // Selection insilmaril@829: connect (view->selectionModel(),SIGNAL (selectionChanged (QItemSelection,QItemSelection)), insilmaril@829: this, SLOT (updateSelection (QItemSelection,QItemSelection))); insilmaril@842: insilmaril@842: connect (resultsModel, SIGNAL(layoutChanged() ), view, SLOT (expandAll() )); insilmaril@829: } insilmaril@829: insilmaril@829: void FindResultWidget::addItem (TreeItem *ti) insilmaril@829: { insilmaril@829: if (ti) insilmaril@829: { insilmaril@829: QModelIndex index = view->selectionModel()->currentIndex(); insilmaril@829: //QAbstractItemModel *resultsModel = view->model(); insilmaril@829: insilmaril@829: if (!resultsModel->insertRow(index.row()+1, index.parent())) insilmaril@829: return; insilmaril@829: insilmaril@829: for (int column = 0; column < resultsModel->columnCount(index.parent()); ++column) { insilmaril@829: QModelIndex child = resultsModel->index(index.row()+1, column, index.parent()); insilmaril@829: resultsModel->setData(child, QVariant(ti->getHeading()), Qt::EditRole); insilmaril@829: resultsModel->getItem(child)->setOriginal (ti); insilmaril@829: } insilmaril@829: } insilmaril@829: } insilmaril@829: insilmaril@829: void FindResultWidget::addItem (const QString &s) insilmaril@829: { insilmaril@829: if (!s.isEmpty()) insilmaril@829: { insilmaril@829: QModelIndex index = view->selectionModel()->currentIndex(); insilmaril@829: insilmaril@829: if (!resultsModel->insertRow(index.row()+1, index.parent())) insilmaril@829: return; insilmaril@829: insilmaril@829: for (int column = 0; column < resultsModel->columnCount(index.parent()); ++column) { insilmaril@829: QModelIndex child = resultsModel->index(index.row()+1, column, index.parent()); insilmaril@829: resultsModel->setData(child, QVariant(s), Qt::EditRole); insilmaril@829: } insilmaril@829: } insilmaril@829: } insilmaril@829: insilmaril@829: void FindResultWidget::setModel (VymModel *m) insilmaril@829: { insilmaril@829: if (model !=NULL && m!=model) insilmaril@829: qWarning ("FindResultWidget::setModel m!=model"); insilmaril@829: model=m; insilmaril@829: } insilmaril@829: insilmaril@829: FindResultModel* FindResultWidget::getResultModel() insilmaril@829: { insilmaril@829: return resultsModel; insilmaril@829: } insilmaril@829: insilmaril@825: void FindResultWidget::popup() insilmaril@825: { insilmaril@825: show(); insilmaril@829: parentWidget()->show(); insilmaril@825: } insilmaril@825: insilmaril@825: void FindResultWidget::cancelPressed() insilmaril@825: { insilmaril@825: emit (hideFindResultWidget() ); insilmaril@825: } insilmaril@825: insilmaril@829: void FindResultWidget::updateSelection(QItemSelection newsel,QItemSelection) insilmaril@825: { insilmaril@829: QModelIndex ix; insilmaril@829: foreach (ix,newsel.indexes() ) insilmaril@829: { insilmaril@829: FindResultItem *fri= static_cast(ix.internalPointer()); insilmaril@842: if (fri->getOrgModel() && fri->getOriginalID()>0) insilmaril@829: { insilmaril@842: TreeItem *ti=fri->getOrgModel()->findID(fri->getOriginalID() ); insilmaril@829: if (ti) insilmaril@842: { insilmaril@829: fri->getOrgModel()->select (ti); insilmaril@842: int i=fri->getOriginalIndex(); insilmaril@842: if (i>=0) emit (noteSelected (resultsModel->getSearchString(),i)); insilmaril@842: } insilmaril@829: } insilmaril@829: } insilmaril@825: } insilmaril@825: insilmaril@829: