/* ============================================================ * * This file is a part of the rekonq project * * Copyright (C) 2008 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, or (at your option) any later version. * * 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. * * ============================================================ */ // Self Includes #include "bookmarks.h" #include "bookmarks.moc" // Local Includes #include "mainwindow.h" #include "webview.h" // KDE Includes #include #include #include #include // Qt Includes #include OwnBookMarks::OwnBookMarks(KMainWindow *parent) : QObject(parent) , KBookmarkOwner() { m_parent = qobject_cast(parent); connect(this, SIGNAL(openUrl(const KUrl &)) , parent , SLOT(loadUrl(const KUrl &))); } void OwnBookMarks::openBookmark(const KBookmark & b, Qt::MouseButtons mb, Qt::KeyboardModifiers km) { Q_UNUSED(mb); Q_UNUSED(km); emit openUrl(b.url()); } QString OwnBookMarks::currentUrl() const { QUrl url = m_parent->currentTab()->url(); return url.path(); } QString OwnBookMarks::currentTitle() const { QString title = m_parent->windowTitle(); return title.remove(" - rekonq"); } // ------------------------------------------------------------------------------------------------------ BookmarksMenu::BookmarksMenu(KBookmarkManager* manager, KBookmarkOwner* owner, KMenu* menu, KActionCollection* ac) : KBookmarkMenu(manager, owner, menu, ac) { } KMenu* BookmarksMenu::viewContextMenu(QAction* action) { return contextMenu(action); } // ------------------------------------------------------------------------------------------------------ BookmarksProvider::BookmarksProvider(KMainWindow* parent) : QObject(parent) , m_owner(new OwnBookMarks(parent)) , m_bmMenu(0) , m_bmToolbar(0) { m_parent = parent; KUrl bookfile = KUrl("~/.kde/share/apps/konqueror/bookmarks.xml"); // share konqueror bookmarks if (!QFile::exists(bookfile.path())) { bookfile = KUrl("~/.kde4/share/apps/konqueror/bookmarks.xml"); if (!QFile::exists(bookfile.path())) { QString bookmarksDefaultPath = KStandardDirs::locate("appdata" , "defaultbookmarks.xbel"); kWarning() << bookmarksDefaultPath; QFile bkms(bookmarksDefaultPath); QString bookmarksPath = KStandardDirs::locateLocal("appdata", "bookmarks.xml", true); bookmarksPath.replace("rekonq", "konqueror"); bkms.copy(bookmarksPath); bookfile = KUrl(bookmarksPath); } } m_manager = KBookmarkManager::managerForExternalFile(bookfile.path()); m_ac = new KActionCollection(this); connect(m_manager, SIGNAL(changed(const QString &, const QString &)), this, SLOT(slotBookmarksChanged(const QString &))); } void BookmarksProvider::slotBookmarksChanged(const QString & group) { KBookmarkGroup toolbarGroup = m_manager->toolbar(); kWarning() << "KBookmarkBar::slotBookmarksChanged( " << group << " )"; if (toolbarGroup.isNull()) return; m_bmToolbar->clear(); provideBmToolbar(m_bmToolbar); } void BookmarksProvider::provideBmToolbar(KToolBar* toolbar) { m_bmToolbar = toolbar; toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); toolbar->setContextMenuPolicy(Qt::CustomContextMenu); connect(toolbar, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &))); KBookmarkGroup toolbarGroup = m_manager->toolbar(); KBookmark bm = toolbarGroup.first(); while (!bm.isNull()) { if (bm.isGroup()) { // do nothing! } else { if (bm.isSeparator()) { toolbar->addSeparator(); } else { KAction *a = new KBookmarkAction(bm, m_owner, m_ac); toolbar->addAction(a); } } // go ahead! bm = toolbarGroup.next(bm); } } KMenu *BookmarksProvider::bookmarksMenu() { KMenu *menu = new KMenu(m_parent); m_bmMenu = new BookmarksMenu(m_manager, m_owner, menu, m_ac); return menu; } void BookmarksProvider::contextMenu(const QPoint & point) { KAction* action = dynamic_cast(m_bmToolbar->actionAt(point)); if (!action) return; KMenu *menu = m_bmMenu->viewContextMenu(action); menu->setAttribute(Qt::WA_DeleteOnClose); menu->popup(m_bmToolbar->mapToGlobal(point)); }