From 15ecefe10101dd068c4e075fca23ba64519bedb1 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Tue, 2 Dec 2008 16:22:28 +0100 Subject: New Bookmarks menu, sharing bkmrs with Konqueror (And that's reKonq 1st feature!!) --- src/CMakeLists.txt | 1 + src/bookmarks.cpp | 41 +++++++++++++++++++++++++------------- src/bookmarks.h | 28 ++++++++++++++++++-------- src/browsermainwindow.cpp | 19 +++++++++--------- src/browsermainwindow.h | 7 ++----- src/tabwidget.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++++ src/webview.h | 10 +++++----- 7 files changed, 115 insertions(+), 41 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bb01a78e..1e2a3866 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -7,6 +7,7 @@ SET( rekonq_SRCS edittableview.cpp edittreeview.cpp history.cpp + bookmarks.cpp modelmenu.cpp networkaccessmanager.cpp urlbar.cpp diff --git a/src/bookmarks.cpp b/src/bookmarks.cpp index 29c175e8..6f9c3beb 100644 --- a/src/bookmarks.cpp +++ b/src/bookmarks.cpp @@ -17,42 +17,55 @@  *  * ============================================================ */ +// Local Includes #include "bookmarks.h" #include "bookmarks.moc" +#include "browsermainwindow.h" +#include "webview.h" + +// KDE Includes +#include OwnBookMarks::OwnBookMarks(KMainWindow *parent) + : QObject(parent) + , KBookmarkOwner() +{ + m_parent = qobject_cast( parent ); + connect( this, SIGNAL( openUrl( const QUrl &) ) , parent , SLOT( loadUrl( const QUrl & ) ) ); +} + + +void OwnBookMarks::openBookmark (const KBookmark & b, Qt::MouseButtons , Qt::KeyboardModifiers ) { + emit openUrl( (QUrl)b.url() ); +} +QString OwnBookMarks::currentUrl() const +{ + QUrl url = m_parent->currentTab()->url(); + return url.path(); } -virtual void OwnBookMarks::openBookmark (const KBookmark & , Qt::MouseButtons , Qt::KeyboardModifiers ) +QString OwnBookMarks::currentTitle() const { + QString title = m_parent->windowTitle(); + return title.remove( " - reKonq" ); } // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -BookmarkMenu::BookmarkMenu(KMainWindow *parent) +BookmarksMenu::BookmarksMenu(KMainWindow *parent) : KMenu(parent) + , m_owner( new OwnBookMarks( parent ) ) { - m_parent = parent; - KUrl bookfile = KUrl( "~/.kde/share/apps/konqueror/bookmarks.xml" ); // share konqueror bookmarks m_manager = KBookmarkManager::managerForExternalFile( bookfile.path() ); - m_owner = new OwnBookMarks(parent); - m_ac = new KActionCollection( this ); - setActions(); - m_menu = m_bookmarkMenu = new KBookmarkMenu( m_manager , m_owner, this, m_ac ); + m_menu = new KBookmarkMenu( m_manager , m_owner, this, m_ac ); } - - - void BookmarkMenu::setActions() -{ - m_ac->addAction( KStandardAction::addBookmark( m_parent, SLOT( slotAddBookmark() ) , this ) ); -} \ No newline at end of file diff --git a/src/bookmarks.h b/src/bookmarks.h index 4f527436..80362e1c 100644 --- a/src/bookmarks.h +++ b/src/bookmarks.h @@ -20,36 +20,48 @@ #ifndef BOOKMARKS_H #define BOOKMARKS_H +// KDE Includes #include #include #include +#include +#include -class OwnBookMarks : public KBookMarkOwner +class BrowserMainWindow; + +class OwnBookMarks : public QObject , public KBookmarkOwner { Q_OBJECT public: - OwnBookMarks(KMainWindow *parent); + OwnBookMarks(KMainWindow * ); virtual void openBookmark (const KBookmark & , Qt::MouseButtons , Qt::KeyboardModifiers ); + + // KBookmarkOwner interface: + virtual QString currentUrl() const; + virtual QString currentTitle() const; + +signals: + void openUrl(const QUrl &); // FIXME pass all to KUrl!! + +private: + BrowserMainWindow *m_parent; }; -class BookmarkMenu : public KMenu +class BookmarksMenu : public KMenu { Q_OBJECT public: - BookmarkMenu(KMainWindow *parent); + BookmarksMenu(KMainWindow * parent); private: - void setActions(); - KBookmarkManager *m_manager; OwnBookMarks *m_owner; KActionCollection *m_ac; KBookmarkMenu *m_menu; - KMainWindow *m_parent; }; -#endif +#endif diff --git a/src/browsermainwindow.cpp b/src/browsermainwindow.cpp index 5b91fdb0..57c6e4bf 100644 --- a/src/browsermainwindow.cpp +++ b/src/browsermainwindow.cpp @@ -27,7 +27,7 @@ #include "history.h" #include "settings.h" #include "tabwidget.h" -// #include "toolbarsearch.h" +#include "bookmarks.h" #include "webview.h" // UI Includes @@ -67,7 +67,6 @@ BrowserMainWindow::BrowserMainWindow(QWidget *parent, Qt::WindowFlags flags) , m_historyForward(0) , m_stop(0) , m_reload(0) - , m_bookmarkMenu(0) { // delete widget accepting close event setAttribute(Qt::WA_DeleteOnClose, true); @@ -340,13 +339,15 @@ void BrowserMainWindow::setupMenu() // ------------------------------------------------------------- BOOKMARKS -------------------------------------------------------------------------------------------------- - KMenu* bookmarksMenu = new KMenu( i18n("&Bookmarks"), this ); - - KUrl bookfile = KUrl( "~/.kde/share/apps/konqueror/bookmarks.xml" ); - KBookmarkManager *mgr = KBookmarkManager::managerForExternalFile( bookfile.path() ); //FIXME hardcoded path - KActionCollection * ac = new KActionCollection( this ); - ac->addAction( "Add Bookmark" , KStandardAction::addBookmark( this, SLOT( slotAddBookmark() ) , this ) ); - m_bookmarkMenu = new KBookmarkMenu( mgr , 0 , bookmarksMenu , ac ); + BookmarksMenu *bookmarksMenu = new BookmarksMenu( this ); + bookmarksMenu->setTitle( i18n("&Bookmarks") ); +// m_bookmarksMenu = new KMenu( i18n("&Bookmarks"), this ); +// +// KUrl bookfile = KUrl( "~/.kde/share/apps/konqueror/bookmarks.xml" ); +// KBookmarkManager *mgr = KBookmarkManager::managerForExternalFile( bookfile.path() ); //FIXME hardcoded path +// KActionCollection * ac = new KActionCollection( this ); +// ac->addAction( "Add Bookmark" , KStandardAction::addBookmark( this, SLOT( slotAddBookmark() ) , this ) ); +// m_bookmarkMenu = new KBookmarkMenu( mgr , 0 , bookmarksMenu , ac ); menuBar()->addMenu( bookmarksMenu ); diff --git a/src/browsermainwindow.h b/src/browsermainwindow.h index 5ead8dda..3c459d18 100644 --- a/src/browsermainwindow.h +++ b/src/browsermainwindow.h @@ -32,7 +32,6 @@ #include #include #include -#include // Qt Includes #include @@ -41,7 +40,6 @@ class AutoSaver; class QWebFrame; class TabWidget; -// class ToolbarSearch; class WebView; /*! @@ -49,7 +47,8 @@ class WebView; Handles the tab widget and all the actions */ -class BrowserMainWindow : public KMainWindow { +class BrowserMainWindow : public KMainWindow +{ Q_OBJECT public: @@ -150,8 +149,6 @@ private: FindBar *m_findBar; QString m_lastSearch; - - KBookmarkMenu* m_bookmarkMenu; }; #endif // BROWSERMAINWINDOW_H diff --git a/src/tabwidget.cpp b/src/tabwidget.cpp index 9ce8aa59..efa77a95 100644 --- a/src/tabwidget.cpp +++ b/src/tabwidget.cpp @@ -179,8 +179,10 @@ void TabBar::reloadTab() } } + // -------------------------------------------------------------------------------------------------------------------------------------------------------- + TabWidget::TabWidget(QWidget *parent) : QTabWidget(parent) , m_recentlyClosedTabsAction(0) @@ -258,6 +260,7 @@ TabWidget::TabWidget(QWidget *parent) m_lineEdits = new QStackedWidget(this); } + void TabWidget::clear() { // clear the recently closed tabs @@ -269,6 +272,7 @@ void TabWidget::clear() } } + void TabWidget::moveTab(int fromIndex, int toIndex) { disconnect(this, SIGNAL(currentChanged(int)), @@ -285,6 +289,7 @@ void TabWidget::moveTab(int fromIndex, int toIndex) setCurrentIndex(toIndex); } + // When index is -1 index chooses the current tab void TabWidget::reloadTab(int index) { @@ -299,6 +304,7 @@ void TabWidget::reloadTab(int index) } + void TabWidget::addWebAction(KAction *action, QWebPage::WebAction webAction) { if (!action) @@ -306,6 +312,7 @@ void TabWidget::addWebAction(KAction *action, QWebPage::WebAction webAction) m_actions.append(new WebActionMapper(action, webAction, this)); } + void TabWidget::currentChanged(int index) { WebView *webView = this->webView(index); @@ -347,46 +354,55 @@ void TabWidget::currentChanged(int index) webView->setFocus(); } + KAction *TabWidget::newTabAction() const { return m_newTabAction; } + KAction *TabWidget::closeTabAction() const { return m_closeTabAction; } + KAction *TabWidget::recentlyClosedTabsAction() const { return m_recentlyClosedTabsAction; } + KAction *TabWidget::nextTabAction() const { return m_nextTabAction; } + KAction *TabWidget::previousTabAction() const { return m_previousTabAction; } + QWidget *TabWidget::lineEditStack() const { return m_lineEdits; } + KLineEdit *TabWidget::currentLineEdit() const { return lineEdit(m_lineEdits->currentIndex()); } + WebView *TabWidget::currentWebView() const { return webView(currentIndex()); } + KLineEdit *TabWidget::lineEdit(int index) const { UrlBar *urlLineEdit = qobject_cast(m_lineEdits->widget(index)); @@ -395,6 +411,7 @@ KLineEdit *TabWidget::lineEdit(int index) const return 0; } + WebView *TabWidget::webView(int index) const { QWidget *widget = this->widget(index); @@ -418,12 +435,14 @@ WebView *TabWidget::webView(int index) const return 0; } + int TabWidget::webViewIndex(WebView *webView) const { int index = indexOf(webView); return index; } + WebView *TabWidget::newTab(bool makeCurrent) { // line edit @@ -491,6 +510,7 @@ WebView *TabWidget::newTab(bool makeCurrent) return webView; } + void TabWidget::reloadAllTabs() { for (int i = 0; i < count(); ++i) @@ -503,6 +523,7 @@ void TabWidget::reloadAllTabs() } } + void TabWidget::lineEditReturnPressed() { if (KLineEdit *lineEdit = qobject_cast(sender())) @@ -513,6 +534,7 @@ void TabWidget::lineEditReturnPressed() } } + void TabWidget::windowCloseRequested() { WebPage *webPage = qobject_cast(sender()); @@ -527,6 +549,7 @@ void TabWidget::windowCloseRequested() } } + void TabWidget::closeOtherTabs(int index) { if (-1 == index) @@ -537,6 +560,7 @@ void TabWidget::closeOtherTabs(int index) closeTab(i); } + // When index is -1 index chooses the current tab void TabWidget::cloneTab(int index) { @@ -548,6 +572,7 @@ void TabWidget::cloneTab(int index) tab->setUrl(webView(index)->url()); } + // When index is -1 index chooses the current tab void TabWidget::closeTab(int index) { @@ -591,6 +616,7 @@ void TabWidget::closeTab(int index) emit lastTabClosed(); } + void TabWidget::webViewLoadStarted() { WebView *webView = qobject_cast(sender()); @@ -601,6 +627,7 @@ void TabWidget::webViewLoadStarted() } } + void TabWidget::webViewIconChanged() { WebView *webView = qobject_cast(sender()); @@ -612,6 +639,7 @@ void TabWidget::webViewIconChanged() } } + void TabWidget::webViewTitleChanged(const QString &title) { WebView *webView = qobject_cast(sender()); @@ -624,6 +652,7 @@ void TabWidget::webViewTitleChanged(const QString &title) BrowserApplication::historyManager()->updateHistoryItem(webView->url(), title); } + void TabWidget::webViewUrlChanged(const QUrl &url) { WebView *webView = qobject_cast(sender()); @@ -634,6 +663,7 @@ void TabWidget::webViewUrlChanged(const QUrl &url) emit tabsChanged(); } + void TabWidget::aboutToShowRecentTabsMenu() { m_recentlyClosedTabsMenu->clear(); @@ -648,12 +678,14 @@ void TabWidget::aboutToShowRecentTabsMenu() } } + void TabWidget::aboutToShowRecentTriggeredAction(QAction *action) { QUrl url = action->data().toUrl(); loadUrlInCurrentTab(url); } + void TabWidget::mouseDoubleClickEvent(QMouseEvent *event) { if ( !childAt(event->pos()) @@ -666,6 +698,7 @@ void TabWidget::mouseDoubleClickEvent(QMouseEvent *event) QTabWidget::mouseDoubleClickEvent(event); } + void TabWidget::contextMenuEvent(QContextMenuEvent *event) { if (!childAt(event->pos())) { @@ -675,6 +708,7 @@ void TabWidget::contextMenuEvent(QContextMenuEvent *event) QTabWidget::contextMenuEvent(event); } + void TabWidget::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::MidButton && !childAt(event->pos()) @@ -690,6 +724,7 @@ void TabWidget::mouseReleaseEvent(QMouseEvent *event) } } + void TabWidget::loadUrlInCurrentTab(const QUrl &url) { WebView *webView = currentWebView(); @@ -700,6 +735,7 @@ void TabWidget::loadUrlInCurrentTab(const QUrl &url) } } + void TabWidget::nextTab() { int next = currentIndex() + 1; @@ -708,6 +744,7 @@ void TabWidget::nextTab() setCurrentIndex(next); } + void TabWidget::previousTab() { int next = currentIndex() - 1; @@ -716,8 +753,10 @@ void TabWidget::previousTab() setCurrentIndex(next); } + static const qint32 TabWidgetMagic = 0xaa; + QByteArray TabWidget::saveState() const { int version = 1; @@ -744,6 +783,7 @@ QByteArray TabWidget::saveState() const return data; } + bool TabWidget::restoreState(const QByteArray &state) { int version = 1; @@ -776,6 +816,10 @@ bool TabWidget::restoreState(const QByteArray &state) return true; } + +// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + WebActionMapper::WebActionMapper(KAction *root, QWebPage::WebAction webAction, QObject *parent) : QObject(parent) , m_currentParent(0) @@ -789,16 +833,19 @@ WebActionMapper::WebActionMapper(KAction *root, QWebPage::WebAction webAction, Q root->setEnabled(false); } + void WebActionMapper::rootDestroyed() { m_root = 0; } + void WebActionMapper::currentDestroyed() { updateCurrent(0); } + void WebActionMapper::addChild(KAction *action) { if (!action) @@ -811,6 +858,7 @@ QWebPage::WebAction WebActionMapper::webAction() const return m_webAction; } + void WebActionMapper::rootTriggered() { if (m_currentParent) @@ -820,6 +868,7 @@ void WebActionMapper::rootTriggered() } } + void WebActionMapper::childChanged() { if (KAction *source = qobject_cast(sender())) @@ -834,6 +883,7 @@ void WebActionMapper::childChanged() } } + void WebActionMapper::updateCurrent(QWebPage *currentParent) { if (m_currentParent) diff --git a/src/webview.h b/src/webview.h index ccd44a6f..f81544a0 100644 --- a/src/webview.h +++ b/src/webview.h @@ -32,7 +32,9 @@ class QSslError; QT_END_NAMESPACE class BrowserMainWindow; -class WebPage : public QWebPage { + +class WebPage : public QWebPage +{ Q_OBJECT signals: @@ -45,9 +47,6 @@ public: protected: bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type); QWebPage *createWindow(QWebPage::WebWindowType type); -// #if !defined(QT_NO_UITOOLS) -// QObject *createPlugin(const QString &classId, const QUrl &url, const QStringList ¶mNames, const QStringList ¶mValues); -// #endif private slots: void handleUnsupportedContent(QNetworkReply *reply); @@ -62,7 +61,8 @@ private: QUrl m_loadingUrl; }; -class WebView : public QWebView { +class WebView : public QWebView +{ Q_OBJECT public: -- cgit v1.2.1