/* ============================================================ * * This file is a part of the rekonq project * * Copyright (C) 2007-2008 Trolltech ASA. All rights reserved * 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) : m_parent(parent) , m_owner(new OwnBookMarks(parent)) , m_bmMenu(0) , m_bmToolbar(0) { 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 )); }