kill two singletons, and add unittest for creating folder, 2 items, and moving the items with dnd.

svn path=/trunk/KDE/kdebase/apps/; revision=1112106
This commit is contained in:
David Faure 2010-04-07 11:34:26 +00:00
parent 8a5c3c0788
commit daedcbb6ac
15 changed files with 331 additions and 282 deletions

View file

@ -23,6 +23,7 @@
#include "globalbookmarkmanager.h"
#include "toplevel.h" // for KEBApp
#include "bookmarkmodel.h"
#include "commands.h"
#include "commandhistory.h"
#include "importers.h"
@ -60,14 +61,12 @@
#include <kbookmarkimporter_ns.h>
#include <kbookmarkexporter.h>
ActionsImpl* ActionsImpl::s_self = 0;
// decoupled from resetActions in toplevel.cpp
// as resetActions simply uses the action groups
// specified in the ui.rc file
void KEBApp::createActions() {
ActionsImpl *actn = ActionsImpl::self();
m_actionsImpl = new ActionsImpl(this, GlobalBookmarkManager::self()->model());
// save and quit should probably not be in the toplevel???
(void) KStandardAction::quit(
@ -78,175 +77,175 @@ void KEBApp::createActions() {
if (m_browser) {
(void) KStandardAction::open(
actn, SLOT( slotLoad() ), actionCollection());
m_actionsImpl, SLOT( slotLoad() ), actionCollection());
(void) KStandardAction::saveAs(
actn, SLOT( slotSaveAs() ), actionCollection());
m_actionsImpl, SLOT( slotSaveAs() ), actionCollection());
}
(void) KStandardAction::cut(actn, SLOT( slotCut() ), actionCollection());
(void) KStandardAction::copy(actn, SLOT( slotCopy() ), actionCollection());
(void) KStandardAction::paste(actn, SLOT( slotPaste() ), actionCollection());
(void) KStandardAction::cut(m_actionsImpl, SLOT( slotCut() ), actionCollection());
(void) KStandardAction::copy(m_actionsImpl, SLOT( slotCopy() ), actionCollection());
(void) KStandardAction::paste(m_actionsImpl, SLOT( slotPaste() ), actionCollection());
// actions
KAction* actnDelete = actionCollection()->addAction("delete");
actnDelete->setIcon(KIcon("edit-delete"));
actnDelete->setText(i18n("&Delete"));
actnDelete->setShortcut(Qt::Key_Delete);
connect(actnDelete, SIGNAL( triggered() ), actn, SLOT( slotDelete() ));
KAction* m_actionsImplDelete = actionCollection()->addAction("delete");
m_actionsImplDelete->setIcon(KIcon("edit-delete"));
m_actionsImplDelete->setText(i18n("&Delete"));
m_actionsImplDelete->setShortcut(Qt::Key_Delete);
connect(m_actionsImplDelete, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotDelete() ));
KAction* actnRename = actionCollection()->addAction("rename");
actnRename->setIcon(KIcon("edit-rename"));
actnRename->setText(i18n("Rename"));
actnRename->setShortcut(Qt::Key_F2);
connect(actnRename, SIGNAL( triggered() ), actn, SLOT( slotRename() ));
KAction* m_actionsImplRename = actionCollection()->addAction("rename");
m_actionsImplRename->setIcon(KIcon("edit-rename"));
m_actionsImplRename->setText(i18n("Rename"));
m_actionsImplRename->setShortcut(Qt::Key_F2);
connect(m_actionsImplRename, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotRename() ));
KAction* actnChangeURL = actionCollection()->addAction("changeurl");
actnChangeURL->setIcon(KIcon("edit-rename"));
actnChangeURL->setText(i18n("C&hange Location"));
actnChangeURL->setShortcut(Qt::Key_F3);
connect(actnChangeURL, SIGNAL( triggered() ), actn, SLOT( slotChangeURL() ));
KAction* m_actionsImplChangeURL = actionCollection()->addAction("changeurl");
m_actionsImplChangeURL->setIcon(KIcon("edit-rename"));
m_actionsImplChangeURL->setText(i18n("C&hange Location"));
m_actionsImplChangeURL->setShortcut(Qt::Key_F3);
connect(m_actionsImplChangeURL, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotChangeURL() ));
KAction* actnChangeComment = actionCollection()->addAction("changecomment");
actnChangeComment->setIcon(KIcon("edit-rename"));
actnChangeComment->setText(i18n("C&hange Comment"));
actnChangeComment->setShortcut(Qt::Key_F4);
connect(actnChangeComment, SIGNAL( triggered() ), actn, SLOT( slotChangeComment() ));
KAction* m_actionsImplChangeComment = actionCollection()->addAction("changecomment");
m_actionsImplChangeComment->setIcon(KIcon("edit-rename"));
m_actionsImplChangeComment->setText(i18n("C&hange Comment"));
m_actionsImplChangeComment->setShortcut(Qt::Key_F4);
connect(m_actionsImplChangeComment, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotChangeComment() ));
KAction* actnChangeIcon = actionCollection()->addAction("changeicon");
actnChangeIcon->setIcon(KIcon("preferences-desktop-icons"));
actnChangeIcon->setText(i18n("Chan&ge Icon..."));
connect(actnChangeIcon, SIGNAL( triggered() ), actn, SLOT( slotChangeIcon() ));
KAction* m_actionsImplChangeIcon = actionCollection()->addAction("changeicon");
m_actionsImplChangeIcon->setIcon(KIcon("preferences-desktop-icons"));
m_actionsImplChangeIcon->setText(i18n("Chan&ge Icon..."));
connect(m_actionsImplChangeIcon, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotChangeIcon() ));
KAction* actnUpdateFavIcon = actionCollection()->addAction("updatefavicon");
actnUpdateFavIcon->setText(i18n("Update Favicon"));
connect(actnUpdateFavIcon, SIGNAL( triggered() ), actn, SLOT( slotUpdateFavIcon() ));
KAction* m_actionsImplUpdateFavIcon = actionCollection()->addAction("updatefavicon");
m_actionsImplUpdateFavIcon->setText(i18n("Update Favicon"));
connect(m_actionsImplUpdateFavIcon, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotUpdateFavIcon() ));
KAction* actnRecursiveSort = actionCollection()->addAction("recursivesort");
actnRecursiveSort->setText(i18n("Recursive Sort"));
connect(actnRecursiveSort, SIGNAL( triggered() ), actn, SLOT( slotRecursiveSort() ));
KAction* m_actionsImplRecursiveSort = actionCollection()->addAction("recursivesort");
m_actionsImplRecursiveSort->setText(i18n("Recursive Sort"));
connect(m_actionsImplRecursiveSort, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotRecursiveSort() ));
KAction* actnNewFolder = actionCollection()->addAction("newfolder");
actnNewFolder->setIcon(KIcon("folder-new"));
actnNewFolder->setText(i18n("&New Folder..."));
actnNewFolder->setShortcut(Qt::CTRL+Qt::Key_N);
connect(actnNewFolder, SIGNAL( triggered() ), actn, SLOT( slotNewFolder() ));
KAction* m_actionsImplNewFolder = actionCollection()->addAction("newfolder");
m_actionsImplNewFolder->setIcon(KIcon("folder-new"));
m_actionsImplNewFolder->setText(i18n("&New Folder..."));
m_actionsImplNewFolder->setShortcut(Qt::CTRL+Qt::Key_N);
connect(m_actionsImplNewFolder, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotNewFolder() ));
KAction* actnNewBookmark = actionCollection()->addAction("newbookmark");
actnNewBookmark->setIcon(KIcon("bookmark-new"));
actnNewBookmark->setText(i18n("&New Bookmark"));
connect(actnNewBookmark, SIGNAL( triggered() ), actn, SLOT( slotNewBookmark() ));
KAction* m_actionsImplNewBookmark = actionCollection()->addAction("newbookmark");
m_actionsImplNewBookmark->setIcon(KIcon("bookmark-new"));
m_actionsImplNewBookmark->setText(i18n("&New Bookmark"));
connect(m_actionsImplNewBookmark, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotNewBookmark() ));
KAction* actnInsertSeparator = actionCollection()->addAction("insertseparator");
actnInsertSeparator->setText(i18n("&Insert Separator"));
actnInsertSeparator->setShortcut(Qt::CTRL+Qt::Key_I);
connect(actnInsertSeparator, SIGNAL( triggered() ), actn, SLOT( slotInsertSeparator() ));
KAction* m_actionsImplInsertSeparator = actionCollection()->addAction("insertseparator");
m_actionsImplInsertSeparator->setText(i18n("&Insert Separator"));
m_actionsImplInsertSeparator->setShortcut(Qt::CTRL+Qt::Key_I);
connect(m_actionsImplInsertSeparator, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotInsertSeparator() ));
KAction* actnSort = actionCollection()->addAction("sort");
actnSort->setText(i18n("&Sort Alphabetically"));
connect(actnSort, SIGNAL( triggered() ), actn, SLOT( slotSort() ));
KAction* m_actionsImplSort = actionCollection()->addAction("sort");
m_actionsImplSort->setText(i18n("&Sort Alphabetically"));
connect(m_actionsImplSort, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotSort() ));
KAction* actnSetAsToolbar = actionCollection()->addAction("setastoolbar");
actnSetAsToolbar->setIcon(KIcon("bookmark-toolbar"));
actnSetAsToolbar->setText(i18n("Set as T&oolbar Folder"));
connect(actnSetAsToolbar, SIGNAL( triggered() ), actn, SLOT( slotSetAsToolbar() ));
KAction* m_actionsImplSetAsToolbar = actionCollection()->addAction("setastoolbar");
m_actionsImplSetAsToolbar->setIcon(KIcon("bookmark-toolbar"));
m_actionsImplSetAsToolbar->setText(i18n("Set as T&oolbar Folder"));
connect(m_actionsImplSetAsToolbar, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotSetAsToolbar() ));
KAction* actnExpandAll = actionCollection()->addAction("expandall");
actnExpandAll->setText(i18n("&Expand All Folders"));
connect(actnExpandAll, SIGNAL( triggered() ), actn, SLOT( slotExpandAll() ));
KAction* m_actionsImplExpandAll = actionCollection()->addAction("expandall");
m_actionsImplExpandAll->setText(i18n("&Expand All Folders"));
connect(m_actionsImplExpandAll, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExpandAll() ));
KAction* actnCollapseAll = actionCollection()->addAction("collapseall");
actnCollapseAll->setText(i18n("Collapse &All Folders"));
connect(actnCollapseAll, SIGNAL( triggered() ), actn, SLOT( slotCollapseAll() ));
KAction* m_actionsImplCollapseAll = actionCollection()->addAction("collapseall");
m_actionsImplCollapseAll->setText(i18n("Collapse &All Folders"));
connect(m_actionsImplCollapseAll, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotCollapseAll() ));
KAction* actnOpenLink = actionCollection()->addAction("openlink");
actnOpenLink->setIcon(KIcon("document-open"));
actnOpenLink->setText(i18n("&Open in Konqueror"));
connect(actnOpenLink, SIGNAL( triggered() ), actn, SLOT( slotOpenLink() ));
KAction* m_actionsImplOpenLink = actionCollection()->addAction("openlink");
m_actionsImplOpenLink->setIcon(KIcon("document-open"));
m_actionsImplOpenLink->setText(i18n("&Open in Konqueror"));
connect(m_actionsImplOpenLink, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotOpenLink() ));
KAction* actnTestSelection = actionCollection()->addAction("testlink");
actnTestSelection->setIcon(KIcon("bookmarks"));
actnTestSelection->setText(i18n("Check &Status"));
connect(actnTestSelection, SIGNAL( triggered() ), actn, SLOT( slotTestSelection() ));
KAction* m_actionsImplTestSelection = actionCollection()->addAction("testlink");
m_actionsImplTestSelection->setIcon(KIcon("bookmarks"));
m_actionsImplTestSelection->setText(i18n("Check &Status"));
connect(m_actionsImplTestSelection, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotTestSelection() ));
KAction* actnTestAll = actionCollection()->addAction("testall");
actnTestAll->setText(i18n("Check Status: &All"));
connect(actnTestAll, SIGNAL( triggered() ), actn, SLOT( slotTestAll() ));
KAction* m_actionsImplTestAll = actionCollection()->addAction("testall");
m_actionsImplTestAll->setText(i18n("Check Status: &All"));
connect(m_actionsImplTestAll, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotTestAll() ));
KAction* actnUpdateAllFavIcons = actionCollection()->addAction("updateallfavicons");
actnUpdateAllFavIcons->setText(i18n("Update All &Favicons"));
connect(actnUpdateAllFavIcons, SIGNAL( triggered() ), actn, SLOT( slotUpdateAllFavIcons() ));
KAction* m_actionsImplUpdateAllFavIcons = actionCollection()->addAction("updateallfavicons");
m_actionsImplUpdateAllFavIcons->setText(i18n("Update All &Favicons"));
connect(m_actionsImplUpdateAllFavIcons, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotUpdateAllFavIcons() ));
KAction* actnCancelAllTests = actionCollection()->addAction("canceltests");
actnCancelAllTests->setText(i18n("Cancel &Checks"));
connect(actnCancelAllTests, SIGNAL( triggered() ), actn, SLOT( slotCancelAllTests() ));
KAction* m_actionsImplCancelAllTests = actionCollection()->addAction("canceltests");
m_actionsImplCancelAllTests->setText(i18n("Cancel &Checks"));
connect(m_actionsImplCancelAllTests, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotCancelAllTests() ));
KAction* actnCancelFavIconUpdates = actionCollection()->addAction("cancelfaviconupdates");
actnCancelFavIconUpdates->setText(i18n("Cancel &Favicon Updates"));
connect(actnCancelFavIconUpdates, SIGNAL( triggered() ), actn, SLOT( slotCancelFavIconUpdates() ));
KAction* m_actionsImplCancelFavIconUpdates = actionCollection()->addAction("cancelfaviconupdates");
m_actionsImplCancelFavIconUpdates->setText(i18n("Cancel &Favicon Updates"));
connect(m_actionsImplCancelFavIconUpdates, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotCancelFavIconUpdates() ));
KAction* actnImportNS = actionCollection()->addAction("importNS");
actnImportNS->setObjectName("NS");
actnImportNS->setIcon(KIcon("netscape"));
actnImportNS->setText(i18n("Import &Netscape Bookmarks..."));
connect(actnImportNS, SIGNAL( triggered() ), actn, SLOT( slotImport() ));
KAction* m_actionsImplImportNS = actionCollection()->addAction("importNS");
m_actionsImplImportNS->setObjectName("NS");
m_actionsImplImportNS->setIcon(KIcon("netscape"));
m_actionsImplImportNS->setText(i18n("Import &Netscape Bookmarks..."));
connect(m_actionsImplImportNS, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
KAction* actnImportOpera = actionCollection()->addAction("importOpera");
actnImportOpera->setObjectName("Opera");
actnImportOpera->setIcon(KIcon("opera"));
actnImportOpera->setText(i18n("Import &Opera Bookmarks..."));
connect(actnImportOpera, SIGNAL( triggered() ), actn, SLOT( slotImport() ));
KAction* m_actionsImplImportOpera = actionCollection()->addAction("importOpera");
m_actionsImplImportOpera->setObjectName("Opera");
m_actionsImplImportOpera->setIcon(KIcon("opera"));
m_actionsImplImportOpera->setText(i18n("Import &Opera Bookmarks..."));
connect(m_actionsImplImportOpera, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
KAction* actnImportCrashes = actionCollection()->addAction("importCrashes");
actnImportCrashes->setObjectName("Crashes");
actnImportCrashes->setText(i18n("Import All &Crash Sessions as Bookmarks..."));
connect(actnImportCrashes, SIGNAL( triggered() ), actn, SLOT( slotImport() ));
KAction* m_actionsImplImportCrashes = actionCollection()->addAction("importCrashes");
m_actionsImplImportCrashes->setObjectName("Crashes");
m_actionsImplImportCrashes->setText(i18n("Import All &Crash Sessions as Bookmarks..."));
connect(m_actionsImplImportCrashes, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
KAction* actnImportGaleon = actionCollection()->addAction("importGaleon");
actnImportGaleon->setObjectName("Galeon");
actnImportGaleon->setText(i18n("Import &Galeon Bookmarks..."));
connect(actnImportGaleon, SIGNAL( triggered() ), actn, SLOT( slotImport() ));
KAction* m_actionsImplImportGaleon = actionCollection()->addAction("importGaleon");
m_actionsImplImportGaleon->setObjectName("Galeon");
m_actionsImplImportGaleon->setText(i18n("Import &Galeon Bookmarks..."));
connect(m_actionsImplImportGaleon, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
KAction* actnImportKDE2 = actionCollection()->addAction("importKDE2");
actnImportKDE2->setObjectName("KDE2");
actnImportKDE2->setIcon(KIcon("kde"));
actnImportKDE2->setText(i18n("Import &KDE 2 or KDE 3 Bookmarks..."));
KAction* m_actionsImplImportKDE2 = actionCollection()->addAction("importKDE2");
m_actionsImplImportKDE2->setObjectName("KDE2");
m_actionsImplImportKDE2->setIcon(KIcon("kde"));
m_actionsImplImportKDE2->setText(i18n("Import &KDE 2 or KDE 3 Bookmarks..."));
connect(actnImportKDE2, SIGNAL( triggered() ), actn, SLOT( slotImport() ));
connect(m_actionsImplImportKDE2, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
KAction* actnImportIE = actionCollection()->addAction("importIE");
actnImportIE->setObjectName("IE");
actnImportIE->setText(i18n("Import &Internet Explorer Bookmarks..."));
connect(actnImportIE, SIGNAL( triggered() ), actn, SLOT( slotImport() ));
KAction* m_actionsImplImportIE = actionCollection()->addAction("importIE");
m_actionsImplImportIE->setObjectName("IE");
m_actionsImplImportIE->setText(i18n("Import &Internet Explorer Bookmarks..."));
connect(m_actionsImplImportIE, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
KAction* actnImportMoz = actionCollection()->addAction("importMoz");
actnImportMoz->setObjectName("Moz");
actnImportMoz->setIcon(KIcon("mozilla"));
actnImportMoz->setText(i18n("Import &Mozilla Bookmarks..."));
connect(actnImportMoz, SIGNAL( triggered() ), actn, SLOT( slotImport() ));
KAction* m_actionsImplImportMoz = actionCollection()->addAction("importMoz");
m_actionsImplImportMoz->setObjectName("Moz");
m_actionsImplImportMoz->setIcon(KIcon("mozilla"));
m_actionsImplImportMoz->setText(i18n("Import &Mozilla Bookmarks..."));
connect(m_actionsImplImportMoz, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
KAction* actnExportNS = actionCollection()->addAction("exportNS");
actnExportNS->setIcon(KIcon("netscape"));
actnExportNS->setText(i18n("Export &Netscape Bookmarks"));
connect(actnExportNS, SIGNAL( triggered() ), actn, SLOT( slotExportNS() ));
KAction* m_actionsImplExportNS = actionCollection()->addAction("exportNS");
m_actionsImplExportNS->setIcon(KIcon("netscape"));
m_actionsImplExportNS->setText(i18n("Export &Netscape Bookmarks"));
connect(m_actionsImplExportNS, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExportNS() ));
KAction* actnExportOpera = actionCollection()->addAction("exportOpera");
actnExportOpera->setIcon(KIcon("opera"));
actnExportOpera->setText(i18n("Export &Opera Bookmarks..."));
connect(actnExportOpera, SIGNAL( triggered() ), actn, SLOT( slotExportOpera() ));
KAction* m_actionsImplExportOpera = actionCollection()->addAction("exportOpera");
m_actionsImplExportOpera->setIcon(KIcon("opera"));
m_actionsImplExportOpera->setText(i18n("Export &Opera Bookmarks..."));
connect(m_actionsImplExportOpera, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExportOpera() ));
KAction* actnExportHTML = actionCollection()->addAction("exportHTML");
actnExportHTML->setIcon(KIcon("text-html"));
actnExportHTML->setText(i18n("Export &HTML Bookmarks..."));
connect(actnExportHTML, SIGNAL( triggered() ), actn, SLOT( slotExportHTML() ));
KAction* m_actionsImplExportHTML = actionCollection()->addAction("exportHTML");
m_actionsImplExportHTML->setIcon(KIcon("text-html"));
m_actionsImplExportHTML->setText(i18n("Export &HTML Bookmarks..."));
connect(m_actionsImplExportHTML, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExportHTML() ));
KAction* actnExportIE = actionCollection()->addAction("exportIE");
actnExportIE->setText(i18n("Export &Internet Explorer Bookmarks..."));
connect(actnExportIE, SIGNAL( triggered() ), actn, SLOT( slotExportIE() ));
KAction* m_actionsImplExportIE = actionCollection()->addAction("exportIE");
m_actionsImplExportIE->setText(i18n("Export &Internet Explorer Bookmarks..."));
connect(m_actionsImplExportIE, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExportIE() ));
KAction* actnExportMoz = actionCollection()->addAction("exportMoz");
actnExportMoz->setIcon(KIcon("mozilla"));
actnExportMoz->setText(i18n("Export &Mozilla Bookmarks..."));
connect(actnExportMoz, SIGNAL( triggered() ), actn, SLOT( slotExportMoz() ));
KAction* m_actionsImplExportMoz = actionCollection()->addAction("exportMoz");
m_actionsImplExportMoz->setIcon(KIcon("mozilla"));
m_actionsImplExportMoz->setText(i18n("Export &Mozilla Bookmarks..."));
connect(m_actionsImplExportMoz, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExportMoz() ));
}
void ActionsImpl::slotLoad()
@ -328,7 +327,7 @@ void ActionsImpl::slotCut() {
KEBApp::self()->bkInfo()->commitChanges();
slotCopy();
DeleteManyCommand *mcmd = new DeleteManyCommand( i18n("Cut Items"), KEBApp::self()->selectedBookmarks() );
CommandHistory::self()->addCommand(mcmd);
commandHistory()->addCommand(mcmd);
}
@ -353,7 +352,7 @@ void ActionsImpl::slotPaste() {
addr = bk.address();
KEBMacroCommand *mcmd = CmdGen::insertMimeSource( i18n("Paste"), QApplication::clipboard()->mimeData(), addr);
CommandHistory::self()->addCommand(mcmd);
commandHistory()->addCommand(mcmd);
}
/* -------------------------------------- */
@ -370,7 +369,7 @@ void ActionsImpl::slotNewFolder()
CreateCommand *cmd = new CreateCommand(
KEBApp::self()->insertAddress(),
str, "bookmark_folder", /*open*/ true);
CommandHistory::self()->addCommand(cmd);
commandHistory()->addCommand(cmd);
}
void ActionsImpl::slotNewBookmark()
@ -380,14 +379,14 @@ void ActionsImpl::slotNewBookmark()
CreateCommand * cmd = new CreateCommand(
KEBApp::self()->insertAddress(),
QString(), "www", KUrl("http://"));
CommandHistory::self()->addCommand(cmd);
commandHistory()->addCommand(cmd);
}
void ActionsImpl::slotInsertSeparator()
{
KEBApp::self()->bkInfo()->commitChanges();
CreateCommand * cmd = new CreateCommand(KEBApp::self()->insertAddress());
CommandHistory::self()->addCommand(cmd);
commandHistory()->addCommand(cmd);
}
void ActionsImpl::slotImport() {
@ -398,7 +397,7 @@ void ActionsImpl::slotImport() {
= ImportCommand::performImport(sender()->objectName(), KEBApp::self());
if (!import)
return;
CommandHistory::self()->addCommand(import);
commandHistory()->addCommand(import);
//FIXME select import->groupAddress
}
@ -496,7 +495,7 @@ void ActionsImpl::slotRecursiveSort() {
for (QList<KBookmark>::ConstIterator it = bookmarks.constBegin(); it != bookmarks.constEnd(); ++it) {
new SortCommand("", (*it).address(), mcmd);
}
CommandHistory::self()->addCommand(mcmd);
commandHistory()->addCommand(mcmd);
}
void ActionsImpl::slotSort() {
@ -504,7 +503,7 @@ void ActionsImpl::slotSort() {
KBookmark bk = KEBApp::self()->firstSelected();
Q_ASSERT(bk.isGroup());
SortCommand *cmd = new SortCommand(i18n("Sort Alphabetically"), bk.address());
CommandHistory::self()->addCommand(cmd);
commandHistory()->addCommand(cmd);
}
/* -------------------------------------- */
@ -512,7 +511,7 @@ void ActionsImpl::slotSort() {
void ActionsImpl::slotDelete() {
KEBApp::self()->bkInfo()->commitChanges();
DeleteManyCommand *mcmd = new DeleteManyCommand(i18n("Delete Items"), KEBApp::self()->selectedBookmarks());
CommandHistory::self()->addCommand(mcmd);
commandHistory()->addCommand(mcmd);
}
void ActionsImpl::slotOpenLink()
@ -550,7 +549,7 @@ void ActionsImpl::slotSetAsToolbar() {
KBookmark bk = KEBApp::self()->firstSelected();
Q_ASSERT(bk.isGroup());
KEBMacroCommand *mcmd = CmdGen::setAsToolbar(bk);
CommandHistory::self()->addCommand(mcmd);
commandHistory()->addCommand(mcmd);
}
void ActionsImpl::slotChangeIcon() {
@ -561,7 +560,7 @@ void ActionsImpl::slotChangeIcon() {
return;
EditCommand *cmd = new EditCommand(bk.address(), -1, newIcon);
CommandHistory::self()->addCommand(cmd);
commandHistory()->addCommand(cmd);
}
void ActionsImpl::slotExpandAll()
@ -574,4 +573,9 @@ void ActionsImpl::slotCollapseAll()
KEBApp::self()->collapseAll();
}
CommandHistory* ActionsImpl::commandHistory()
{
return m_model->commandHistory();
}
#include "actionsimpl.moc"

View file

@ -22,12 +22,16 @@
#define __actionsimpl_h
#include <QtCore/QObject>
class CommandHistory;
class KBookmarkModel;
class ActionsImpl : public QObject
{
Q_OBJECT
public:
ActionsImpl(QObject* parent, KBookmarkModel* model) : QObject(parent), m_model(model) { }
~ActionsImpl();
bool save();
public Q_SLOTS:
@ -62,15 +66,9 @@ public Q_SLOTS:
void slotExportIE();
void slotExportNS();
void slotExportMoz();
static ActionsImpl* self() { if (!s_self) { s_self = new ActionsImpl(); }; return s_self; }
public:
~ActionsImpl();
private:
ActionsImpl() { }
static ActionsImpl *s_self;
CommandHistory* commandHistory();
KBookmarkModel* m_model;
};
#endif

View file

@ -152,7 +152,7 @@ void BookmarkInfoWidget::slotTextChangedTitle(const QString &str)
else
{
titlecmd = new EditCommand(m_bk.address(), 0, str);
CommandHistory::self()->addCommand(titlecmd);
m_model->commandHistory()->addCommand(titlecmd);
}
}
@ -179,7 +179,7 @@ void BookmarkInfoWidget::slotTextChangedURL(const QString &str) {
else
{
urlcmd = new EditCommand(m_bk.address(), 1, str);
CommandHistory::self()->addCommand(urlcmd);
m_model->commandHistory()->addCommand(urlcmd);
}
}
@ -206,7 +206,7 @@ void BookmarkInfoWidget::slotTextChangedComment(const QString &str) {
else
{
commentcmd = new EditCommand(m_bk.address(), 2, str);
CommandHistory::self()->addCommand(commentcmd);
m_model->commandHistory()->addCommand(commentcmd);
}
}
@ -222,8 +222,8 @@ void BookmarkInfoWidget::slotUpdate()
showBookmark( KBookmark() );
}
BookmarkInfoWidget::BookmarkInfoWidget(BookmarkListView * lv, QWidget *parent)
: QWidget(parent), mBookmarkListView(lv) {
BookmarkInfoWidget::BookmarkInfoWidget(BookmarkListView * lv, KBookmarkModel* model, QWidget *parent)
: QWidget(parent), m_model(model), mBookmarkListView(lv) {
connect(mBookmarkListView->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
SLOT( slotUpdate()));
@ -233,8 +233,7 @@ BookmarkInfoWidget::BookmarkInfoWidget(BookmarkListView * lv, QWidget *parent)
timer = new QTimer(this);
timer->setSingleShot(true);
connect(timer, SIGNAL( timeout() ), SLOT( commitChanges()));
connect(timer, SIGNAL(timeout()), SLOT(commitChanges()));
titlecmd = 0;
urlcmd = 0;

View file

@ -23,6 +23,7 @@
#include <kbookmark.h>
#include <QtGui/QWidget>
class KBookmarkModel;
class BookmarkListView;
class EditCommand;
@ -33,8 +34,8 @@ class QTimer;
class BookmarkInfoWidget : public QWidget {
Q_OBJECT
public:
explicit BookmarkInfoWidget(BookmarkListView * lv, QWidget * = 0);
explicit BookmarkInfoWidget(BookmarkListView * lv, KBookmarkModel* model, QWidget * = 0);
KBookmark bookmark() { return m_bk; }
void updateStatus(); //FIXME where was this called?
@ -59,6 +60,7 @@ private:
KLineEdit *m_visitdate_le, *m_credate_le,
*m_visitcount_le;
KBookmark m_bk;
KBookmarkModel* m_model;
BookmarkListView * mBookmarkListView;
};

View file

@ -36,8 +36,8 @@
class KBookmarkModel::Private
{
public:
Private(const KBookmark& root, KBookmarkManager* manager)
: mRoot(root), mManager(manager), mInsertionData(0)
Private(const KBookmark& root, CommandHistory* commandHistory, KBookmarkManager* manager)
: mRoot(root), mCommandHistory(commandHistory), mManager(manager), mInsertionData(0)
{
mRootItem = new TreeItem(root, 0);
}
@ -48,6 +48,7 @@ public:
}
TreeItem * mRootItem;
KBookmark mRoot;
CommandHistory* mCommandHistory;
KBookmarkManager* mManager;
class InsertionData {
@ -68,8 +69,8 @@ public:
InsertionData* mInsertionData;
};
KBookmarkModel::KBookmarkModel(const KBookmark& root, KBookmarkManager* manager, QObject* parent)
: QAbstractItemModel(parent), d(new Private(root, manager))
KBookmarkModel::KBookmarkModel(const KBookmark& root, CommandHistory* commandHistory, KBookmarkManager* manager, QObject* parent)
: QAbstractItemModel(parent), d(new Private(root, commandHistory, manager))
{
}
@ -96,8 +97,8 @@ QVariant KBookmarkModel::data(const QModelIndex &index, int role) const
//Text
if (index.isValid() && (role == Qt::DisplayRole || role == Qt::EditRole)) {
const KBookmark bk = bookmarkForIndex(index);
if(bk.address().isEmpty()) {
if(index.column() == NameColumnId)
if (bk.address().isEmpty()) {
if (index.column() == NameColumnId)
return QVariant(i18nc("name of the container of all browser bookmarks", "Bookmarks"));
else
return QVariant();
@ -119,15 +120,15 @@ QVariant KBookmarkModel::data(const QModelIndex &index, int role) const
return QVariant( text1 + " -- " + text2 );
}
default:
return QVariant( QString() ); //can't happen
return QVariant(); //can't happen
}
}
//Icon
if(index.isValid() && role == Qt::DecorationRole && index.column() == NameColumnId)
if (index.isValid() && role == Qt::DecorationRole && index.column() == NameColumnId)
{
KBookmark bk = bookmarkForIndex(index);
if(bk.address().isEmpty())
if (bk.address().isEmpty())
return KIcon("bookmarks");
return KIcon(bk.icon());
}
@ -179,10 +180,10 @@ Qt::ItemFlags KBookmarkModel::flags(const QModelIndex &index) const
bool KBookmarkModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if(index.isValid() && role == Qt::EditRole)
if (index.isValid() && role == Qt::EditRole)
{
kDebug() << value.toString();
CommandHistory::self()->addCommand(new EditCommand(bookmarkForIndex(index).address(), index.column(), value.toString()));
d->mCommandHistory->addCommand(new EditCommand(bookmarkForIndex(index).address(), index.column(), value.toString()));
return true;
}
return false;
@ -190,7 +191,7 @@ bool KBookmarkModel::setData(const QModelIndex &index, const QVariant &value, in
QVariant KBookmarkModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if(role == Qt::DisplayRole && orientation == Qt::Horizontal)
if (role == Qt::DisplayRole && orientation == Qt::Horizontal)
{
QString result;
switch(section)
@ -220,53 +221,46 @@ QVariant KBookmarkModel::headerData(int section, Qt::Orientation orientation, in
QModelIndex KBookmarkModel::index(int row, int column, const QModelIndex &parent) const
{
if( ! parent.isValid())
if (!parent.isValid())
return createIndex(row, column, d->mRootItem);
TreeItem * item = static_cast<TreeItem *>(parent.internalPointer());
if(row == item->childCount()) {// Received drop below last row, simulate drop on last row
if (row == item->childCount()) {// Received drop below last row, simulate drop on last row
return createIndex(row-1, column, item->child(row-1));
}
return createIndex(row, column, item->child(row));
}
QModelIndex KBookmarkModel::parent(const QModelIndex &index) const
{
if(!index.isValid())
{
if (!index.isValid()) {
// qt asks for the parent of an invalid parent
// either we are in a inconsistent case or more likely
// we are dragging and dropping and qt didn't check
// what itemAt() returned
return index;
}
KBookmark bk = bookmarkForIndex(index);;
const QString rootAddress = d->mRoot.address();
if(bk.address() == rootAddress)
if (bk.address() == rootAddress)
return QModelIndex();
KBookmarkGroup parent = bk.parentGroup();
KBookmarkGroup parent = bk.parentGroup();
TreeItem * item = static_cast<TreeItem *>(index.internalPointer());
if(parent.address() != rootAddress)
// TODO replace first argument with parent.positionInParent()
return createIndex( KBookmark::positionInParent(parent.address()) , 0, item->parent());
if (parent.address() != rootAddress)
return createIndex(parent.positionInParent(), 0, item->parent());
else //parent is root
return createIndex( 0, 0, item->parent());
return createIndex(0, 0, item->parent());
}
int KBookmarkModel::rowCount(const QModelIndex &parent) const
{
if(parent.isValid())
if (parent.isValid())
return static_cast<TreeItem *>(parent.internalPointer())->childCount();
else //root case
{
return 1; // Only one child: "Bookmarks"
}
}
int KBookmarkModel::columnCount(const QModelIndex &) const
@ -283,29 +277,29 @@ void KBookmarkModel::emitDataChanged(const KBookmark& bk)
{
QModelIndex idx = indexForBookmark(bk);
kDebug() << idx;
emit dataChanged(idx, idx.sibling(idx.row(), columnCount()-1) );
emit dataChanged(idx, idx.sibling(idx.row(), columnCount()-1));
}
QMimeData * KBookmarkModel::mimeData( const QModelIndexList & indexes ) const
static const char* s_mime_bookmark_addresses = "application/x-kde-bookmarkaddresses";
QMimeData * KBookmarkModel::mimeData(const QModelIndexList & indexes) const
{
QMimeData *mimeData = new QMimeData;
KBookmark::List bookmarks;
QByteArray addresses;
QModelIndexList::const_iterator it, end;
end = indexes.constEnd();
for( it = indexes.constBegin(); it!= end; ++it)
if( it->column() == NameColumnId)
{
bookmarks.push_back( bookmarkForIndex(*it) );
if(!addresses.isEmpty())
Q_FOREACH(const QModelIndex& it, indexes) {
if (it.column() == NameColumnId) {
bookmarks.push_back(bookmarkForIndex(it));
if (!addresses.isEmpty())
addresses.append(';');
addresses.append( bookmarkForIndex(*it).address().toLatin1() );
kDebug()<<"appended"<<bookmarkForIndex(*it).address().toLatin1();
addresses.append(bookmarkForIndex(it).address().toLatin1());
kDebug() << "appended" << bookmarkForIndex(it).address();
}
}
bookmarks.populateMimeData(mimeData);
mimeData->setData( "application/x-keditbookmarks", addresses);
mimeData->setData(s_mime_bookmark_addresses, addresses);
return mimeData;
}
@ -321,31 +315,24 @@ QStringList KBookmarkModel::mimeTypes() const
bool KBookmarkModel::dropMimeData(const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent)
{
//FIXME this only works for internal drag and drops
//FIXME Moving is *very* buggy
QModelIndex dropDestIndex;
bool isInsertBetweenOp = false;
if(row == -1)
{
if (row == -1) {
dropDestIndex = parent;
}
else
{
} else {
isInsertBetweenOp = true;
dropDestIndex= index(row, column, parent);
dropDestIndex = index(row, column, parent);
}
KBookmark dropDestBookmark = bookmarkForIndex(dropDestIndex);
if (dropDestBookmark.isNull())
{
if (dropDestBookmark.isNull()) {
// Presumably an invalid index: assume we want to place this in the root bookmark
// folder.
dropDestBookmark = d->mRoot;
}
QString addr = dropDestBookmark.address();
if(dropDestBookmark.isGroup() && !isInsertBetweenOp)
{
if (dropDestBookmark.isGroup() && !isInsertBetweenOp) {
addr += "/0";
}
// bookmarkForIndex(...) does not distinguish between the last item in the folder
@ -357,34 +344,25 @@ bool KBookmarkModel::dropMimeData(const QMimeData * data, Qt::DropAction action,
addr = KBookmark::nextAddress(addr);
}
if(action == Qt::CopyAction)
{
if (action == Qt::CopyAction) {
KEBMacroCommand * cmd = CmdGen::insertMimeSource("Copy", data, addr);
CommandHistory::self()->addCommand(cmd);
}
else if(action == Qt::MoveAction)
{
if(data->hasFormat("application/x-keditbookmarks"))
{
d->mCommandHistory->addCommand(cmd);
} else if (action == Qt::MoveAction) {
if (data->hasFormat(s_mime_bookmark_addresses)) {
KBookmark::List bookmarks;
QList<QByteArray> addresses = data->data("application/x-keditbookmarks").split(';');
QList<QByteArray>::const_iterator it, end;
end = addresses.constEnd();
for(it = addresses.constBegin(); it != end; ++it)
{
KBookmark bk = d->mManager->findByAddress(QString::fromLatin1(*it));
kDebug()<<"Extracted bookmark xxx to list: "<<bk.address();
QList<QByteArray> addresses = data->data(s_mime_bookmark_addresses).split(';');
Q_FOREACH(const QByteArray& address, addresses) {
KBookmark bk = d->mManager->findByAddress(QString::fromLatin1(address));
kDebug() << "Extracted bookmark:" << bk.address();
bookmarks.push_back(bk);
}
KEBMacroCommand * cmd = CmdGen::itemsMoved(bookmarks, addr, false);
CommandHistory::self()->addCommand(cmd);
}
else
{
d->mCommandHistory->addCommand(cmd);
} else {
kDebug()<<"NO FORMAT";
KEBMacroCommand * cmd = CmdGen::insertMimeSource("Copy", data, addr);
CommandHistory::self()->addCommand(cmd);
d->mCommandHistory->addCommand(cmd);
}
}
@ -454,4 +432,9 @@ void KBookmarkModel::removeBookmark(KBookmark bookmark)
endRemoveRows();
}
CommandHistory* KBookmarkModel::commandHistory()
{
return d->mCommandHistory;
}
#include "bookmarkmodel.moc"

View file

@ -20,6 +20,7 @@
#include <QtCore/QAbstractItemModel>
class CommandHistory;
class KBookmarkGroup;
class KBookmarkManager;
class KBookmark;
@ -43,11 +44,13 @@ class KBookmarkModel : public QAbstractItemModel
};
public:
KBookmarkModel(const KBookmark& root, KBookmarkManager* manager, QObject* parent = 0);
KBookmarkModel(const KBookmark& root, CommandHistory* commandHistory, KBookmarkManager* manager, QObject* parent = 0);
void setRoot(const KBookmark& root);
virtual ~KBookmarkModel();
CommandHistory* commandHistory();
//reimplemented functions
virtual QVariant data(const QModelIndex &index, int role) const;
virtual Qt::ItemFlags flags(const QModelIndex &index) const;

View file

@ -24,14 +24,13 @@
#include <QAction>
#include <QUndoCommand>
CommandHistory* CommandHistory::s_self = 0;
CommandHistory::CommandHistory(KActionCollection *actionCollection)
: m_commandHistory()
CommandHistory::CommandHistory(QObject* parent)
: QObject(parent), m_commandHistory()
{
Q_ASSERT(!s_self);
s_self = this; // this is hacky
}
void CommandHistory::createActions(KActionCollection *actionCollection)
{
// TODO use QUndoView?
QAction* undoAction = m_commandHistory.createUndoAction(actionCollection);
connect(undoAction, SIGNAL(triggered()), this, SLOT(undo()));
@ -39,12 +38,6 @@ CommandHistory::CommandHistory(KActionCollection *actionCollection)
connect(redoAction, SIGNAL(triggered()), this, SLOT(redo()));
}
CommandHistory* CommandHistory::self()
{
Q_ASSERT(s_self);
return s_self;
}
void CommandHistory::undo()
{
const int idx = m_commandHistory.index();

View file

@ -24,11 +24,14 @@
class QUndoCommand;
class KActionCollection;
// TODO namespacing
class CommandHistory : public QObject
{
Q_OBJECT
public:
CommandHistory(KActionCollection *collection);
CommandHistory(QObject* parent = 0);
void createActions(KActionCollection *collection);
virtual ~CommandHistory() {}
void notifyDocSaved();
@ -36,8 +39,6 @@ public:
void clearHistory();
void addCommand(QUndoCommand *);
static CommandHistory *self();
Q_SIGNALS:
void notifyCommandExecuted();
@ -51,7 +52,6 @@ private:
private:
// Ported from K3Command/K3CommandHistory to QUndoCommand/KUndoStack for KDE-4.4.0
KUndoStack m_commandHistory;
static CommandHistory *s_self;
};
#endif /* COMMANDHISTORY_H */

View file

@ -54,7 +54,7 @@ void GlobalBookmarkManager::saveAs(const QString &fileName) { mgr()->saveAs(file
void GlobalBookmarkManager::setUpdate(bool update) { mgr()->setUpdate(update); }
QString GlobalBookmarkManager::path() const { return mgr()->path(); }
void GlobalBookmarkManager::createManager(const QString &filename, const QString &dbusObjectName) {
void GlobalBookmarkManager::createManager(const QString &filename, const QString &dbusObjectName, CommandHistory* commandHistory) {
if (m_mgr) {
kDebug()<<"createManager called twice";
disconnect(m_mgr, 0, 0, 0);
@ -67,7 +67,7 @@ void GlobalBookmarkManager::createManager(const QString &filename, const QString
if ( m_model ) {
m_model->setRoot(root());
} else {
m_model = new KBookmarkModel(root(), m_mgr, this);
m_model = new KBookmarkModel(root(), commandHistory, m_mgr, this);
}
connect(m_mgr, SIGNAL( changed(const QString &, const QString &) ),
@ -83,7 +83,7 @@ void GlobalBookmarkManager::slotBookmarksChanged(const QString &, const QString
m_model->setRoot(m_mgr->root());
CommandHistory::self()->clearHistory();
m_model->commandHistory()->clearHistory();
}
void GlobalBookmarkManager::notifyManagers(const KBookmarkGroup& grp)

View file

@ -22,6 +22,7 @@
#include <kbookmark.h>
#include <QObject>
class CommandHistory;
class KBookmarkModel;
class KBookmark;
class KBookmarkManager;
@ -42,7 +43,7 @@ public:
KBookmarkManager* mgr() const { return m_mgr; }
QString path() const;
void createManager(const QString &filename, const QString &dbusObjectName);
void createManager(const QString &filename, const QString &dbusObjectName, CommandHistory* commandHistory);
void notifyManagers(const KBookmarkGroup& grp);
void notifyManagers();
bool managerSave();

View file

@ -274,7 +274,7 @@ public:
/**
* Creates the search line. This can be useful to reimplement in cases where
* a K3ListViewSearchLine subclass is used.
* a KViewSearchLine subclass is used.
*/
virtual KViewSearchLine *createSearchLine(QAbstractItemView *view);

View file

@ -140,7 +140,7 @@ extern "C" KDE_EXPORT int kdemain(int argc, char **argv) {
: KStandardDirs::locateLocal("data", QLatin1String("konqueror/bookmarks.xml"));
if (!isGui) {
GlobalBookmarkManager::self()->createManager(filename, QString());
GlobalBookmarkManager::self()->createManager(filename, QString(), 0 /*no command history*/);
GlobalBookmarkManager::ExportType exportType = GlobalBookmarkManager::MozillaExport; // uumm.. can i just set it to -1 ?
int got = 0;
const char *arg, *arg2 = 0, *importType = 0;

View file

@ -19,34 +19,41 @@
*/
#include <kstandarddirs.h>
#include <globalbookmarkmanager.h>
#include <kdebug.h>
#include <qtest_kde.h>
#include <kbookmarkmanager.h>
#include "globalbookmarkmanager.h"
#include "commandhistory.h"
#include "bookmarkmodel.h"
#include "commands.h"
// Return a list of bookmark addresses in KBookmarkManager.
// Return a list of all bookmark addresses or urls in a KBookmarkManager.
class BookmarkLister : public KBookmarkGroupTraverser
{
public:
BookmarkLister(const KBookmarkGroup& root) {
traverse(root);
}
static QStringList list(KBookmarkManager* mgr) {
static QStringList addressList(KBookmarkManager* mgr) {
BookmarkLister lister(mgr->root());
return lister.m_list;
return lister.m_addressList;
}
static QStringList urlList(KBookmarkManager* mgr) {
BookmarkLister lister(mgr->root());
return lister.m_urlList;
}
virtual void visit(const KBookmark& bk) {
m_list.append(bk.address());
m_addressList.append(bk.address());
m_urlList.append(bk.url().url());
}
virtual void visitEnter(const KBookmarkGroup& /*group*/) {
//m_list.append(group.address());
virtual void visitEnter(const KBookmarkGroup& group) {
m_addressList.append(group.address() + '/');
}
private:
QStringList m_list;
QStringList m_addressList;
QStringList m_urlList;
};
class KBookmarkModelTest : public QObject
@ -62,9 +69,15 @@ private Q_SLOTS:
// TODO port away from that GlobalBookmarkManager singleton
const QString filename = KStandardDirs::locateLocal("data", QLatin1String("konqueror/bookmarks.xml"));
QFile::remove(filename);
GlobalBookmarkManager::self()->createManager(filename, QString());
m_cmdHistory = new CommandHistory;
GlobalBookmarkManager::self()->createManager(filename, QString(), m_cmdHistory);
m_bookmarkManager = GlobalBookmarkManager::self()->mgr();
QCOMPARE(BookmarkLister::list(m_bookmarkManager), QStringList());
QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList());
m_model = GlobalBookmarkManager::self()->model();
QCOMPARE(m_model->rowCount(), 1); // the toplevel "Bookmarks" toplevel item
m_rootIndex = m_model->index(0, 0);
QVERIFY(m_rootIndex.isValid());
QCOMPARE(m_model->rowCount(m_rootIndex), 0);
}
// The commands modify the model, so the test code uses the commands
@ -72,9 +85,12 @@ private Q_SLOTS:
{
CreateCommand* cmd = new CreateCommand("/0", "test_bk", "www", KUrl("http://www.kde.org"));
cmd->redo();
QCOMPARE(BookmarkLister::list(m_bookmarkManager), QStringList() << "/0");
QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList() << "/0");
QCOMPARE(BookmarkLister::urlList(m_bookmarkManager), QStringList() << "http://www.kde.org");
QCOMPARE(m_model->rowCount(m_rootIndex), 1);
cmd->undo();
QCOMPARE(BookmarkLister::list(m_bookmarkManager), QStringList());
QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList());
QCOMPARE(m_model->rowCount(m_rootIndex), 0);
delete cmd;
}
@ -82,24 +98,70 @@ private Q_SLOTS:
{
CreateCommand* cmd = new CreateCommand("/0", "test_bk", "www", KUrl("http://www.kde.org"));
cmd->redo();
QCOMPARE(BookmarkLister::list(m_bookmarkManager), QStringList() << "/0");
QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList() << "/0");
DeleteCommand* deleteCmd = new DeleteCommand("/0");
deleteCmd->redo();
QCOMPARE(BookmarkLister::list(m_bookmarkManager), QStringList());
QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList());
deleteCmd->undo();
QCOMPARE(BookmarkLister::list(m_bookmarkManager), QStringList() << "/0");
QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList() << "/0");
deleteCmd->redo();
QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList());
delete cmd;
delete deleteCmd;
}
void testCreateFolder()
{
CreateCommand folderCmd("/0", "folder", "folder", true /*open*/);
folderCmd.redo();
QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList() << "/0/");
QCOMPARE(m_model->rowCount(m_rootIndex), 1);
const QString kde = "http://www.kde.org";
CreateCommand cmd("/0/0", "test_bk", "www", KUrl(kde));
cmd.redo();
QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList() << "/0/" << "/0/0");
// Insert before this bookmark
const QString first = "http://first.example.com";
CreateCommand cmdFirstBk("/0/0", "first_bk", "www", KUrl(first));
cmdFirstBk.redo();
QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList() << "/0/" << "/0/0" << "/0/1");
QCOMPARE(BookmarkLister::urlList(m_bookmarkManager), QStringList() << first << kde);
// Move the kde bookmark before the first bookmark
KBookmark kdeBookmark = m_bookmarkManager->findByAddress("/0/1");
QCOMPARE(kdeBookmark.url().url(), kde);
QModelIndex kdeIndex = m_model->indexForBookmark(kdeBookmark);
QCOMPARE(kdeIndex.row(), 1);
QCOMPARE(m_model->rowCount(kdeIndex.parent()), 2);
QMimeData* mimeData = m_model->mimeData(QModelIndexList() << kdeIndex);
bool ok = m_model->dropMimeData(mimeData, Qt::MoveAction, 0, 0, kdeIndex.parent());
QVERIFY(ok);
QCOMPARE(BookmarkLister::addressList(m_bookmarkManager), QStringList() << "/0/" << "/0/0" << "/0/1");
QCOMPARE(BookmarkLister::urlList(m_bookmarkManager), QStringList() << kde << first);
delete mimeData;
// Move the kde bookmark after the bookmark called 'first'
kdeBookmark = m_bookmarkManager->findByAddress("/0/0");
kdeIndex = m_model->indexForBookmark(kdeBookmark);
QCOMPARE(kdeIndex.row(), 0);
mimeData = m_model->mimeData(QModelIndexList() << kdeIndex);
ok = m_model->dropMimeData(mimeData, Qt::MoveAction, 2, 0, kdeIndex.parent());
QVERIFY(ok);
QCOMPARE(BookmarkLister::urlList(m_bookmarkManager), QStringList() << first << kde);
delete mimeData;
}
private:
KBookmarkManager* m_bookmarkManager;
KBookmarkModel* m_model;
CommandHistory* m_cmdHistory;
QModelIndex m_rootIndex; // the index of the "Bookmarks" root
};
QTEST_KDEMAIN( KBookmarkModelTest, NoGUI )
#include "kmimefileparsertest.moc"
#include "kbookmarkmodeltest.moc"

View file

@ -67,7 +67,8 @@ KEBApp::KEBApp(
QDBusConnection::sessionBus().registerObject("/keditbookmarks", this, QDBusConnection::ExportScriptableSlots);
Q_UNUSED(address);//FIXME sets the current item
m_cmdHistory = new CommandHistory(actionCollection());
m_cmdHistory = new CommandHistory(this);
m_cmdHistory->createActions(actionCollection());
connect(m_cmdHistory, SIGNAL(notifyCommandExecuted()), this, SLOT(notifyCommandExecuted()));
s_topLevel = this;
@ -85,7 +86,7 @@ KEBApp::KEBApp(
m_canPaste = false;
GlobalBookmarkManager::self()->createManager(m_bookmarksFilename, m_dbusObjectName);
GlobalBookmarkManager::self()->createManager(m_bookmarksFilename, m_dbusObjectName, m_cmdHistory);
mBookmarkListView = new BookmarkListView();
mBookmarkListView->setModel( GlobalBookmarkManager::self()->model() );
@ -104,7 +105,7 @@ KEBApp::KEBApp(
listLayout->addWidget(searchline);
listLayout->addWidget(mBookmarkListView);
m_bkinfo = new BookmarkInfoWidget(mBookmarkListView);
m_bkinfo = new BookmarkInfoWidget(mBookmarkListView, GlobalBookmarkManager::self()->model());
listLayout->addWidget(m_bkinfo);
@ -150,7 +151,7 @@ void KEBApp::reset(const QString & caption, const QString & bookmarksFileName)
//FIXME check this code, probably should be model()->setRoot instead of resetModel()
m_caption = caption;
m_bookmarksFilename = bookmarksFileName;
GlobalBookmarkManager::self()->createManager(m_bookmarksFilename, m_dbusObjectName); //FIXME this is still a memory leak (iff called by slotLoad)
GlobalBookmarkManager::self()->createManager(m_bookmarksFilename, m_dbusObjectName, m_cmdHistory); //FIXME this is still a memory leak (iff called by slotLoad)
GlobalBookmarkManager::self()->model()->resetModel();
updateActions();
}
@ -419,7 +420,7 @@ KEBApp::~KEBApp() {
s_topLevel = 0;
delete m_cmdHistory;
delete ActionsImpl::self();
delete m_actionsImpl;
delete mBookmarkListView;
delete GlobalBookmarkManager::self();
}

View file

@ -25,6 +25,7 @@
#include <kxmlguifactory.h>
#include "bookmarklistview.h"
class ActionsImpl;
class CommandHistory;
class KBookmarkModel;
class KBookmarkManager;
@ -94,6 +95,7 @@ public:
KBookmark::List selectedBookmarks() const;
KBookmark::List selectedBookmarksExpanded() const;
KBookmark::List allBookmarks() const;
public Q_SLOTS:
void notifyCommandExecuted();
@ -119,6 +121,7 @@ private:
static KEBApp *s_topLevel;
ActionsImpl* m_actionsImpl;
CommandHistory *m_cmdHistory;
QString m_bookmarksFilename;
QString m_caption;