~ubuntu-branches/ubuntu/raring/kdebase/raring

« back to all changes in this revision

Viewing changes to keditbookmarks/actionsimpl.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Philip Muškovac, Jonathan Riddell, Felix Geyer
  • Date: 2011-03-03 16:25:47 UTC
  • mfrom: (1.1.58 upstream)
  • Revision ID: james.westby@ubuntu.com-20110303162547-2zf9j33cu6j5gj0a
Tags: 4:4.6.1a-0ubuntu1
[ Jonathan Riddell ]
* New upstream release
* Update kde-sc-dev-latest version

[ Felix Geyer ]
* Reduce the x-www-browser priority for konqueror to 30 as rekonq is the
  default Kubuntu browser.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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>
 
6
 
 
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.
 
10
 
 
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.
 
15
 
 
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.
 
20
*/
 
21
 
 
22
#include "actionsimpl.h"
 
23
#include "globalbookmarkmanager.h"
 
24
 
 
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"
 
30
#include "favicons.h"
 
31
#include "testlink.h"
 
32
#include "exporters.h"
 
33
#include "bookmarkinfowidget.h"
 
34
 
 
35
#include <stdlib.h>
 
36
 
 
37
#include <QtGui/QClipboard>
 
38
#include <QtCore/QMimeData>
 
39
#include <QApplication>
 
40
 
 
41
#include <kdebug.h>
 
42
 
 
43
#include <kaction.h>
 
44
#include <kactioncollection.h>
 
45
#include <kicon.h>
 
46
#include <kicondialog.h>
 
47
#include <kiconloader.h>
 
48
#include <kinputdialog.h>
 
49
#include <klocale.h>
 
50
#include <kstandardaction.h>
 
51
#include <kfiledialog.h>
 
52
#include <krun.h>
 
53
#include <kstandarddirs.h>
 
54
 
 
55
#include <kbookmark.h>
 
56
#include <kbookmarkmanager.h>
 
57
#include <kbookmarkimporter.h>
 
58
 
 
59
#include <kbookmarkimporter_ie.h>
 
60
#include <kbookmarkimporter_opera.h>
 
61
#include <kbookmarkimporter_ns.h>
 
62
#include <kbookmarkexporter.h>
 
63
 
 
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() {
 
68
 
 
69
    m_actionsImpl = new ActionsImpl(this, GlobalBookmarkManager::self()->model());
 
70
 
 
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)));
 
75
 
 
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());
 
82
 
 
83
    if (m_browser) {
 
84
        (void) KStandardAction::open(
 
85
            m_actionsImpl, SLOT( slotLoad() ), actionCollection());
 
86
        (void) KStandardAction::saveAs(
 
87
            m_actionsImpl, SLOT( slotSaveAs() ), actionCollection());
 
88
    }
 
89
 
 
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());
 
93
 
 
94
    // actions
 
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() ));
 
100
 
 
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() ));
 
106
 
 
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() ));
 
112
 
 
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() ));
 
118
 
 
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() ));
 
123
 
 
124
    KAction* m_actionsImplUpdateFavIcon = actionCollection()->addAction("updatefavicon");
 
125
    m_actionsImplUpdateFavIcon->setText(i18n("Update Favicon"));
 
126
    connect(m_actionsImplUpdateFavIcon, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotUpdateFavIcon() ));
 
127
 
 
128
    KAction* m_actionsImplRecursiveSort = actionCollection()->addAction("recursivesort");
 
129
    m_actionsImplRecursiveSort->setText(i18n("Recursive Sort"));
 
130
    connect(m_actionsImplRecursiveSort, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotRecursiveSort() ));
 
131
 
 
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() ));
 
137
 
 
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() ));
 
142
 
 
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() ));
 
147
 
 
148
    KAction* m_actionsImplSort = actionCollection()->addAction("sort");
 
149
    m_actionsImplSort->setText(i18n("&Sort Alphabetically"));
 
150
    connect(m_actionsImplSort, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotSort() ));
 
151
 
 
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() ));
 
