# HG changeset patch # User insilmaril # Date 1268051066 0 # Node ID 832e96c9abb6c51b1a82a1ad41ff07ca31e3627e # Parent fac2248e2afa7f5146b21ef0781fcb6434f14e4e Introduce dockwidget to display all search results at once diff -r fac2248e2afa -r 832e96c9abb6 demos/vym-contribute.vym Binary file demos/vym-contribute.vym has changed diff -r fac2248e2afa -r 832e96c9abb6 exporthtmldialog.cpp --- a/exporthtmldialog.cpp Mon Mar 08 12:22:15 2010 +0000 +++ b/exporthtmldialog.cpp Mon Mar 08 12:24:26 2010 +0000 @@ -254,7 +254,7 @@ settings.setLocalEntry (filepath,"/export/html/saveSettingsInMap","yes"); - // Provide a smaller URL-icon to improve Layout //FIXME-1 add option to choose this + // Provide a smaller URL-icon to improve Layout //FIXME-2 add option to choose this QPixmap pm; if (!pm.load(ipath,"PNG") ) QMessageBox::warning( 0, tr( "Warning" ),tr("Could not open %1").arg(ipath)); diff -r fac2248e2afa -r 832e96c9abb6 findresultitem.cpp --- a/findresultitem.cpp Mon Mar 08 12:22:15 2010 +0000 +++ b/findresultitem.cpp Mon Mar 08 12:24:26 2010 +0000 @@ -1,11 +1,15 @@ #include #include "findresultitem.h" +#include "treeitem.h" +#include "vymmodel.h" FindResultItem::FindResultItem(const QVector &data, FindResultItem *parent) { parentItem = parent; itemData = data; + orgID=-1; + orgModel=NULL; } FindResultItem::~FindResultItem() @@ -41,6 +45,15 @@ return itemData.value(column); } +int FindResultItem::row() const +{ + if (parentItem) + return parentItem->childItems.indexOf(const_cast(this)); + + return 0; +} + + bool FindResultItem::insertChildren(int position, int count, int columns) { if (position < 0 || position > childItems.size()) @@ -107,3 +120,20 @@ itemData[column] = value; return true; } + +void FindResultItem::setOriginal (TreeItem *ti) +{ + orgModel=ti->getModel(); + orgID=ti->getID(); +} + +uint FindResultItem::getOrgID() +{ + return orgID; +} + +VymModel* FindResultItem::getOrgModel() +{ + return orgModel; +} + diff -r fac2248e2afa -r 832e96c9abb6 findresultitem.h --- a/findresultitem.h Mon Mar 08 12:22:15 2010 +0000 +++ b/findresultitem.h Mon Mar 08 12:24:26 2010 +0000 @@ -5,6 +5,9 @@ #include #include +class TreeItem; +class VymModel; + class FindResultItem { public: @@ -15,6 +18,7 @@ int childCount() const; int columnCount() const; QVariant data(int column) const; + int row() const; bool insertChildren(int position, int count, int columns); bool insertColumns(int position, int columns); FindResultItem *parent(); @@ -22,11 +26,17 @@ bool removeColumns(int position, int columns); int childNumber() const; bool setData(int column, const QVariant &value); + void setOriginal (TreeItem *ti); + uint getOrgID(); + VymModel* getOrgModel(); private: QList childItems; QVector itemData; FindResultItem *parentItem; + + uint orgID; + VymModel *orgModel; }; #endif diff -r fac2248e2afa -r 832e96c9abb6 findresultmodel.cpp --- a/findresultmodel.cpp Mon Mar 08 12:22:15 2010 +0000 +++ b/findresultmodel.cpp Mon Mar 08 12:24:26 2010 +0000 @@ -2,23 +2,32 @@ #include "findresultitem.h" #include "findresultmodel.h" +#include "treeitem.h" FindResultModel::FindResultModel( QObject *parent) : QAbstractItemModel(parent) { QVector rootData; - rootData << "Foo"<<"bar"; + rootData << "Heading"; rootItem = new FindResultItem(rootData); //setupModelData(data.split(QString("\n")), rootItem); } - FindResultModel::~FindResultModel() { delete rootItem; } +void FindResultModel::clear() +{ + if (rootItem->childCount()>0) + { + //QModelIndex ix=createIndex(0,0,rootItem); + removeRows (0,rowCount (QModelIndex ())); + } +} + int FindResultModel::columnCount(const QModelIndex & /* parent */) const { return rootItem->columnCount(); @@ -63,6 +72,15 @@ return QVariant(); } +QModelIndex FindResultModel::index (FindResultItem *fri) +{ + if (!fri->parent()) + return QModelIndex(); + else + return createIndex (fri->row(),0,fri); +} + + QModelIndex FindResultModel::index(int row, int column, const QModelIndex &parent) const { if (parent.isValid() && parent.column() != 0) @@ -176,54 +194,38 @@ return result; } -void FindResultModel::setupModelData(const QStringList &lines, FindResultItem *parent) +void FindResultModel::addItem (TreeItem *ti) { - QList parents; - QList indentations; - parents << parent; - indentations << 0; + if (ti) + { + QModelIndex ix (index (rootItem)); + //QAbstractItemModel *resultsModel = view->model(); + + if (!insertRow(ix.row()+1, ix.parent())) + return; - int number = 0; + for (int column = 0; column < columnCount(ix.parent()); ++column) { + QModelIndex child = index(ix.row()+1, column, ix.parent()); + setData(child, QVariant(ti->getHeading()), Qt::EditRole); + getItem(child)->setOriginal (ti); + } + } +} - while (number < lines.count()) { - int position = 0; - while (position < lines[number].length()) { - if (lines[number].mid(position, 1) != " ") - break; - position++; - } +void FindResultModel::addItem (const QString &s) +{ + if (!s.isEmpty()) + { + QModelIndex ix ( index (rootItem)); + + if (!insertRow(ix.row()+1, ix.parent())) + return; - QString lineData = lines[number].mid(position).trimmed(); + for (int column = 0; column < columnCount(ix.parent()); ++column) { + QModelIndex child = index(ix.row()+1, column, ix.parent()); + setData(child, QVariant(s), Qt::EditRole); + } + } +} - if (!lineData.isEmpty()) { - // Read the column data from the rest of the line. - QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts); - QVector columnData; - for (int column = 0; column < columnStrings.count(); ++column) - columnData << columnStrings[column]; - if (position > indentations.last()) { - // The last child of the current parent is now the new parent - // unless the current parent has no children. - - if (parents.last()->childCount() > 0) { - parents << parents.last()->child(parents.last()->childCount()-1); - indentations << position; - } - } else { - while (position < indentations.last() && parents.count() > 0) { - parents.pop_back(); - indentations.pop_back(); - } - } - - // Append a new item to the current parent's list of children. - FindResultItem *parent = parents.last(); - parent->insertChildren(parent->childCount(), 1, rootItem->columnCount()); - for (int column = 0; column < columnData.size(); ++column) - parent->child(parent->childCount() - 1)->setData(column, columnData[column]); - } - - number++; - } -} diff -r fac2248e2afa -r 832e96c9abb6 findresultmodel.h --- a/findresultmodel.h Mon Mar 08 12:22:15 2010 +0000 +++ b/findresultmodel.h Mon Mar 08 12:24:26 2010 +0000 @@ -6,6 +6,7 @@ #include class FindResultItem; +class TreeItem; class FindResultModel : public QAbstractItemModel { @@ -14,11 +15,13 @@ public: FindResultModel( QObject *parent = 0); ~FindResultModel(); + void clear(); QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + QModelIndex index (FindResultItem *fri); QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex parent(const QModelIndex &index) const; @@ -41,9 +44,12 @@ bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + FindResultItem *getItem(const QModelIndex &index) const; + + void addItem (TreeItem *ti); + void addItem (const QString &s); + private: - void setupModelData(const QStringList &lines, FindResultItem *parent); - FindResultItem *getItem(const QModelIndex &index) const; FindResultItem *rootItem; }; 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); + } + } } + diff -r fac2248e2afa -r 832e96c9abb6 findresultwidget.h --- a/findresultwidget.h Mon Mar 08 12:22:15 2010 +0000 +++ b/findresultwidget.h Mon Mar 08 12:24:26 2010 +0000 @@ -1,34 +1,39 @@ #ifndef FINDRESULTWIDGET_H #define FINDRESULTWIDGET_H +#include #include +class FindResultModel; +class TreeItem; +class VymModel; class QTreeView; class QPushButton; -class FindResultModel; class FindResultWidget: public QWidget { Q_OBJECT public: - FindResultWidget (QWidget *parent=NULL); + FindResultWidget (VymModel *m=NULL, QWidget *parent=NULL); + void setModel (VymModel *m); + FindResultModel* getResultModel(); + void addItem (TreeItem *ti); + void addItem (const QString &s); + void addResult (const QString &category, TreeItem *ti); public slots: void popup(); void cancelPressed(); - -protected: - virtual void hideEvent (QHideEvent *event); - + void updateSelection(QItemSelection ,QItemSelection); signals: void hideFindResultWidget(); private: - FindResultModel *model; + VymModel *model; + FindResultModel *resultsModel; QTreeView *view; - QPushButton *cancelbutton; }; #endif diff -r fac2248e2afa -r 832e96c9abb6 findwidget.cpp --- a/findwidget.cpp Mon Mar 08 12:22:15 2010 +0000 +++ b/findwidget.cpp Mon Mar 08 12:24:26 2010 +0000 @@ -1,3 +1,5 @@ +#include +#include #include #include #include @@ -9,9 +11,11 @@ #include "findwidget.h" +#include "mainwindow.h" extern QString iconPath; +extern Main *mainWindow; FindWidget::FindWidget(QWidget *) { @@ -44,13 +48,18 @@ nextbutton->setText (tr("Next","Find widget")); nextbutton->setDefault (true); nextbutton->setShortcut (Qt::Key_Return); - //nextbutton->setShortcutContext (Qt::WidgetShortcut); connect ( nextbutton, SIGNAL( clicked() ), this, SLOT( nextPressed() ) ); + showAllButton = new QPushButton; + showAllButton->setText (tr("Show all","Find widget")); + //connect ( showAllButton, SIGNAL( clicked() ), this, SLOT( showAllPressed() ) ); + connect ( showAllButton, SIGNAL( clicked() ), mainWindow, SLOT( editOpenFindWidget() ) ); + row2Layout->addWidget (cancelbutton); row2Layout->addWidget (label); row2Layout->addWidget(findcombo); row2Layout->addWidget(nextbutton); + row2Layout->addWidget(showAllButton); mainLayout->addLayout (row2Layout); @@ -69,7 +78,7 @@ void FindWidget::cancelPressed() { hide(); - emit (hideFindWidget() ); + emit (hideFindWidget() );//Restore focus } void FindWidget::nextPressed() @@ -82,6 +91,11 @@ setStatus (Undefined); } +void FindWidget::setFocus() +{ + findcombo->setFocus(); +} + void FindWidget::setStatus (Status st) { if (st==status) return; diff -r fac2248e2afa -r 832e96c9abb6 findwidget.h --- a/findwidget.h Mon Mar 08 12:22:15 2010 +0000 +++ b/findwidget.h Mon Mar 08 12:24:26 2010 +0000 @@ -3,6 +3,7 @@ #include +class QAction; class QGroupBox; class QComboBox; class QPushButton; @@ -21,6 +22,7 @@ void cancelPressed(); void nextPressed(); void findTextChanged(const QString&); + void setFocus(); void setStatus (Status st); private: @@ -35,6 +37,7 @@ QGroupBox *findbox; QComboBox *findcombo; QPushButton *nextbutton; + QPushButton *showAllButton; QPushButton *cancelbutton; }; diff -r fac2248e2afa -r 832e96c9abb6 main.cpp --- a/main.cpp Mon Mar 08 12:22:15 2010 +0000 +++ b/main.cpp Mon Mar 08 12:24:26 2010 +0000 @@ -4,6 +4,8 @@ #include using namespace std; +#include "findwidget.h" +#include "findresultwidget.h" #include "flagrow.h" #include "flagrowobj.h" #include "mainwindow.h" @@ -29,10 +31,11 @@ QString vymInstanceName; Main *mainWindow; // used in BranchObj::select() +FindWidget *findWidget; +FindResultWidget *findResultWidget; QDBusConnection dbusConnection= QDBusConnection::sessionBus(); - QString tmpVymDir; // All temp files go there, created in mainwindow QString clipboardDir; // Clipboard used in all mapEditors QString clipboardFile; // Clipboard used in all mapEditors diff -r fac2248e2afa -r 832e96c9abb6 mainwindow.cpp --- a/mainwindow.cpp Mon Mar 08 12:22:15 2010 +0000 +++ b/mainwindow.cpp Mon Mar 08 12:24:26 2010 +0000 @@ -12,6 +12,7 @@ #include "exports.h" #include "file.h" #include "findresultwidget.h" +#include "findwidget.h" #include "flagrow.h" #include "historywindow.h" #include "imports.h" @@ -42,6 +43,8 @@ extern TextEditor *textEditor; extern Main *mainWindow; +extern FindWidget *findWidget; +extern FindResultWidget *findResultWidget; extern QString tmpVymDir; extern QString clipboardDir; extern QString clipboardFile; @@ -124,15 +127,16 @@ makeSubDirs (clipboardDir); clipboardEmpty=true; + // Remember PID of our friendly webbrowser browserPID=new qint64; *browserPID=0; - // Dock widgets //FIXME-2 testing... - - FindResultWidget *findResultWidget=new FindResultWidget; - QDockWidget *dw= new QDockWidget ("Dock Widget",this); + // Dock widgets + findResultWidget=new FindResultWidget (); + QDockWidget *dw= new QDockWidget (tr ("Search results","FindResultWidget"),this); dw->setWidget (findResultWidget); - dw->hide(); + dw->setObjectName ("FindResultWidget"); + dw->hide(); addDockWidget (Qt::RightDockWidgetArea,dw); // Satellite windows ////////////////////////////////////////// @@ -197,12 +201,28 @@ // width of xLinksMenu xLinkMenuWidth=60; + // Create Layout + QWidget* centralWidget = new QWidget (this); + QVBoxLayout *layout=new QVBoxLayout (centralWidget); + setCentralWidget(centralWidget); + // Create tab widget which holds the maps - tabWidget= new QTabWidget (this); + tabWidget= new QTabWidget (centralWidget); connect( tabWidget, SIGNAL( currentChanged( QWidget * ) ), this, SLOT( editorChanged( QWidget * ) ) ); - setCentralWidget(tabWidget); + // Create findWidget + findWidget = new FindWidget (centralWidget); + findWidget->hide(); + layout->addWidget (tabWidget); + layout->addWidget (findWidget); + + connect ( + findWidget, SIGNAL (nextButton (QString) ), + this, SLOT (editFindNext(QString) ) ); + connect ( + findWidget , SIGNAL (hideFindWidget() ), + this, SLOT (editHideFindWidget() ) ); setupFileActions(); setupEditActions(); @@ -753,7 +773,7 @@ a->addTo( tb ); switchboard.addConnection(a,tr("Edit","Shortcut group")); editMenu->addAction (a); - actionSortBackChildren=a; + actionSortBackChildren=a; //FIXME-2 is toggle action? why? alt = new QAction( QPixmap(flagsPath+"flag-scrolled-right.png"), tr( "Scroll branch","Edit menu" ), this); alt->setShortcut ( Qt::Key_S ); // Scroll branch @@ -1675,7 +1695,7 @@ // Test Actions void Main::setupTestActions() { - QMenu *testMenu = menuBar()->addMenu( tr( "&Test" )); + QMenu *testMenu = menuBar()->addMenu( tr( "Test" )); QAction *a; a = new QAction( "Test function 1" , this); @@ -1905,8 +1925,9 @@ return NULL; } -VymModel* Main::getModel(uint id) const +VymModel* Main::getModel(uint id) const //FIXME-2 id not used { + // Used in BugAgent if ( tabWidget->currentPage()) return vymViews.at(tabWidget->currentIndex())->getModel(); return NULL; @@ -2667,13 +2688,49 @@ if (m) m->cut(); } -void Main::editOpenFindWidget() +void Main::editOpenFindWidget() { + if (!findWidget->isVisible()) + { + findWidget->show(); + findWidget->setFocus(); + } else if (!findResultWidget->parentWidget()->isVisible()) + findResultWidget->parentWidget()->show(); + else + { + findWidget->hide(); + findResultWidget->parentWidget()->hide(); + } +} + +void Main::editHideFindWidget() +{ + // findWidget hides itself, but we want + // to have focus back at mapEditor usually + MapEditor *me=currentMapEditor(); + if (me) me->setFocus(); +} + +void Main::editFindNext(QString s) +{ + Qt::CaseSensitivity cs=Qt::CaseInsensitive; + QTextCursor cursor; VymModel *m=currentModel(); - if (m) m->emitShowFindWidget(); + if (m) + { + m->findAll (findResultWidget->getResultModel(),s,cs); + + BranchItem *bi=m->findText(s, cs,cursor); + if (bi) + { + findWidget->setStatus (FindWidget::Success); + } + else + findWidget->setStatus (FindWidget::Failed); + } } -void Main::editFindDuplicateURLs() +void Main::editFindDuplicateURLs() //FIXME-4 feature: use FindResultWidget for display { VymModel *m=currentModel(); if (m) m->findDuplicateURLs(); @@ -3925,6 +3982,11 @@ void Main::testFunction2() { + findResultWidget->setModel (currentModel()); + findResultWidget->addResult ("Test",currentModel()->getSelectedItem()); + + return; + if (!currentMapEditor()) return; currentMapEditor()->testFunction2(); } diff -r fac2248e2afa -r 832e96c9abb6 mainwindow.h --- a/mainwindow.h Mon Mar 08 12:22:15 2010 +0000 +++ b/mainwindow.h Mon Mar 08 12:24:26 2010 +0000 @@ -16,7 +16,6 @@ #include "texteditor.h" #include "vymview.h" - class Main : public QMainWindow { Q_OBJECT @@ -123,6 +122,8 @@ void editPaste(); void editCut(); void editOpenFindWidget(); + void editHideFindWidget(); + void editFindNext(QString s); void editFindDuplicateURLs(); private: void openTabs(QStringList); diff -r fac2248e2afa -r 832e96c9abb6 texteditor.cpp --- a/texteditor.cpp Mon Mar 08 12:22:15 2010 +0000 +++ b/texteditor.cpp Mon Mar 08 12:24:26 2010 +0000 @@ -232,12 +232,18 @@ setFontHint (note.getFontHint() ); } -bool TextEditor::findText(const QString &t, const QTextDocument::FindFlags &flags) +bool TextEditor::findText(const QString &t, const QTextDocument::FindFlags &flags, QTextCursor &cursor) { if (e->find (t,flags)) + { + cursor=e->textCursor(); return true; + } else + { + cursor=QTextCursor(); return false; + } } void TextEditor::setupFileActions() diff -r fac2248e2afa -r 832e96c9abb6 texteditor.h --- a/texteditor.h Mon Mar 08 12:22:15 2010 +0000 +++ b/texteditor.h Mon Mar 08 12:24:26 2010 +0000 @@ -28,7 +28,7 @@ NoteObj getNoteObj(); void setNote(const NoteObj ¬e); - bool findText(const QString &, const QTextDocument::FindFlags &); // find Text + bool findText(const QString &, const QTextDocument::FindFlags &,QTextCursor &cursor); protected: void setupFileActions(); diff -r fac2248e2afa -r 832e96c9abb6 version.h --- a/version.h Mon Mar 08 12:22:15 2010 +0000 +++ b/version.h Mon Mar 08 12:24:26 2010 +0000 @@ -7,7 +7,7 @@ #define __VYM_VERSION "1.13.0" //#define __VYM_CODENAME "Codename: RC-1" #define __VYM_CODENAME "Codename: development version, not for production!" -#define __VYM_BUILD_DATE "2010-02-26" +#define __VYM_BUILD_DATE "2010-03-08" bool checkVersion(const QString &); diff -r fac2248e2afa -r 832e96c9abb6 vymmodel.cpp --- a/vymmodel.cpp Mon Mar 08 12:22:15 2010 +0000 +++ b/vymmodel.cpp Mon Mar 08 12:24:26 2010 +0000 @@ -12,6 +12,7 @@ #include "exporthtmldialog.h" #include "exportxhtmldialog.h" #include "file.h" +#include "findresultmodel.h" #include "geometry.h" // for addBBox #include "mainwindow.h" #include "misc.h" @@ -1608,7 +1609,24 @@ } } -BranchItem* VymModel::findText (QString s, bool cs) +void VymModel::findAll (FindResultModel *rmodel, QString s, Qt::CaseSensitivity cs) +{ + rmodel->clear(); + BranchItem *cur=NULL; + BranchItem *prev=NULL; + nextBranch(cur,prev); + while (cur) + { + if (cur->getHeading().contains (s,cs)) + { + rmodel->addItem (cur); + } + //if (cur->getNote().contains (s,cs)) //FIXME-2 does not detect multiple occurences + nextBranch(cur,prev); + } +} + +BranchItem* VymModel::findText (QString s,Qt::CaseSensitivity cs,QTextCursor &cursor) { if (!s.isEmpty() && s!=findString) { @@ -1617,7 +1635,7 @@ } QTextDocument::FindFlags flags=0; - if (cs) flags=QTextDocument::FindCaseSensitively; + if (cs==Qt::CaseSensitive) flags=QTextDocument::FindCaseSensitively; if (!findCurrent) { // Nothing found or new find process @@ -1638,14 +1656,7 @@ if (findCurrent->getNote().contains(findString,cs)) { select (findCurrent); - /* - if (getSelectedBranch()!=itFind) - { - select(itFind); - emitShowSelection(); - } - */ - if (textEditor->findText(findString,flags)) + if (textEditor->findText(findString,flags,cursor)) { searching=false; foundNote=true; @@ -1663,7 +1674,6 @@ if (!nextBranch(findCurrent,findPrevious) ) EOFind=true; } - //cout <<"still searching... "<getHeading())<depth()<2) return; pi=(BranchItem*)(selbi->parent()); - // Check if we have childs at all to keep + // Check if we have children at all to keep if (selbi->branchCount()==0) { deleteSelection(); diff -r fac2248e2afa -r 832e96c9abb6 vymmodel.h --- a/vymmodel.h Mon Mar 08 12:22:15 2010 +0000 +++ b/vymmodel.h Mon Mar 08 12:24:26 2010 +0000 @@ -7,6 +7,8 @@ #include #include +#include + #include "adaptormodel.h" #include "file.h" #include "imageitem.h" @@ -17,6 +19,7 @@ class AttributeItem; class BranchItem; +class FindResultModel; class MapEditor; class XLinkItem; @@ -269,13 +272,11 @@ public: void findDuplicateURLs(); // find duplicate URLs, testing only so far - BranchItem* findText(QString,bool); // Find object + void findAll (FindResultModel*, QString s, Qt::CaseSensitivity cs); // Search all objects at once, also notes + BranchItem* findText(QString s,Qt::CaseSensitivity cs,QTextCursor &cursor); // Find object, also in note void findReset(); // Reset Search - void emitShowFindWidget(); // Tell views to show FindWidget private: QString findString; -signals: - void showFindWidget(); public: void setURL(const QString &url); diff -r fac2248e2afa -r 832e96c9abb6 vymview.cpp --- a/vymview.cpp Mon Mar 08 12:22:15 2010 +0000 +++ b/vymview.cpp Mon Mar 08 12:24:26 2010 +0000 @@ -1,7 +1,6 @@ #include "vymview.h" #include "branchitem.h" -#include "findwidget.h" #include "mainwindow.h" #include "mapeditor.h" #include "treeeditor.h" @@ -13,10 +12,6 @@ { model=m; - // Create findWidget - findWidget=new FindWidget (this); - findWidget->hide(); - // Create TreeView treeEditor=new TreeEditor (model); //treeEditor->setModel ((QAbstractItemModel*)model); @@ -25,10 +20,8 @@ treeEditor->setColumnWidth (0,150); treeEditor->setAnimated (true); - // FIXME-3 use proxySelModel=treeEditor->selectionModel(); selModel=new QItemSelectionModel (model); - //model->setSelectionModel (proxySelModel); model->setSelectionModel (selModel); treeEditor->setSelectionModel (selModel); @@ -37,26 +30,15 @@ if (!mapEditor) mapEditor=new MapEditor (model); // Create Layout - QVBoxLayout* mainLayout = new QVBoxLayout (this); - QSplitter *splitter= new QSplitter; + QVBoxLayout* mainLayout = new QVBoxLayout (this); //FIXME-4 not needed + QSplitter *splitter= new QSplitter (this); QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - //sizePolicy.setHorizontalStretch(0); - //sizePolicy.setVerticalStretch(0); - //sizePolicy.setHeightForWidth(this->sizePolicy().hasHeightForWidth()); splitter->setSizePolicy(sizePolicy); mainLayout->addWidget (splitter); - mainLayout->addWidget (findWidget); // Connect selections - // Proxymodel changed - /* - connect ( - proxySelModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), - this,SLOT (changeProxySelection(const QItemSelection &,const QItemSelection &))); -*/ - // Selection in Model changed connect ( selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), @@ -103,19 +85,6 @@ model, SIGNAL (showSelection() ), this, SLOT (showSelection() ) ); - // Find - connect ( - model, SIGNAL (showFindWidget() ), - this, SLOT (showFindWidget() ) ); - - connect ( - findWidget , SIGNAL (hideFindWidget() ), - this, SLOT (hideFindWidget() ) ); - - connect ( - findWidget, SIGNAL (nextButton (QString) ), - this, SLOT (findNext(QString) ) ); - mapEditor->setAntiAlias (mainWindow->isAliased()); mapEditor->setSmoothPixmap(mainWindow->hasSmoothPixmapTransform()); @@ -159,11 +128,6 @@ if (newsel.indexes().count()>0) { - /* FIXME-3 use proxymodel - proxySelModel->select ( - treeEditor->getProxyModel()->mapSelectionFromSource (newsel), - QItemSelectionModel::ClearAndSelect ); - */ QModelIndex ix=newsel.indexes().first(); selModel->setCurrentIndex (ix,QItemSelectionModel::ClearAndSelect ); @@ -173,30 +137,6 @@ } } -void VymView::changeProxySelection (const QItemSelection &newsel, const QItemSelection &) -{ - // Notify mainwindow to update satellites, but map selection to - // original model first - - //cout << "VV::changeProxySelection newsel.count="<setCurrentIndex ( - newsel.indexes().first(), - QItemSelectionModel::ClearAndSelect ); - treeEditor->setCurrentIndex (newsel.indexes().first() ); - } - - // Re-emit but map selection first - selModel->select ( - treeEditor->getProxyModel()->mapSelectionToSource (newsel), - QItemSelectionModel::ClearAndSelect ); - - showSelection(); -} - void VymView::expandAll() { treeEditor->expandAll(); @@ -214,7 +154,6 @@ model->nextBranch(cur,prev); while (cur) { - // FIXME-3 use proxy pix=treeEditor->getProxyModel()->mapFromSource (model->index (cur)); pix=model->index (cur); d=cur->depth(); if (!treeEditor->isExpanded(pix) && d < level) @@ -228,7 +167,6 @@ model->nextBranch(cur,prev); while (cur) { - // FIXME-3 use proxy pix=treeEditor->getProxyModel()->mapFromSource (model->index (cur)); pix=model->index (cur); d=cur->depth(); if (!treeEditor->isExpanded(pix) && d <= level && cur->branchCount()>0) @@ -258,7 +196,6 @@ model->nextBranch(cur,prev); while (cur) { - // FIXME-3 use proxy pix=treeEditor->getProxyModel()->mapFromSource (model->index (cur)); pix=model->index (cur); d=cur->depth(); if (treeEditor->isExpanded(pix) && d > level) @@ -272,7 +209,6 @@ model->nextBranch(cur,prev); while (cur) { - // FIXME-3 use proxy pix=treeEditor->getProxyModel()->mapFromSource (model->index (cur)); pix=model->index (cur); d=cur->depth(); if (treeEditor->isExpanded(pix) && d >= level) @@ -288,34 +224,6 @@ mapEditor->scrollTo ( ix); // FIXME-3 also called from MapEditor::updateSelection... } -void VymView::showFindWidget() -{ - findWidget->popup(); -} - -void VymView::hideFindWidget() -{ - // findWidget hides itself, but we want to have focus back at mapEditor usually - if (mapEditor) mapEditor->setFocus(); -} - -void VymView::findNext (QString s) -{ - bool cs=false; - BranchItem *bi=model->findText(s, cs); - if (bi) - findWidget->setStatus (FindWidget::Success); - else - findWidget->setStatus (FindWidget::Failed); - -} - -void VymView::findReset() -{ - model->findReset(); - if (mapEditor) mapEditor->setFocus(); -} - void VymView::toggleTreeEditor() { if (treeEditor->isVisible() ) diff -r fac2248e2afa -r 832e96c9abb6 vymview.h --- a/vymview.h Mon Mar 08 12:22:15 2010 +0000 +++ b/vymview.h Mon Mar 08 12:24:26 2010 +0000 @@ -7,7 +7,6 @@ class VymModel; class MapEditor; class TreeEditor; -class FindWidget; class QTreeView; @@ -23,24 +22,17 @@ public slots: void changeSelection (const QItemSelection &newSel, const QItemSelection &delSel); - void changeProxySelection (const QItemSelection &newSel, const QItemSelection &delSel); void expandAll (); void expandOneLevel (); void collapseOneLevel (); void showSelection (); - void showFindWidget(); - void hideFindWidget(); - void findNext (QString s); - void findReset(); void toggleTreeEditor(); private: VymModel *model; TreeEditor *treeEditor; - QItemSelectionModel *proxySelModel; QItemSelectionModel *selModel; MapEditor *mapEditor; - FindWidget *findWidget; };