1
// -*- indent-tabs-mode:nil -*-
2
// vim: set ts=4 sts=4 sw=4 et:
3
/* This file is part of the KDE project
4
Copyright (C) 2000 David Faure <faure@kde.org>
5
Copyright (C) 2002-2003 Alexander Kellett <lypanov@kde.org>
7
This program is free software; you can redistribute it and/or
8
modify it under the terms of the GNU General Public
9
License version 2 as published by the Free Software Foundation.
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
General Public License for more details.
16
You should have received a copy of the GNU General Public License
17
along with this program; see the file COPYING. If not, write to
18
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19
Boston, MA 02110-1301, USA.
22
#include "actionsimpl.h"
23
#include "globalbookmarkmanager.h"
25
#include "toplevel.h" // for KEBApp
26
#include "kbookmarkmodel/model.h"
27
#include "kbookmarkmodel/commands.h"
28
#include "kbookmarkmodel/commandhistory.h"
29
#include "importers.h"
32
#include "exporters.h"
33
#include "bookmarkinfowidget.h"
37
#include <QtGui/QClipboard>
38
#include <QtCore/QMimeData>
39
#include <QApplication>
44
#include <kactioncollection.h>
46
#include <kicondialog.h>
47
#include <kiconloader.h>
48
#include <kinputdialog.h>
50
#include <kstandardaction.h>
51
#include <kfiledialog.h>
53
#include <kstandarddirs.h>
55
#include <kbookmark.h>
56
#include <kbookmarkmanager.h>
57
#include <kbookmarkimporter.h>
59
#include <kbookmarkimporter_ie.h>
60
#include <kbookmarkimporter_opera.h>
61
#include <kbookmarkimporter_ns.h>
62
#include <kbookmarkexporter.h>
64
// decoupled from resetActions in toplevel.cpp
65
// as resetActions simply uses the action groups
66
// specified in the ui.rc file
67
void KEBApp::createActions() {
69
m_actionsImpl = new ActionsImpl(this, GlobalBookmarkManager::self()->model());
71
connect(m_actionsImpl->testLinkHolder(), SIGNAL(setCancelEnabled(bool)),
72
this, SLOT(setCancelTestsEnabled(bool)));
73
connect(m_actionsImpl->favIconHolder(), SIGNAL(setCancelEnabled(bool)),
74
this, SLOT(setCancelFavIconUpdatesEnabled(bool)));
76
// save and quit should probably not be in the toplevel???
77
(void) KStandardAction::quit(
78
this, SLOT( close() ), actionCollection());
79
KStandardAction::keyBindings(guiFactory(), SLOT(configureShortcuts()), actionCollection());
80
(void) KStandardAction::configureToolbars(
81
this, SLOT( slotConfigureToolbars() ), actionCollection());
84
(void) KStandardAction::open(
85
m_actionsImpl, SLOT( slotLoad() ), actionCollection());
86
(void) KStandardAction::saveAs(
87
m_actionsImpl, SLOT( slotSaveAs() ), actionCollection());
90
(void) KStandardAction::cut(m_actionsImpl, SLOT( slotCut() ), actionCollection());
91
(void) KStandardAction::copy(m_actionsImpl, SLOT( slotCopy() ), actionCollection());
92
(void) KStandardAction::paste(m_actionsImpl, SLOT( slotPaste() ), actionCollection());
95
KAction* m_actionsImplDelete = actionCollection()->addAction("delete");
96
m_actionsImplDelete->setIcon(KIcon("edit-delete"));
97
m_actionsImplDelete->setText(i18n("&Delete"));
98
m_actionsImplDelete->setShortcut(Qt::Key_Delete);
99
connect(m_actionsImplDelete, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotDelete() ));
101
KAction* m_actionsImplRename = actionCollection()->addAction("rename");
102
m_actionsImplRename->setIcon(KIcon("edit-rename"));
103
m_actionsImplRename->setText(i18n("Rename"));
104
m_actionsImplRename->setShortcut(Qt::Key_F2);
105
connect(m_actionsImplRename, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotRename() ));
107
KAction* m_actionsImplChangeURL = actionCollection()->addAction("changeurl");
108
m_actionsImplChangeURL->setIcon(KIcon("edit-rename"));
109
m_actionsImplChangeURL->setText(i18n("C&hange Location"));
110
m_actionsImplChangeURL->setShortcut(Qt::Key_F3);
111
connect(m_actionsImplChangeURL, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotChangeURL() ));
113
KAction* m_actionsImplChangeComment = actionCollection()->addAction("changecomment");
114
m_actionsImplChangeComment->setIcon(KIcon("edit-rename"));
115
m_actionsImplChangeComment->setText(i18n("C&hange Comment"));
116
m_actionsImplChangeComment->setShortcut(Qt::Key_F4);
117
connect(m_actionsImplChangeComment, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotChangeComment() ));
119
KAction* m_actionsImplChangeIcon = actionCollection()->addAction("changeicon");
120
m_actionsImplChangeIcon->setIcon(KIcon("preferences-desktop-icons"));
121
m_actionsImplChangeIcon->setText(i18n("Chan&ge Icon..."));
122
connect(m_actionsImplChangeIcon, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotChangeIcon() ));
124
KAction* m_actionsImplUpdateFavIcon = actionCollection()->addAction("updatefavicon");
125
m_actionsImplUpdateFavIcon->setText(i18n("Update Favicon"));
126
connect(m_actionsImplUpdateFavIcon, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotUpdateFavIcon() ));
128
KAction* m_actionsImplRecursiveSort = actionCollection()->addAction("recursivesort");
129
m_actionsImplRecursiveSort->setText(i18n("Recursive Sort"));
130
connect(m_actionsImplRecursiveSort, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotRecursiveSort() ));
132
KAction* m_actionsImplNewFolder = actionCollection()->addAction("newfolder");
133
m_actionsImplNewFolder->setIcon(KIcon("folder-new"));
134
m_actionsImplNewFolder->setText(i18n("&New Folder..."));
135
m_actionsImplNewFolder->setShortcut(Qt::CTRL+Qt::Key_N);
136
connect(m_actionsImplNewFolder, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotNewFolder() ));
138
KAction* m_actionsImplNewBookmark = actionCollection()->addAction("newbookmark");
139
m_actionsImplNewBookmark->setIcon(KIcon("bookmark-new"));
140
m_actionsImplNewBookmark->setText(i18n("&New Bookmark"));
141
connect(m_actionsImplNewBookmark, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotNewBookmark() ));
143
KAction* m_actionsImplInsertSeparator = actionCollection()->addAction("insertseparator");
144
m_actionsImplInsertSeparator->setText(i18n("&Insert Separator"));
145
m_actionsImplInsertSeparator->setShortcut(Qt::CTRL+Qt::Key_I);
146
connect(m_actionsImplInsertSeparator, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotInsertSeparator() ));
148
KAction* m_actionsImplSort = actionCollection()->addAction("sort");
149
m_actionsImplSort->setText(i18n("&Sort Alphabetically"));
150
connect(m_actionsImplSort, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotSort() ));
152
KAction* m_actionsImplSetAsToolbar = actionCollection()->addAction("setastoolbar");
153
m_actionsImplSetAsToolbar->setIcon(KIcon("bookmark-toolbar"));
154
m_actionsImplSetAsToolbar->setText(i18n("Set as T&oolbar Folder"));
155
connect(m_actionsImplSetAsToolbar, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotSetAsToolbar() ));
157
KAction* m_actionsImplExpandAll = actionCollection()->addAction("expandall");
158
m_actionsImplExpandAll->setText(i18n("&Expand All Folders"));
159
connect(m_actionsImplExpandAll, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExpandAll() ));
161
KAction* m_actionsImplCollapseAll = actionCollection()->addAction("collapseall");
162
m_actionsImplCollapseAll->setText(i18n("Collapse &All Folders"));
163
connect(m_actionsImplCollapseAll, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotCollapseAll() ));
165
KAction* m_actionsImplOpenLink = actionCollection()->addAction("openlink");
166
m_actionsImplOpenLink->setIcon(KIcon("document-open"));
167
m_actionsImplOpenLink->setText(i18n("&Open in Konqueror"));
168
connect(m_actionsImplOpenLink, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotOpenLink() ));
170
KAction* m_actionsImplTestSelection = actionCollection()->addAction("testlink");
171
m_actionsImplTestSelection->setIcon(KIcon("bookmarks"));
172
m_actionsImplTestSelection->setText(i18n("Check &Status"));
173
connect(m_actionsImplTestSelection, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotTestSelection() ));
175
KAction* m_actionsImplTestAll = actionCollection()->addAction("testall");
176
m_actionsImplTestAll->setText(i18n("Check Status: &All"));
177
connect(m_actionsImplTestAll, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotTestAll() ));
179
KAction* m_actionsImplUpdateAllFavIcons = actionCollection()->addAction("updateallfavicons");
180
m_actionsImplUpdateAllFavIcons->setText(i18n("Update All &Favicons"));
181
connect(m_actionsImplUpdateAllFavIcons, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotUpdateAllFavIcons() ));
183
KAction* m_actionsImplCancelAllTests = actionCollection()->addAction("canceltests");
184
m_actionsImplCancelAllTests->setText(i18n("Cancel &Checks"));
185
connect(m_actionsImplCancelAllTests, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotCancelAllTests() ));
187
KAction* m_actionsImplCancelFavIconUpdates = actionCollection()->addAction("cancelfaviconupdates");
188
m_actionsImplCancelFavIconUpdates->setText(i18n("Cancel &Favicon Updates"));
189
connect(m_actionsImplCancelFavIconUpdates, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotCancelFavIconUpdates() ));
191
KAction* m_actionsImplImportNS = actionCollection()->addAction("importNS");
192
m_actionsImplImportNS->setObjectName( QLatin1String("NS" ));
193
m_actionsImplImportNS->setIcon(KIcon("netscape"));
194
m_actionsImplImportNS->setText(i18n("Import &Netscape Bookmarks..."));
195
connect(m_actionsImplImportNS, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
197
KAction* m_actionsImplImportOpera = actionCollection()->addAction("importOpera");
198
m_actionsImplImportOpera->setObjectName( QLatin1String("Opera" ));
199
m_actionsImplImportOpera->setIcon(KIcon("opera"));
200
m_actionsImplImportOpera->setText(i18n("Import &Opera Bookmarks..."));
201
connect(m_actionsImplImportOpera, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
203
KAction* m_actionsImplImportCrashes = actionCollection()->addAction("importCrashes");
204
m_actionsImplImportCrashes->setObjectName( QLatin1String("Crashes" ));
205
m_actionsImplImportCrashes->setText(i18n("Import All &Crash Sessions as Bookmarks..."));
206
connect(m_actionsImplImportCrashes, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
208
KAction* m_actionsImplImportGaleon = actionCollection()->addAction("importGaleon");
209
m_actionsImplImportGaleon->setObjectName( QLatin1String("Galeon" ));
210
m_actionsImplImportGaleon->setText(i18n("Import &Galeon Bookmarks..."));
211
connect(m_actionsImplImportGaleon, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
213
KAction* m_actionsImplImportKDE2 = actionCollection()->addAction("importKDE2");
214
m_actionsImplImportKDE2->setObjectName( QLatin1String("KDE2" ));
215
m_actionsImplImportKDE2->setIcon(KIcon("kde"));
216
m_actionsImplImportKDE2->setText(i18n("Import &KDE 2 or KDE 3 Bookmarks..."));
218
connect(m_actionsImplImportKDE2, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
220
KAction* m_actionsImplImportIE = actionCollection()->addAction("importIE");
221
m_actionsImplImportIE->setObjectName( QLatin1String("IE" ));
222
m_actionsImplImportIE->setText(i18n("Import &Internet Explorer Bookmarks..."));
223
connect(m_actionsImplImportIE, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
225
KAction* m_actionsImplImportMoz = actionCollection()->addAction("importMoz");
226
m_actionsImplImportMoz->setObjectName( QLatin1String("Moz" ));
227
m_actionsImplImportMoz->setIcon(KIcon("mozilla"));
228
m_actionsImplImportMoz->setText(i18n("Import &Mozilla Bookmarks..."));
229
connect(m_actionsImplImportMoz, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
231
KAction* m_actionsImplExportNS = actionCollection()->addAction("exportNS");
232
m_actionsImplExportNS->setIcon(KIcon("netscape"));
233
m_actionsImplExportNS->setText(i18n("Export &Netscape Bookmarks"));
234
connect(m_actionsImplExportNS, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExportNS() ));
236
KAction* m_actionsImplExportOpera = actionCollection()->addAction("exportOpera");
237
m_actionsImplExportOpera->setIcon(KIcon("opera"));
238
m_actionsImplExportOpera->setText(i18n("Export &Opera Bookmarks..."));
239
connect(m_actionsImplExportOpera, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExportOpera() ));
241
KAction* m_actionsImplExportHTML = actionCollection()->addAction("exportHTML");
242
m_actionsImplExportHTML->setIcon(KIcon("text-html"));
243
m_actionsImplExportHTML->setText(i18n("Export &HTML Bookmarks..."));
244
connect(m_actionsImplExportHTML, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExportHTML() ));
246
KAction* m_actionsImplExportIE = actionCollection()->addAction("exportIE");
247
m_actionsImplExportIE->setText(i18n("Export &Internet Explorer Bookmarks..."));
248
connect(m_actionsImplExportIE, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExportIE() ));
250
KAction* m_actionsImplExportMoz = actionCollection()->addAction("exportMoz");
251
m_actionsImplExportMoz->setIcon(KIcon("mozilla"));
252
m_actionsImplExportMoz->setText(i18n("Export &Mozilla Bookmarks..."));
253
connect(m_actionsImplExportMoz, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotExportMoz() ));
256
ActionsImpl::ActionsImpl(QObject* parent, KBookmarkModel* model)
257
: QObject(parent), m_model(model),
258
m_testLinkHolder(new TestLinkItrHolder(this, model)),
259
m_favIconHolder(new FavIconsItrHolder(this, model))
264
void ActionsImpl::slotLoad()
266
QString bookmarksFile
267
= KFileDialog::getOpenFileName(QString(), "*.xml", KEBApp::self());
268
if (bookmarksFile.isNull())
270
KEBApp::self()->reset(QString(), bookmarksFile);
273
void ActionsImpl::slotSaveAs() {
274
KEBApp::self()->bkInfo()->commitChanges();
276
= KFileDialog::getSaveFileName(QString(), "*.xml", KEBApp::self());
277
if (!saveFilename.isEmpty())
278
GlobalBookmarkManager::self()->saveAs(saveFilename);
281
void GlobalBookmarkManager::doExport(ExportType type, const QString & _path) {
282
//it can be null when we use command line to export => there is not interface
283
if ( KEBApp::self() && KEBApp::self()->bkInfo() )
284
KEBApp::self()->bkInfo()->commitChanges();
286
// TODO - add a factory and make all this use the base class
287
if (type == OperaExport) {
289
path = KOperaBookmarkImporterImpl().findDefaultLocation(true);
290
KOperaBookmarkExporterImpl exporter(mgr(), path);
291
exporter.write(mgr()->root());
294
} else if (type == HTMLExport) {
296
path = KFileDialog::getSaveFileName(
298
i18n("*.html|HTML Bookmark Listing"),
300
HTMLExporter exporter;
301
exporter.write(mgr()->root(), path);
304
} else if (type == IEExport) {
306
path = KIEBookmarkImporterImpl().findDefaultLocation(true);
307
KIEBookmarkExporterImpl exporter(mgr(), path);
308
exporter.write(mgr()->root());
312
bool moz = (type == MozillaExport);
316
KMozillaBookmarkImporterImpl importer;
317
path = importer.findDefaultLocation(true);
320
KNSBookmarkImporterImpl importer;
321
path = importer.findDefaultLocation(true);
325
if (!path.isEmpty()) {
326
KNSBookmarkExporterImpl exporter(mgr(), path);
327
exporter.write(mgr()->root());
331
void KEBApp::setCancelFavIconUpdatesEnabled(bool enabled) {
332
actionCollection()->action("cancelfaviconupdates")->setEnabled(enabled);
335
void KEBApp::setCancelTestsEnabled(bool enabled) {
336
actionCollection()->action("canceltests")->setEnabled(enabled);
339
void ActionsImpl::slotCut() {
340
KEBApp::self()->bkInfo()->commitChanges();
342
DeleteManyCommand *mcmd = new DeleteManyCommand(m_model, i18n("Cut Items"), KEBApp::self()->selectedBookmarks() );
343
commandHistory()->addCommand(mcmd);
347
void ActionsImpl::slotCopy()
349
KEBApp::self()->bkInfo()->commitChanges();
350
// this is not a command, because it can't be undone
351
KBookmark::List bookmarks = KEBApp::self()->selectedBookmarksExpanded();
352
QMimeData *mimeData = new QMimeData;
353
bookmarks.populateMimeData(mimeData);
354
QApplication::clipboard()->setMimeData( mimeData );
357
void ActionsImpl::slotPaste() {
358
KEBApp::self()->bkInfo()->commitChanges();
361
KBookmark bk = KEBApp::self()->firstSelected();
363
addr = bk.address() + "/0"; //FIXME internal
367
QUndoCommand *mcmd = CmdGen::insertMimeSource( m_model, i18n("Paste"), QApplication::clipboard()->mimeData(), addr);
368
commandHistory()->addCommand(mcmd);
371
/* -------------------------------------- */
373
void ActionsImpl::slotNewFolder()
375
KEBApp::self()->bkInfo()->commitChanges();
377
QString str = KInputDialog::getText( i18n( "Create New Bookmark Folder" ),
378
i18n( "New folder:" ), QString(), &ok, KEBApp::self() );
382
CreateCommand *cmd = new CreateCommand(m_model,
383
KEBApp::self()->insertAddress(),
384
str, "bookmark_folder", /*open*/ true);
385
commandHistory()->addCommand(cmd);
388
void ActionsImpl::slotNewBookmark()
390
KEBApp::self()->bkInfo()->commitChanges();
391
// TODO - make a setCurrentItem(Command *) which uses finaladdress interface
392
CreateCommand * cmd = new CreateCommand(m_model,
393
KEBApp::self()->insertAddress(),
394
QString(), "www", KUrl("http://"));
395
commandHistory()->addCommand(cmd);
398
void ActionsImpl::slotInsertSeparator()
400
KEBApp::self()->bkInfo()->commitChanges();
401
CreateCommand * cmd = new CreateCommand(m_model, KEBApp::self()->insertAddress());
402
commandHistory()->addCommand(cmd);
405
void ActionsImpl::slotImport() {
406
KEBApp::self()->bkInfo()->commitChanges();
407
qDebug() << "ActionsImpl::slotImport() where sender()->name() == "
408
<< sender()->objectName() << endl;
409
ImportCommand* import
410
= ImportCommand::performImport(m_model, sender()->objectName(), KEBApp::self());
413
commandHistory()->addCommand(import);
414
//FIXME select import->groupAddress
417
// TODO - this is getting ugly and repetitive. cleanup!
419
void ActionsImpl::slotExportOpera() {
420
KEBApp::self()->bkInfo()->commitChanges();
421
GlobalBookmarkManager::self()->doExport(GlobalBookmarkManager::OperaExport); }
422
void ActionsImpl::slotExportHTML() {
423
KEBApp::self()->bkInfo()->commitChanges();
424
GlobalBookmarkManager::self()->doExport(GlobalBookmarkManager::HTMLExport); }
425
void ActionsImpl::slotExportIE() {
426
KEBApp::self()->bkInfo()->commitChanges();
427
GlobalBookmarkManager::self()->doExport(GlobalBookmarkManager::IEExport); }
428
void ActionsImpl::slotExportNS() {
429
KEBApp::self()->bkInfo()->commitChanges();
430
GlobalBookmarkManager::self()->doExport(GlobalBookmarkManager::NetscapeExport); }
431
void ActionsImpl::slotExportMoz() {
432
KEBApp::self()->bkInfo()->commitChanges();
433
GlobalBookmarkManager::self()->doExport(GlobalBookmarkManager::MozillaExport); }
435
/* -------------------------------------- */
437
void ActionsImpl::slotCancelFavIconUpdates() {
438
m_favIconHolder->cancelAllItrs();
441
void ActionsImpl::slotCancelAllTests() {
442
m_testLinkHolder->cancelAllItrs();
445
void ActionsImpl::slotTestAll() {
446
m_testLinkHolder->insertIterator(
447
new TestLinkItr(m_testLinkHolder, KEBApp::self()->allBookmarks()));
450
void ActionsImpl::slotUpdateAllFavIcons() {
451
m_favIconHolder->insertIterator(
452
new FavIconsItr(m_favIconHolder, KEBApp::self()->allBookmarks()));
455
ActionsImpl::~ActionsImpl() {
456
delete m_favIconHolder;
457
delete m_testLinkHolder;
460
/* -------------------------------------- */
462
void ActionsImpl::slotTestSelection() {
463
KEBApp::self()->bkInfo()->commitChanges();
464
m_testLinkHolder->insertIterator(new TestLinkItr(m_testLinkHolder, KEBApp::self()->selectedBookmarksExpanded()));
467
void ActionsImpl::slotUpdateFavIcon() {
468
KEBApp::self()->bkInfo()->commitChanges();
469
m_favIconHolder->insertIterator(new FavIconsItr(m_favIconHolder, KEBApp::self()->selectedBookmarksExpanded()));
472
/* -------------------------------------- */
474
class KBookmarkGroupList : private KBookmarkGroupTraverser {
476
KBookmarkGroupList(KBookmarkManager *);
477
QList<KBookmark> getList(const KBookmarkGroup &);
479
virtual void visit(const KBookmark &) {}
480
virtual void visitEnter(const KBookmarkGroup &);
481
virtual void visitLeave(const KBookmarkGroup &) {}
483
KBookmarkManager *m_manager;
484
QList<KBookmark> m_list;
487
KBookmarkGroupList::KBookmarkGroupList( KBookmarkManager *manager ) {
491
QList<KBookmark> KBookmarkGroupList::getList( const KBookmarkGroup &grp ) {
496
void KBookmarkGroupList::visitEnter(const KBookmarkGroup &grp) {
500
void ActionsImpl::slotRecursiveSort() {
501
KEBApp::self()->bkInfo()->commitChanges();
502
KBookmark bk = KEBApp::self()->firstSelected();
503
Q_ASSERT(bk.isGroup());
504
KEBMacroCommand *mcmd = new KEBMacroCommand(i18n("Recursive Sort"));
505
KBookmarkGroupList lister(GlobalBookmarkManager::self()->mgr());
506
QList<KBookmark> bookmarks = lister.getList(bk.toGroup());
507
bookmarks << bk.toGroup();
508
for (QList<KBookmark>::ConstIterator it = bookmarks.constBegin(); it != bookmarks.constEnd(); ++it) {
509
new SortCommand(m_model, "", (*it).address(), mcmd);
511
commandHistory()->addCommand(mcmd);
514
void ActionsImpl::slotSort() {
515
KEBApp::self()->bkInfo()->commitChanges();
516
KBookmark bk = KEBApp::self()->firstSelected();
517
Q_ASSERT(bk.isGroup());
518
SortCommand *cmd = new SortCommand(m_model, i18n("Sort Alphabetically"), bk.address());
519
commandHistory()->addCommand(cmd);
522
/* -------------------------------------- */
524
void ActionsImpl::slotDelete() {
525
KEBApp::self()->bkInfo()->commitChanges();
526
DeleteManyCommand *mcmd = new DeleteManyCommand(m_model, i18n("Delete Items"), KEBApp::self()->selectedBookmarks());
527
commandHistory()->addCommand(mcmd);
530
void ActionsImpl::slotOpenLink()
532
KEBApp::self()->bkInfo()->commitChanges();
533
QList<KBookmark> bookmarks = KEBApp::self()->selectedBookmarksExpanded();
534
QList<KBookmark>::const_iterator it, end;
535
end = bookmarks.constEnd();
536
for (it = bookmarks.constBegin(); it != end; ++it) {
537
if ((*it).isGroup() || (*it).isSeparator())
539
(void)new KRun((*it).url(), KEBApp::self());
543
/* -------------------------------------- */
545
void ActionsImpl::slotRename() {
546
KEBApp::self()->bkInfo()->commitChanges();
547
KEBApp::self()->startEdit( KEBApp::NameColumn );
550
void ActionsImpl::slotChangeURL() {
551
KEBApp::self()->bkInfo()->commitChanges();
552
KEBApp::self()->startEdit( KEBApp::UrlColumn );
555
void ActionsImpl::slotChangeComment() {
556
KEBApp::self()->bkInfo()->commitChanges();
557
KEBApp::self()->startEdit( KEBApp::CommentColumn );
560
void ActionsImpl::slotSetAsToolbar() {
561
KEBApp::self()->bkInfo()->commitChanges();
562
KBookmark bk = KEBApp::self()->firstSelected();
563
Q_ASSERT(bk.isGroup());
564
QUndoCommand *mcmd = CmdGen::setAsToolbar(m_model, bk);
565
commandHistory()->addCommand(mcmd);
568
void ActionsImpl::slotChangeIcon() {
569
KEBApp::self()->bkInfo()->commitChanges();
570
KBookmark bk = KEBApp::self()->firstSelected();
571
const QString newIcon = KIconDialog::getIcon(KIconLoader::Small, KIconLoader::Place, false, 0, false, KEBApp::self());
572
if (newIcon.isEmpty())
574
EditCommand *cmd = new EditCommand(m_model, bk.address(), -1, newIcon);
576
commandHistory()->addCommand(cmd);
579
void ActionsImpl::slotExpandAll()
581
KEBApp::self()->expandAll();
584
void ActionsImpl::slotCollapseAll()
586
KEBApp::self()->collapseAll();
589
CommandHistory* ActionsImpl::commandHistory()
591
return m_model->commandHistory();
594
#include "actionsimpl.moc"