156
 
 
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() ));
 
160
 
 
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() ));
 
164
 
 
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() ));
 
169
 
 
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() ));
 
174
 
 
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() ));
 
178
 
 
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() ));
 
182
 
 
183
    KAction* m_actionsImplCancelAllTests = actionCollection()->addAction("canceltests");
 
184
    m_actionsImplCancelAllTests->setText(i18n("Cancel &Checks"));
 
185
    connect(m_actionsImplCancelAllTests, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotCancelAllTests() ));
 
186
 
 
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() ));
 
190
 
 
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() ));
 
196
 
 
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() ));
 
202
/*
 
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() ));
 
207
*/
 
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() ));
 
212
 
 
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..."));
 
217
 
 
218
    connect(m_actionsImplImportKDE2, SIGNAL( triggered() ), m_actionsImpl, SLOT( slotImport() ));
 
219
 
 
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() ));
 
224
 
 
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() ));
 
230
 
 
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() ));
 
235
 
 
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() ));
 
240
 
 
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() ));
 
245
 
 
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() ));
 
249
 
 
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() ));
 
254
}
 
255
 
 
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))
 
260
{
 
261
    Q_ASSERT(m_model);
 
262
}
 
263
 
 
264
void ActionsImpl::slotLoad()
 
265
{
 
266
    QString bookmarksFile
 
267
        = KFileDialog::getOpenFileName(QString(), "*.xml", KEBApp::self());
 
268
    if (bookmarksFile.isNull())
 
269
        return;
 
270
    KEBApp::self()->reset(QString(), bookmarksFile);
 
271
}
 
272
 
 
273
void ActionsImpl::slotSaveAs() {
 
274
    KEBApp::self()->bkInfo()->commitChanges();
 
275
    QString saveFilename
 
276
        = KFileDialog::getSaveFileName(QString(), "*.xml", KEBApp::self());
 
277
    if (!saveFilename.isEmpty())
 
278
        GlobalBookmarkManager::self()->saveAs(saveFilename);
 
279
}
 
280
 
 
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();
 
285
    QString path(_path);
 
286
    // TODO - add a factory and make all this use the base class
 
287
    if (type == OperaExport) {
 
288
        if (path.isNull())
 
289
            path = KOperaBookmarkImporterImpl().findDefaultLocation(true);
 
290
        KOperaBookmarkExporterImpl exporter(mgr(), path);
 
291
        exporter.write(mgr()->root());
 
292
        return;
 
293
 
 
294
    } else if (type == HTMLExport) {
 
295
        if (path.isNull())
 
296
            path = KFileDialog::getSaveFileName(
 
297
                        QDir::homePath(),
 
298
                        i18n("*.html|HTML Bookmark Listing"),
 
299
                        KEBApp::self() );
 
300
        HTMLExporter exporter;
 
301
        exporter.write(mgr()->root(), path);
 
302
        return;
 
303
 
 
304
    } else if (type == IEExport) {
 
305
        if (path.isNull())
 
306
            path = KIEBookmarkImporterImpl().findDefaultLocation(true);
 
307
        KIEBookmarkExporterImpl exporter(mgr(), path);
 
308
        exporter.write(mgr()->root());
 
309
        return;
 
310
    }
 
311
 
 
312
    bool moz = (type == MozillaExport);
 
313
 
 
314
    if (path.isNull()) {
 
315
        if (moz) {
 
316
            KMozillaBookmarkImporterImpl importer;
 
317
            path = importer.findDefaultLocation(true);
 
318
        }
 
319
        else {
 
320
            KNSBookmarkImporterImpl importer;
 
321
            path = importer.findDefaultLocation(true);
 
322
        }
 
323
    }
 
324
 
 
325
    if (!path.isEmpty()) {
 
326
        KNSBookmarkExporterImpl exporter(mgr(), path);
 
327
        exporter.write(mgr()->root());
 
328
    }
 
329
}
 
