From bb93f5de3c0528c8b5465a4cd706b8033f35a281 Mon Sep 17 00:00:00 2001 From: nehlsen Date: Mon, 16 Nov 2009 15:33:46 +0100 Subject: made bookmarks searchable --- src/CMakeLists.txt | 1 + src/bookmarkspanel/bookmarkspanel.cpp | 26 +++++-------------- src/bookmarkspanel/bookmarksproxy.cpp | 29 +++++++++++++++++++++ src/bookmarkspanel/bookmarksproxy.h | 48 +++++++++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 19 deletions(-) create mode 100644 src/bookmarkspanel/bookmarksproxy.cpp create mode 100644 src/bookmarkspanel/bookmarksproxy.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6b3f9edf..4452df54 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -33,6 +33,7 @@ SET( rekonq_KDEINIT_SRCS bookmarkspanel/bookmarkspanel.cpp bookmarkspanel/bookmarkstreemodel.cpp + bookmarkspanel/bookmarksproxy.cpp ) diff --git a/src/bookmarkspanel/bookmarkspanel.cpp b/src/bookmarkspanel/bookmarkspanel.cpp index 1f3dff9b..a09e0058 100644 --- a/src/bookmarkspanel/bookmarkspanel.cpp +++ b/src/bookmarkspanel/bookmarkspanel.cpp @@ -27,6 +27,7 @@ // rekonq includes #include "bookmarkspanel.h" #include "bookmarkstreemodel.h" +#include "bookmarksproxy.h" // Auto Includes #include "rekonq.h" @@ -35,7 +36,6 @@ #include #include #include -#include #include // KDE includes @@ -74,11 +74,12 @@ void BookmarksPanel::setup() // setup search bar QHBoxLayout *searchLayout = new QHBoxLayout; searchLayout->setContentsMargins(5, 0, 0, 0); - QLabel *searchLabel = new QLabel(i18n("Search:")); + QLabel *searchLabel = new QLabel(i18n("&Search:")); searchLayout->addWidget(searchLabel); KLineEdit *search = new KLineEdit; search->setClearButtonShown(true); searchLayout->addWidget(search); + searchLabel->setBuddy( search ); // setup tree view QTreeView *treeView = new QTreeView(ui); @@ -100,23 +101,10 @@ void BookmarksPanel::setup() setWidget(ui); BookmarksTreeModel *model = new BookmarksTreeModel( this ); - treeView->setModel( model ); + BookmarksProxy *proxy = new BookmarksProxy(ui); + proxy->setSourceModel( model ); + treeView->setModel( proxy ); + connect(search, SIGNAL(textChanged(QString)), proxy, SLOT(setFilterFixedString(QString))); connect( treeView, SIGNAL( activated(QModelIndex) ), this, SLOT( bookmarkActivated(QModelIndex) ) ); - -// QSortFilterProxyModel *proxy = new QSortFilterProxyModel(ui); - //- -// HistoryManager *historyManager = Application::historyManager(); -// QAbstractItemModel *model = historyManager->historyTreeModel(); -// -// m_treeProxyModel->setSourceModel(model); -// m_treeView->setModel(m_treeProxyModel); -// m_treeView->setExpanded(m_treeProxyModel->index(0, 0), true); -// m_treeView->header()->hideSection(1); -// QFontMetrics fm(font()); -// int header = fm.width(QLatin1Char('m')) * 40; -// m_treeView->header()->resizeSection(0, header); -// -// connect(search, SIGNAL(textChanged(QString)), m_treeProxy, SLOT(setFilterFixedString(QString))); -// connect(m_treeView, SIGNAL(activated(const QModelIndex&)), this, SLOT(open())); } diff --git a/src/bookmarkspanel/bookmarksproxy.cpp b/src/bookmarkspanel/bookmarksproxy.cpp new file mode 100644 index 00000000..87d1ce71 --- /dev/null +++ b/src/bookmarkspanel/bookmarksproxy.cpp @@ -0,0 +1,29 @@ +#include "bookmarksproxy.h" + +BookmarksProxy::BookmarksProxy( QObject *parent ): + QSortFilterProxyModel( parent ) +{ +} + +bool BookmarksProxy::filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const +{ + QModelIndex idx = sourceModel()->index( source_row, 0, source_parent ); + +// return idx.data().toString().contains( filterRegExp() ); + return recursiveMatch( idx ); +} + +bool BookmarksProxy::recursiveMatch( const QModelIndex &index ) const +{ + if( index.data().toString().contains( filterRegExp() ) ) { + return true; + } + + for( int childRow = 0; childRow < sourceModel()->rowCount( index ); ++childRow ) { + if( recursiveMatch( sourceModel()->index( childRow, 0, index ) ) ) { + return true; + } + } + + return false; +} diff --git a/src/bookmarkspanel/bookmarksproxy.h b/src/bookmarkspanel/bookmarksproxy.h new file mode 100644 index 00000000..99483331 --- /dev/null +++ b/src/bookmarkspanel/bookmarksproxy.h @@ -0,0 +1,48 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Nils Weigel +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +* ============================================================ */ + + +#ifndef BOOKMARKSPROXY_H +#define BOOKMARKSPROXY_H + +// Qt Includes +#include + +class BookmarksProxy : public QSortFilterProxyModel +{ + Q_OBJECT + Q_DISABLE_COPY(BookmarksProxy) + +public: + BookmarksProxy( QObject *parent = 0 ); + +protected: + virtual bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const; + + // returns true if any child(or childs-child...) matches filter + bool recursiveMatch( const QModelIndex &index ) const; +}; + +#endif // BOOKMARKSPROXY_H -- cgit v1.2.1