/* This file is part of the KDE project Copyright (C) 1998, 1999 Torben Weis Copyright (C) 2006 Daniel Teske This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "konqbookmarkmenu.h" #include #include #include #include #include #include #include #include #include #include "kbookmarkimporter.h" #include "kbookmarkimporter_opera.h" #include "kbookmarkimporter_ie.h" #include "kbookmarkmenu_p.h" KonqBookmarkContextMenu::KonqBookmarkContextMenu(const KBookmark & bm, KBookmarkManager * mgr, KonqBookmarkOwner * owner) : KBookmarkContextMenu(bm, mgr, owner) { } KonqBookmarkContextMenu::~KonqBookmarkContextMenu() { } void KonqBookmarkContextMenu::addActions() { KConfigGroup config = KSharedConfig::openConfig("kbookmarkrc", KConfig::NoGlobals)->group("Bookmarks"); bool filteredToolbar = config.readEntry( "FilteredToolbar", false ); if (bookmark().isGroup()) { addOpenFolderInTabs(); addBookmark(); if(filteredToolbar) { QString text = bookmark().showInToolbar() ? i18n("Hide in toolbar") : i18n("Show in toolbar"); addAction( SmallIcon(""), text, this, SLOT( toggleShowInToolbar())); } addFolderActions(); } else { if(owner()) { addAction( SmallIcon("window-new"), i18n( "Open in New Window" ), this, SLOT( openInNewWindow() ) ); addAction( SmallIcon("tab-new"), i18n( "Open in New Tab" ), this, SLOT( openInNewTab() ) ); } addBookmark(); if(filteredToolbar) { QString text = bookmark().showInToolbar() ? i18n("Hide in toolbar") : i18n("Show in toolbar"); addAction( SmallIcon(""), text, this, SLOT( toggleShowInToolbar())); } addBookmarkActions(); } } void KonqBookmarkContextMenu::toggleShowInToolbar() { bookmark().setShowInToolbar(!bookmark().showInToolbar()); manager()->emitChanged(bookmark().parentGroup()); } void KonqBookmarkContextMenu::openInNewTab() { owner()->openInNewTab(bookmark()); } void KonqBookmarkContextMenu::openInNewWindow() { owner()->openInNewWindow(bookmark()); } /******************************/ /******************************/ /******************************/ void KonqBookmarkMenu::fillDynamicBookmarks() { if ( isDirty() && KBookmarkManager::userBookmarksManager()->path() == manager()->path() ) { bool haveSep = false; const QStringList keys = KonqBookmarkMenu::dynamicBookmarksList(); for ( QStringList::const_iterator it = keys.begin(); it != keys.end(); ++it ) { DynMenuInfo info; info = showDynamicBookmarks((*it)); if ( !info.show || !QFile::exists( info.location ) ) continue; if (!haveSep) { parentMenu()->addSeparator(); haveSep = true; } KActionMenu * actionMenu; actionMenu = new KActionMenu( KIcon(info.type), info.name, this ); m_actionCollection->addAction( "kbookmarkmenu", actionMenu ); parentMenu()->addAction(actionMenu); m_actions.append( actionMenu ); KImportedBookmarkMenu *subMenu = new KImportedBookmarkMenu( manager(), owner(), actionMenu->menu(), info.type, info.location); m_lstSubMenus.append( subMenu ); } } } void KonqBookmarkMenu::refill() { if(isRoot()) addActions(); fillDynamicBookmarks(); fillBookmarks(); if(!isRoot()) addActions(); } QAction* KonqBookmarkMenu::actionForBookmark(const KBookmark &bm) { if ( bm.isGroup() ) { kDebug(7043) << "Creating Konq bookmark submenu named " << bm.text(); KBookmarkActionMenu * actionMenu = new KBookmarkActionMenu( bm, this ); m_actionCollection->addAction( "kbookmarkmenu", actionMenu ); m_actions.append( actionMenu ); KBookmarkMenu *subMenu = new KonqBookmarkMenu( manager(), owner(), actionMenu, bm.address() ); m_lstSubMenus.append( subMenu ); return actionMenu; } else if( bm.isSeparator() ) { return KBookmarkMenu::actionForBookmark(bm); } else { kDebug(7043) << "Creating Konq bookmark action named " << bm.text(); KBookmarkAction * action = new KBookmarkAction( bm, owner(), this ); m_actionCollection->addAction(action->objectName(), action); m_actions.append( action ); return action; } } KonqBookmarkMenu::DynMenuInfo KonqBookmarkMenu::showDynamicBookmarks( const QString &id ) { KConfig bookmarkrc("kbookmarkrc", KConfig::NoGlobals); KConfigGroup config(&bookmarkrc, "Bookmarks"); DynMenuInfo info; info.show = false; if (!config.hasKey("DynamicMenus")) { if (bookmarkrc.hasGroup("DynamicMenu-" + id)) { KConfigGroup dynGroup(&bookmarkrc, "DynamicMenu-" + id); info.show = dynGroup.readEntry("Show", false); info.location = dynGroup.readPathEntry("Location", QString()); info.type = dynGroup.readEntry("Type"); info.name = dynGroup.readEntry("Name"); } } return info; } QStringList KonqBookmarkMenu::dynamicBookmarksList() { KConfigGroup config = KSharedConfig::openConfig("kbookmarkrc", KConfig::NoGlobals)->group("Bookmarks"); QStringList mlist; if (config.hasKey("DynamicMenus")) mlist = config.readEntry("DynamicMenus", QStringList()); return mlist; } void KonqBookmarkMenu::setDynamicBookmarks(const QString &id, const DynMenuInfo &newMenu) { KSharedConfig::Ptr kbookmarkrc = KSharedConfig::openConfig("kbookmarkrc", KConfig::NoGlobals); KConfigGroup dynConfig = kbookmarkrc->group(QString("DynamicMenu-" + id)); // add group unconditionally dynConfig.writeEntry("Show", newMenu.show); dynConfig.writePathEntry("Location", newMenu.location); dynConfig.writeEntry("Type", newMenu.type); dynConfig.writeEntry("Name", newMenu.name); QStringList elist; KConfigGroup config = kbookmarkrc->group("Bookmarks"); if (config.hasKey("DynamicMenus")) { elist = config.readEntry("DynamicMenus", QStringList()); } // make sure list includes type if (!elist.contains(id)) { elist << id; config.writeEntry("DynamicMenus", elist); } config.sync(); } KonqBookmarkOwner::~KonqBookmarkOwner() { } KMenu * KonqBookmarkMenu::contextMenu(QAction * action) { KBookmarkActionInterface* act = dynamic_cast(action); if (!act) return 0; return new KonqBookmarkContextMenu(act->bookmark(), manager(), owner()); } #include "moc_konqbookmarkmenu.cpp"