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::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; } } } } }
void BookmarksSidebarPage::slotContextMenuRequested(QListBoxItem* item, const QPoint& pos) { const int insertID = 1; const int editID = 2; const int deleteID = 3; const int addID = 4; QPopupMenu* popup = new QPopupMenu(); if (item == 0) { popup->insertItem(SmallIcon("filenew"), i18n("Add Bookmark..."), addID); } else { popup->insertItem(SmallIcon("filenew"), i18n("Insert Bookmark..."), insertID); popup->insertItem(SmallIcon("edit"), i18n("Edit..."), editID); popup->insertItem(SmallIcon("editdelete"), i18n("Delete"), deleteID); } KBookmarkManager* manager = DolphinSettings::instance().bookmarkManager(); KBookmarkGroup root = manager->root(); const int index = m_bookmarksList->index(m_bookmarksList->selectedItem()); const int result = popup->exec(pos); switch (result) { case insertID: { KBookmark newBookmark = EditBookmarkDialog::getBookmark(i18n("Insert Bookmark"), i18n("New bookmark"), KURL(), "bookmark"); if (!newBookmark.isNull()) { root.addBookmark(manager, newBookmark); if (index > 0) { KBookmark prevBookmark = DolphinSettings::instance().bookmark(index - 1); root.moveItem(newBookmark, prevBookmark); } else { // insert bookmark at first position (is a little bit tricky as KBookmarkGroup // only allows to move items after existing items) KBookmark firstBookmark = root.first(); root.moveItem(newBookmark, firstBookmark); root.moveItem(firstBookmark, newBookmark); } manager->emitChanged(root); } break; } case editID: { KBookmark oldBookmark = DolphinSettings::instance().bookmark(index); KBookmark newBookmark = EditBookmarkDialog::getBookmark(i18n("Edit Bookmark"), oldBookmark.text(), oldBookmark.url(), oldBookmark.icon()); if (!newBookmark.isNull()) { root.addBookmark(manager, newBookmark); root.moveItem(newBookmark, oldBookmark); root.deleteBookmark(oldBookmark); manager->emitChanged(root); } break; } case deleteID: { KBookmark bookmark = DolphinSettings::instance().bookmark(index); root.deleteBookmark(bookmark); manager->emitChanged(root); break; } case addID: { KBookmark bookmark = EditBookmarkDialog::getBookmark(i18n("Add Bookmark"), "New bookmark", KURL(), "bookmark"); if (!bookmark.isNull()) { root.addBookmark(manager, bookmark); manager->emitChanged(root); } } default: break; } delete popup; popup = 0; DolphinView* view = Dolphin::mainWin().activeView(); adjustSelection(view->url()); }