330
 
 
331
void KEBApp::setCancelFavIconUpdatesEnabled(bool enabled) {
 
332
    actionCollection()->action("cancelfaviconupdates")->setEnabled(enabled);
 
333
}
 
334
 
 
335
void KEBApp::setCancelTestsEnabled(bool enabled) {
 
336
    actionCollection()->action("canceltests")->setEnabled(enabled);
 
337
}
 
338
 
 
339
void ActionsImpl::slotCut() {
 
340
    KEBApp::self()->bkInfo()->commitChanges();
 
341
    slotCopy();
 
342
    DeleteManyCommand *mcmd = new DeleteManyCommand(m_model, i18n("Cut Items"), KEBApp::self()->selectedBookmarks() );
 
343
    commandHistory()->addCommand(mcmd);
 
344
 
 
345
}
 
346
 
 
347
void ActionsImpl::slotCopy()
 
348
{
 
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 );
 
355
}
 
356
 
 
357
void ActionsImpl::slotPaste() {
 
358
    KEBApp::self()->bkInfo()->commitChanges();
 
359
 
 
360
    QString addr;
 
361
    KBookmark bk = KEBApp::self()->firstSelected();
 
362
    if(bk.isGroup())
 
363
        addr = bk.address() + "/0"; //FIXME internal
 
364
    else
 
365
        addr = bk.address();
 
366
 
 
367
    QUndoCommand *mcmd = CmdGen::insertMimeSource( m_model, i18n("Paste"), QApplication::clipboard()->mimeData(), addr);
 
368
    commandHistory()->addCommand(mcmd);
 
369
}
 
370
 
 
371
/* -------------------------------------- */
 
372
 
 
373
void ActionsImpl::slotNewFolder()
 
374
{
 
375
    KEBApp::self()->bkInfo()->commitChanges();
 
376
    bool ok;
 
377
    QString str = KInputDialog::getText( i18n( "Create New Bookmark Folder" ),
 
378
            i18n( "New folder:" ), QString(), &ok, KEBApp::self() );
 
379
    if (!ok)
 
380
        return;
 
381
 
 
382
    CreateCommand *cmd = new CreateCommand(m_model,
 
383
                                KEBApp::self()->insertAddress(),
 
384
                                str, "bookmark_folder", /*open*/ true);
 
385
    commandHistory()->addCommand(cmd);
 
386
}
 
387
 
 
388
void ActionsImpl::slotNewBookmark()
 
389
{
 
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);
 
396
}
 
397
 
 
398
void ActionsImpl::slotInsertSeparator()
 
399
{
 
400
    KEBApp::self()->bkInfo()->commitChanges();
 
401
    CreateCommand * cmd = new CreateCommand(m_model, KEBApp::self()->insertAddress());
 
402
    commandHistory()->addCommand(cmd);
 
403
}
 
404
 
 
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());
 
411
    if (!import)
 
412
        return;
 
413
    commandHistory()->addCommand(import);
 
414
    //FIXME select import->groupAddress
 
415
}
 
416
 
 
417
// TODO - this is getting ugly and repetitive. cleanup!
 
418
 
 
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); }
 
434
 
 
435
/* -------------------------------------- */
 
436
 
 
437
void ActionsImpl::slotCancelFavIconUpdates() {
 
438
    m_favIconHolder->cancelAllItrs();
 
439
}
 
440
 
 
441
void ActionsImpl::slotCancelAllTests() {
 
442
    m_testLinkHolder->cancelAllItrs();
 
443
}
 
444
 
 
445
void ActionsImpl::slotTestAll() {
 
446
    m_testLinkHolder->insertIterator(
 
447
            new TestLinkItr(m_testLinkHolder, KEBApp::self()->allBookmarks()));
 
448
}
 
449
 
 
450
void ActionsImpl::slotUpdateAllFavIcons() {
 
451
    m_favIconHolder->insertIterator(
 
452
            new FavIconsItr(m_favIconHolder, KEBApp::self()->allBookmarks()));
 
453
}
 
454
 
 
455
ActionsImpl::~ActionsImpl() {
 
456
    delete m_favIconHolder;
 
457
    delete m_testLinkHolder;
 
458
}
 
