diff -r fac2248e2afa -r 832e96c9abb6 findresultwidget.cpp --- a/findresultwidget.cpp Mon Mar 08 12:22:15 2010 +0000 +++ b/findresultwidget.cpp Mon Mar 08 12:24:26 2010 +0000 @@ -1,54 +1,104 @@ #include "findresultwidget.h" -#include #include -#include #include -#include -#include - +#include "findresultitem.h" #include "findresultmodel.h" +#include "vymmodel.h" extern QString iconPath; -FindResultWidget::FindResultWidget(QWidget *) +FindResultWidget::FindResultWidget(VymModel *m, QWidget *) { - // Create model - model=new FindResultModel; + model=m; + + // Create results model + resultsModel=new FindResultModel; // Create TreeView - view = new QTreeView; - view->setModel (model); + view = new QTreeView (this); + view->setModel (resultsModel); QVBoxLayout* mainLayout = new QVBoxLayout; - QHBoxLayout *row2Layout = new QHBoxLayout; - // Create Buttons - cancelbutton = new QPushButton; - //cancelbutton->setText(tr("Cancel")); - cancelbutton->setIcon (QIcon (iconPath+"fileclose.png")); - cancelbutton->setShortcut (Qt::Key_Escape); - connect ( cancelbutton, SIGNAL( clicked() ), this, SLOT( cancelPressed() ) ); + // FIXME-4 feature: show number of hits at bottom of FindResultWidget - row2Layout->addWidget (cancelbutton); - //row2Layout->addWidget(findcombo); - //row2Layout->addWidget(nextbutton); - - QMenuBar *mb=new QMenuBar; + /* FIXME-3 testing QMenuBar *mb=new QMenuBar; QAction *a=new QAction ("Foo action",NULL); mb->addAction (a); mb->insertSeparator(); mainLayout->addWidget(mb); + */ mainLayout->addWidget(view); - mainLayout->addLayout (row2Layout); setLayout (mainLayout); + + model=m; + + // Selection + connect (view->selectionModel(),SIGNAL (selectionChanged (QItemSelection,QItemSelection)), + this, SLOT (updateSelection (QItemSelection,QItemSelection))); +} + +void FindResultWidget::addItem (TreeItem *ti) +{ + if (ti) + { + QModelIndex index = view->selectionModel()->currentIndex(); + //QAbstractItemModel *resultsModel = view->model(); + + if (!resultsModel->insertRow(index.row()+1, index.parent())) + return; + + for (int column = 0; column < resultsModel->columnCount(index.parent()); ++column) { + QModelIndex child = resultsModel->index(index.row()+1, column, index.parent()); + resultsModel->setData(child, QVariant(ti->getHeading()), Qt::EditRole); + resultsModel->getItem(child)->setOriginal (ti); + } + } +} + +void FindResultWidget::addItem (const QString &s) +{ + if (!s.isEmpty()) + { + QModelIndex index = view->selectionModel()->currentIndex(); + + if (!resultsModel->insertRow(index.row()+1, index.parent())) + return; + + for (int column = 0; column < resultsModel->columnCount(index.parent()); ++column) { + QModelIndex child = resultsModel->index(index.row()+1, column, index.parent()); + resultsModel->setData(child, QVariant(s), Qt::EditRole); + } + } +} + +void FindResultWidget::setModel (VymModel *m) +{ + if (model !=NULL && m!=model) + qWarning ("FindResultWidget::setModel m!=model"); + model=m; +} + +FindResultModel* FindResultWidget::getResultModel() +{ + return resultsModel; +} + +void FindResultWidget::addResult (const QString &category, TreeItem *ti) +{ + if (!category.isEmpty()) + addItem (category); + else + addItem (model->getSelectedItem()); } void FindResultWidget::popup() { show(); + parentWidget()->show(); } void FindResultWidget::cancelPressed() @@ -56,10 +106,19 @@ emit (hideFindResultWidget() ); } -#include -void FindResultWidget::hideEvent(QHideEvent *event) //FIXME-2 testing only +void FindResultWidget::updateSelection(QItemSelection newsel,QItemSelection) { - qDebug()<<"FRW::hideEvent()"; - event->ignore(); + QModelIndex ix; + foreach (ix,newsel.indexes() ) + { + FindResultItem *fri= static_cast(ix.internalPointer()); + if (fri->getOrgModel() && fri->getOrgID()>0) + { + TreeItem *ti=fri->getOrgModel()->findID(fri->getOrgID() ); + if (ti) + fri->getOrgModel()->select (ti); + } + } } +