void KonqSidebarBookmarkModule::showPopupMenu() { KonqSidebarBookmarkItem *bi = dynamic_cast<KonqSidebarBookmarkItem*>( tree()->selectedItem() ); if (!bi) return; bool tabSupported = tree()->tabSupport(); QPopupMenu *menu = new QPopupMenu; if (bi->bookmark().isGroup()) { if (tabSupported) { m_collection->action("folder_open_tabs")->plug(menu); menu->insertSeparator(); } m_collection->action("create_folder")->plug(menu); m_collection->action("delete_folder")->plug(menu); } else { m_collection->action("open_window")->plug(menu); if (tabSupported) m_collection->action("open_tab")->plug(menu); m_collection->action("copy_location")->plug(menu); menu->insertSeparator(); m_collection->action("create_folder")->plug(menu); m_collection->action("delete_bookmark")->plug(menu); } menu->insertSeparator(); m_collection->action("item_properties")->plug(menu); menu->exec( QCursor::pos() ); delete menu; }
void KonqSidebarBookmarkModule::slotOpenTab() { KonqSidebarBookmarkItem *bi = dynamic_cast<KonqSidebarBookmarkItem*>( tree()->selectedItem() ); KBookmark bookmark; if (bi) { bookmark = bi->bookmark(); } else if(tree()->selectedItem() == m_topLevelItem) bookmark = KonqBookmarkManager::self()->root(); else return; DCOPRef ref(kapp->dcopClient()->appId(), tree()->topLevelWidget()->name()); if (bookmark.isGroup()) { KBookmarkGroup group = bookmark.toGroup(); bookmark = group.first(); while (!bookmark.isNull()) { if (!bookmark.isGroup() && !bookmark.isSeparator()) ref.call( "newTab(QString)", bookmark.url().url() ); bookmark = group.next(bookmark); } } else { ref.call( "newTab(QString)", bookmark.url().url() ); } }
void KonqSidebarBookmarkModule::slotDelete() { KonqSidebarBookmarkItem *bi = dynamic_cast<KonqSidebarBookmarkItem*>( tree()->selectedItem() ); if (!bi) return; KBookmark bookmark = bi->bookmark(); bool folder = bookmark.isGroup(); if (KMessageBox::warningYesNo( tree(), folder ? i18n("Are you sure you wish to remove the bookmark folder\n\"%1\"?").arg(bookmark.text()) : i18n("Are you sure you wish to remove the bookmark\n\"%1\"?").arg(bookmark.text()), folder ? i18n("Bookmark Folder Deletion") : i18n("Bookmark Deletion"), KGuiItem( i18n("&Delete"), "editdelete"), KStdGuiItem::cancel()) != KMessageBox::Yes ) return; KBookmarkGroup parentBookmark = bookmark.parentGroup(); parentBookmark.deleteBookmark( bookmark ); KonqBookmarkManager::self()->emitChanged( parentBookmark ); }
void KonqSidebarBookmarkModule::slotOpenTab() { KonqSidebarBookmarkItem *bi = dynamic_cast<KonqSidebarBookmarkItem*>( tree()->selectedItem() ); KBookmark bookmark; if (bi) { bookmark = bi->bookmark(); } else if(tree()->selectedItem() == m_topLevelItem) bookmark = s_bookmarkManager->root(); else return; KParts::OpenUrlArguments args; args.setActionRequestedByUser(true); KParts::BrowserArguments browserArguments; browserArguments.setNewTab(true); if (bookmark.isGroup()) { KBookmarkGroup group = bookmark.toGroup(); bookmark = group.first(); while (!bookmark.isNull()) { if (!bookmark.isGroup() && !bookmark.isSeparator()) { emit tree()->createNewWindow(bookmark.url(), args, browserArguments); } bookmark = group.next(bookmark); } } else { emit tree()->createNewWindow(bookmark.url(), args, browserArguments); } }
void KonqSidebarBookmarkModule::slotOpenNewWindow() { KonqSidebarBookmarkItem *bi = dynamic_cast<KonqSidebarBookmarkItem*>( tree()->selectedItem() ); if (!bi) return; emit tree()->createNewWindow( bi->bookmark().url() ); }
void KonqSidebarBookmarkModule::slotOpenNewWindow() { KonqSidebarBookmarkItem *bi = dynamic_cast<KonqSidebarBookmarkItem*>( tree()->selectedItem() ); if (!bi) return; KParts::OpenUrlArguments args; args.setActionRequestedByUser(true); KParts::BrowserArguments browserArgs; browserArgs.setForcesNewWindow(true); emit tree()->createNewWindow(bi->bookmark().url(), args, browserArgs); }
void KonqSidebarBookmarkModule::slotCopyLocation() { KonqSidebarBookmarkItem *bi = dynamic_cast<KonqSidebarBookmarkItem*>( tree()->selectedItem() ); if (!bi) return; KBookmark bookmark = bi->bookmark(); if ( !bookmark.isGroup() ) { kapp->clipboard()->setData( KBookmarkDrag::newDrag(bookmark, 0), QClipboard::Selection ); kapp->clipboard()->setData( KBookmarkDrag::newDrag(bookmark, 0), QClipboard::Clipboard ); } }
void KonqSidebarBookmarkModule::slotDropped(KListView *, QDropEvent *e, QListViewItem *parent, QListViewItem *after) { if (!KBookmarkDrag::canDecode(e)) return; KBookmark afterBookmark; KonqSidebarBookmarkItem *afterItem = dynamic_cast<KonqSidebarBookmarkItem*>(after); if (afterItem) afterBookmark = afterItem->bookmark(); KBookmarkGroup parentGroup; // try to get the parent group... if (after) { parentGroup = afterBookmark.parentGroup(); } else if (parent) { if(KonqSidebarBookmarkItem *p = dynamic_cast<KonqSidebarBookmarkItem*>(parent)) { if (!p) return; KBookmark bm = p->bookmark(); if (bm.isGroup()) parentGroup = bm.toGroup(); else return; } else if(parent == m_topLevelItem) { parentGroup = KonqBookmarkManager::self()->root(); } } else { // it's most probably the root... parentGroup = KonqBookmarkManager::self()->root(); } QValueList<KBookmark> bookmarks = KBookmarkDrag::decode(e); // copy QValueList<KBookmark>::iterator it = bookmarks.begin(); for (;it != bookmarks.end(); ++it) { // insert new item. parentGroup.moveItem(*it, afterBookmark); } KonqBookmarkManager::self()->emitChanged( parentGroup ); }
void KonqSidebarBookmarkModule::slotOpenChange(QListViewItem* i) { if (m_ignoreOpenChange) return; KonqSidebarBookmarkItem *bi = dynamic_cast<KonqSidebarBookmarkItem*>( i ); if (!bi) return; KBookmark bookmark = bi->bookmark(); bool open = bi->isOpen(); if (!open) m_folderOpenState.remove(bookmark.address()); // no need to store closed folders... else m_folderOpenState[bookmark.address()] = open; }
void KonqSidebarBookmarkModule::slotDropped(K3ListView *, QDropEvent *e, Q3ListViewItem *parent, Q3ListViewItem *after) { if (!KBookmark::List::canDecode(e->mimeData())) return; KBookmark afterBookmark; KonqSidebarBookmarkItem *afterItem = dynamic_cast<KonqSidebarBookmarkItem*>(after); if (afterItem) afterBookmark = afterItem->bookmark(); KBookmarkGroup parentGroup; // try to get the parent group... if (after) { parentGroup = afterBookmark.parentGroup(); } else if (parent) { if(KonqSidebarBookmarkItem *p = dynamic_cast<KonqSidebarBookmarkItem*>(parent)) { if (!p) return; KBookmark bm = p->bookmark(); if (bm.isGroup()) parentGroup = bm.toGroup(); else return; } else if(parent == m_topLevelItem) { parentGroup = s_bookmarkManager->root(); } } else { // it's most probably the root... parentGroup = s_bookmarkManager->root(); } QDomDocument parentDocument; const KBookmark::List bookmarks = KBookmark::List::fromMimeData(e->mimeData(), parentDocument); // copy KBookmark::List::const_iterator it = bookmarks.constBegin(); for (;it != bookmarks.constEnd(); ++it) { // insert new item. parentGroup.moveBookmark(*it, afterBookmark); } s_bookmarkManager->emitChanged( parentGroup ); }
void KonqSidebarBookmarkModule::slotCreateFolder() { KonqSidebarBookmarkItem *bi = dynamic_cast<KonqSidebarBookmarkItem*>( tree()->selectedItem() ); KBookmarkGroup parentGroup; if (bi) { if (bi->bookmark().isGroup()) { parentGroup = bi->bookmark().toGroup(); } else { parentGroup = bi->bookmark().parentGroup(); } } else if(tree()->selectedItem() == m_topLevelItem) { parentGroup = s_bookmarkManager->root(); } else { return; } bool ok; const QString str = KInputDialog::getText(i18nc("@title:window", "Create New Bookmark Folder"), i18n("New folder:"), QString(), &ok, tree()); if (!ok) { return; } KBookmark bookmark = parentGroup.createNewFolder(str); if (bi && !(bi->bookmark().isGroup())) { parentGroup.moveBookmark(bookmark, bi->bookmark()); } s_bookmarkManager->emitChanged( parentGroup ); }
void KonqSidebarBookmarkModule::fillGroup( KonqSidebarTreeItem * parentItem, KBookmarkGroup group ) { int n = 0; for ( KBookmark bk = group.first() ; !bk.isNull() ; bk = group.next(bk), ++n ) { KonqSidebarBookmarkItem * item = new KonqSidebarBookmarkItem( parentItem, m_topLevelItem, bk, n ); if ( bk.isGroup() ) { KBookmarkGroup grp = bk.toGroup(); fillGroup( item, grp ); QString address(grp.address()); if (m_folderOpenState.contains(address)) item->setOpen(m_folderOpenState[address]); else item->setOpen(false); } else if ( bk.isSeparator() ) item->setVisible( false ); else item->setExpandable( false ); } }
void KonqSidebarBookmarkModule::slotBookmarksChanged( const QString & groupAddress ) { m_ignoreOpenChange = true; // update the right part of the tree KBookmarkGroup group = KonqBookmarkManager::self()->findByAddress( groupAddress ).toGroup(); KonqSidebarBookmarkItem * item = findByAddress( groupAddress ); Q_ASSERT(!group.isNull()); Q_ASSERT(item); if (!group.isNull() && item) { // Delete all children of item QListViewItem * child = item->firstChild(); while( child ) { QListViewItem * next = child->nextSibling(); delete child; child = next; } fillGroup( item, group ); } m_ignoreOpenChange = false; }
void KonqSidebarBookmarkModule::slotCreateFolder() { KonqSidebarBookmarkItem *bi = dynamic_cast<KonqSidebarBookmarkItem*>( tree()->selectedItem() ); KBookmarkGroup parentGroup; if (bi) { if (bi->bookmark().isGroup()) parentGroup = bi->bookmark().toGroup(); else parentGroup = bi->bookmark().parentGroup(); } else if(tree()->selectedItem() == m_topLevelItem) { parentGroup = KonqBookmarkManager::self()->root(); } else return; KBookmark bookmark = parentGroup.createNewFolder(KonqBookmarkManager::self()); if(bi && !(bi->bookmark().isGroup())) parentGroup.moveItem(bookmark, bi->bookmark()); KonqBookmarkManager::self()->emitChanged( parentGroup ); }
void KonqSidebarBookmarkModule::slotMoved(QListViewItem *i, QListViewItem*, QListViewItem *after) { KonqSidebarBookmarkItem *item = dynamic_cast<KonqSidebarBookmarkItem*>( i ); if (!item) return; KBookmark bookmark = item->bookmark(); KBookmark afterBookmark; KonqSidebarBookmarkItem *afterItem = dynamic_cast<KonqSidebarBookmarkItem*>(after); if (afterItem) afterBookmark = afterItem->bookmark(); KBookmarkGroup oldParentGroup = bookmark.parentGroup(); KBookmarkGroup parentGroup; // try to get the parent group (assume that the QListViewItem has been reparented by KListView)... // if anything goes wrong, use the root. if (item->parent()) { bool error = false; KonqSidebarBookmarkItem *parent = dynamic_cast<KonqSidebarBookmarkItem*>( (item->parent()) ); if (!parent) { error = true; } else { if (parent->bookmark().isGroup()) parentGroup = parent->bookmark().toGroup(); else error = true; } if (error) parentGroup = KonqBookmarkManager::self()->root(); } else { // No parent! This means the user dropped it before the top level item // And KListView has moved the item there, we need to correct it tree()->moveItem(item, m_topLevelItem, 0L); parentGroup = KonqBookmarkManager::self()->root(); } // remove the old reference. oldParentGroup.deleteBookmark( bookmark ); // insert the new item. parentGroup.moveItem(bookmark, afterBookmark); // inform others about the changed groups. quite expensive, so do // our best to update them in only one emitChanged call. QString oldAddress = oldParentGroup.address(); QString newAddress = parentGroup.address(); if (oldAddress == newAddress) { KonqBookmarkManager::self()->emitChanged( parentGroup ); } else { int i = 0; while (true) { QChar c1 = oldAddress[i]; QChar c2 = newAddress[i]; if (c1 == QChar::null) { // oldParentGroup is probably parent of parentGroup. KonqBookmarkManager::self()->emitChanged( oldParentGroup ); break; } else if (c2 == QChar::null) { // parentGroup is probably parent of oldParentGroup. KonqBookmarkManager::self()->emitChanged( parentGroup ); break; } else { if (c1 == c2) { // step to the next character. ++i; } else { // ugh... need to update both groups separately. KonqBookmarkManager::self()->emitChanged( oldParentGroup ); KonqBookmarkManager::self()->emitChanged( parentGroup ); break; } } } } }