459
 
 
460
/* -------------------------------------- */
 
461
 
 
462
void ActionsImpl::slotTestSelection() {
 
463
    KEBApp::self()->bkInfo()->commitChanges();
 
464
    m_testLinkHolder->insertIterator(new TestLinkItr(m_testLinkHolder, KEBApp::self()->selectedBookmarksExpanded()));
 
465
}
 
466
 
 
467
void ActionsImpl::slotUpdateFavIcon() {
 
468
    KEBApp::self()->bkInfo()->commitChanges();
 
469
    m_favIconHolder->insertIterator(new FavIconsItr(m_favIconHolder, KEBApp::self()->selectedBookmarksExpanded()));
 
470
}
 
471
 
 
472
/* -------------------------------------- */
 
473
 
 
474
class KBookmarkGroupList : private KBookmarkGroupTraverser {
 
475
public:
 
476
    KBookmarkGroupList(KBookmarkManager *);
 
477
    QList<KBookmark> getList(const KBookmarkGroup &);
 
478
private:
 
479
    virtual void visit(const KBookmark &) {}
 
480
    virtual void visitEnter(const KBookmarkGroup &);
 
481
    virtual void visitLeave(const KBookmarkGroup &) {}
 
482
private:
 
483
    KBookmarkManager *m_manager;
 
484
    QList<KBookmark> m_list;
 
485
};
 
486
 
 
487
KBookmarkGroupList::KBookmarkGroupList( KBookmarkManager *manager ) {
 
488
    m_manager = manager;
 
489
}
 
490
 
 
491
QList<KBookmark> KBookmarkGroupList::getList( const KBookmarkGroup &grp ) {
 
492
    traverse(grp);
 
493
    return m_list;
 
494
}
 
495
 
 
496
void KBookmarkGroupList::visitEnter(const KBookmarkGroup &grp) {
 
497
    m_list << grp;
 
498
}
 
499
 
 
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);
 
510
    }
 
511
    commandHistory()->addCommand(mcmd);
 
512
}
 
513
 
 
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);
 
520
}
 
521
 
 
522
/* -------------------------------------- */
 
523
 
 
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);
 
528
}
 
529
 
 
530
void ActionsImpl::slotOpenLink()
 
531
{
 
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())
 
538
            continue;
 
539
        (void)new KRun((*it).url(), KEBApp::self());
 
540
    }
 
541
}
 
542
 
 
543
/* -------------------------------------- */
 
544
 
 
545
void ActionsImpl::slotRename() {
 
546
    KEBApp::self()->bkInfo()->commitChanges();
 
547
    KEBApp::self()->startEdit( KEBApp::NameColumn );
 
548
}
 
549
 
 
550
void ActionsImpl::slotChangeURL() {
 
551
    KEBApp::self()->bkInfo()->commitChanges();
 
552
    KEBApp::self()->startEdit( KEBApp::UrlColumn );
 
553
}
 
554
 
 
555
void ActionsImpl::slotChangeComment() {
 
556
    KEBApp::self()->bkInfo()->commitChanges();
 
557
    KEBApp::self()->startEdit( KEBApp::CommentColumn );
 
558
}
 
559
 
 
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);
 
566
}
 
567
 
 
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())
 
573
        return;
 
574
    EditCommand *cmd = new EditCommand(m_model, bk.address(), -1, newIcon);
 
575
 
 
576
    commandHistory()->addCommand(cmd);
 
577
}
 
578
 
 
579
void ActionsImpl::slotExpandAll()
 
580
{
 
581
    KEBApp::self()->expandAll();
 
582
}
 
583
 
 
584
void ActionsImpl::slotCollapseAll()
 
585
{
 
586
    KEBApp::self()->collapseAll();
 
587
}
 
588
 
 
589
CommandHistory* ActionsImpl::commandHistory()
 
590
{
 
591
    return m_model->commandHistory();
 
592
}
 
593
 
 
594
#include "actionsimpl.moc"