From 51ef0020a78bd216cb357eaa574161299fa0b608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20Ander=20Pe=C3=B1alba?= Date: Mon, 30 Aug 2010 00:05:47 +0200 Subject: Use the same FilterProxyModel for the bookmarks and history panels --- src/CMakeLists.txt | 3 +- src/bookmarks/bookmarkspanel.cpp | 6 ++-- src/bookmarks/bookmarksproxy.cpp | 58 -------------------------------------- src/bookmarks/bookmarksproxy.h | 58 -------------------------------------- src/history/historymodels.cpp | 19 ------------- src/history/historymodels.h | 32 +++------------------ src/history/historypanel.cpp | 17 +++++------ src/history/historypanel.h | 14 +++------ src/panels/urlfilterproxymodel.cpp | 58 ++++++++++++++++++++++++++++++++++++++ src/panels/urlfilterproxymodel.h | 58 ++++++++++++++++++++++++++++++++++++++ 10 files changed, 138 insertions(+), 185 deletions(-) delete mode 100644 src/bookmarks/bookmarksproxy.cpp delete mode 100644 src/bookmarks/bookmarksproxy.h create mode 100644 src/panels/urlfilterproxymodel.cpp create mode 100644 src/panels/urlfilterproxymodel.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 95995183..15f0ccac 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -32,6 +32,8 @@ SET( rekonq_KDEINIT_SRCS webtab.cpp zoombar.cpp #---------------------------------------- + panels/urlfilterproxymodel.cpp + #---------------------------------------- history/autosaver.cpp history/historymanager.cpp history/historymodels.cpp @@ -48,7 +50,6 @@ SET( rekonq_KDEINIT_SRCS bookmarks/bookmarkprovider.cpp bookmarks/bookmarkspanel.cpp bookmarks/bookmarkstreemodel.cpp - bookmarks/bookmarksproxy.cpp bookmarks/bookmarkscontextmenu.cpp bookmarks/bookmarkstoolbar.cpp bookmarks/bookmarkowner.cpp diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp index 08f99155..53f22232 100644 --- a/src/bookmarks/bookmarkspanel.cpp +++ b/src/bookmarks/bookmarkspanel.cpp @@ -29,10 +29,10 @@ #include "bookmarkspanel.h" // Local Includes +#include "panels/urlfilterproxymodel.h" #include "application.h" #include "bookmarkprovider.h" #include "bookmarkstreemodel.h" -#include "bookmarksproxy.h" #include "bookmarkscontextmenu.h" #include "bookmarkowner.h" #include "paneltreeview.h" @@ -185,7 +185,7 @@ void BookmarksPanel::setup() setWidget(ui); BookmarksTreeModel *model = new BookmarksTreeModel(this); - BookmarksProxy *proxy = new BookmarksProxy(ui); + UrlFilterProxyModel *proxy = new UrlFilterProxyModel(ui); proxy->setSourceModel(model); m_treeView->setModel(proxy); @@ -211,7 +211,7 @@ KBookmark BookmarksPanel::bookmarkForIndex(const QModelIndex &index) if (!index.isValid()) return KBookmark(); - const BookmarksProxy *proxyModel = static_cast(index.model()); + const UrlFilterProxyModel *proxyModel = static_cast(index.model()); QModelIndex originalIndex = proxyModel->mapToSource(index); BtmItem *node = static_cast(originalIndex.internalPointer()); diff --git a/src/bookmarks/bookmarksproxy.cpp b/src/bookmarks/bookmarksproxy.cpp deleted file mode 100644 index 1e4da877..00000000 --- a/src/bookmarks/bookmarksproxy.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Nils Weigel -* Copyright (C) 2010 by Andrea Diamantini -* -* -* 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 . -* -* ============================================================ */ - - -// Self Includes -#include "bookmarksproxy.h" - - -BookmarksProxy::BookmarksProxy(QObject *parent) - : QSortFilterProxyModel(parent) -{ - setFilterCaseSensitivity(Qt::CaseInsensitive); -} - - -bool BookmarksProxy::filterAcceptsRow(const int source_row, const QModelIndex &source_parent) const -{ - return recursiveMatch( sourceModel()->index(source_row, 0, source_parent) ); -} - - -bool BookmarksProxy::recursiveMatch(const QModelIndex &index) const -{ - if (index.data().toString().contains(filterRegExp())) - return true; - - int numChildren = sourceModel()->rowCount(index); - for (int childRow = 0; childRow < numChildren; ++childRow) - { - if (recursiveMatch(sourceModel()->index(childRow, 0, index))) - return true; - } - - return false; -} diff --git a/src/bookmarks/bookmarksproxy.h b/src/bookmarks/bookmarksproxy.h deleted file mode 100644 index b4554d2b..00000000 --- a/src/bookmarks/bookmarksproxy.h +++ /dev/null @@ -1,58 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Nils Weigel -* Copyright (C) 2010 by Andrea Diamantini -* -* -* 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 - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include - -/** - * QSortFilterProxyModel hides all children which parent doesn't - * match the filter. This class is used to change this behavior. - * If a bookmark matches the filter it'll be shown, even if it's parent doesn't match it. - */ -class REKONQ_TESTS_EXPORT BookmarksProxy : public QSortFilterProxyModel -{ - Q_OBJECT - Q_DISABLE_COPY(BookmarksProxy) - -public: - BookmarksProxy(QObject *parent = 0); - -protected: - virtual bool filterAcceptsRow(const int source_row, const QModelIndex &source_parent) const; - - // returns true if index or any of his children match the filter - bool recursiveMatch(const QModelIndex &index) const; -}; - -#endif // BOOKMARKSPROXY_H diff --git a/src/history/historymodels.cpp b/src/history/historymodels.cpp index a820db0f..0f137e0e 100644 --- a/src/history/historymodels.cpp +++ b/src/history/historymodels.cpp @@ -720,22 +720,3 @@ void HistoryTreeModel::sourceRowsRemoved(const QModelIndex &parent, int start, i endRemoveRows(); } } - - -// ------------------------------------------------------------------------------------------------------------------------------------------ - - - -TreeProxyModel::TreeProxyModel(QObject *parent) : QSortFilterProxyModel(parent) -{ - setSortRole(HistoryModel::DateTimeRole); - setFilterCaseSensitivity(Qt::CaseInsensitive); -} - - -bool TreeProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const -{ - if (!source_parent.isValid()) - return true; - return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent); -} diff --git a/src/history/historymodels.h b/src/history/historymodels.h index b61e8969..d193cf86 100644 --- a/src/history/historymodels.h +++ b/src/history/historymodels.h @@ -95,16 +95,16 @@ public: inline bool historyContains(const QString &url) const { - load(); + load(); return m_historyHash.contains(url); } - + inline QList keys() const { load(); return m_historyHash.keys(); } - + int historyLocation(const QString &url) const; QModelIndex mapFromSource(const QModelIndex &sourceIndex) const; @@ -139,7 +139,7 @@ private: /** * Proxy model for the history model that converts the list * into a tree, one top level node per day. - * + * * Used in the HistoryDialog. * */ @@ -177,28 +177,4 @@ private: }; -// ----------------------------------------------------------------------------------------------------------------- - - -/** - * A modified QSortFilterProxyModel that always accepts - * the root nodes in the tree - * so filtering is only done on the children. - * - * Used in the HistoryDialog. - * - */ - -class TreeProxyModel : public QSortFilterProxyModel -{ - Q_OBJECT - -public: - TreeProxyModel(QObject *parent = 0); - -protected: - bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; -}; - - #endif // HISTORYMODELS_H diff --git a/src/history/historypanel.cpp b/src/history/historypanel.cpp index b9e7b10b..4c1dc732 100644 --- a/src/history/historypanel.cpp +++ b/src/history/historypanel.cpp @@ -27,13 +27,14 @@ // Self Includes #include "historypanel.h" -#include "historypanel.moc" // Auto Includes #include "rekonq.h" // Local Includes +#include "panels/urlfilterproxymodel.h" #include "application.h" +#include "paneltreeview.h" #include "historymodels.h" // Qt Includes @@ -58,9 +59,9 @@ HistoryPanel::HistoryPanel(const QString &title, QWidget *parent, Qt::WindowFlag { setObjectName("historyPanel"); setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - + connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(showing(bool))); - + setShown(ReKonfig::showHistoryPanel()); } @@ -117,16 +118,16 @@ void HistoryPanel::setup() HistoryManager *historyManager = Application::historyManager(); QAbstractItemModel *model = historyManager->historyTreeModel(); - TreeProxyModel *treeProxyModel = new TreeProxyModel(this); - treeProxyModel->setSourceModel(model); - m_treeView->setModel(treeProxyModel); - m_treeView->setExpanded(treeProxyModel->index(0, 0), true); + UrlFilterProxyModel *proxy = new UrlFilterProxyModel(this); + proxy->setSourceModel(model); + m_treeView->setModel(proxy); + m_treeView->setExpanded(proxy->index(0, 0), true); m_treeView->header()->hideSection(1); QFontMetrics fm(font()); int header = fm.width( QL1C('m') ) * 40; m_treeView->header()->resizeSection(0, header); - connect(search, SIGNAL(textChanged(QString)), treeProxyModel, SLOT(setFilterFixedString(QString))); + connect(search, SIGNAL(textChanged(QString)), proxy, SLOT(setFilterFixedString(QString))); connect(m_treeView, SIGNAL(contextMenuItemRequested(const QPoint &)), this, SLOT(contextMenuItem(const QPoint &))); connect(m_treeView, SIGNAL(contextMenuGroupRequested(const QPoint &)), this, SLOT(contextMenuGroup(const QPoint &))); diff --git a/src/history/historypanel.h b/src/history/historypanel.h index 68de2828..5a511e47 100644 --- a/src/history/historypanel.h +++ b/src/history/historypanel.h @@ -32,17 +32,11 @@ // Rekonq Includes #include "rekonq_defines.h" -// Local Includes -#include "application.h" -#include "paneltreeview.h" - // Qt Includes #include // Forward Declarations -class KUrl; -class QWidget; -class QModelIndex; +class PanelTreeView; class REKONQ_TESTS_EXPORT HistoryPanel : public QDockWidget @@ -51,11 +45,11 @@ class REKONQ_TESTS_EXPORT HistoryPanel : public QDockWidget public: explicit HistoryPanel(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); - ~HistoryPanel(); + virtual ~HistoryPanel(); public slots: void showing(bool); - + signals: void openUrl(const KUrl &, const Rekonq::OpenType &); void itemHovered(const QString &); @@ -67,8 +61,8 @@ private slots: private: void setup(); - PanelTreeView *m_treeView; + PanelTreeView *m_treeView; bool _loaded; }; diff --git a/src/panels/urlfilterproxymodel.cpp b/src/panels/urlfilterproxymodel.cpp new file mode 100644 index 00000000..b8e68342 --- /dev/null +++ b/src/panels/urlfilterproxymodel.cpp @@ -0,0 +1,58 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Nils Weigel +* Copyright (C) 2010 by Andrea Diamantini +* +* +* 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 . +* +* ============================================================ */ + + +// Self Includes +#include "urlfilterproxymodel.h" + + +UrlFilterProxyModel::UrlFilterProxyModel(QObject *parent) + : QSortFilterProxyModel(parent) +{ + setFilterCaseSensitivity(Qt::CaseInsensitive); +} + + +bool UrlFilterProxyModel::filterAcceptsRow(const int source_row, const QModelIndex &source_parent) const +{ + return recursiveMatch( sourceModel()->index(source_row, 0, source_parent) ); +} + + +bool UrlFilterProxyModel::recursiveMatch(const QModelIndex &index) const +{ + if (index.data().toString().contains(filterRegExp())) + return true; + + int numChildren = sourceModel()->rowCount(index); + for (int childRow = 0; childRow < numChildren; ++childRow) + { + if (recursiveMatch(sourceModel()->index(childRow, 0, index))) + return true; + } + + return false; +} diff --git a/src/panels/urlfilterproxymodel.h b/src/panels/urlfilterproxymodel.h new file mode 100644 index 00000000..f4f15395 --- /dev/null +++ b/src/panels/urlfilterproxymodel.h @@ -0,0 +1,58 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Nils Weigel +* Copyright (C) 2010 by Andrea Diamantini +* +* +* 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 URLFILTERPROXYMODEL_H +#define URLFILTERPROXYMODEL_H + + +// Rekonq Includes +#include "rekonq_defines.h" + +// Qt Includes +#include + +/** + * QSortFilterProxyModel hides all children which parent doesn't + * match the filter. This class is used to change this behavior. + * If a url matches the filter it'll be shown, even if it's parent doesn't match it. + */ +class REKONQ_TESTS_EXPORT UrlFilterProxyModel : public QSortFilterProxyModel +{ + Q_OBJECT + Q_DISABLE_COPY(UrlFilterProxyModel) + +public: + UrlFilterProxyModel(QObject *parent = 0); + +protected: + virtual bool filterAcceptsRow(const int source_row, const QModelIndex &source_parent) const; + + // returns true if index or any of his children match the filter + bool recursiveMatch(const QModelIndex &index) const; +}; + +#endif // URLFILTERPROXYMODEL_H -- cgit v1.2.1 From 0d53995507a369d5b4cfddbe365fc8a438fcf3cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20Ander=20Pe=C3=B1alba?= Date: Mon, 30 Aug 2010 01:40:33 +0200 Subject: New general panel class created and used by the bookmarks and history panel --- src/CMakeLists.txt | 1 + src/bookmarks/bookmarkspanel.cpp | 107 ++++++++++++------------------------ src/bookmarks/bookmarkspanel.h | 20 +++---- src/history/historypanel.cpp | 94 ++++++++------------------------ src/history/historypanel.h | 27 +++------ src/panels/urlpanel.cpp | 115 +++++++++++++++++++++++++++++++++++++++ src/panels/urlpanel.h | 76 ++++++++++++++++++++++++++ 7 files changed, 269 insertions(+), 171 deletions(-) create mode 100644 src/panels/urlpanel.cpp create mode 100644 src/panels/urlpanel.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 15f0ccac..276a2f25 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -33,6 +33,7 @@ SET( rekonq_KDEINIT_SRCS zoombar.cpp #---------------------------------------- panels/urlfilterproxymodel.cpp + panels/urlpanel.cpp #---------------------------------------- history/autosaver.cpp history/historymanager.cpp diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp index 53f22232..118074d0 100644 --- a/src/bookmarks/bookmarkspanel.cpp +++ b/src/bookmarks/bookmarkspanel.cpp @@ -28,6 +28,9 @@ // Self Includes #include "bookmarkspanel.h" +// Auto Includes +#include "rekonq.h" + // Local Includes #include "panels/urlfilterproxymodel.h" #include "application.h" @@ -37,27 +40,12 @@ #include "bookmarkowner.h" #include "paneltreeview.h" -// Auto Includes -#include "rekonq.h" - -// Qt includes -#include -#include -#include - -// KDE includes -#include BookmarksPanel::BookmarksPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags) - : QDockWidget(title, parent, flags) - , m_treeView(new PanelTreeView(this)) + : UrlPanel(title, parent, flags) , m_loadingState(false) - , m_loaded(false) { setObjectName("bookmarksPanel"); - setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - - connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(showing(bool))); setVisible(ReKonfig::showBookmarksPanel()); } @@ -65,14 +53,7 @@ BookmarksPanel::BookmarksPanel(const QString &title, QWidget *parent, Qt::Window BookmarksPanel::~BookmarksPanel() { - ReKonfig::setShowBookmarksPanel(false); -} - - -void BookmarksPanel::showing(bool b) -{ - if(b && !m_loaded) - setup(); + ReKonfig::setShowBookmarksPanel(!isHidden()); } @@ -99,6 +80,24 @@ void BookmarksPanel::contextMenu(const QPoint &pos) } +void BookmarksPanel::contextMenuItem(const QPoint &pos) +{ + contextMenu(pos); +} + + +void BookmarksPanel::contextMenuGroup(const QPoint &pos) +{ + contextMenu(pos); +} + + +void BookmarksPanel::contextMenuEmpty(const QPoint &pos) +{ + contextMenu(pos); +} + + void BookmarksPanel::deleteBookmark() { QModelIndex index = m_treeView->currentIndex(); @@ -131,12 +130,13 @@ void BookmarksPanel::onExpand(const QModelIndex &index) void BookmarksPanel::loadFoldedState(const QModelIndex &root) { - int count = m_treeView->model()->rowCount(root); + QAbstractItemModel *model = m_treeView->model(); + int count = model->rowCount(root); QModelIndex index; for (int i = 0; i < count; ++i) { - index = m_treeView->model()->index(i, 0, root); + index = model->index(i, 0, root); if (index.isValid()) { KBookmark bm = bookmarkForIndex(index); @@ -152,57 +152,14 @@ void BookmarksPanel::loadFoldedState(const QModelIndex &root) void BookmarksPanel::setup() { - kDebug() << "Loading bookmarks panel setup..."; - - QWidget *ui = new QWidget(this); - - // setup search bar - QHBoxLayout *searchLayout = new QHBoxLayout; - searchLayout->setContentsMargins(5, 0, 0, 0); - 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 - m_treeView->setUniformRowHeights(true); - m_treeView->header()->hide(); - m_treeView->setDragEnabled(true); - m_treeView->setAutoExpandDelay(750); - m_treeView->setDefaultDropAction(Qt::MoveAction); - m_treeView->viewport()->setAcceptDrops(true); - - // put everything together - QVBoxLayout *vBoxLayout = new QVBoxLayout; - vBoxLayout->setContentsMargins(0, 0, 0, 0); - vBoxLayout->addLayout(searchLayout); - vBoxLayout->addWidget(m_treeView); - - // add it to the UI - ui->setLayout(vBoxLayout); - setWidget(ui); - - BookmarksTreeModel *model = new BookmarksTreeModel(this); - UrlFilterProxyModel *proxy = new UrlFilterProxyModel(ui); - proxy->setSourceModel(model); - m_treeView->setModel(proxy); - - connect(search, SIGNAL(textChanged(const QString &)), proxy, SLOT(setFilterFixedString(const QString &))); + UrlPanel::setup(); + kDebug() << "Bookmarks panel..."; - connect(model, SIGNAL(bookmarksUpdated()), this, SLOT(startLoadFoldedState())); - - connect(m_treeView, SIGNAL(contextMenuItemRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &))); - connect(m_treeView, SIGNAL(contextMenuGroupRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &))); - connect(m_treeView, SIGNAL(contextMenuEmptyRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &))); connect(m_treeView, SIGNAL(delKeyPressed()), this, SLOT(deleteBookmark())); connect(m_treeView, SIGNAL(collapsed(const QModelIndex &)), this, SLOT(onCollapse(const QModelIndex &))); connect(m_treeView, SIGNAL(expanded(const QModelIndex &)), this, SLOT(onExpand(const QModelIndex &))); startLoadFoldedState(); - - m_loaded = true; } @@ -217,3 +174,11 @@ KBookmark BookmarksPanel::bookmarkForIndex(const QModelIndex &index) BtmItem *node = static_cast(originalIndex.internalPointer()); return node->getBkm(); } + + +QAbstractItemModel* BookmarksPanel::getModel() +{ + BookmarksTreeModel *model = new BookmarksTreeModel(this); + connect(model, SIGNAL(bookmarksUpdated()), this, SLOT(startLoadFoldedState())); + return model; +} diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h index 4afa953b..e39158d3 100644 --- a/src/bookmarks/bookmarkspanel.h +++ b/src/bookmarks/bookmarkspanel.h @@ -33,15 +33,14 @@ // Rekonq Includes #include "rekonq_defines.h" -// Qt Includes -#include +// Local Includes +#include "panels/urlpanel.h" // Forward Declarations -class PanelTreeView; class KBookmark; class QModelIndex; -class REKONQ_TESTS_EXPORT BookmarksPanel : public QDockWidget +class REKONQ_TESTS_EXPORT BookmarksPanel : public UrlPanel { Q_OBJECT @@ -50,16 +49,16 @@ public: virtual ~BookmarksPanel(); signals: - void openUrl(const KUrl &, const Rekonq::OpenType &); - void itemHovered(const QString &); void expansionChanged(); public slots: - void showing(bool); void startLoadFoldedState(); private slots: void contextMenu(const QPoint &pos); + virtual void contextMenuItem(const QPoint &pos); + virtual void contextMenuGroup(const QPoint &pos); + virtual void contextMenuEmpty(const QPoint &pos); void deleteBookmark(); void onCollapse(const QModelIndex &index); @@ -67,11 +66,12 @@ private slots: void loadFoldedState(const QModelIndex &root); private: - void setup(); + virtual void setup(); KBookmark bookmarkForIndex(const QModelIndex &index); - PanelTreeView *m_treeView; - bool m_loadingState, m_loaded; + virtual QAbstractItemModel* getModel(); + + bool m_loadingState; }; #endif // BOOKMARKSPANEL_H diff --git a/src/history/historypanel.cpp b/src/history/historypanel.cpp index 4c1dc732..79efb2b1 100644 --- a/src/history/historypanel.cpp +++ b/src/history/historypanel.cpp @@ -33,105 +33,44 @@ // Local Includes #include "panels/urlfilterproxymodel.h" + #include "application.h" #include "paneltreeview.h" #include "historymodels.h" -// Qt Includes -#include -#include -#include -#include - - // KDE Includes -#include #include #include #include #include +// Qt Includes +#include + HistoryPanel::HistoryPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags) - : QDockWidget(title, parent, flags) - , m_treeView(new PanelTreeView(this)) - , _loaded(false) + : UrlPanel(title, parent, flags) { setObjectName("historyPanel"); - setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - - connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(showing(bool))); - - setShown(ReKonfig::showHistoryPanel()); + setVisible(ReKonfig::showHistoryPanel()); } HistoryPanel::~HistoryPanel() { - // Save side panel's state ReKonfig::setShowHistoryPanel(!isHidden()); } - -void HistoryPanel::showing(bool b) -{ - if(b && !_loaded) - setup(); -} - - void HistoryPanel::setup() { - kDebug() << "Loading history panel setup..."; - - QWidget *ui = new QWidget(this); - - m_treeView->setUniformRowHeights(true); - m_treeView->setSelectionBehavior(QAbstractItemView::SelectRows); - m_treeView->setTextElideMode(Qt::ElideMiddle); - m_treeView->setAlternatingRowColors(true); - m_treeView->header()->hide(); - - // add search bar - QHBoxLayout *hBoxLayout = new QHBoxLayout; - hBoxLayout->setContentsMargins(5, 0, 0, 0); - QLabel *searchLabel = new QLabel(i18n("Search:")); - hBoxLayout->addWidget(searchLabel); - KLineEdit *search = new KLineEdit; - search->setClearButtonShown(true); - hBoxLayout->addWidget(search); - QWidget *searchBar = new QWidget; - searchBar->setLayout(hBoxLayout); - - // setup layout - QVBoxLayout *vBoxLayout = new QVBoxLayout; - vBoxLayout->setContentsMargins(0, 0, 0, 0); - vBoxLayout->addWidget(searchBar); - vBoxLayout->addWidget(m_treeView); - - // add it to the UI - ui->setLayout(vBoxLayout); - setWidget(ui); - - //- - HistoryManager *historyManager = Application::historyManager(); - QAbstractItemModel *model = historyManager->historyTreeModel(); - - UrlFilterProxyModel *proxy = new UrlFilterProxyModel(this); - proxy->setSourceModel(model); - m_treeView->setModel(proxy); - m_treeView->setExpanded(proxy->index(0, 0), true); - m_treeView->header()->hideSection(1); - QFontMetrics fm(font()); - int header = fm.width( QL1C('m') ) * 40; - m_treeView->header()->resizeSection(0, header); + UrlPanel::setup(); + kDebug() << "History panel..."; - connect(search, SIGNAL(textChanged(QString)), proxy, SLOT(setFilterFixedString(QString))); - connect(m_treeView, SIGNAL(contextMenuItemRequested(const QPoint &)), this, SLOT(contextMenuItem(const QPoint &))); - connect(m_treeView, SIGNAL(contextMenuGroupRequested(const QPoint &)), this, SLOT(contextMenuGroup(const QPoint &))); + m_treeView->header()->hideSection(1); - _loaded = true; + const UrlFilterProxyModel *proxy = static_cast(m_treeView->model()); + m_treeView->expand(proxy->index(0, 0)); } @@ -173,6 +112,11 @@ void HistoryPanel::contextMenuGroup(const QPoint &pos) } +void HistoryPanel::contextMenuEmpty(const QPoint& /*pos*/) +{ +} + + void HistoryPanel::openAll() { QModelIndex index = m_treeView->currentIndex(); @@ -199,3 +143,9 @@ void HistoryPanel::openAll() emit openUrl(allChild.at(i).url(), Rekonq::NewTab); } + +QAbstractItemModel* HistoryPanel::getModel() +{ + return Application::historyManager()->historyTreeModel(); +} + diff --git a/src/history/historypanel.h b/src/history/historypanel.h index 5a511e47..12ffe953 100644 --- a/src/history/historypanel.h +++ b/src/history/historypanel.h @@ -32,14 +32,11 @@ // Rekonq Includes #include "rekonq_defines.h" -// Qt Includes -#include +// Local Includes +#include "panels/urlpanel.h" -// Forward Declarations -class PanelTreeView; - -class REKONQ_TESTS_EXPORT HistoryPanel : public QDockWidget +class REKONQ_TESTS_EXPORT HistoryPanel : public UrlPanel { Q_OBJECT @@ -47,23 +44,17 @@ public: explicit HistoryPanel(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); virtual ~HistoryPanel(); -public slots: - void showing(bool); - -signals: - void openUrl(const KUrl &, const Rekonq::OpenType &); - void itemHovered(const QString &); - private slots: - void contextMenuItem(const QPoint &pos); - void contextMenuGroup(const QPoint &pos); + virtual void contextMenuItem(const QPoint &pos); + virtual void contextMenuGroup(const QPoint &pos); + virtual void contextMenuEmpty(const QPoint &pos); + void openAll(); private: - void setup(); + virtual void setup(); - PanelTreeView *m_treeView; - bool _loaded; + virtual QAbstractItemModel* getModel(); }; #endif // HISTORYPANEL_H diff --git a/src/panels/urlpanel.cpp b/src/panels/urlpanel.cpp new file mode 100644 index 00000000..a4cfe682 --- /dev/null +++ b/src/panels/urlpanel.cpp @@ -0,0 +1,115 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Domrachev Alexandr +* Copyright (C) 2009-2010 by Andrea Diamantini +* +* +* 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 . +* +* ============================================================ */ + + +// Self Includes +#include "urlpanel.h" + +// Auto Includes +#include "rekonq.h" + +// Local Includes +#include "panels/urlfilterproxymodel.h" + +#include "paneltreeview.h" + +// KDE Includes +#include +#include + +// Qt Includes +#include +#include +#include + + +UrlPanel::UrlPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags) + : QDockWidget(title, parent, flags) + , m_treeView(new PanelTreeView(this)) + , _loaded(false) +{ + setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + + connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(showing(bool))); +} + + +UrlPanel::~UrlPanel() +{ +} + + +void UrlPanel::showing(bool b) +{ + if(b && !_loaded) + { + setup(); + _loaded = true; + } +} + + +void UrlPanel::setup() +{ + kDebug() << "Loading panel setup..."; + + QWidget *ui = new QWidget(this); + + // setup search bar + QHBoxLayout *searchLayout = new QHBoxLayout; + searchLayout->setContentsMargins(5, 0, 0, 0); + 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 + m_treeView->setUniformRowHeights(true); + m_treeView->header()->hide(); + + // put everything together + QVBoxLayout *vBoxLayout = new QVBoxLayout; + vBoxLayout->setContentsMargins(0, 0, 0, 0); + vBoxLayout->addLayout(searchLayout); + vBoxLayout->addWidget(m_treeView); + + // add it to the UI + ui->setLayout(vBoxLayout); + setWidget(ui); + + QAbstractItemModel *model = getModel(); + UrlFilterProxyModel *proxy = new UrlFilterProxyModel(this); + proxy->setSourceModel(model); + m_treeView->setModel(proxy); + + connect(search, SIGNAL(textChanged(QString)), proxy, SLOT(setFilterFixedString(QString))); + + connect(m_treeView, SIGNAL(contextMenuItemRequested(const QPoint &)), this, SLOT(contextMenuItem(const QPoint &))); + connect(m_treeView, SIGNAL(contextMenuGroupRequested(const QPoint &)), this, SLOT(contextMenuGroup(const QPoint &))); + connect(m_treeView, SIGNAL(contextMenuEmptyRequested(const QPoint &)), this, SLOT(contextMenuEmpty(const QPoint &))); +} diff --git a/src/panels/urlpanel.h b/src/panels/urlpanel.h new file mode 100644 index 00000000..b4ca2aa5 --- /dev/null +++ b/src/panels/urlpanel.h @@ -0,0 +1,76 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Domrachev Alexandr +* Copyright (C) 2009-2010 by Andrea Diamantini +* +* +* 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 URLPANEL_H +#define URLPANEL_H + + +// Rekonq Includes +#include "rekonq_defines.h" + +// Qt Includes +#include + +// Forward Declarations +class PanelTreeView; + +class QAbstractItemModel; + + +class REKONQ_TESTS_EXPORT UrlPanel : public QDockWidget +{ + Q_OBJECT + +public: + explicit UrlPanel(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); + virtual ~UrlPanel(); + +public slots: + void showing(bool); + +signals: + void openUrl(const KUrl &, const Rekonq::OpenType &); + void itemHovered(const QString &); + +protected slots: + virtual void contextMenuItem(const QPoint &pos) = 0; + virtual void contextMenuGroup(const QPoint &pos) = 0; + virtual void contextMenuEmpty(const QPoint &pos) = 0; + +protected: + virtual void setup(); + + virtual QAbstractItemModel* getModel() = 0; + + PanelTreeView *m_treeView; + +private: + bool _loaded; +}; + + +#endif // URLPANEL_H -- cgit v1.2.1 From a3fd9b3a4b0c965d9a460e059f73f1ce0d52cc66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20Ander=20Pe=C3=B1alba?= Date: Mon, 30 Aug 2010 10:48:54 +0200 Subject: Minor changes in the panels --- src/bookmarks/bookmarkspanel.cpp | 1 - src/history/historypanel.cpp | 25 ++++++++++++------------- src/panels/urlpanel.cpp | 2 +- 3 files changed, 13 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp index 118074d0..0d912113 100644 --- a/src/bookmarks/bookmarkspanel.cpp +++ b/src/bookmarks/bookmarkspanel.cpp @@ -46,7 +46,6 @@ BookmarksPanel::BookmarksPanel(const QString &title, QWidget *parent, Qt::Window , m_loadingState(false) { setObjectName("bookmarksPanel"); - setVisible(ReKonfig::showBookmarksPanel()); } diff --git a/src/history/historypanel.cpp b/src/history/historypanel.cpp index 79efb2b1..c0097965 100644 --- a/src/history/historypanel.cpp +++ b/src/history/historypanel.cpp @@ -62,18 +62,6 @@ HistoryPanel::~HistoryPanel() } -void HistoryPanel::setup() -{ - UrlPanel::setup(); - kDebug() << "History panel..."; - - m_treeView->header()->hideSection(1); - - const UrlFilterProxyModel *proxy = static_cast(m_treeView->model()); - m_treeView->expand(proxy->index(0, 0)); -} - - void HistoryPanel::contextMenuItem(const QPoint &pos) { KMenu menu; @@ -144,8 +132,19 @@ void HistoryPanel::openAll() } +void HistoryPanel::setup() +{ + UrlPanel::setup(); + kDebug() << "History panel..."; + + m_treeView->header()->hideSection(1); + + const UrlFilterProxyModel *proxy = static_cast(m_treeView->model()); + m_treeView->expand(proxy->index(0, 0)); +} + + QAbstractItemModel* HistoryPanel::getModel() { return Application::historyManager()->historyTreeModel(); } - diff --git a/src/panels/urlpanel.cpp b/src/panels/urlpanel.cpp index a4cfe682..887dacf7 100644 --- a/src/panels/urlpanel.cpp +++ b/src/panels/urlpanel.cpp @@ -64,7 +64,7 @@ UrlPanel::~UrlPanel() void UrlPanel::showing(bool b) { - if(b && !_loaded) + if(!_loaded && b) { setup(); _loaded = true; -- cgit v1.2.1 From 5fcf9b79a80d24261ae79999c13dc023ba1b677d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20Ander=20Pe=C3=B1alba?= Date: Mon, 30 Aug 2010 17:10:04 +0200 Subject: panels directory removed --- src/CMakeLists.txt | 5 +- src/bookmarks/bookmarkspanel.cpp | 2 +- src/bookmarks/bookmarkspanel.h | 2 +- src/history/historypanel.cpp | 3 +- src/history/historypanel.h | 2 +- src/panels/urlfilterproxymodel.cpp | 58 ------------------- src/panels/urlfilterproxymodel.h | 58 ------------------- src/panels/urlpanel.cpp | 115 ------------------------------------- src/panels/urlpanel.h | 76 ------------------------ src/urlfilterproxymodel.cpp | 58 +++++++++++++++++++ src/urlfilterproxymodel.h | 58 +++++++++++++++++++ src/urlpanel.cpp | 114 ++++++++++++++++++++++++++++++++++++ src/urlpanel.h | 76 ++++++++++++++++++++++++ 13 files changed, 312 insertions(+), 315 deletions(-) delete mode 100644 src/panels/urlfilterproxymodel.cpp delete mode 100644 src/panels/urlfilterproxymodel.h delete mode 100644 src/panels/urlpanel.cpp delete mode 100644 src/panels/urlpanel.h create mode 100644 src/urlfilterproxymodel.cpp create mode 100644 src/urlfilterproxymodel.h create mode 100644 src/urlpanel.cpp create mode 100644 src/urlpanel.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 276a2f25..ef623499 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,6 +21,8 @@ SET( rekonq_KDEINIT_SRCS protocolhandler.cpp sessionmanager.cpp tabbar.cpp + urlfilterproxymodel.cpp + urlpanel.cpp walletbar.cpp webicon.cpp webinspectorpanel.cpp @@ -32,9 +34,6 @@ SET( rekonq_KDEINIT_SRCS webtab.cpp zoombar.cpp #---------------------------------------- - panels/urlfilterproxymodel.cpp - panels/urlpanel.cpp - #---------------------------------------- history/autosaver.cpp history/historymanager.cpp history/historymodels.cpp diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp index 0d912113..e88d3060 100644 --- a/src/bookmarks/bookmarkspanel.cpp +++ b/src/bookmarks/bookmarkspanel.cpp @@ -32,13 +32,13 @@ #include "rekonq.h" // Local Includes -#include "panels/urlfilterproxymodel.h" #include "application.h" #include "bookmarkprovider.h" #include "bookmarkstreemodel.h" #include "bookmarkscontextmenu.h" #include "bookmarkowner.h" #include "paneltreeview.h" +#include "urlfilterproxymodel.h" BookmarksPanel::BookmarksPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags) diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h index e39158d3..2418ae81 100644 --- a/src/bookmarks/bookmarkspanel.h +++ b/src/bookmarks/bookmarkspanel.h @@ -34,7 +34,7 @@ #include "rekonq_defines.h" // Local Includes -#include "panels/urlpanel.h" +#include "urlpanel.h" // Forward Declarations class KBookmark; diff --git a/src/history/historypanel.cpp b/src/history/historypanel.cpp index c0097965..84f2296e 100644 --- a/src/history/historypanel.cpp +++ b/src/history/historypanel.cpp @@ -32,11 +32,10 @@ #include "rekonq.h" // Local Includes -#include "panels/urlfilterproxymodel.h" - #include "application.h" #include "paneltreeview.h" #include "historymodels.h" +#include "urlfilterproxymodel.h" // KDE Includes #include diff --git a/src/history/historypanel.h b/src/history/historypanel.h index 12ffe953..9c9d4a4e 100644 --- a/src/history/historypanel.h +++ b/src/history/historypanel.h @@ -33,7 +33,7 @@ #include "rekonq_defines.h" // Local Includes -#include "panels/urlpanel.h" +#include "urlpanel.h" class REKONQ_TESTS_EXPORT HistoryPanel : public UrlPanel diff --git a/src/panels/urlfilterproxymodel.cpp b/src/panels/urlfilterproxymodel.cpp deleted file mode 100644 index b8e68342..00000000 --- a/src/panels/urlfilterproxymodel.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Nils Weigel -* Copyright (C) 2010 by Andrea Diamantini -* -* -* 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 . -* -* ============================================================ */ - - -// Self Includes -#include "urlfilterproxymodel.h" - - -UrlFilterProxyModel::UrlFilterProxyModel(QObject *parent) - : QSortFilterProxyModel(parent) -{ - setFilterCaseSensitivity(Qt::CaseInsensitive); -} - - -bool UrlFilterProxyModel::filterAcceptsRow(const int source_row, const QModelIndex &source_parent) const -{ - return recursiveMatch( sourceModel()->index(source_row, 0, source_parent) ); -} - - -bool UrlFilterProxyModel::recursiveMatch(const QModelIndex &index) const -{ - if (index.data().toString().contains(filterRegExp())) - return true; - - int numChildren = sourceModel()->rowCount(index); - for (int childRow = 0; childRow < numChildren; ++childRow) - { - if (recursiveMatch(sourceModel()->index(childRow, 0, index))) - return true; - } - - return false; -} diff --git a/src/panels/urlfilterproxymodel.h b/src/panels/urlfilterproxymodel.h deleted file mode 100644 index f4f15395..00000000 --- a/src/panels/urlfilterproxymodel.h +++ /dev/null @@ -1,58 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Nils Weigel -* Copyright (C) 2010 by Andrea Diamantini -* -* -* 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 URLFILTERPROXYMODEL_H -#define URLFILTERPROXYMODEL_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include - -/** - * QSortFilterProxyModel hides all children which parent doesn't - * match the filter. This class is used to change this behavior. - * If a url matches the filter it'll be shown, even if it's parent doesn't match it. - */ -class REKONQ_TESTS_EXPORT UrlFilterProxyModel : public QSortFilterProxyModel -{ - Q_OBJECT - Q_DISABLE_COPY(UrlFilterProxyModel) - -public: - UrlFilterProxyModel(QObject *parent = 0); - -protected: - virtual bool filterAcceptsRow(const int source_row, const QModelIndex &source_parent) const; - - // returns true if index or any of his children match the filter - bool recursiveMatch(const QModelIndex &index) const; -}; - -#endif // URLFILTERPROXYMODEL_H diff --git a/src/panels/urlpanel.cpp b/src/panels/urlpanel.cpp deleted file mode 100644 index 887dacf7..00000000 --- a/src/panels/urlpanel.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Domrachev Alexandr -* Copyright (C) 2009-2010 by Andrea Diamantini -* -* -* 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 . -* -* ============================================================ */ - - -// Self Includes -#include "urlpanel.h" - -// Auto Includes -#include "rekonq.h" - -// Local Includes -#include "panels/urlfilterproxymodel.h" - -#include "paneltreeview.h" - -// KDE Includes -#include -#include - -// Qt Includes -#include -#include -#include - - -UrlPanel::UrlPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags) - : QDockWidget(title, parent, flags) - , m_treeView(new PanelTreeView(this)) - , _loaded(false) -{ - setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - - connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(showing(bool))); -} - - -UrlPanel::~UrlPanel() -{ -} - - -void UrlPanel::showing(bool b) -{ - if(!_loaded && b) - { - setup(); - _loaded = true; - } -} - - -void UrlPanel::setup() -{ - kDebug() << "Loading panel setup..."; - - QWidget *ui = new QWidget(this); - - // setup search bar - QHBoxLayout *searchLayout = new QHBoxLayout; - searchLayout->setContentsMargins(5, 0, 0, 0); - 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 - m_treeView->setUniformRowHeights(true); - m_treeView->header()->hide(); - - // put everything together - QVBoxLayout *vBoxLayout = new QVBoxLayout; - vBoxLayout->setContentsMargins(0, 0, 0, 0); - vBoxLayout->addLayout(searchLayout); - vBoxLayout->addWidget(m_treeView); - - // add it to the UI - ui->setLayout(vBoxLayout); - setWidget(ui); - - QAbstractItemModel *model = getModel(); - UrlFilterProxyModel *proxy = new UrlFilterProxyModel(this); - proxy->setSourceModel(model); - m_treeView->setModel(proxy); - - connect(search, SIGNAL(textChanged(QString)), proxy, SLOT(setFilterFixedString(QString))); - - connect(m_treeView, SIGNAL(contextMenuItemRequested(const QPoint &)), this, SLOT(contextMenuItem(const QPoint &))); - connect(m_treeView, SIGNAL(contextMenuGroupRequested(const QPoint &)), this, SLOT(contextMenuGroup(const QPoint &))); - connect(m_treeView, SIGNAL(contextMenuEmptyRequested(const QPoint &)), this, SLOT(contextMenuEmpty(const QPoint &))); -} diff --git a/src/panels/urlpanel.h b/src/panels/urlpanel.h deleted file mode 100644 index b4ca2aa5..00000000 --- a/src/panels/urlpanel.h +++ /dev/null @@ -1,76 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Domrachev Alexandr -* Copyright (C) 2009-2010 by Andrea Diamantini -* -* -* 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 URLPANEL_H -#define URLPANEL_H - - -// Rekonq Includes -#include "rekonq_defines.h" - -// Qt Includes -#include - -// Forward Declarations -class PanelTreeView; - -class QAbstractItemModel; - - -class REKONQ_TESTS_EXPORT UrlPanel : public QDockWidget -{ - Q_OBJECT - -public: - explicit UrlPanel(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); - virtual ~UrlPanel(); - -public slots: - void showing(bool); - -signals: - void openUrl(const KUrl &, const Rekonq::OpenType &); - void itemHovered(const QString &); - -protected slots: - virtual void contextMenuItem(const QPoint &pos) = 0; - virtual void contextMenuGroup(const QPoint &pos) = 0; - virtual void contextMenuEmpty(const QPoint &pos) = 0; - -protected: - virtual void setup(); - - virtual QAbstractItemModel* getModel() = 0; - - PanelTreeView *m_treeView; - -private: - bool _loaded; -}; - - -#endif // URLPANEL_H diff --git a/src/urlfilterproxymodel.cpp b/src/urlfilterproxymodel.cpp new file mode 100644 index 00000000..b8e68342 --- /dev/null +++ b/src/urlfilterproxymodel.cpp @@ -0,0 +1,58 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Nils Weigel +* Copyright (C) 2010 by Andrea Diamantini +* +* +* 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 . +* +* ============================================================ */ + + +// Self Includes +#include "urlfilterproxymodel.h" + + +UrlFilterProxyModel::UrlFilterProxyModel(QObject *parent) + : QSortFilterProxyModel(parent) +{ + setFilterCaseSensitivity(Qt::CaseInsensitive); +} + + +bool UrlFilterProxyModel::filterAcceptsRow(const int source_row, const QModelIndex &source_parent) const +{ + return recursiveMatch( sourceModel()->index(source_row, 0, source_parent) ); +} + + +bool UrlFilterProxyModel::recursiveMatch(const QModelIndex &index) const +{ + if (index.data().toString().contains(filterRegExp())) + return true; + + int numChildren = sourceModel()->rowCount(index); + for (int childRow = 0; childRow < numChildren; ++childRow) + { + if (recursiveMatch(sourceModel()->index(childRow, 0, index))) + return true; + } + + return false; +} diff --git a/src/urlfilterproxymodel.h b/src/urlfilterproxymodel.h new file mode 100644 index 00000000..f4f15395 --- /dev/null +++ b/src/urlfilterproxymodel.h @@ -0,0 +1,58 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Nils Weigel +* Copyright (C) 2010 by Andrea Diamantini +* +* +* 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 URLFILTERPROXYMODEL_H +#define URLFILTERPROXYMODEL_H + + +// Rekonq Includes +#include "rekonq_defines.h" + +// Qt Includes +#include + +/** + * QSortFilterProxyModel hides all children which parent doesn't + * match the filter. This class is used to change this behavior. + * If a url matches the filter it'll be shown, even if it's parent doesn't match it. + */ +class REKONQ_TESTS_EXPORT UrlFilterProxyModel : public QSortFilterProxyModel +{ + Q_OBJECT + Q_DISABLE_COPY(UrlFilterProxyModel) + +public: + UrlFilterProxyModel(QObject *parent = 0); + +protected: + virtual bool filterAcceptsRow(const int source_row, const QModelIndex &source_parent) const; + + // returns true if index or any of his children match the filter + bool recursiveMatch(const QModelIndex &index) const; +}; + +#endif // URLFILTERPROXYMODEL_H diff --git a/src/urlpanel.cpp b/src/urlpanel.cpp new file mode 100644 index 00000000..86246fd9 --- /dev/null +++ b/src/urlpanel.cpp @@ -0,0 +1,114 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Domrachev Alexandr +* Copyright (C) 2009-2010 by Andrea Diamantini +* +* +* 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 . +* +* ============================================================ */ + + +// Self Includes +#include "urlpanel.h" + +// Auto Includes +#include "rekonq.h" + +// Local Includes +#include "paneltreeview.h" +#include "urlfilterproxymodel.h" + +// KDE Includes +#include +#include + +// Qt Includes +#include +#include +#include + + +UrlPanel::UrlPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags) + : QDockWidget(title, parent, flags) + , m_treeView(new PanelTreeView(this)) + , _loaded(false) +{ + setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + + connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(showing(bool))); +} + + +UrlPanel::~UrlPanel() +{ +} + + +void UrlPanel::showing(bool b) +{ + if(!_loaded && b) + { + setup(); + _loaded = true; + } +} + + +void UrlPanel::setup() +{ + kDebug() << "Loading panel setup..."; + + QWidget *ui = new QWidget(this); + + // setup search bar + QHBoxLayout *searchLayout = new QHBoxLayout; + searchLayout->setContentsMargins(5, 0, 0, 0); + 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 + m_treeView->setUniformRowHeights(true); + m_treeView->header()->hide(); + + // put everything together + QVBoxLayout *vBoxLayout = new QVBoxLayout; + vBoxLayout->setContentsMargins(0, 0, 0, 0); + vBoxLayout->addLayout(searchLayout); + vBoxLayout->addWidget(m_treeView); + + // add it to the UI + ui->setLayout(vBoxLayout); + setWidget(ui); + + QAbstractItemModel *model = getModel(); + UrlFilterProxyModel *proxy = new UrlFilterProxyModel(this); + proxy->setSourceModel(model); + m_treeView->setModel(proxy); + + connect(search, SIGNAL(textChanged(QString)), proxy, SLOT(setFilterFixedString(QString))); + + connect(m_treeView, SIGNAL(contextMenuItemRequested(const QPoint &)), this, SLOT(contextMenuItem(const QPoint &))); + connect(m_treeView, SIGNAL(contextMenuGroupRequested(const QPoint &)), this, SLOT(contextMenuGroup(const QPoint &))); + connect(m_treeView, SIGNAL(contextMenuEmptyRequested(const QPoint &)), this, SLOT(contextMenuEmpty(const QPoint &))); +} diff --git a/src/urlpanel.h b/src/urlpanel.h new file mode 100644 index 00000000..b4ca2aa5 --- /dev/null +++ b/src/urlpanel.h @@ -0,0 +1,76 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Domrachev Alexandr +* Copyright (C) 2009-2010 by Andrea Diamantini +* +* +* 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 URLPANEL_H +#define URLPANEL_H + + +// Rekonq Includes +#include "rekonq_defines.h" + +// Qt Includes +#include + +// Forward Declarations +class PanelTreeView; + +class QAbstractItemModel; + + +class REKONQ_TESTS_EXPORT UrlPanel : public QDockWidget +{ + Q_OBJECT + +public: + explicit UrlPanel(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); + virtual ~UrlPanel(); + +public slots: + void showing(bool); + +signals: + void openUrl(const KUrl &, const Rekonq::OpenType &); + void itemHovered(const QString &); + +protected slots: + virtual void contextMenuItem(const QPoint &pos) = 0; + virtual void contextMenuGroup(const QPoint &pos) = 0; + virtual void contextMenuEmpty(const QPoint &pos) = 0; + +protected: + virtual void setup(); + + virtual QAbstractItemModel* getModel() = 0; + + PanelTreeView *m_treeView; + +private: + bool _loaded; +}; + + +#endif // URLPANEL_H -- cgit v1.2.1