From 9dcb1b5bfd4772726f41bf011abf6810b6ce25ad Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Mon, 2 Aug 2010 00:50:04 +0200 Subject: Merging mr 154 by hand!! WARNING: I'm NOT sure about this. Please everyone, check it twice!! PS: Many thanks to Yoann21. He is doing a fantastic work on the bookmarks toolbar --- src/bookmarks/bookmarksmanager.cpp | 141 ++++++++++++++++++++++++++++--------- src/bookmarks/bookmarksmanager.h | 47 +++++++++++-- src/mainwindow.cpp | 18 ++--- src/mainwindow.h | 7 +- src/rekonqui.rc | 5 -- 5 files changed, 163 insertions(+), 55 deletions(-) diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp index 7f07cf48..ca85be23 100644 --- a/src/bookmarks/bookmarksmanager.cpp +++ b/src/bookmarks/bookmarksmanager.cpp @@ -142,7 +142,6 @@ BookmarkMenu::BookmarkMenu(KBookmarkManager *manager, KActionCollection* actionCollection) : KBookmarkMenu(manager, owner, menu, actionCollection) { - refill(); } @@ -152,7 +151,6 @@ BookmarkMenu::BookmarkMenu(KBookmarkManager *manager, const QString &parentAddress) : KBookmarkMenu(manager, owner, parentMenu, parentAddress) { - refill(); } @@ -176,7 +174,8 @@ QAction * BookmarkMenu::actionForBookmark(const KBookmark &bookmark) if (bookmark.isGroup()) { KBookmarkActionMenu *actionMenu = new KBookmarkActionMenu(bookmark, this); - new BookmarkMenu(manager(), owner(), actionMenu->menu(), bookmark.address()); + BookmarkMenu *menu = new BookmarkMenu(manager(), owner(), actionMenu->menu(), bookmark.address()); + connect(actionMenu, SIGNAL(hovered()), menu, SLOT(slotAboutToShow())); return actionMenu; } else if (bookmark.isSeparator()) @@ -185,7 +184,9 @@ QAction * BookmarkMenu::actionForBookmark(const KBookmark &bookmark) } else { - return new KBookmarkAction(bookmark, owner(), this); + KBookmarkAction *action = new KBookmarkAction(bookmark, owner(), this); + connect(action, SIGNAL(hovered()), this, SLOT(actionHovered())); + return action; } } @@ -240,9 +241,89 @@ void BookmarkMenu::addOpenFolderInTabs() } +void BookmarkMenu::actionHovered() +{ + KBookmarkActionInterface* action = dynamic_cast(sender()); + if (action) + Application::instance()->mainWindow()->notifyMessage(action->bookmark().url().url()); +} + + // ------------------------------------------------------------------------------------------------------ +BookmarkToolBar::BookmarkToolBar( const QString &objectName, + QMainWindow *parentWindow, + Qt::ToolBarArea area, + bool newLine, + bool isMainToolBar, + bool readConfig + ) + : KToolBar(objectName, parentWindow, area, newLine, isMainToolBar, readConfig) + , m_filled(false) + , m_currentMenu(0) +{ +} + + +BookmarkToolBar::~BookmarkToolBar() +{ +} + + +void BookmarkToolBar::setVisible(bool visible) +{ + if (visible && !m_filled) + { + m_filled = true; + Application::bookmarkProvider()->fillBookmarkBar(this); + } + KToolBar::setVisible(visible); +} + + +void BookmarkToolBar::menuDisplayed() +{ + qApp->installEventFilter(this); + m_currentMenu = qobject_cast(sender()); +} + + +void BookmarkToolBar::menuHidden() +{ + qApp->removeEventFilter(this); + m_currentMenu = 0; +} + + +bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event) +{ + // To switch root folders as in a menubar + if (event->type() == QEvent::MouseMove && m_currentMenu) + { + KBookmarkActionMenu* act = dynamic_cast(this->actionAt(this->mapFromGlobal(QCursor::pos()))); + if (act && act->menu() != m_currentMenu) + { + m_currentMenu->hide(); + QPoint pos = mapToGlobal(widgetForAction(act)->pos()); + act->menu()->popup(QPoint(pos.x(), pos.y() + widgetForAction(act)->height())); + } + } + return KToolBar::eventFilter(watched, event); +} + + +void BookmarkToolBar::actionHovered() +{ + KBookmarkActionInterface* action = dynamic_cast(sender()); + if (action) + Application::instance()->mainWindow()->notifyMessage(action->bookmark().url().url()); +} + +// ------------------------------------------------------------------------------------------------------ + + + BookmarkProvider::BookmarkProvider(QObject *parent) : QObject(parent) , m_manager(0) @@ -293,19 +374,20 @@ BookmarkProvider::~BookmarkProvider() } -void BookmarkProvider::setupBookmarkBar(KToolBar *toolbar) +void BookmarkProvider::setupBookmarkBar(BookmarkToolBar *toolbar) { - KToolBar *bookmarkToolBar = toolbar; - m_bookmarkToolBars.append(bookmarkToolBar); - bookmarkToolBar->setContextMenuPolicy(Qt::CustomContextMenu); - connect(bookmarkToolBar, SIGNAL(customContextMenuRequested(const QPoint &)), - this, SLOT(contextMenu(const QPoint &))); - + kDebug() << "new bookmark bar..."; + + m_bookmarkToolBars.append(toolbar); + toolbar->setContextMenuPolicy(Qt::CustomContextMenu); + connect(toolbar, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &))); + slotBookmarksChanged("", ""); + kDebug() << "new bookmark bar... DONE!"; } -void BookmarkProvider::removeToolBar(KToolBar *toolbar) +void BookmarkProvider::removeToolBar(BookmarkToolBar *toolbar) { m_bookmarkToolBars.removeOne(toolbar); } @@ -316,7 +398,7 @@ void BookmarkProvider::slotBookmarksChanged(const QString &group, const QString Q_UNUSED(group) Q_UNUSED(caller) - foreach(KToolBar *bookmarkToolBar, m_bookmarkToolBars) + foreach(BookmarkToolBar *bookmarkToolBar, m_bookmarkToolBars) { if (bookmarkToolBar) { @@ -356,12 +438,15 @@ void BookmarkProvider::contextMenu(const QPoint &point) KActionMenu* BookmarkProvider::bookmarkActionMenu(QWidget *parent) { + kDebug() << "new Bookmarks Menu..."; + KMenu *menu = new KMenu(parent); _bookmarkActionMenu = new KActionMenu(parent); _bookmarkActionMenu->setMenu(menu); _bookmarkActionMenu->setText(i18n("&Bookmarks")); - connect(menu, SIGNAL(aboutToShow()), this, SLOT(triggerBookmarkMenu())); - + new BookmarkMenu(m_manager, m_owner, menu, m_actionCollection); + + kDebug() << "new Bookmarks Menu...DONE"; return _bookmarkActionMenu; } @@ -376,21 +461,7 @@ KAction* BookmarkProvider::bookmarkToolBarAction(KToolBar *t) } -void BookmarkProvider::triggerBookmarkMenu() -{ - kDebug() << "triggering Bookmarks Menu..."; - KMenu *menu = qobject_cast(sender()); - - if(menu->actions().count() == 0) - { - kDebug() << "new Bookmarks Menu..."; - new BookmarkMenu(m_manager, m_owner, menu, m_actionCollection); - kDebug() << "new Bookmarks Menu...DONE"; - } -} - - -void BookmarkProvider::fillBookmarkBar(KToolBar *toolBar) +void BookmarkProvider::fillBookmarkBar(BookmarkToolBar *toolBar) { KBookmarkGroup root = m_manager->toolbar(); if (root.isNull()) @@ -403,7 +474,8 @@ void BookmarkProvider::fillBookmarkBar(KToolBar *toolBar) KBookmarkActionMenu *menuAction = new KBookmarkActionMenu(bookmark.toGroup(), this); menuAction->setDelayed(false); new BookmarkMenu(bookmarkManager(), bookmarkOwner(), menuAction->menu(), bookmark.address()); - + connect(menuAction->menu(), SIGNAL(aboutToShow()), toolBar, SLOT(menuDisplayed())); + connect(menuAction->menu(), SIGNAL(aboutToHide()), toolBar, SLOT(menuHidden())); toolBar->addAction(menuAction); } @@ -414,9 +486,10 @@ void BookmarkProvider::fillBookmarkBar(KToolBar *toolBar) else { - KBookmarkAction* a = new KBookmarkAction(bookmark, m_owner, this); - a->setIconText(a->iconText().replace('&', "&&")); - toolBar->addAction(a); + KBookmarkAction* action = new KBookmarkAction(bookmark, m_owner, this); + action->setIconText(action->iconText().replace('&', "&&")); + connect(action, SIGNAL(hovered()), toolBar, SLOT(actionHovered())); + toolBar->addAction(action); } } } diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h index fd2cfcdc..6bf796c0 100644 --- a/src/bookmarks/bookmarksmanager.h +++ b/src/bookmarks/bookmarksmanager.h @@ -161,6 +161,9 @@ protected: virtual void refill(); virtual QAction* actionForBookmark(const KBookmark &bookmark); +private slots: + void actionHovered(); + private: void addOpenFolderInTabs(); @@ -169,7 +172,40 @@ private: // ------------------------------------------------------------------------------ +#include + +class BookmarkToolBar : public KToolBar +{ + Q_OBJECT + +public: +BookmarkToolBar(const QString &objectName, + QMainWindow *parentWindow, + Qt::ToolBarArea area, + bool newLine = false, + bool isMainToolBar = false, + bool readConfig = true); +~BookmarkToolBar(); + +virtual void setVisible(bool visible); + +protected: + bool eventFilter(QObject *watched, QEvent *event); +private slots: + void actionHovered(); + void menuDisplayed(); + void menuHidden(); + +private: + bool m_filled; + KMenu *m_currentMenu; +}; + + +// ------------------------------------------------------------------------------ + + /** * This class represent the interface to rekonq bookmarks system. * All rekonq needs (Bookmarks Menu, Bookmarks Toolbar) is provided @@ -205,9 +241,9 @@ public: /** * @short set the Bookmarks Toolbar Action */ - void setupBookmarkBar(KToolBar *); + void setupBookmarkBar(BookmarkToolBar *); - void removeToolBar(KToolBar*); + void removeToolBar(BookmarkToolBar *); /** * @short Get action by name @@ -259,20 +295,19 @@ public slots: * @see KBookmarkManager::changed */ void slotBookmarksChanged(const QString &group, const QString &caller); - + void fillBookmarkBar(BookmarkToolBar *toolBar); + private slots: - void triggerBookmarkMenu(); void slotAddBookmark(); void slotPanelChanged(); private: - void fillBookmarkBar(KToolBar *toolBar); QList find(QList list, const KBookmark &bookmark, QString text); KBookmarkManager *m_manager; BookmarkOwner *m_owner; KActionCollection *m_actionCollection; - QList m_bookmarkToolBars; + QList m_bookmarkToolBars; QList m_bookmarkPanels; KActionMenu *_bookmarkActionMenu; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 8d0f28a7..245110ec 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -103,8 +103,7 @@ MainWindow::MainWindow() , m_analyzerPanel(0) , m_historyBackMenu(0) , m_encodingMenu(new KMenu(this)) -// , m_mainBar(new KToolBar(QString("MainToolBar"), this, Qt::TopToolBarArea, true, true, true)) -// , m_bmBar(new KToolBar(QString("BookmarkToolBar"), this, Qt::TopToolBarArea, true, false, true)) + , m_bookmarksBar(new BookmarkToolBar(QString("BookmarkToolBar"), this, Qt::TopToolBarArea, true, false, true)) , m_popup(new KPassivePopup(this)) , m_hidePopup(new QTimer(this)) { @@ -179,8 +178,7 @@ MainWindow::MainWindow() MainWindow::~MainWindow() { - KToolBar *bookBar = toolBar("bookmarksToolBar"); - Application::bookmarkProvider()->removeToolBar(bookBar); + Application::bookmarkProvider()->removeToolBar(m_bookmarksBar); Application::bookmarkProvider()->removeBookmarkPanel(m_bookmarksPanel); Application::instance()->removeMainWindow(this); @@ -195,6 +193,8 @@ MainWindow::~MainWindow() delete m_historyBackMenu; delete m_encodingMenu; + delete m_bookmarksBar; + delete m_zoomSlider; delete m_popup; @@ -215,17 +215,17 @@ void MainWindow::setupToolbars() actionCollection()->addAction( QL1S("url_bar"), a); KToolBar *mainBar = toolBar("mainToolBar"); - KToolBar *bookBar = toolBar("bookmarksToolBar"); - +// KToolBar *bookBar = toolBar("bookmarksToolBar"); +// // bookmarks bar - KAction *bookmarkBarAction = Application::bookmarkProvider()->bookmarkToolBarAction(bookBar); + KAction *bookmarkBarAction = Application::bookmarkProvider()->bookmarkToolBarAction(m_bookmarksBar); a = actionCollection()->addAction( QL1S("bookmarks_bar"), bookmarkBarAction); mainBar->show(); // this just to fix reopening rekonq after fullscreen close // =========== Bookmarks ToolBar ================================ - bookBar->setAcceptDrops(true); - Application::bookmarkProvider()->setupBookmarkBar(bookBar); + m_bookmarksBar->setAcceptDrops(true); + Application::bookmarkProvider()->setupBookmarkBar(m_bookmarksBar); } diff --git a/src/mainwindow.h b/src/mainwindow.h index 1ec79a4b..96fe0f2d 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -34,6 +34,9 @@ // Rekonq Includes #include "rekonq_defines.h" +// Local Includes +#include "bookmarksmanager.h" + // KDE Includes #include #include @@ -172,11 +175,13 @@ private: BookmarksPanel *m_bookmarksPanel; WebInspectorPanel *m_webInspectorPanel; NetworkAnalyzerPanel *m_analyzerPanel; - + KAction *m_stopReloadAction; KMenu *m_historyBackMenu; KMenu *m_encodingMenu; + BookmarkToolBar *m_bookmarksBar; + QSlider *m_zoomSlider; QString m_lastSearch; diff --git a/src/rekonqui.rc b/src/rekonqui.rc index d4d5d289..752599d5 100644 --- a/src/rekonqui.rc +++ b/src/rekonqui.rc @@ -91,10 +91,5 @@ - - - Bookmark Toolbar - - -- cgit v1.2.1