~ubuntu-branches/ubuntu/intrepid/digikam/intrepid

« back to all changes in this revision

Viewing changes to digikam/digikam/digikamapp.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Mark Purcell
  • Date: 2008-07-17 20:25:39 UTC
  • mfrom: (1.3.2 upstream) (37 hardy)
  • mto: This revision was merged to the branch mainline in revision 39.
  • Revision ID: james.westby@ubuntu.com-20080717202539-1bw3w3nrsso7yj4z
* New upstream release
  - digiKam 0.9.4 Release Plan (KDE3) ~ 13 July 08 (Closes: #490144)
* DEB_CONFIGURE_EXTRA_FLAGS := --without-included-sqlite3
* Debhelper compatibility level V7
* Install pixmaps in debian/*.install
* Add debian/digikam.lintian-overrides

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
////////////////////////////////////////////////////////////////////////////////
2
 
//
3
 
//    DIGIKAMAPP.CPP
4
 
//
5
 
//    Copyright (C) 2002-2005 Renchi Raju <renchi at pooh.tam.uiuc.edu>
6
 
//                            Gilles Caulier <caulier dot gilles at free.fr>
7
 
//    Copyright (C) 2006 Tom Albers <tomalbers@kde.nl>
8
 
//
9
 
//    This program is free software; you can redistribute it and/or modify
10
 
//    it under the terms of the GNU General Public License as published by
11
 
//    the Free Software Foundation; either version 2 of the License, or
12
 
//    (at your option) any later version.
13
 
//
14
 
//    This program is distributed in the hope that it will be useful,
15
 
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 
//    GNU General Public License for more details.
18
 
//
19
 
//    You should have received a copy of the GNU General Public License
20
 
//    along with this program; if not, write to the Free Software
21
 
//    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22
 
//
23
 
//////////////////////////////////////////////////////////////////////////////
24
 
 
25
 
// QT includes.
26
 
 
27
 
#include <qcstring.h>
 
1
/* ============================================================
 
2
 *
 
3
 * This file is a part of digiKam project
 
4
 * http://www.digikam.org
 
5
 *
 
6
 * Date        : 2002-16-10
 
7
 * Description : main digiKam interface implementation
 
8
 * 
 
9
 * Copyright (C) 2002-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu> 
 
10
 * Copyright (C)      2006 by Tom Albers <tomalbers@kde.nl>
 
11
 * Copyright (C) 2002-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
 
12
 *
 
13
 * This program is free software; you can redistribute it
 
14
 * and/or modify it under the terms of the GNU General
 
15
 * Public License as published by the Free Software Foundation;
 
16
 * either version 2, or (at your option)
 
17
 * any later version.
 
18
 * 
 
19
 * This program is distributed in the hope that it will be useful,
 
20
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
21
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
22
 * GNU General Public License for more details.
 
23
 * 
 
24
 * ============================================================ */
 
25
 
 
26
// Qt includes.
 
27
 
28
28
#include <qdatastream.h>
29
29
#include <qlabel.h>
30
30
#include <qstringlist.h>
31
 
#include <qkeysequence.h>
 
31
#include <qtooltip.h>
 
32
#include <qwhatsthis.h>
32
33
#include <qsignalmapper.h>
33
 
#include <qtimer.h>
 
34
#include <qdockarea.h>
 
35
#include <qhbox.h>
34
36
 
35
37
// KDE includes.
36
38
 
37
 
#include <kconfig.h>
38
 
#include <kdebug.h>
 
39
#include <kaboutdata.h>
39
40
#include <klocale.h>
40
41
#include <kstandarddirs.h>
41
42
#include <kurl.h>
42
 
#include <kaction.h>
43
43
#include <kstdaction.h>
44
44
#include <kstdaccel.h>
45
45
#include <kkeydialog.h>
46
46
#include <kedittoolbar.h>
 
47
#include <kiconloader.h>
47
48
#include <ktip.h>
48
 
#include <kpopupmenu.h>
49
49
#include <kdeversion.h>
50
50
#include <kapplication.h>
 
51
#include <kmenubar.h>
 
52
#include <kglobalsettings.h>
 
53
#include <kfiledialog.h>
51
54
#include <kmessagebox.h>
52
 
#include <kautomount.h>
53
 
#include <kio/netaccess.h>
54
 
 
55
 
using KIO::Job;
56
 
using KIO::UDSEntryList;
57
 
using KIO::UDSEntry;
58
 
 
59
 
// Includes files for plugins support.
60
 
 
61
 
#include "kipiinterface.h"
62
 
#include <libkipi/pluginloader.h>
 
55
#include <kwin.h>
 
56
#include <kimageio.h>
 
57
#include <dcopref.h>
 
58
 
 
59
// libKipi includes.
 
60
 
63
61
#include <libkipi/plugin.h>
64
62
 
 
63
// LibKDcraw includes.
 
64
 
 
65
#include <libkdcraw/dcrawbinary.h>
 
66
 
65
67
// Local includes.
66
68
 
67
 
#include "albummanager.h"
 
69
#include "ddebug.h"
 
70
#include "dlogoaction.h"
 
71
#include "album.h"
68
72
#include "albumlister.h"
69
 
#include "album.h"
70
 
#include "themeengine.h"
71
 
#include "cameralist.h"
 
73
#include "albumthumbnailloader.h"
 
74
#include "albumiconviewfilter.h"
72
75
#include "cameratype.h"
73
76
#include "cameraui.h"
74
 
#include "albumsettings.h"
75
77
#include "setup.h"
76
78
#include "setupplugins.h"
77
79
#include "setupeditor.h"
78
 
#include "digikamview.h"
79
 
#include "imagepluginloader.h"
 
80
#include "setupicc.h"
 
81
#include "rawcameradlg.h"
 
82
#include "lighttablewindow.h"
80
83
#include "imagewindow.h"
81
 
#include "digikamapp.h"
82
 
#include "splashscreen.h"
 
84
#include "imageinfo.h"
83
85
#include "thumbnailsize.h"
 
86
#include "themeengine.h"
84
87
#include "scanlib.h"
85
 
#include "dcrawbinary.h"
 
88
#include "loadingcacheinterface.h"
 
89
#include "imageattributeswatch.h"
 
90
#include "batchthumbsgenerator.h"
 
91
#include "batchalbumssyncmetadata.h"
 
92
#include "dcopiface.h"
 
93
#include "digikamappprivate.h"
 
94
#include "digikamapp.h"
 
95
#include "digikamapp.moc"
 
96
 
 
97
using KIO::Job;
 
98
using KIO::UDSEntryList;
 
99
using KIO::UDSEntry;
 
100
 
 
101
namespace Digikam
 
102
{
 
103
 
 
104
DigikamApp* DigikamApp::m_instance = 0;
86
105
 
87
106
DigikamApp::DigikamApp()
88
107
          : KMainWindow( 0, "Digikam" )
89
108
{
 
109
    d = new DigikamAppPriv;
90
110
    m_instance = this;
91
 
    m_config = kapp->config();
92
 
 
93
 
    mFullScreen = false;
94
 
    mView = 0;
95
 
 
96
 
    mSplash = 0;
97
 
    if(m_config->readBoolEntry("Show Splash", true) &&
 
111
    d->config  = kapp->config();
 
112
    d->config->setGroup("General Settings");
 
113
 
 
114
    if(d->config->readBoolEntry("Show Splash", true) &&
98
115
       !kapp->isRestored())
99
116
    {
100
 
        mSplash = new SplashScreen("digikam-splash.png");
 
117
        d->splashScreen = new SplashScreen("digikam-splash.png");
 
118
        d->splashScreen->show();
101
119
    }
102
120
 
103
 
    mAlbumSettings = new AlbumSettings();
104
 
    mAlbumSettings->readSettings();
105
 
 
106
 
    mAlbumManager = AlbumManager::instance();
 
121
    if(d->splashScreen)
 
122
        d->splashScreen->message(i18n("Initializing..."), AlignLeft, white);
 
123
 
 
124
    // Register image formats (especially for TIFF )
 
125
    KImageIO::registerFormats();
 
126
 
 
127
    d->albumSettings = new AlbumSettings();
 
128
    d->albumSettings->readSettings();
 
129
 
 
130
    d->albumManager = new Digikam::AlbumManager();
 
131
 
107
132
    AlbumLister::instance();
108
 
    
109
 
    mCameraMediaList = new QPopupMenu;
110
 
    connect( mCameraMediaList, SIGNAL( aboutToShow() ),
111
 
             SLOT( slotCameraMediaMenu() ) );
112
 
    
113
 
    mCameraList = new CameraList(this, locateLocal("appdata", "cameras.xml"));
114
 
 
115
 
    connect(mCameraList, SIGNAL(signalCameraAdded(CameraType *)),
 
133
 
 
134
    d->cameraMediaList = new KPopupMenu;
 
135
 
 
136
    connect(d->cameraMediaList, SIGNAL( aboutToShow() ),
 
137
            this, SLOT(slotCameraMediaMenu()));
 
138
 
 
139
    d->cameraList = new CameraList(this, locateLocal("appdata", "cameras.xml"));
 
140
 
 
141
    connect(d->cameraList, SIGNAL(signalCameraAdded(CameraType *)),
116
142
            this, SLOT(slotCameraAdded(CameraType *)));
117
143
 
118
 
    connect(mCameraList, SIGNAL(signalCameraRemoved(CameraType *)),
 
144
    connect(d->cameraList, SIGNAL(signalCameraRemoved(CameraType *)),
119
145
            this, SLOT(slotCameraRemoved(CameraType *)));
120
146
 
121
147
    setupView();
 
148
    setupStatusBar();
 
149
    setupAccelerators();
122
150
    setupActions();
123
 
    updateDeleteTrashMenu();
124
 
 
125
 
    applyMainWindowSettings(m_config);
126
 
 
127
 
    mAlbumManager->setLibraryPath(mAlbumSettings->getAlbumLibraryPath());
128
 
    mAlbumManager->startScan();
 
151
 
 
152
    applyMainWindowSettings(d->config);
 
153
 
 
154
    // Check ICC profiles repository availability
 
155
 
 
156
    if(d->splashScreen)
 
157
        d->splashScreen->message(i18n("Checking ICC repository"), AlignLeft, white);
 
158
 
 
159
    d->validIccPath = SetupICC::iccRepositoryIsValid();
 
160
 
 
161
    // Check witch dcraw version available
 
162
 
 
163
    if(d->splashScreen)
 
164
        d->splashScreen->message(i18n("Checking dcraw version"), AlignLeft, white);
 
165
 
 
166
    KDcrawIface::DcrawBinary::instance()->checkSystem();
 
167
 
 
168
    if(d->splashScreen)
 
169
        d->splashScreen->message(i18n("Scan Albums"), AlignLeft, white);
 
170
 
 
171
    d->albumManager->setLibraryPath(d->albumSettings->getAlbumLibraryPath(), d->splashScreen);
 
172
 
 
173
    // Read albums from database
 
174
    if(d->splashScreen)
 
175
        d->splashScreen->message(i18n("Reading database"), AlignLeft, white);
 
176
 
 
177
    d->albumManager->startScan();
129
178
 
130
179
    // Load KIPI Plugins.
131
180
    loadPlugins();
134
183
    populateThemes();
135
184
 
136
185
    setAutoSaveSettings();
137
 
    
138
 
    mDcopIface = new DCOPIface(this, "camera");
139
 
    connect(mDcopIface, SIGNAL(signalCameraAutoDetect()), 
140
 
            this, SLOT(slotCameraAutoDetect()));
141
 
    connect(mDcopIface, SIGNAL(signalDownloadImages( const QString & )),
142
 
            this, SLOT(slotDownloadImages(const QString &)));
 
186
 
 
187
    d->dcopIface = new DCOPIface(this, "camera");
 
188
 
 
189
    connect(d->dcopIface, SIGNAL(signalCameraAutoDetect()), 
 
190
            this, SLOT(slotDcopCameraAutoDetect()));
 
191
 
 
192
    connect(d->dcopIface, SIGNAL(signalDownloadImages( const QString & )),
 
193
            this, SLOT(slotDcopDownloadImages(const QString &)));
143
194
}
144
195
 
145
196
DigikamApp::~DigikamApp()
146
197
{
147
 
    if (ImageWindow::imagewindow())
148
 
        delete ImageWindow::imagewindow();
149
 
 
150
 
    if (mView)
151
 
        delete mView;
152
 
 
153
 
    mAlbumSettings->saveSettings();
154
 
    delete mAlbumSettings;
155
 
 
156
 
    delete mAlbumManager;
 
198
    ImageAttributesWatch::shutDown();
 
199
 
 
200
    // Close and delete image editor instance.
 
201
 
 
202
    if (ImageWindow::imagewindowCreated())
 
203
        ImageWindow::imagewindow()->close(true);
 
204
 
 
205
    // Close and delete light table instance.
 
206
 
 
207
    if (LightTableWindow::lightTableWindowCreated())
 
208
        LightTableWindow::lightTableWindow()->close(true);
 
209
 
 
210
    if (d->view)
 
211
        delete d->view;
 
212
 
 
213
    d->albumIconViewFilter->saveSettings();
 
214
    d->albumSettings->setRecurseAlbums(d->recurseAlbumsAction->isChecked());
 
215
    d->albumSettings->setRecurseTags(d->recurseTagsAction->isChecked());
 
216
    d->albumSettings->saveSettings();
 
217
    delete d->albumSettings;
 
218
 
 
219
    delete d->albumManager;
157
220
    delete AlbumLister::instance();
158
221
 
159
 
    Digikam::DcrawBinary::cleanUp();
 
222
    ImageAttributesWatch::cleanUp();
 
223
    LoadingCacheInterface::cleanUp();
 
224
    KDcrawIface::DcrawBinary::cleanUp();
 
225
    AlbumThumbnailLoader::cleanUp();
160
226
 
161
227
    m_instance = 0;
 
228
 
 
229
    delete d;
162
230
}
163
231
 
164
232
DigikamApp* DigikamApp::getinstance()
168
236
 
169
237
void DigikamApp::show()
170
238
{
171
 
    if(mSplash)
 
239
    // Remove Splashscreen.
 
240
 
 
241
    if(d->splashScreen)
172
242
    {
173
 
        mSplash->finish(this);
174
 
        delete mSplash;
175
 
        mSplash = 0;
 
243
        d->splashScreen->finish(this);
 
244
        delete d->splashScreen;
 
245
        d->splashScreen = 0;
176
246
    }
 
247
 
 
248
    // Display application window.
 
249
 
177
250
    KMainWindow::show();
 
251
 
 
252
    // Report errors from ICC repository path.
 
253
 
 
254
    if(!d->validIccPath)
 
255
    {
 
256
        QString message = i18n("<qt><p>ICC profiles path seems to be invalid.</p>"
 
257
                               "<p>If you want to set it now, select \"Yes\", otherwise "
 
258
                               "select \"No\". In this case, \"Color Management\" feature "
 
259
                               "will be disabled until you solve this issue</p></qt>");
 
260
 
 
261
        if (KMessageBox::warningYesNo(this, message) == KMessageBox::Yes)
 
262
        {
 
263
            if (!setup(true))
 
264
            {
 
265
                d->config->setGroup("Color Management");
 
266
                d->config->writeEntry("EnableCM", false);
 
267
                d->config->sync();
 
268
            }
 
269
        }
 
270
        else
 
271
        {
 
272
            d->config->setGroup("Color Management");
 
273
            d->config->writeEntry("EnableCM", false);
 
274
            d->config->sync();
 
275
        }
 
276
    }
 
277
 
 
278
    // Report errors from dcraw detection.
 
279
    KDcrawIface::DcrawBinary::instance()->checkReport();
 
280
 
 
281
    // Init album icon view zoom factor. 
 
282
    slotThumbSizeChanged(d->albumSettings->getDefaultIconSize());
178
283
}
179
284
 
180
285
const QPtrList<KAction>& DigikamApp::menuImageActions()
181
286
{
182
 
    return m_kipiImageActions;
 
287
    return d->kipiImageActions;
183
288
}
184
289
 
185
290
const QPtrList<KAction>& DigikamApp::menuBatchActions()
186
291
{
187
 
    return m_kipiBatchActions;
 
292
    return d->kipiBatchActions;
188
293
}
189
294
 
190
295
const QPtrList<KAction>& DigikamApp::menuAlbumActions()
191
296
{
192
 
    return m_kipiAlbumActions;
 
297
    return d->kipiAlbumActions;
193
298
}
194
299
 
195
300
const QPtrList<KAction> DigikamApp::menuImportActions()
196
301
{
197
302
    QPtrList<KAction> importMenu;
198
 
    importMenu = m_kipiFileActionsImport;
199
 
    importMenu.append( mAlbumImportAction );
200
 
    importMenu.append( mAddImagesAction );
 
303
    importMenu = d->kipiFileActionsImport;
 
304
    importMenu.append( d->albumImportAction );
 
305
    importMenu.append( d->addImagesAction );
201
306
    return importMenu;
202
307
}
203
308
 
 
309
const QPtrList<KAction> DigikamApp::menuExportActions()
 
310
{
 
311
    return d->kipiFileActionsExport;
 
312
}
 
313
 
204
314
void DigikamApp::autoDetect()
205
315
{
206
 
    // Auto-detect camera if requested so
207
 
    if(mSplash)
208
 
        mSplash->message(i18n("Auto-detect camera"), AlignLeft, white);
 
316
    // Called from main if command line option is set
 
317
 
 
318
    if(d->splashScreen)
 
319
        d->splashScreen->message(i18n("Auto-detect camera"), AlignLeft, white);
 
320
 
209
321
    QTimer::singleShot(0, this, SLOT(slotCameraAutoDetect()));
210
322
}
211
323
 
212
324
void DigikamApp::downloadFrom(const QString &cameraGuiPath)
213
325
{
 
326
    // Called from main if command line option is set
 
327
 
214
328
    if (!cameraGuiPath.isNull())
215
329
    {
216
 
        mCameraGuiPath = cameraGuiPath;
217
 
        
218
 
        if(mSplash)
219
 
            mSplash->message(i18n("Opening Download Dialog"), AlignLeft, white);
220
 
        
 
330
        d->cameraGuiPath = cameraGuiPath;
 
331
 
 
332
        if(d->splashScreen)
 
333
            d->splashScreen->message(i18n("Opening Download Dialog"), AlignLeft, white);
 
334
 
221
335
        QTimer::singleShot(0, this, SLOT(slotDownloadImages()));
222
336
    }
223
337
}
224
338
 
225
339
bool DigikamApp::queryClose()
226
340
{
227
 
    return true;
 
341
    if (ImageWindow::imagewindowCreated())
 
342
    {
 
343
        return ImageWindow::imagewindow()->queryClose();
 
344
    }
 
345
    else
 
346
        return true;
228
347
}
229
348
 
230
349
void DigikamApp::setupView()
231
350
{
232
 
    mView = new DigikamView(this);
233
 
    setCentralWidget(mView);
234
 
    mView->applySettings(mAlbumSettings);
235
 
 
236
 
    connect(mView, SIGNAL(signal_albumSelected(bool)),
237
 
            this, SLOT(slot_albumSelected(bool)));
238
 
    connect(mView, SIGNAL(signal_tagSelected(bool)),
239
 
            this, SLOT(slot_tagSelected(bool)));
240
 
 
241
 
    connect(mView, SIGNAL(signal_imageSelected(bool)),
242
 
            this, SLOT(slot_imageSelected(bool)));
 
351
    if(d->splashScreen)
 
352
        d->splashScreen->message(i18n("Initializing Main View"), AlignLeft, white);
 
353
 
 
354
    d->view = new DigikamView(this);
 
355
    setCentralWidget(d->view);
 
356
    d->view->applySettings();
 
357
 
 
358
    connect(d->view, SIGNAL(signalAlbumSelected(bool)),
 
359
            this, SLOT(slotAlbumSelected(bool)));
 
360
 
 
361
    connect(d->view, SIGNAL(signalTagSelected(bool)),
 
362
            this, SLOT(slotTagSelected(bool)));
 
363
 
 
364
    connect(d->view, SIGNAL(signalImageSelected(const QPtrList<ImageInfo>&, bool, bool, const KURL::List&)),
 
365
            this, SLOT(slotImageSelected(const QPtrList<ImageInfo>&, bool, bool, const KURL::List&)));
 
366
}
 
367
 
 
368
void DigikamApp::setupStatusBar()
 
369
{
 
370
    d->statusProgressBar = new StatusProgressBar(statusBar());
 
371
    d->statusProgressBar->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
 
372
    d->statusProgressBar->setMaximumHeight(fontMetrics().height()+4);
 
373
    statusBar()->addWidget(d->statusProgressBar, 100, true);
 
374
 
 
375
    //------------------------------------------------------------------------------
 
376
 
 
377
    d->albumIconViewFilter = new AlbumIconViewFilter(statusBar());
 
378
    d->albumIconViewFilter->setMaximumHeight(fontMetrics().height()+4);
 
379
    statusBar()->addWidget(d->albumIconViewFilter, 100, true);
 
380
 
 
381
    //------------------------------------------------------------------------------
 
382
 
 
383
    d->statusZoomBar = new StatusZoomBar(statusBar());
 
384
    d->statusZoomBar->setMaximumHeight(fontMetrics().height()+4);
 
385
    statusBar()->addWidget(d->statusZoomBar, 1, true);
 
386
 
 
387
    //------------------------------------------------------------------------------
 
388
 
 
389
    d->statusNavigateBar = new StatusNavigateBar(statusBar());
 
390
    d->statusNavigateBar->setMaximumHeight(fontMetrics().height()+4);
 
391
    statusBar()->addWidget(d->statusNavigateBar, 1, true);
 
392
 
 
393
    //------------------------------------------------------------------------------
 
394
 
 
395
    connect(d->statusZoomBar, SIGNAL(signalZoomMinusClicked()),
 
396
            d->view, SLOT(slotZoomOut()));
 
397
 
 
398
    connect(d->statusZoomBar, SIGNAL(signalZoomPlusClicked()),
 
399
            d->view, SLOT(slotZoomIn()));
 
400
 
 
401
    connect(d->statusZoomBar, SIGNAL(signalZoomSliderChanged(int)),
 
402
            this, SLOT(slotZoomSliderChanged(int)));
 
403
 
 
404
    connect(d->view, SIGNAL(signalThumbSizeChanged(int)),
 
405
            this, SLOT(slotThumbSizeChanged(int)));
 
406
 
 
407
    connect(d->view, SIGNAL(signalZoomChanged(double, int)),
 
408
            this, SLOT(slotZoomChanged(double, int)));
 
409
 
 
410
    connect(d->view, SIGNAL(signalTogglePreview(bool)),
 
411
            this, SLOT(slotTogglePreview(bool)));
 
412
 
 
413
    connect(d->albumIconViewFilter, SIGNAL(signalResetTagFilters()),
 
414
            this, SIGNAL(signalResetTagFilters()));
 
415
 
 
416
    connect(d->statusNavigateBar, SIGNAL(signalFirstItem()),
 
417
            d->view, SLOT(slotFirstItem()));
 
418
 
 
419
    connect(d->statusNavigateBar, SIGNAL(signalNextItem()),
 
420
            d->view, SLOT(slotNextItem()));
 
421
 
 
422
    connect(d->statusNavigateBar, SIGNAL(signalPrevItem()),
 
423
            d->view, SLOT(slotPrevItem()));
 
424
 
 
425
    connect(d->statusNavigateBar, SIGNAL(signalLastItem()),
 
426
            d->view, SLOT(slotLastItem()));
 
427
 
 
428
    connect(d->statusProgressBar, SIGNAL(signalCancelButtonPressed()),
 
429
            this, SIGNAL(signalCancelButtonPressed()));
 
430
}
 
431
 
 
432
void DigikamApp::setupAccelerators()
 
433
{
 
434
    d->accelerators = new KAccel(this);
 
435
 
 
436
    d->accelerators->insert("Exit Preview Mode", i18n("Exit Preview"),
 
437
                           i18n("Exit preview mode"),
 
438
                           Key_Escape, this, SIGNAL(signalEscapePressed()),
 
439
                           false, true);
 
440
 
 
441
    d->accelerators->insert("Next Image Key_Space", i18n("Next Image"),
 
442
                           i18n("Next Image"),
 
443
                           Key_Space, this, SIGNAL(signalNextItem()),
 
444
                           false, true);
 
445
 
 
446
    d->accelerators->insert("Previous Image SHIFT+Key_Space", i18n("Previous Image"),
 
447
                           i18n("Previous Image"),
 
448
                           SHIFT+Key_Space, this, SIGNAL(signalPrevItem()),
 
449
                           false, true);
 
450
 
 
451
    d->accelerators->insert("Previous Image Key_Backspace", i18n("Previous Image"),
 
452
                           i18n("Previous Image"),
 
453
                           Key_Backspace, this, SIGNAL(signalPrevItem()),
 
454
                           false, true);
 
455
 
 
456
    d->accelerators->insert("Next Image Key_Next", i18n("Next Image"),
 
457
                           i18n("Next Image"),
 
458
                           Key_Next, this, SIGNAL(signalNextItem()),
 
459
                           false, true);
 
460
 
 
461
    d->accelerators->insert("Previous Image Key_Prior", i18n("Previous Image"),
 
462
                           i18n("Previous Image"),
 
463
                           Key_Prior, this, SIGNAL(signalPrevItem()),
 
464
                           false, true);
 
465
 
 
466
    d->accelerators->insert("First Image Key_Home", i18n("First Image"),
 
467
                           i18n("First Image"),
 
468
                           Key_Home, this, SIGNAL(signalFirstItem()),
 
469
                           false, true);
 
470
 
 
471
    d->accelerators->insert("Last Image Key_End", i18n("Last Image"),
 
472
                           i18n("Last Image"),
 
473
                           Key_End, this, SIGNAL(signalLastItem()),
 
474
                           false, true);
 
475
 
 
476
    d->accelerators->insert("Copy Album Items Selection CTRL+Key_C", i18n("Copy Album Items Selection"),
 
477
                           i18n("Copy Album Items Selection"),
 
478
                           CTRL+Key_C, this, SIGNAL(signalCopyAlbumItemsSelection()),
 
479
                           false, true);
 
480
 
 
481
    d->accelerators->insert("Paste Album Items Selection CTRL+Key_V", i18n("Paste Album Items Selection"),
 
482
                           i18n("Paste Album Items Selection"),
 
483
                           CTRL+Key_V, this, SIGNAL(signalPasteAlbumItemsSelection()),
 
484
                           false, true);
243
485
}
244
486
 
245
487
void DigikamApp::setupActions()
246
488
{
247
489
    // -----------------------------------------------------------------
248
490
 
249
 
    mCameraMenuAction = new KActionMenu(i18n("&Camera"),
 
491
    d->cameraMenuAction = new KActionMenu(i18n("&Camera"),
250
492
                                    "digitalcam",
251
493
                                    actionCollection(),
252
494
                                    "camera_menu");
253
 
    mCameraMenuAction->setDelayed(false);
254
 
 
255
 
    // -----------------------------------------------------------------
256
 
 
257
 
    mThemeMenuAction = new KSelectAction(i18n("&Themes"), 0,
258
 
                                         actionCollection(),
259
 
                                         "theme_menu");
260
 
    connect(mThemeMenuAction, SIGNAL(activated(const QString&)),
261
 
            SLOT(slotChangeTheme(const QString&)));
262
 
 
263
 
    // -----------------------------------------------------------------
264
 
 
265
 
    mBackwardActionMenu = new  KToolBarPopupAction(i18n("&Back"),
 
495
    d->cameraMenuAction->setDelayed(false);
 
496
 
 
497
    // -----------------------------------------------------------------
 
498
 
 
499
    d->themeMenuAction = new KSelectAction(i18n("&Themes"), 0, actionCollection(), "theme_menu");
 
500
    connect(d->themeMenuAction, SIGNAL(activated(const QString&)),
 
501
            this, SLOT(slotChangeTheme(const QString&)));
 
502
 
 
503
    connect(ThemeEngine::instance(), SIGNAL(signalThemeChanged()),
 
504
            this, SLOT(slotThemeChanged()));
 
505
 
 
506
    // -----------------------------------------------------------------
 
507
 
 
508
    d->backwardActionMenu = new KToolBarPopupAction(i18n("&Back"),
266
509
                                    "back",
267
510
                                    ALT+Key_Left,
268
 
                                    mView,
 
511
                                    d->view,
269
512
                                    SLOT(slotAlbumHistoryBack()),
270
513
                                    actionCollection(),
271
514
                                    "album_back");
272
 
    mBackwardActionMenu->setEnabled(false);
273
 
    connect(mBackwardActionMenu->popupMenu(),
274
 
            SIGNAL(aboutToShow()),
275
 
            this,
276
 
            SLOT(slotAboutToShowBackwardMenu()));
277
 
    connect(mBackwardActionMenu->popupMenu(),
278
 
            SIGNAL(activated(int)),
279
 
            mView,
280
 
            SLOT(slotAlbumHistoryBack(int)));
281
 
 
282
 
    mForwardActionMenu = new  KToolBarPopupAction(i18n("Forward"),
 
515
    d->backwardActionMenu->setEnabled(false);
 
516
 
 
517
    connect(d->backwardActionMenu->popupMenu(), SIGNAL(aboutToShow()),
 
518
            this, SLOT(slotAboutToShowBackwardMenu()));
 
519
 
 
520
    connect(d->backwardActionMenu->popupMenu(), SIGNAL(activated(int)),
 
521
            d->view, SLOT(slotAlbumHistoryBack(int)));
 
522
 
 
523
    d->forwardActionMenu = new  KToolBarPopupAction(i18n("Forward"),
283
524
                                    "forward",
284
525
                                    ALT+Key_Right,
285
 
                                    mView,
 
526
                                    d->view,
286
527
                                    SLOT(slotAlbumHistoryForward()),
287
528
                                    actionCollection(),
288
529
                                    "album_forward");
289
 
    mForwardActionMenu->setEnabled(false);
290
 
    connect(mForwardActionMenu->popupMenu(),
291
 
            SIGNAL(aboutToShow()),
292
 
            this,
293
 
            SLOT(slotAboutToShowForwardMenu()));
294
 
    connect(mForwardActionMenu->popupMenu(),
295
 
            SIGNAL(activated(int)),
296
 
            mView,
297
 
            SLOT(slotAlbumHistoryForward(int)));
298
 
 
299
 
    mNewAction = new KAction(i18n("&New Album..."),
300
 
                                    "albumfoldernew",
301
 
                                    KStdAccel::shortcut(KStdAccel::New),
302
 
                                    mView,
303
 
                                    SLOT(slot_newAlbum()),
304
 
                                    actionCollection(),
305
 
                                    "album_new");
306
 
    mNewAction->setWhatsThis(i18n("This option creates a new empty Album in the database."));
307
 
 
308
 
    mAlbumSortAction = new KSelectAction(i18n("&Sort Albums"),
 
530
    d->forwardActionMenu->setEnabled(false);
 
531
 
 
532
    connect(d->forwardActionMenu->popupMenu(), SIGNAL(aboutToShow()),
 
533
            this, SLOT(slotAboutToShowForwardMenu()));
 
534
 
 
535
    connect(d->forwardActionMenu->popupMenu(), SIGNAL(activated(int)),
 
536
            d->view, SLOT(slotAlbumHistoryForward(int)));
 
537
 
 
538
    d->newAction = new KAction(i18n("&New..."),
 
539
                                   "albumfolder-new",
 
540
                                   KStdAccel::shortcut(KStdAccel::New),
 
541
                                   d->view,
 
542
                                   SLOT(slotNewAlbum()),
 
543
                                   actionCollection(),
 
544
                                   "album_new");
 
545
    d->newAction->setWhatsThis(i18n("Creates a new empty Album in the database."));
 
546
 
 
547
    d->albumSortAction = new KSelectAction(i18n("&Sort Albums"),
309
548
                                    0,
310
549
                                    0,
311
550
                                    actionCollection(),
312
551
                                    "album_sort");
313
552
 
314
 
    connect(mAlbumSortAction, SIGNAL(activated(int)),
315
 
            mView, SLOT(slot_sortAlbums(int)));
 
553
    connect(d->albumSortAction, SIGNAL(activated(int)),
 
554
            d->view, SLOT(slotSortAlbums(int)));
316
555
 
317
556
    // Use same list order as in albumsettings enum
318
557
    QStringList sortActionList;
319
558
    sortActionList.append(i18n("By Folder"));
320
559
    sortActionList.append(i18n("By Collection"));
321
560
    sortActionList.append(i18n("By Date"));
322
 
    mAlbumSortAction->setItems(sortActionList);
323
 
 
324
 
    mDeleteAction = new KAction(i18n("Delete Album"),
 
561
    d->albumSortAction->setItems(sortActionList);
 
562
 
 
563
    d->recurseAlbumsAction = new KToggleAction(i18n("Include Album Sub-Tree"), 
 
564
                                               0,
 
565
                                               this, 
 
566
                                               0,
 
567
                                               actionCollection(), 
 
568
                                               "albums_recursive");
 
569
    d->recurseAlbumsAction->setWhatsThis(i18n("Activate this option to recursively show all sub-albums below "
 
570
                                              "the current album."));
 
571
 
 
572
    connect(d->recurseAlbumsAction, SIGNAL(toggled(bool)),
 
573
            this, SLOT(slotRecurseAlbums(bool)));
 
574
 
 
575
    d->recurseTagsAction = new KToggleAction(i18n("Include Tag Sub-Tree"), 
 
576
                                             0,
 
577
                                             this, 
 
578
                                             0,
 
579
                                             actionCollection(), 
 
580
                                             "tags_recursive");
 
581
    d->recurseTagsAction->setWhatsThis(i18n("Activate this option to show all images marked by the given tag " 
 
582
                                            "and its all its sub-tags."));
 
583
 
 
584
    connect(d->recurseTagsAction, SIGNAL(toggled(bool)),
 
585
            this, SLOT(slotRecurseTags(bool)));
 
586
 
 
587
    d->deleteAction = new KAction(i18n("Delete"),
325
588
                                    "editdelete",
326
589
                                    0,
327
 
                                    mView,
328
 
                                    SLOT(slot_deleteAlbum()),
 
590
                                    d->view,
 
591
                                    SLOT(slotDeleteAlbum()),
329
592
                                    actionCollection(),
330
593
                                    "album_delete");
331
594
 
332
 
    mAddImagesAction = new KAction( i18n("Add Images..."),
333
 
                                    "addimagefolder",
 
595
    d->addImagesAction = new KAction( i18n("Add Images..."),
 
596
                                    "albumfolder-importimages",
334
597
                                    CTRL+Key_I,
335
 
                                    mView,
336
 
                                    SLOT(slot_albumAddImages()),
 
598
                                    this,
 
599
                                    SLOT(slotAlbumAddImages()),
337
600
                                    actionCollection(),
338
601
                                    "album_addImages");
339
 
    mAddImagesAction->setWhatsThis(i18n("This option adds new images to the current Album."));
 
602
    d->addImagesAction->setWhatsThis(i18n("Adds new items to the current Album."));
340
603
 
341
 
    mAlbumImportAction = new KAction( i18n("Import Folders..."),
342
 
                                    "fileopen",
 
604
    d->albumImportAction = new KAction( i18n("Add Folders..."),
 
605
                                    "albumfolder-importdir",
343
606
                                    0,
344
 
                                    mView,
 
607
                                    d->view,
345
608
                                    SLOT(slotAlbumImportFolder()),
346
609
                                    actionCollection(),
347
610
                                    "album_importFolder");
348
611
 
349
 
 
350
 
    mPropsEditAction = new KAction( i18n("Edit Album Properties..."),
351
 
                                    "albumfoldercomment",
 
612
    d->propsEditAction = new KAction( i18n("Properties..."),
 
613
                                    "albumfolder-properties",
352
614
                                    0,
353
 
                                    mView,
354
 
                                    SLOT(slot_albumPropsEdit()),
 
615
                                    d->view,
 
616
                                    SLOT(slotAlbumPropsEdit()),
355
617
                                    actionCollection(),
356
618
                                    "album_propsEdit");
357
 
    mPropsEditAction->setWhatsThis(i18n("This option allows you to set the Album Properties information "
358
 
                                        "about the Collection."));
359
 
 
360
 
    mOpenInKonquiAction = new KAction( i18n("Open in Konqueror"),
 
619
    d->propsEditAction->setWhatsThis(i18n("Edit Album Properties and Collection information."));
 
620
 
 
621
    d->refreshAlbumAction = new KAction( i18n("Refresh"),
 
622
                                    "rebuild",
 
623
                                    Key_F5,
 
624
                                    d->view,
 
625
                                    SLOT(slotAlbumRefresh()),
 
626
                                    actionCollection(),
 
627
                                    "album_refresh");
 
628
    d->refreshAlbumAction->setWhatsThis(i18n("Refresh all album contents"));
 
629
 
 
630
    d->syncAlbumMetadataAction = new KAction( i18n("Synchronize images with database"),
 
631
                                    "rebuild",
 
632
                                    0,
 
633
                                    d->view,
 
634
                                    SLOT(slotAlbumSyncPicturesMetadata()),
 
635
                                    actionCollection(),
 
636
                                    "album_syncmetadata");
 
637
    d->syncAlbumMetadataAction->setWhatsThis(i18n("Updates all image metadata of the current "
 
638
                                                  "album with the contents of the digiKam database "
 
639
                                                  "(image metadata will be over-written with data from the database)."));
 
640
 
 
641
    d->openInKonquiAction = new KAction( i18n("Open in Konqueror"),
361
642
                                    "konqueror",
362
643
                                    0,
363
 
                                    mView,
364
 
                                    SLOT(slot_albumOpenInKonqui()),
 
644
                                    d->view,
 
645
                                    SLOT(slotAlbumOpenInKonqui()),
365
646
                                    actionCollection(),
366
647
                                    "album_openinkonqui");
367
648
 
368
649
    // -----------------------------------------------------------
369
650
 
370
 
    mNewTagAction = new KAction(i18n("New &Tag..."), "tag",
371
 
                                0, mView, SLOT(slotNewTag()),
 
651
    d->newTagAction = new KAction(i18n("New &Tag..."), "tag-new",
 
652
                                0, d->view, SLOT(slotNewTag()),
372
653
                                actionCollection(), "tag_new");
373
654
 
374
 
    mDeleteTagAction = new KAction(i18n("Delete Tag"), "tag",
375
 
                                   0, mView, SLOT(slotDeleteTag()),
 
655
    d->editTagAction = new KAction(i18n("Edit Tag Properties..."), "tag-properties",
 
656
                                 0, d->view, SLOT(slotEditTag()),
 
657
                                 actionCollection(), "tag_edit");
 
658
 
 
659
    d->deleteTagAction = new KAction(i18n("Delete Tag"), "tag-delete",
 
660
                                   0, d->view, SLOT(slotDeleteTag()),
376
661
                                   actionCollection(), "tag_delete");
377
662
 
378
 
    mEditTagAction = new KAction( i18n("Edit Tag Properties..."), "tag",
379
 
                                  0, mView, SLOT(slotEditTag()),
380
 
                                  actionCollection(), "tag_edit");
381
 
 
382
663
    // -----------------------------------------------------------
383
664
 
384
 
    mImageViewAction = new KAction(i18n("View/Edit..."),
 
665
    d->imagePreviewAction = new KToggleAction(i18n("View..."),
 
666
                                    "viewimage",
 
667
                                    Key_F3,
 
668
                                    d->view,
 
669
                                    SLOT(slotImagePreview()),
 
670
                                    actionCollection(),
 
671
                                    "image_view");
 
672
 
 
673
    d->imageViewAction = new KAction(i18n("Edit..."),
385
674
                                    "editimage",
386
675
                                    Key_F4,
387
 
                                    mView,
388
 
                                    SLOT(slot_imageView()),
389
 
                                    actionCollection(),
390
 
                                    "image_view");
391
 
    mImageViewAction->setWhatsThis(i18n("This option allows you to open the Image Editor with the currently selected "
392
 
                                        "image."));
393
 
 
394
 
    mImageCommentsAction = new KAction(i18n("Edit Image Comments && Tags..."),
395
 
                                   "imagecomment",
396
 
                                    Key_F3,
397
 
                                    mView,
398
 
                                    SLOT(slot_imageCommentsEdit()),
399
 
                                    actionCollection(),
400
 
                                    "image_comments");
401
 
    mImageCommentsAction->setWhatsThis(i18n("This option allows you to edit the comments and tags of the currently "
402
 
                                            "selected image."));
403
 
 
404
 
    mImageRenameAction = new KAction(i18n("Rename..."),
 
676
                                    d->view,
 
677
                                    SLOT(slotImageEdit()),
 
678
                                    actionCollection(),
 
679
                                    "image_edit");
 
680
    d->imageViewAction->setWhatsThis(i18n("Open the selected item in the image editor."));
 
681
 
 
682
    d->imageLightTableAction = new KAction(i18n("Place onto Light Table"),
 
683
                                    "lighttable",
 
684
                                    Key_F6,
 
685
                                    d->view,
 
686
                                    SLOT(slotImageLightTable()),
 
687
                                    actionCollection(),
 
688
                                    "image_lighttable");
 
689
    d->imageLightTableAction->setWhatsThis(i18n("Place the selected items on the light table thumbbar."));
 
690
 
 
691
    d->imageAddLightTableAction = new KAction(i18n("Add to Light Table"),
 
692
                                    "lighttableadd",
 
693
                                    CTRL+Key_F6,
 
694
                                    d->view,
 
695
                                    SLOT(slotImageAddToLightTable()),
 
696
                                    actionCollection(),
 
697
                                    "image_add_to_lighttable");
 
698
    d->imageAddLightTableAction->setWhatsThis(i18n("Add selected items to the light table thumbbar."));
 
699
 
 
700
    d->imageRenameAction = new KAction(i18n("Rename..."),
405
701
                                    "pencil",
406
702
                                    Key_F2,
407
 
                                    mView,
408
 
                                    SLOT(slot_imageRename()),
 
703
                                    d->view,
 
704
                                    SLOT(slotImageRename()),
409
705
                                    actionCollection(),
410
706
                                    "image_rename");
411
 
    mImageRenameAction->setWhatsThis(i18n("This option allows you to rename the filename of the currently selected "
412
 
                                          "image."));
413
 
 
414
 
    mImageDeleteAction = new KAction(i18n("Delete"),
415
 
                                    "editdelete",
416
 
                                    SHIFT+Key_Delete,
417
 
                                    mView,
418
 
                                    SLOT(slot_imageDelete()),
419
 
                                    actionCollection(),
420
 
                                    "image_delete");
421
 
 
422
 
    mImagePropsAction = new KAction(i18n("Properties"),
423
 
                                    "exifinfo",
424
 
                                    ALT+Key_Return,
425
 
                                    mView,
426
 
                                    SLOT(slotImageProperties()),
427
 
                                    actionCollection(),
428
 
                                    "image_properties");
429
 
    mImagePropsAction->setWhatsThis(i18n("This option allows you to display the file properties, the meta-data "
430
 
                                         "and the histogram of the currently selected image."));
431
 
 
432
 
    mImageSortAction = new KSelectAction(i18n("&Sort Images"),
433
 
                                    0,
434
 
                                    0,
435
 
                                    actionCollection(),
436
 
                                    "image_sort");
437
 
 
438
 
    connect(mImageSortAction, SIGNAL(activated(int)),
439
 
            mView, SLOT(slotSortImages(int)));
 
707
    d->imageRenameAction->setWhatsThis(i18n("Change the filename of the currently selected item."));
 
708
 
 
709
    // Pop up dialog to ask user whether to move to trash
 
710
    d->imageDeleteAction            = new KAction(i18n("Delete"),
 
711
                                                "edittrash",
 
712
                                                Key_Delete,
 
713
                                                d->view,
 
714
                                                SLOT(slotImageDelete()),
 
715
                                                actionCollection(),
 
716
                                                "image_delete");
 
717
 
 
718
    // Pop up dialog to ask user whether to permanently delete
 
719
    d->imageDeletePermanentlyAction = new KAction(i18n("Delete permanently"),
 
720
                                                "editdelete",
 
721
                                                SHIFT+Key_Delete,
 
722
                                                d->view,
 
723
                                                SLOT(slotImageDeletePermanently()),
 
724
                                                actionCollection(),
 
725
                                                "image_delete_permanently");
 
726
 
 
727
    // These two actions are hidden, no menu entry, no toolbar entry, no shortcut.
 
728
    // Power users may add them.
 
729
    d->imageDeletePermanentlyDirectlyAction = new KAction(i18n("Delete permanently without confirmation"),
 
730
                                                        "editdelete",
 
731
                                                        0,
 
732
                                                        d->view,
 
733
                                                        SLOT(slotImageDeletePermanentlyDirectly()),
 
734
                                                        actionCollection(),
 
735
                                                        "image_delete_permanently_directly");
 
736
 
 
737
    d->imageTrashDirectlyAction = new KAction(i18n("Move to trash without confirmation"),
 
738
                                              "edittrash",
 
739
                                               0,
 
740
                                               d->view,
 
741
                                               SLOT(slotImageTrashDirectly()),
 
742
                                               actionCollection(),
 
743
                                               "image_trash_directly");
 
744
 
 
745
    d->imageSortAction = new KSelectAction(i18n("&Sort Images"),
 
746
                                           0,
 
747
                                           0,
 
748
                                           actionCollection(),
 
749
                                           "image_sort");
 
750
 
 
751
    connect(d->imageSortAction, SIGNAL(activated(int)),
 
752
            d->view, SLOT(slotSortImages(int)));
440
753
 
441
754
    // Use same list order as in albumsettings enum
442
755
    QStringList sortImagesActionList;
445
758
    sortImagesActionList.append(i18n("By Date"));
446
759
    sortImagesActionList.append(i18n("By File Size"));
447
760
    sortImagesActionList.append(i18n("By Rating"));
448
 
    mImageSortAction->setItems(sortImagesActionList);
449
 
 
450
 
    // -----------------------------------------------------------------
451
 
 
452
 
    QSignalMapper *exifOrientationMapper = new QSignalMapper( mView );
453
 
    connect( exifOrientationMapper, SIGNAL( mapped( int ) ),
454
 
              mView, SLOT( slot_imageExifOrientation( int ) ) );
455
 
 
456
 
    mImageExifOrientationActionMenu = new KActionMenu(i18n("Correct Exif Orientation Tag"),
457
 
                                                      actionCollection(),
458
 
                                                      "image_set_exif_orientation");
459
 
    mImageExifOrientationActionMenu->setDelayed(false);
460
 
 
461
 
    mImageSetExifOrientation1Action =
462
 
        new KAction(i18n("Normal"),0,mImageExifOrientationActionMenu);
463
 
    mImageSetExifOrientation2Action =
464
 
        new KAction(i18n("Flipped Horizontally"),0,mImageExifOrientationActionMenu);
465
 
    mImageSetExifOrientation3Action =
466
 
        new KAction(i18n("Rotated 180 Degrees"),0,mImageExifOrientationActionMenu);
467
 
    mImageSetExifOrientation4Action =
468
 
        new KAction(i18n("Flipped Vertically"),0,mImageExifOrientationActionMenu);
469
 
    mImageSetExifOrientation5Action =
470
 
        new KAction(i18n("Rotated 90 Degrees / Horiz. Flipped"),
471
 
                    0, mImageExifOrientationActionMenu);
472
 
    mImageSetExifOrientation6Action =
473
 
        new KAction(i18n("Rotated 90 Degrees"),0,mImageExifOrientationActionMenu);
474
 
    mImageSetExifOrientation7Action =
475
 
        new KAction(i18n("Rotated 90 Degrees / Vert. Flipped"),
476
 
                    0, mImageExifOrientationActionMenu);
477
 
    mImageSetExifOrientation8Action =
478
 
        new KAction(i18n("Rotated 270 Degrees"),0,mImageExifOrientationActionMenu);
479
 
 
480
 
    mImageExifOrientationActionMenu->insert(mImageSetExifOrientation1Action);
481
 
    mImageExifOrientationActionMenu->insert(mImageSetExifOrientation2Action);
482
 
    mImageExifOrientationActionMenu->insert(mImageSetExifOrientation3Action);
483
 
    mImageExifOrientationActionMenu->insert(mImageSetExifOrientation4Action);
484
 
    mImageExifOrientationActionMenu->insert(mImageSetExifOrientation5Action);
485
 
    mImageExifOrientationActionMenu->insert(mImageSetExifOrientation6Action);
486
 
    mImageExifOrientationActionMenu->insert(mImageSetExifOrientation7Action);
487
 
    mImageExifOrientationActionMenu->insert(mImageSetExifOrientation8Action);
488
 
 
489
 
    connect( mImageSetExifOrientation1Action, SIGNAL( activated() ), exifOrientationMapper, SLOT( map() ) );
490
 
    connect( mImageSetExifOrientation2Action, SIGNAL( activated() ), exifOrientationMapper, SLOT( map() ) );
491
 
    connect( mImageSetExifOrientation3Action, SIGNAL( activated() ), exifOrientationMapper, SLOT( map() ) );
492
 
    connect( mImageSetExifOrientation4Action, SIGNAL( activated() ), exifOrientationMapper, SLOT( map() ) );
493
 
    connect( mImageSetExifOrientation5Action, SIGNAL( activated() ), exifOrientationMapper, SLOT( map() ) );
494
 
    connect( mImageSetExifOrientation6Action, SIGNAL( activated() ), exifOrientationMapper, SLOT( map() ) );
495
 
    connect( mImageSetExifOrientation7Action, SIGNAL( activated() ), exifOrientationMapper, SLOT( map() ) );
496
 
    connect( mImageSetExifOrientation8Action, SIGNAL( activated() ), exifOrientationMapper, SLOT( map() ) );
497
 
 
498
 
    exifOrientationMapper->setMapping( mImageSetExifOrientation1Action, 1);
499
 
    exifOrientationMapper->setMapping( mImageSetExifOrientation2Action, 2);
500
 
    exifOrientationMapper->setMapping( mImageSetExifOrientation3Action, 3);
501
 
    exifOrientationMapper->setMapping( mImageSetExifOrientation4Action, 4);
502
 
    exifOrientationMapper->setMapping( mImageSetExifOrientation5Action, 5);
503
 
    exifOrientationMapper->setMapping( mImageSetExifOrientation6Action, 6);
504
 
    exifOrientationMapper->setMapping( mImageSetExifOrientation7Action, 7);
505
 
    exifOrientationMapper->setMapping( mImageSetExifOrientation8Action, 8);
506
 
 
507
 
    // -----------------------------------------------------------------
508
 
 
509
 
    mSelectAllAction = new KAction(i18n("Select All"),
510
 
                                    0,
511
 
                                    CTRL+Key_A,
512
 
                                    mView,
513
 
                                    SLOT(slotSelectAll()),
514
 
                                    actionCollection(),
515
 
                                    "selectAll");
516
 
 
517
 
    mSelectNoneAction = new KAction(i18n("Select None"),
518
 
                                    0,
519
 
                                    CTRL+Key_U,
520
 
                                    mView,
521
 
                                    SLOT(slotSelectNone()),
522
 
                                    actionCollection(),
523
 
                                    "selectNone");
524
 
 
525
 
    mSelectInvertAction = new KAction(i18n("Invert Selection"),
526
 
                                    0,
527
 
                                    CTRL+Key_Asterisk,
528
 
                                    mView,
529
 
                                    SLOT(slotSelectInvert()),
530
 
                                    actionCollection(),
531
 
                                    "selectInvert");
 
761
    d->imageSortAction->setItems(sortImagesActionList);
 
762
 
 
763
    // -----------------------------------------------------------------
 
764
 
 
765
    QSignalMapper *exifOrientationMapper = new QSignalMapper( d->view );
 
766
 
 
767
    connect(exifOrientationMapper, SIGNAL(mapped(int) ),
 
768
            d->view, SLOT(slotImageExifOrientation(int)));
 
769
 
 
770
    d->imageExifOrientationActionMenu = new KActionMenu(i18n("Adjust Exif orientation tag"),
 
771
                                                        actionCollection(),
 
772
                                                        "image_set_exif_orientation");
 
773
    d->imageExifOrientationActionMenu->setDelayed(false);
 
774
 
 
775
    d->imageSetExifOrientation1Action =
 
776
        new KAction(i18n("Normal"),0,d->imageExifOrientationActionMenu);
 
777
    d->imageSetExifOrientation2Action =
 
778
        new KAction(i18n("Flipped Horizontally"),0,d->imageExifOrientationActionMenu);
 
779
    d->imageSetExifOrientation3Action =
 
780
        new KAction(i18n("Rotated upside down"),0,d->imageExifOrientationActionMenu);
 
781
    d->imageSetExifOrientation4Action =
 
782
        new KAction(i18n("Flipped Vertically"),0,d->imageExifOrientationActionMenu);
 
783
    d->imageSetExifOrientation5Action =
 
784
        new KAction(i18n("Rotated right / Horiz. Flipped"), 0, d->imageExifOrientationActionMenu);
 
785
    d->imageSetExifOrientation6Action =
 
786
        new KAction(i18n("Rotated right"),0,d->imageExifOrientationActionMenu);
 
787
    d->imageSetExifOrientation7Action =
 
788
        new KAction(i18n("Rotated right / Vert. Flipped"), 0, d->imageExifOrientationActionMenu);
 
789
    d->imageSetExifOrientation8Action =
 
790
        new KAction(i18n("Rotated left"),0,d->imageExifOrientationActionMenu);
 
791
 
 
792
    d->imageExifOrientationActionMenu->insert(d->imageSetExifOrientation1Action);
 
793
    d->imageExifOrientationActionMenu->insert(d->imageSetExifOrientation2Action);
 
794
    d->imageExifOrientationActionMenu->insert(d->imageSetExifOrientation3Action);
 
795
    d->imageExifOrientationActionMenu->insert(d->imageSetExifOrientation4Action);
 
796
    d->imageExifOrientationActionMenu->insert(d->imageSetExifOrientation5Action);
 
797
    d->imageExifOrientationActionMenu->insert(d->imageSetExifOrientation6Action);
 
798
    d->imageExifOrientationActionMenu->insert(d->imageSetExifOrientation7Action);
 
799
    d->imageExifOrientationActionMenu->insert(d->imageSetExifOrientation8Action);
 
800
 
 
801
    connect(d->imageSetExifOrientation1Action, SIGNAL(activated()),
 
802
            exifOrientationMapper, SLOT(map()));
 
803
 
 
804
    connect(d->imageSetExifOrientation2Action, SIGNAL(activated()),
 
805
            exifOrientationMapper, SLOT(map()));
 
806
 
 
807
    connect(d->imageSetExifOrientation3Action, SIGNAL(activated()),
 
808
            exifOrientationMapper, SLOT(map()));
 
809
 
 
810
    connect(d->imageSetExifOrientation4Action, SIGNAL(activated()),
 
811
            exifOrientationMapper, SLOT(map()));
 
812
 
 
813
    connect(d->imageSetExifOrientation5Action, SIGNAL(activated()),
 
814
            exifOrientationMapper, SLOT(map()));
 
815
 
 
816
    connect(d->imageSetExifOrientation6Action, SIGNAL(activated()),
 
817
            exifOrientationMapper, SLOT(map()));
 
818
 
 
819
    connect(d->imageSetExifOrientation7Action, SIGNAL(activated()),
 
820
            exifOrientationMapper, SLOT(map()));
 
821
 
 
822
    connect(d->imageSetExifOrientation8Action, SIGNAL(activated()),
 
823
            exifOrientationMapper, SLOT(map()));
 
824
 
 
825
    exifOrientationMapper->setMapping(d->imageSetExifOrientation1Action, 1);
 
826
    exifOrientationMapper->setMapping(d->imageSetExifOrientation2Action, 2);
 
827
    exifOrientationMapper->setMapping(d->imageSetExifOrientation3Action, 3);
 
828
    exifOrientationMapper->setMapping(d->imageSetExifOrientation4Action, 4);
 
829
    exifOrientationMapper->setMapping(d->imageSetExifOrientation5Action, 5);
 
830
    exifOrientationMapper->setMapping(d->imageSetExifOrientation6Action, 6);
 
831
    exifOrientationMapper->setMapping(d->imageSetExifOrientation7Action, 7);
 
832
    exifOrientationMapper->setMapping(d->imageSetExifOrientation8Action, 8);
 
833
 
 
834
    // -----------------------------------------------------------------
 
835
 
 
836
    d->selectAllAction = new KAction(i18n("Select All"),
 
837
                                     0,
 
838
                                     CTRL+Key_A,
 
839
                                     d->view,
 
840
                                     SLOT(slotSelectAll()),
 
841
                                     actionCollection(),
 
842
                                     "selectAll");
 
843
 
 
844
    d->selectNoneAction = new KAction(i18n("Select None"),
 
845
                                     0,
 
846
                                     CTRL+SHIFT+Key_A,
 
847
                                     d->view,
 
848
                                     SLOT(slotSelectNone()),
 
849
                                     actionCollection(),
 
850
                                     "selectNone");
 
851
 
 
852
    d->selectInvertAction = new KAction(i18n("Invert Selection"),
 
853
                                        0,
 
854
                                        CTRL+Key_Asterisk,
 
855
                                        d->view,
 
856
                                        SLOT(slotSelectInvert()),
 
857
                                        actionCollection(),
 
858
                                        "selectInvert");
532
859
 
533
860
    // -----------------------------------------------------------
534
861
 
538
865
 
539
866
    // -----------------------------------------------------------
540
867
 
541
 
    mThumbSizePlusAction = new KAction(i18n("Increase Thumbnail Size"),
 
868
    d->zoomPlusAction = new KAction(i18n("Zoom in"),
542
869
                                   "viewmag+",
543
870
                                   CTRL+Key_Plus,
544
 
                                   mView,
545
 
                                   SLOT(slot_thumbSizePlus()),
 
871
                                   d->view,
 
872
                                   SLOT(slotZoomIn()),
546
873
                                   actionCollection(),
547
 
                                   "album_thumbSizeIncrease");
548
 
    mThumbSizePlusAction->setWhatsThis(i18n("This option allows you to increase the Album thumbnails size."));
 
874
                                   "album_zoomin");
549
875
 
550
 
    mThumbSizeMinusAction = new KAction(i18n("Decrease Thumbnail Size"),
 
876
    d->zoomMinusAction = new KAction(i18n("Zoom out"),
551
877
                                   "viewmag-",
552
878
                                   CTRL+Key_Minus,
553
 
                                   mView,
554
 
                                   SLOT(slot_thumbSizeMinus()),
 
879
                                   d->view,
 
880
                                   SLOT(slotZoomOut()),
555
881
                                   actionCollection(),
556
 
                                   "album_thumbSizeDecrease");
557
 
    mThumbSizeMinusAction->setWhatsThis(i18n("This option allows you to decrease the Album thumbnails size."));
558
 
 
559
 
    mFullScreenAction = new KAction(i18n("Toggle Full Screen"),
 
882
                                   "album_zoomout");
 
883
 
 
884
    d->zoomTo100percents = new KAction(i18n("Zoom to 1:1"), 
 
885
                                   "viewmag1",
 
886
                                   ALT+CTRL+Key_0,      // NOTE: Photoshop 7 use ALT+CTRL+0.
 
887
                                   d->view, 
 
888
                                   SLOT(slotZoomTo100Percents()),
 
889
                                   actionCollection(), 
 
890
                                   "album_zoomto100percents");
 
891
 
 
892
    d->zoomFitToWindowAction = new KAction(i18n("Fit to &Window"), 
 
893
                                   "view_fit_window",
 
894
                                   CTRL+SHIFT+Key_E, 
 
895
                                   d->view, 
 
896
                                   SLOT(slotFitToWindow()),
 
897
                                   actionCollection(), 
 
898
                                   "album_zoomfit2window");
 
899
 
 
900
    // Do not use std KDE action for full screen because action text is too large for app. toolbar.
 
901
    d->fullScreenAction = new KToggleAction(i18n("Full Screen"),
560
902
                                   "window_fullscreen",
561
903
                                   CTRL+SHIFT+Key_F,
562
904
                                   this,
563
905
                                   SLOT(slotToggleFullScreen()),
564
906
                                   actionCollection(),
565
907
                                   "full_screen");
566
 
    mFullScreenAction->setWhatsThis(i18n("This option allows you to toggle the main windows in full screen mode."));
567
 
 
568
 
    mQuitAction = KStdAction::quit(this,
569
 
                                   SLOT(slot_exit()),
 
908
    d->fullScreenAction->setWhatsThis(i18n("Switch the window to full screen mode"));
 
909
 
 
910
    d->slideShowAction = new KActionMenu(i18n("Slide"), "slideshow",
 
911
                                         actionCollection(), "slideshow");
 
912
 
 
913
    d->slideShowAction->setDelayed(false);
 
914
 
 
915
    d->slideShowAllAction = new KAction(i18n("All"), 0, Key_F9,
 
916
                                d->view, SLOT(slotSlideShowAll()),
 
917
                                actionCollection(), "slideshow_all");
 
918
    d->slideShowAction->insert(d->slideShowAllAction);
 
919
 
 
920
    d->slideShowSelectionAction = new KAction(i18n("Selection"), 0, ALT+Key_F9,
 
921
                                              d->view, 
 
922
                                              SLOT(slotSlideShowSelection()),
 
923
                                              actionCollection(), 
 
924
                                              "slideshow_selected");
 
925
    d->slideShowAction->insert(d->slideShowSelectionAction);
 
926
 
 
927
    d->slideShowRecursiveAction = new KAction(i18n("With all sub-albums"), 0, SHIFT+Key_F9,
 
928
                                              d->view, 
 
929
                                              SLOT(slotSlideShowRecursive()),
 
930
                                              actionCollection(), 
 
931
                                              "slideshow_recursive");
 
932
    d->slideShowAction->insert(d->slideShowRecursiveAction);
 
933
 
 
934
    d->quitAction = KStdAction::quit(this,
 
935
                                   SLOT(slotExit()),
570
936
                                   actionCollection(),
571
937
                                   "app_exit");
572
938
 
573
 
    mKipiHelpAction = new KAction(i18n("Kipi Plugins Handbook"),
 
939
    d->rawCameraListAction = new KAction(i18n("RAW camera supported"), 
 
940
                                   "kdcraw", 
 
941
                                   0, 
 
942
                                   this,
 
943
                                   SLOT(slotRawCameraList()),
 
944
                                   actionCollection(),
 
945
                                   "help_rawcameralist");
 
946
 
 
947
    d->kipiHelpAction = new KAction(i18n("Kipi Plugins Handbook"),
574
948
                                   "kipi",
575
949
                                   0,
576
950
                                   this,
578
952
                                   actionCollection(),
579
953
                                   "help_kipi");
580
954
 
581
 
    mTipAction = KStdAction::tipOfDay(this,
 
955
    d->tipAction = KStdAction::tipOfDay(this,
582
956
                                   SLOT(slotShowTip()),
583
957
                                   actionCollection(),
584
958
                                   "help_tipofday");
585
959
 
586
 
    mGammaAdjustmentAction = new KAction(i18n("Gamma Adjustment..."),
587
 
                                   "kgamma",
 
960
    d->donateMoneyAction = new KAction(i18n("Donate..."),
 
961
                                   0,
588
962
                                   0,
589
963
                                   this,
590
 
                                   SLOT(slot_gammaAdjustment()),
 
964
                                   SLOT(slotDonateMoney()),
591
965
                                   actionCollection(),
592
 
                                   "gamma_adjustment");
 
966
                                   "help_donatemoney");
 
967
 
 
968
    d->contributeAction = new KAction(i18n("Contribute..."),
 
969
                                      0, 0, 
 
970
                                      this, SLOT(slotContribute()),
 
971
                                      actionCollection(),
 
972
                                      "help_contribute");
 
973
 
 
974
    new DLogoAction(actionCollection(), "logo_action" );
593
975
 
594
976
    // -- Rating actions ---------------------------------------------------------------
595
977
 
596
 
    m_0Star = new KAction(i18n("No Star"), CTRL+Key_0,
597
 
                          mView, SLOT(slotAssignRatingNoStar()),
598
 
                          actionCollection(), "imageview_ratenostar");
599
 
    m_1Star = new KAction(i18n("One Star"), CTRL+Key_1,
600
 
                          mView, SLOT(slotAssignRatingOneStar()),
601
 
                          actionCollection(), "imageview_rateonestar");
602
 
    m_2Star = new KAction(i18n("Two Star"), CTRL+Key_2, 
603
 
                          mView, SLOT(slotAssignRatingTwoStar()),
604
 
                          actionCollection(), "imageview_ratetwostar");
605
 
    m_3Star = new KAction(i18n("Three Star"), CTRL+Key_3, 
606
 
                          mView, SLOT(slotAssignRatingThreeStar()),
607
 
                          actionCollection(), "imageview_ratethreestar");
608
 
    m_4Star = new KAction(i18n("Four Star"), CTRL+Key_4, 
609
 
                          mView, SLOT(slotAssignRatingFourStar()),
610
 
                          actionCollection(), "imageview_ratefourstar");
611
 
    m_5Star = new KAction(i18n("Five Star"), CTRL+Key_5, 
612
 
                          mView, SLOT(slotAssignRatingFiveStar()),
613
 
                          actionCollection(), "imageview_ratefivestar");
614
 
                          
 
978
    d->rating0Star = new KAction(i18n("Assign Rating \"No Stars\""), CTRL+Key_0,
 
979
                          d->view, SLOT(slotAssignRatingNoStar()),
 
980
                          actionCollection(), "ratenostar");
 
981
    d->rating1Star = new KAction(i18n("Assign Rating \"One Star\""), CTRL+Key_1,
 
982
                          d->view, SLOT(slotAssignRatingOneStar()),
 
983
                          actionCollection(), "rateonestar");
 
984
    d->rating2Star = new KAction(i18n("Assign Rating \"Two Stars\""), CTRL+Key_2, 
 
985
                          d->view, SLOT(slotAssignRatingTwoStar()),
 
986
                          actionCollection(), "ratetwostar");
 
987
    d->rating3Star = new KAction(i18n("Assign Rating \"Three Stars\""), CTRL+Key_3, 
 
988
                          d->view, SLOT(slotAssignRatingThreeStar()),
 
989
                          actionCollection(), "ratethreestar");
 
990
    d->rating4Star = new KAction(i18n("Assign Rating \"Four Stars\""), CTRL+Key_4, 
 
991
                          d->view, SLOT(slotAssignRatingFourStar()),
 
992
                          actionCollection(), "ratefourstar");
 
993
    d->rating5Star = new KAction(i18n("Assign Rating \"Five Stars\""), CTRL+Key_5, 
 
994
                          d->view, SLOT(slotAssignRatingFiveStar()),
 
995
                          actionCollection(), "ratefivestar");
 
996
 
615
997
    // -----------------------------------------------------------
616
998
 
617
 
    KAction* findAction = KStdAction::find(mView, SLOT(slotNewQuickSearch()),
 
999
    KAction* findAction = KStdAction::find(d->view, SLOT(slotNewQuickSearch()),
618
1000
                                           actionCollection(), "search_quick");
619
 
    findAction->setText(i18n("Quick Search..."));
620
 
 
621
 
    findAction = KStdAction::find(mView, SLOT(slotNewAdvancedSearch()),
622
 
                                  actionCollection(), "search_advanced");
623
 
    findAction->setText(i18n("Advanced Search..."));
624
 
    findAction->setShortcut("Ctrl+Alt+F");
 
1001
    findAction->setText(i18n("Search..."));
 
1002
    findAction->setIconSet(BarIcon("filefind"));
 
1003
 
 
1004
    KAction* advFindAction = KStdAction::find(d->view, SLOT(slotNewAdvancedSearch()),
 
1005
                                              actionCollection(), "search_advanced");
 
1006
    advFindAction->setText(i18n("Advanced Search..."));
 
1007
    advFindAction->setShortcut("Ctrl+Alt+F");
 
1008
 
 
1009
    new KAction(i18n("Light Table"), "idea", SHIFT+Key_F6,
 
1010
                d->view, SLOT(slotLightTable()), actionCollection(), 
 
1011
                "light_table");
625
1012
 
626
1013
    new KAction(i18n("Scan for New Images"), "reload_page", 0,
627
1014
                this, SLOT(slotDatabaseRescan()), actionCollection(), 
628
1015
                "database_rescan");
629
1016
 
 
1017
    new KAction(i18n("Rebuild all Thumbnails..."), "reload_page", 0,
 
1018
                this, SLOT(slotRebuildAllThumbs()), actionCollection(),
 
1019
                "thumbs_rebuild");
 
1020
 
 
1021
    new KAction(i18n("Update Metadata Database..."), "reload_page", 0,
 
1022
                this, SLOT(slotSyncAllPicturesMetadata()), actionCollection(),
 
1023
                "sync_metadata");
 
1024
 
630
1025
    // -----------------------------------------------------------
631
1026
 
632
1027
    // Provides a menu entry that allows showing/hiding the toolbar(s)
633
1028
    setStandardToolBarMenuEnabled(true);
634
1029
 
 
1030
    // Provides a menu entry that allows showing/hiding the statusbar
 
1031
    createStandardStatusBarAction();
 
1032
 
635
1033
    // Load Cameras -- do this before the createGUI so that the cameras
636
1034
    // are plugged into the toolbar at startup
637
 
    if (mSplash)
638
 
        mSplash->message(i18n("Loading cameras"), AlignLeft, white);
 
1035
    if (d->splashScreen)
 
1036
        d->splashScreen->message(i18n("Loading cameras"), AlignLeft, white);
 
1037
    
639
1038
    loadCameras();
640
1039
 
641
1040
    createGUI(QString::fromLatin1( "digikamui.rc" ), false);
642
1041
 
643
1042
    // Initialize Actions ---------------------------------------
644
1043
 
645
 
    mDeleteAction->setEnabled(false);
646
 
    mAddImagesAction->setEnabled(false);
647
 
    mPropsEditAction->setEnabled(false);
648
 
    mOpenInKonquiAction->setEnabled(false);
649
 
 
650
 
    mImageViewAction->setEnabled(false);
651
 
    mImageCommentsAction->setEnabled(false);
652
 
    mImageRenameAction->setEnabled(false);
653
 
    mImageDeleteAction->setEnabled(false);
654
 
    mImagePropsAction->setEnabled(false);
655
 
    mImagePropsAction->setEnabled(false);
656
 
    mImageExifOrientationActionMenu->setEnabled(false);
657
 
 
658
 
    mAlbumSortAction->setCurrentItem((int)mAlbumSettings->getAlbumSortOrder());
659
 
    mImageSortAction->setCurrentItem((int)mAlbumSettings->getImageSortOrder());
660
 
 
661
 
    int size = mAlbumSettings->getDefaultIconSize();
662
 
    if (size == ThumbnailSize::Huge)
663
 
    {
664
 
        enableThumbSizePlusAction(false);
665
 
        enableThumbSizeMinusAction(true);
666
 
    }
667
 
    else if (size == ThumbnailSize::Small)
668
 
    {
669
 
        enableThumbSizePlusAction(true);
670
 
        enableThumbSizeMinusAction(false);
671
 
    }
672
 
    else
673
 
    {
674
 
        enableThumbSizePlusAction(true);
675
 
        enableThumbSizeMinusAction(true);
676
 
    }
677
 
}
678
 
 
679
 
void DigikamApp::enableThumbSizePlusAction(bool val)
680
 
{
681
 
    mThumbSizePlusAction->setEnabled(val);
682
 
}
683
 
 
684
 
void DigikamApp::enableThumbSizeMinusAction(bool val)
685
 
{
686
 
    mThumbSizeMinusAction->setEnabled(val);
 
1044
    d->deleteAction->setEnabled(false);
 
1045
    d->addImagesAction->setEnabled(false);
 
1046
    d->propsEditAction->setEnabled(false);
 
1047
    d->openInKonquiAction->setEnabled(false);
 
1048
 
 
1049
    d->imageViewAction->setEnabled(false);
 
1050
    d->imagePreviewAction->setEnabled(false);
 
1051
    d->imageLightTableAction->setEnabled(false);
 
1052
    d->imageAddLightTableAction->setEnabled(false);
 
1053
    d->imageRenameAction->setEnabled(false);
 
1054
    d->imageDeleteAction->setEnabled(false);
 
1055
    d->imageExifOrientationActionMenu->setEnabled(false);
 
1056
    d->slideShowSelectionAction->setEnabled(false);
 
1057
 
 
1058
    d->albumSortAction->setCurrentItem((int)d->albumSettings->getAlbumSortOrder());
 
1059
    d->imageSortAction->setCurrentItem((int)d->albumSettings->getImageSortOrder());
 
1060
 
 
1061
    d->recurseAlbumsAction->setChecked(d->albumSettings->getRecurseAlbums());
 
1062
    d->recurseTagsAction->setChecked(d->albumSettings->getRecurseTags());
 
1063
    slotRecurseAlbums(d->recurseAlbumsAction->isChecked());
 
1064
    slotRecurseTags(d->recurseTagsAction->isChecked());
 
1065
 
 
1066
    // Setting the filter condition also updates the tooltip.
 
1067
    // (So `setRating` is called first, as otherwise the filter value is not respected).
 
1068
    d->albumIconViewFilter->readSettings();
 
1069
}
 
1070
 
 
1071
void DigikamApp::enableZoomPlusAction(bool val)
 
1072
{
 
1073
    d->zoomPlusAction->setEnabled(val);
 
1074
    d->statusZoomBar->setEnableZoomPlus(val);
 
1075
}
 
1076
 
 
1077
void DigikamApp::enableZoomMinusAction(bool val)
 
1078
{
 
1079
    d->zoomMinusAction->setEnabled(val);
 
1080
    d->statusZoomBar->setEnableZoomMinus(val);
687
1081
}
688
1082
 
689
1083
void DigikamApp::enableAlbumBackwardHistory(bool enable)
690
1084
{
691
 
    mBackwardActionMenu->setEnabled(enable);
 
1085
    d->backwardActionMenu->setEnabled(enable);
692
1086
}
693
1087
 
694
1088
void DigikamApp::enableAlbumForwardHistory(bool enable)
695
1089
{
696
 
    mForwardActionMenu->setEnabled(enable);
 
1090
    d->forwardActionMenu->setEnabled(enable);
697
1091
}
698
1092
 
699
1093
void DigikamApp::slotAboutToShowBackwardMenu()
700
1094
{
701
 
    mBackwardActionMenu->popupMenu()->clear();
 
1095
    d->backwardActionMenu->popupMenu()->clear();
702
1096
    QStringList titles;
703
 
    mView->getBackwardHistory(titles);
 
1097
    d->view->getBackwardHistory(titles);
704
1098
    if(!titles.isEmpty())
705
1099
    {
706
1100
        int id = 1;
707
1101
        QStringList::Iterator iter = titles.begin();
708
1102
        for(; iter != titles.end(); ++iter,++id)
709
1103
        {
710
 
            mBackwardActionMenu->popupMenu()->insertItem(*iter, id);
 
1104
            d->backwardActionMenu->popupMenu()->insertItem(*iter, id);
711
1105
        }
712
1106
    }
713
1107
}
714
1108
 
715
1109
void DigikamApp::slotAboutToShowForwardMenu()
716
1110
{
717
 
    mForwardActionMenu->popupMenu()->clear();
 
1111
    d->forwardActionMenu->popupMenu()->clear();
718
1112
    QStringList titles;
719
 
    mView->getForwardHistory(titles);
 
1113
    d->view->getForwardHistory(titles);
 
1114
    
720
1115
    if(!titles.isEmpty())
721
1116
    {
722
1117
        int id = 1;
723
1118
        QStringList::Iterator iter = titles.begin();
724
1119
        for(; iter != titles.end(); ++iter,++id)
725
1120
        {
726
 
            mForwardActionMenu->popupMenu()->insertItem(*iter, id);
 
1121
            d->forwardActionMenu->popupMenu()->insertItem(*iter, id);
727
1122
        }
728
1123
    }
729
1124
}
730
1125
 
731
 
void DigikamApp::slot_albumSelected(bool val)
 
1126
void DigikamApp::slotAlbumSelected(bool val)
732
1127
{
733
 
    Album *album = mAlbumManager->currentAlbum();
 
1128
    Album *album = d->albumManager->currentAlbum();
734
1129
    
735
1130
    if(album && !val)
736
1131
    {
737
1132
        // No PAlbum is selected
738
 
        mDeleteAction->setEnabled(false);
739
 
        mAddImagesAction->setEnabled(false);
740
 
        mPropsEditAction->setEnabled(false);
741
 
        mOpenInKonquiAction->setEnabled(false);
742
 
        mNewAction->setEnabled(false);
743
 
        mAlbumImportAction->setEnabled(false);
 
1133
        d->deleteAction->setEnabled(false);
 
1134
        d->addImagesAction->setEnabled(false);
 
1135
        d->propsEditAction->setEnabled(false);
 
1136
        d->openInKonquiAction->setEnabled(false);
 
1137
        d->newAction->setEnabled(false);
 
1138
        d->albumImportAction->setEnabled(false);
744
1139
 
745
1140
    }
746
1141
    else if(!album && !val)
747
1142
    {
748
1143
        // Groupitem selected (Collection/date)
749
 
        mDeleteAction->setEnabled(false);
750
 
        mAddImagesAction->setEnabled(false);
751
 
        mPropsEditAction->setEnabled(false);
752
 
        mOpenInKonquiAction->setEnabled(false);
753
 
        mNewAction->setEnabled(false);
754
 
        mAlbumImportAction->setEnabled(false);
 
1144
        d->deleteAction->setEnabled(false);
 
1145
        d->addImagesAction->setEnabled(false);
 
1146
        d->propsEditAction->setEnabled(false);
 
1147
        d->openInKonquiAction->setEnabled(false);
 
1148
        d->newAction->setEnabled(false);
 
1149
        d->albumImportAction->setEnabled(false);
755
1150
        
756
1151
        KAction *action;
757
 
        for (action = m_kipiFileActionsImport.first(); action;
758
 
             action = m_kipiFileActionsImport.next())
 
1152
        for (action = d->kipiFileActionsImport.first(); action;
 
1153
             action = d->kipiFileActionsImport.next())
759
1154
        {
760
1155
            action->setEnabled(false);
761
1156
        }
762
1157
 
763
 
        for (action = m_kipiFileActionsExport.first(); action;
764
 
             action = m_kipiFileActionsExport.next())
 
1158
        for (action = d->kipiFileActionsExport.first(); action;
 
1159
             action = d->kipiFileActionsExport.next())
765
1160
        {
766
1161
            action->setEnabled(false);
767
1162
        }
769
1164
    else if(album && !album->isRoot() && album->type() == Album::PHYSICAL)
770
1165
    {
771
1166
        // Normal Album selected
772
 
        mDeleteAction->setEnabled(true);
773
 
        mAddImagesAction->setEnabled(true);
774
 
        mPropsEditAction->setEnabled(true);
775
 
        mOpenInKonquiAction->setEnabled(true);
776
 
        mNewAction->setEnabled(true);
777
 
        mAlbumImportAction->setEnabled(true);
 
1167
        d->deleteAction->setEnabled(true);
 
1168
        d->addImagesAction->setEnabled(true);
 
1169
        d->propsEditAction->setEnabled(true);
 
1170
        d->openInKonquiAction->setEnabled(true);
 
1171
        d->newAction->setEnabled(true);
 
1172
        d->albumImportAction->setEnabled(true);
778
1173
        
779
1174
        KAction *action;
780
 
        for (action = m_kipiFileActionsImport.first(); action; 
781
 
             action = m_kipiFileActionsImport.next())
 
1175
        for (action = d->kipiFileActionsImport.first(); action; 
 
1176
             action = d->kipiFileActionsImport.next())
782
1177
        {
783
1178
            action->setEnabled(true);
784
1179
        }
785
1180
 
786
 
        for (action = m_kipiFileActionsExport.first(); action; 
787
 
             action = m_kipiFileActionsExport.next())
 
1181
        for (action = d->kipiFileActionsExport.first(); action; 
 
1182
             action = d->kipiFileActionsExport.next())
788
1183
        {
789
1184
            action->setEnabled(true);    
790
1185
        }        
792
1187
    else if(album && album->isRoot() && album->type() == Album::PHYSICAL)
793
1188
    {
794
1189
        // Root Album selected
795
 
        mDeleteAction->setEnabled(false);
796
 
        mAddImagesAction->setEnabled(false);
797
 
        mPropsEditAction->setEnabled(false);
 
1190
        d->deleteAction->setEnabled(false);
 
1191
        d->addImagesAction->setEnabled(false);
 
1192
        d->propsEditAction->setEnabled(false);
798
1193
       
799
1194
 
800
1195
        if(album->type() == Album::PHYSICAL)
801
1196
        {
802
 
            mNewAction->setEnabled(true);
803
 
            mOpenInKonquiAction->setEnabled(true);
804
 
            mAlbumImportAction->setEnabled(true);
 
1197
            d->newAction->setEnabled(true);
 
1198
            d->openInKonquiAction->setEnabled(true);
 
1199
            d->albumImportAction->setEnabled(true);
805
1200
        }
806
1201
        else
807
1202
        {
808
 
            mNewAction->setEnabled(false);
809
 
            mOpenInKonquiAction->setEnabled(false);
810
 
            mAlbumImportAction->setEnabled(false);            
 
1203
            d->newAction->setEnabled(false);
 
1204
            d->openInKonquiAction->setEnabled(false);
 
1205
            d->albumImportAction->setEnabled(false);            
811
1206
        }
812
1207
        
813
1208
        KAction *action;
814
 
        for (action = m_kipiFileActionsImport.first(); action; 
815
 
             action = m_kipiFileActionsImport.next())
 
1209
        for (action = d->kipiFileActionsImport.first(); action; 
 
1210
             action = d->kipiFileActionsImport.next())
816
1211
        {
817
1212
            action->setEnabled(false);
818
1213
        }
819
1214
 
820
 
        for (action = m_kipiFileActionsExport.first(); action; 
821
 
             action = m_kipiFileActionsExport.next())
 
1215
        for (action = d->kipiFileActionsExport.first(); action; 
 
1216
             action = d->kipiFileActionsExport.next())
822
1217
        {
823
1218
            action->setEnabled(true);
824
1219
        }
825
1220
    }
826
1221
}
827
1222
 
828
 
void DigikamApp::slot_tagSelected(bool val)
 
1223
void DigikamApp::slotTagSelected(bool val)
829
1224
{
830
 
    Album *album = mAlbumManager->currentAlbum();
 
1225
    Album *album = d->albumManager->currentAlbum();
 
1226
    if (!album) return;
831
1227
    
832
1228
    if(!val)
833
1229
    {
834
 
        mDeleteTagAction->setEnabled(false);
835
 
        mEditTagAction->setEnabled(false);
 
1230
        d->deleteTagAction->setEnabled(false);
 
1231
        d->editTagAction->setEnabled(false);
836
1232
    }
837
1233
    else if(!album->isRoot())
838
1234
    {
839
 
        mDeleteTagAction->setEnabled(true);
840
 
        mEditTagAction->setEnabled(true);
841
 
        
842
 
        KAction *action;
843
 
        for (action = m_kipiFileActionsImport.first(); action;
844
 
             action = m_kipiFileActionsImport.next())
845
 
        {
846
 
            action->setEnabled(false);
847
 
        }
848
 
 
849
 
        for (action = m_kipiFileActionsExport.first(); action;
850
 
             action = m_kipiFileActionsExport.next())
851
 
        {
852
 
            action->setEnabled(true);
853
 
        }
854
 
    }
855
 
    else
856
 
    {
857
 
        mDeleteTagAction->setEnabled(false);
858
 
        mEditTagAction->setEnabled(false);
859
 
        
860
 
        KAction *action;
861
 
        for (action = m_kipiFileActionsImport.first(); action; 
862
 
             action = m_kipiFileActionsImport.next())
863
 
        {
864
 
            action->setEnabled(false);
865
 
        }
866
 
 
867
 
        for (action = m_kipiFileActionsExport.first(); action; 
868
 
             action = m_kipiFileActionsExport.next())
869
 
        {
870
 
            action->setEnabled(true);
871
 
        }
872
 
    }
873
 
}
874
 
 
875
 
void DigikamApp::slot_imageSelected(bool val)
876
 
{
877
 
    mImageViewAction->setEnabled(val);
878
 
    mImageCommentsAction->setEnabled(val);
879
 
    mImageRenameAction->setEnabled(val);
880
 
    mImageDeleteAction->setEnabled(val);
881
 
    mImagePropsAction->setEnabled(val);
882
 
    mImageExifOrientationActionMenu->setEnabled(val);
883
 
}
884
 
 
885
 
void DigikamApp::slot_gammaAdjustment()
886
 
{
887
 
   QStringList args;
888
 
   QString *perror = 0;
889
 
   int *ppid = 0;
890
 
 
891
 
   args << "kgamma";
892
 
   int ValRet = KApplication::kdeinitExec(QString::fromLatin1("kcmshell"), args, perror, ppid);
893
 
 
894
 
   if ( ValRet != 0 )
895
 
      KMessageBox::error(this, i18n("Cannot start \"KGamma\" extension from KDE control center;\n"
896
 
                                 "please check your installation."));
897
 
}
898
 
 
899
 
void DigikamApp::slot_exit()
900
 
{
901
 
    close();
902
 
}
903
 
 
 
1235
        d->deleteTagAction->setEnabled(true);
 
1236
        d->editTagAction->setEnabled(true);
 
1237
        
 
1238
        KAction *action;
 
1239
        for (action = d->kipiFileActionsImport.first(); action;
 
1240
             action = d->kipiFileActionsImport.next())
 
1241
        {
 
1242
            action->setEnabled(false);
 
1243
        }
 
1244
 
 
1245
        for (action = d->kipiFileActionsExport.first(); action;
 
1246
             action = d->kipiFileActionsExport.next())
 
1247
        {
 
1248
            action->setEnabled(true);
 
1249
        }
 
1250
    }
 
1251
    else
 
1252
    {
 
1253
        d->deleteTagAction->setEnabled(false);
 
1254
        d->editTagAction->setEnabled(false);
 
1255
        
 
1256
        KAction *action;
 
1257
        for (action = d->kipiFileActionsImport.first(); action; 
 
1258
             action = d->kipiFileActionsImport.next())
 
1259
        {
 
1260
            action->setEnabled(false);
 
1261
        }
 
1262
 
 
1263
        for (action = d->kipiFileActionsExport.first(); action; 
 
1264
             action = d->kipiFileActionsExport.next())
 
1265
        {
 
1266
            action->setEnabled(true);
 
1267
        }
 
1268
    }
 
1269
}
 
1270
 
 
1271
void DigikamApp::slotImageSelected(const QPtrList<ImageInfo>& list, bool hasPrev, bool hasNext, 
 
1272
                                   const KURL::List& listAll)
 
1273
{
 
1274
    QPtrList<ImageInfo> selection = list;
 
1275
    KURL::List all                = listAll;
 
1276
    int num_images                = listAll.count();
 
1277
    bool val                      = selection.isEmpty() ? false : true;
 
1278
    QString text;
 
1279
    int index = 1;
 
1280
 
 
1281
    d->imageViewAction->setEnabled(val);
 
1282
    d->imagePreviewAction->setEnabled(val);
 
1283
    d->imageLightTableAction->setEnabled(val);
 
1284
    d->imageAddLightTableAction->setEnabled(val);
 
1285
    d->imageRenameAction->setEnabled(val);
 
1286
    d->imageDeleteAction->setEnabled(val);
 
1287
    d->imageExifOrientationActionMenu->setEnabled(val);
 
1288
    d->slideShowSelectionAction->setEnabled(selection.count() != 0);
 
1289
 
 
1290
    switch (selection.count())
 
1291
    {
 
1292
        case 0:
 
1293
            d->statusProgressBar->setText(i18n("No item selected"));
 
1294
        break;
 
1295
        case 1:
 
1296
        {
 
1297
            KURL first = selection.first()->kurl();
 
1298
 
 
1299
            for (KURL::List::iterator it = all.begin();
 
1300
                it != all.end(); ++it)
 
1301
            {
 
1302
                if ((*it) == first)
 
1303
                    break;
 
1304
 
 
1305
                index++;
 
1306
            }    
 
1307
 
 
1308
            text = selection.first()->kurl().fileName()  
 
1309
                                   + i18n(" (%1 of %2)")
 
1310
                                   .arg(QString::number(index))
 
1311
                                   .arg(QString::number(num_images));
 
1312
            d->statusProgressBar->setText(text);
 
1313
            break;
 
1314
        }
 
1315
        default:
 
1316
          d->statusProgressBar->setText(i18n("%1/%2 items selected")
 
1317
                                .arg(selection.count()).arg(QString::number(num_images)));
 
1318
 
 
1319
        break;
 
1320
    }
 
1321
 
 
1322
    d->statusNavigateBar->setNavigateBarState(hasPrev, hasNext);
 
1323
}
 
1324
 
 
1325
void DigikamApp::slotProgressBarMode(int mode, const QString& text)
 
1326
{
 
1327
    d->statusProgressBar->progressBarMode(mode, text);
 
1328
}
 
1329
 
 
1330
void DigikamApp::slotProgressValue(int count)
 
1331
{
 
1332
    d->statusProgressBar->setProgressValue(count);
 
1333
}
 
1334
 
 
1335
void DigikamApp::slotExit()
 
1336
{
 
1337
    if (d->fullScreen) {
 
1338
        slotToggleFullScreen();
 
1339
        QTimer::singleShot(0, this, SLOT(close()));
 
1340
    }
 
1341
    else
 
1342
        close();
 
1343
}
904
1344
 
905
1345
QString DigikamApp::convertToLocalUrl( const QString& folder )
906
1346
{
907
1347
    // This function is copied from k3b.
 
1348
 
908
1349
    KURL url( folder );
909
 
    if( !url.isLocalFile() ) 
 
1350
    if( !url.isLocalFile() )
910
1351
    {
911
1352
#if KDE_IS_VERSION(3,4,91)
912
 
        return KIO::NetAccess::mostLocalURL( url, 0 ).path();
 
1353
        // Support for system:/ and media:/ (c) Stephan Kulow
 
1354
        KURL mlu = KIO::NetAccess::mostLocalURL( url, 0 );
 
1355
        if (mlu.isLocalFile())
 
1356
            return mlu.path();
 
1357
 
 
1358
        DWarning() << folder << " mlu " << mlu << endl;
 
1359
 
 
1360
        QString path = mlu.path();
 
1361
 
 
1362
        if ( mlu.protocol() == "system" && path.startsWith("/media") )
 
1363
            path = path.mid(7);
 
1364
        else if (mlu.protocol() == "media")
 
1365
            path = path.mid(1);
 
1366
        else
 
1367
            return folder; // nothing to see - go on
 
1368
 
 
1369
        DDebug() << "parsed import path is: " << path << endl;
 
1370
        DCOPRef ref("kded", "mediamanager");
 
1371
        DCOPReply reply = ref.call("properties", path);
 
1372
        if (reply.isValid()) {
 
1373
            QStringList slreply;
 
1374
            reply.get(slreply);
 
1375
            if ((slreply.count()>=9) && !slreply[9].isEmpty())
 
1376
                return slreply[9];
 
1377
            else
 
1378
                return slreply[6];
 
1379
        } else {
 
1380
            DWarning() << "dcop call failed\n";
 
1381
        }
 
1382
 
 
1383
        return path;
913
1384
#else
914
1385
#ifndef UDS_LOCAL_PATH
915
1386
#define UDS_LOCAL_PATH (72 | KIO::UDS_STRING)
917
1388
        using namespace KIO;
918
1389
#endif
919
1390
        KIO::UDSEntry e;
920
 
        if( KIO::NetAccess::stat( url, e, 0 ) ) 
 
1391
        if( KIO::NetAccess::stat( url, e, 0 ) )
921
1392
        {
922
1393
            const KIO::UDSEntry::ConstIterator end = e.end();
923
 
            for( KIO::UDSEntry::ConstIterator it = e.begin(); it != end; ++it ) 
 
1394
            for( KIO::UDSEntry::ConstIterator it = e.begin(); it != end; ++it )
924
1395
            {
925
1396
                if( (*it).m_uds == UDS_LOCAL_PATH && !(*it).m_str.isEmpty() )
926
1397
                    return KURL::fromPathOrURL( (*it).m_str ).path();
927
1398
            }
928
1399
        }
929
1400
#endif
930
 
     }
 
1401
    }
 
1402
 
931
1403
    return url.path();
932
1404
}
933
1405
 
 
1406
void DigikamApp::slotDcopDownloadImages( const QString& folder )
 
1407
{
 
1408
    if (!folder.isNull())
 
1409
    {
 
1410
        // activate window when called by media menu and DCOP
 
1411
        if (isMinimized())
 
1412
            KWin::deIconifyWindow(winId());
 
1413
        KWin::activateWindow(winId());
 
1414
 
 
1415
        slotDownloadImages(folder);
 
1416
    }
 
1417
}
 
1418
 
 
1419
void DigikamApp::slotDcopCameraAutoDetect()
 
1420
{
 
1421
    // activate window when called by media menu and DCOP
 
1422
    if (isMinimized())
 
1423
        KWin::deIconifyWindow(winId());
 
1424
    KWin::activateWindow(winId());
 
1425
 
 
1426
    slotCameraAutoDetect();
 
1427
}
 
1428
 
934
1429
void DigikamApp::slotDownloadImages( const QString& folder)
935
1430
{
936
1431
    if (!folder.isNull())
937
1432
    {
938
 
        mCameraGuiPath = folder;
 
1433
        d->cameraGuiPath = folder;
 
1434
 
939
1435
        QTimer::singleShot(0, this, SLOT(slotDownloadImages()));
940
1436
    }
941
1437
}
942
 
    
 
1438
 
943
1439
void DigikamApp::slotDownloadImages()
944
1440
{
945
 
    if (mCameraGuiPath.isNull())
946
 
            return;
 
1441
    if (d->cameraGuiPath.isNull())
 
1442
        return;
947
1443
 
948
 
    // Fetch the contents of the device. This is needed to make sure that the 
 
1444
    // Fetch the contents of the device. This is needed to make sure that the
949
1445
    // media:/device gets mounted.
950
 
    // KIO::ListJob *job = KIO::listDir(KURL(mCameraGuiPath), false, false);
951
 
    //
952
 
    // cant use this, as this is not in old kdelibs
953
 
    // KIO::NetAccess::synchronousRun(job,0);
954
 
 
955
 
    QString cameraGuiPath = convertToLocalUrl(mCameraGuiPath);
956
 
    kdDebug() << "IN: " << mCameraGuiPath << " OUT: " << cameraGuiPath << endl;
957
 
    
958
 
    if (cameraGuiPath.isNull())
 
1446
    KIO::ListJob *job = KIO::listDir(KURL(d->cameraGuiPath), false, false);
 
1447
    KIO::NetAccess::synchronousRun(job,0);
 
1448
 
 
1449
    QString localUrl = convertToLocalUrl(d->cameraGuiPath);
 
1450
    DDebug() << "slotDownloadImages: convertToLocalUrl " << d->cameraGuiPath << " to " << localUrl << endl;
 
1451
 
 
1452
    if (localUrl.isNull())
959
1453
        return;
960
 
    
 
1454
 
961
1455
    bool alreadyThere = false;
 
1456
 
962
1457
    for (uint i = 0 ; i != actionCollection()->count() ; i++)
963
1458
    {
964
 
        if (actionCollection()->action(i)->name() == mCameraGuiPath)
 
1459
        if (actionCollection()->action(i)->name() == d->cameraGuiPath)
965
1460
            alreadyThere = true;
966
1461
    }
967
 
    
 
1462
 
968
1463
    if (!alreadyThere)
969
1464
    {
970
1465
        KAction *cAction  = new KAction(
971
 
                i18n("Browse %1").arg(mCameraGuiPath),
972
 
                "kipi",
973
 
                0,
974
 
                this,
975
 
                SLOT(slotDownloadImages()),
976
 
                actionCollection(),
977
 
                mCameraGuiPath.latin1() );
 
1466
                 i18n("Browse %1").arg(KURL(d->cameraGuiPath).prettyURL()),
 
1467
                 "camera",
 
1468
                 0,
 
1469
                 this,
 
1470
                 SLOT(slotDownloadImages()),
 
1471
                 actionCollection(),
 
1472
                 d->cameraGuiPath.latin1() );
978
1473
 
979
 
        mCameraMenuAction->insert(cAction, 0);
 
1474
        d->cameraMenuAction->insert(cAction, 0);
980
1475
    }
981
1476
 
982
 
    CameraUI* cgui = new CameraUI(this, 
983
 
                        i18n("Images found in %1").arg(cameraGuiPath),
984
 
                        "directory browse","Fixed", cameraGuiPath);
 
1477
    // the CameraUI will delete itself when it has finished
 
1478
    CameraUI* cgui = new CameraUI(this,
 
1479
                                  i18n("Images found in %1").arg(d->cameraGuiPath),
 
1480
                                  "directory browse","Fixed", localUrl, QDateTime::currentDateTime());
985
1481
    cgui->show();
 
1482
 
986
1483
    connect(cgui, SIGNAL(signalLastDestination(const KURL&)),
987
 
            mView, SLOT(slotSelectAlbum(const KURL&)));
 
1484
            d->view, SLOT(slotSelectAlbum(const KURL&)));
 
1485
 
988
1486
    connect(cgui, SIGNAL(signalAlbumSettingsChanged()),
989
 
            SLOT(slotSetupChanged()));
990
 
    connect(cgui, SIGNAL(close()), SLOT(slotCameraUmount()));
991
 
}
992
 
 
993
 
void DigikamApp::slotCameraUmount()
994
 
{
995
 
    int items = mMediaItems.count();
996
 
    for (int i=0 ; i != items ; i++)
997
 
    {
998
 
        if (mMediaItems[i].first == mCameraGuiPath && mMediaItems[i].second)
999
 
        {
1000
 
            // Ok, item is now mounted and not before, umount it.
1001
 
            kdDebug() << "Trying to umount device" << endl;
1002
 
            KIO::SimpleJob *job = KIO::unmount(convertToLocalUrl(mCameraGuiPath));
1003
 
            // cant use this, as this is not in old kdelibs
1004
 
            // KIO::NetAccess::synchronousRun(job,0);
1005
 
        }
1006
 
    }
 
1487
            this, SLOT(slotSetupChanged()));
1007
1488
}
1008
1489
 
1009
1490
void DigikamApp::slotCameraConnect()
1010
1491
{
1011
 
    CameraType* ctype = mCameraList->find(QString::fromUtf8(sender()->name()));
 
1492
    CameraType* ctype = d->cameraList->find(QString::fromUtf8(sender()->name()));
1012
1493
 
1013
1494
    if (ctype)
1014
1495
    {
1015
 
        CameraUI* cgui = new CameraUI(this, ctype->title(), ctype->model(),
1016
 
                                      ctype->port(), ctype->path());
1017
 
        cgui->show();
1018
 
        connect(cgui, SIGNAL(signalLastDestination(const KURL&)),
1019
 
                mView, SLOT(slotSelectAlbum(const KURL&)));
1020
 
        connect(cgui, SIGNAL(signalAlbumSettingsChanged()),
1021
 
                SLOT(slotSetupChanged()));
 
1496
        // check not to open two dialogs for the same camera
 
1497
        if (ctype->currentCameraUI() && !ctype->currentCameraUI()->isClosed())
 
1498
        {
 
1499
            // show and raise dialog
 
1500
            if (ctype->currentCameraUI()->isMinimized())
 
1501
                KWin::deIconifyWindow(ctype->currentCameraUI()->winId());
 
1502
            KWin::activateWindow(ctype->currentCameraUI()->winId());
 
1503
        }
 
1504
        else
 
1505
        {
 
1506
            // the CameraUI will delete itself when it has finished
 
1507
            CameraUI* cgui = new CameraUI(this, ctype->title(), ctype->model(),
 
1508
                                          ctype->port(), ctype->path(), ctype->lastAccess());
 
1509
 
 
1510
            ctype->setCurrentCameraUI(cgui);
 
1511
 
 
1512
            cgui->show();
 
1513
 
 
1514
            connect(cgui, SIGNAL(signalLastDestination(const KURL&)),
 
1515
                    d->view, SLOT(slotSelectAlbum(const KURL&)));
 
1516
 
 
1517
            connect(cgui, SIGNAL(signalAlbumSettingsChanged()),
 
1518
                    this, SLOT(slotSetupChanged()));
 
1519
        }
1022
1520
    }
1023
1521
}
1024
1522
 
1030
1528
                                   this, SLOT(slotCameraConnect()),
1031
1529
                                   actionCollection(),
1032
1530
                                   ctype->title().utf8());
1033
 
    mCameraMenuAction->insert(cAction, 0);
 
1531
    d->cameraMenuAction->insert(cAction, 0);
1034
1532
    ctype->setAction(cAction);
1035
1533
}
1036
1534
 
1037
1535
void DigikamApp::slotCameraMediaMenu()
1038
1536
{
1039
 
    mMediaItems.clear();
 
1537
    d->mediaItems.clear();
1040
1538
    
1041
 
    mCameraMediaList->clear();
1042
 
    mCameraMediaList->insertItem(i18n("No Media Devices Found"),1);
1043
 
    mCameraMediaList->setItemEnabled(1,false);
 
1539
    d->cameraMediaList->clear();
 
1540
    d->cameraMediaList->insertItem(i18n("No media devices found"), 0);
 
1541
    d->cameraMediaList->setItemEnabled(0, false);
1044
1542
        
1045
1543
    KURL kurl("media:/");
1046
1544
    KIO::ListJob *job = KIO::listDir(kurl, false, false);
 
1545
    
1047
1546
    connect( job, SIGNAL(entries(KIO::Job*,const KIO::UDSEntryList&)),
1048
 
             SLOT(slotCameraMediaMenuEntries(KIO::Job*,const KIO::UDSEntryList&)) );
 
1547
             this, SLOT(slotCameraMediaMenuEntries(KIO::Job*,const KIO::UDSEntryList&)) );
1049
1548
}
1050
1549
 
1051
1550
void DigikamApp::slotCameraMediaMenuEntries( Job *, const UDSEntryList & list )
1052
1551
{
1053
1552
    int i = 0;
1054
1553
 
1055
 
    for(KIO::UDSEntryList::ConstIterator it = list.begin() ; it != list.end(); ++it)
 
1554
    for(KIO::UDSEntryList::ConstIterator it = list.begin() ; it != list.end() ; ++it)
1056
1555
    {
1057
1556
        QString name;
1058
1557
        QString path;
1059
 
        bool unmounted = false;
1060
1558
 
1061
 
        for ( UDSEntry::const_iterator et = (*it).begin() ; et !=   (*it).end() ; ++ et ) 
 
1559
        for ( UDSEntry::const_iterator et = (*it).begin() ; et != (*it).end() ; ++et ) 
1062
1560
        {
1063
1561
            if ( (*et).m_uds == KIO::UDS_NAME)
1064
1562
                name = ( *et ).m_str;
1065
 
 
1066
1563
            if ( (*et).m_uds == KIO::UDS_URL)
1067
1564
                path = ( *et ).m_str;
1068
1565
 
1069
 
            if ( (*et).m_uds == KIO::UDS_MIME_TYPE &&
1070
 
                   ( (*et).m_str == "media/removable_unmounted" || 
1071
 
                     (*et).m_str == "media/camera_unmounted" ) )
1072
 
                unmounted=true;
1073
 
 
1074
 
            //kdDebug() << ( *et ).m_str << unmounted << endl;
1075
 
       }
1076
 
 
1077
 
       if (!name.isEmpty() && !path.isEmpty())
1078
 
       {
1079
 
            if (i==0)
1080
 
                mCameraMediaList->clear();
1081
 
            
1082
 
            mMediaItems[i] = qMakePair(path,unmounted);
1083
 
            
1084
 
            mCameraMediaList->insertItem(name, this, SLOT(slotDownloadImagesFromMedia(int)), 0, i);
1085
 
            mCameraMediaList->setItemParameter(i, i);
 
1566
            //DDebug() << ( *et ).m_str << endl;
 
1567
        }
 
1568
 
 
1569
        if (!name.isEmpty() && !path.isEmpty())
 
1570
        {
 
1571
            //DDebug() << "slotCameraMediaMenuEntries: Adding " << name << ", path " << path << endl;
 
1572
            if (i == 0)
 
1573
                d->cameraMediaList->clear();
 
1574
 
 
1575
            d->mediaItems[i] = path;
 
1576
 
 
1577
            d->cameraMediaList->insertItem(name, this, SLOT(slotDownloadImagesFromMedia(int)), 0, i);
 
1578
            d->cameraMediaList->setItemParameter(i, i);
1086
1579
            i++;
1087
 
       }
 
1580
        }
1088
1581
    }
1089
1582
}
1090
1583
 
1091
1584
void DigikamApp::slotDownloadImagesFromMedia( int id )
1092
1585
{
1093
 
    slotDownloadImages( mMediaItems[id].first );
 
1586
    slotDownloadImages( d->mediaItems[id] );
1094
1587
}
1095
1588
 
1096
1589
void DigikamApp::slotCameraRemoved(CameraType *ctype)
1100
1593
    KAction *cAction = ctype->action();
1101
1594
 
1102
1595
    if (cAction)
1103
 
        mCameraMenuAction->remove(cAction);
 
1596
        d->cameraMenuAction->remove(cAction);
1104
1597
}
1105
1598
 
1106
1599
void DigikamApp::slotCameraAutoDetect()
1107
1600
{
1108
1601
    bool retry = false;
1109
1602
 
1110
 
    CameraType* ctype = mCameraList->autoDetect(retry);
 
1603
    CameraType* ctype = d->cameraList->autoDetect(retry);
 
1604
    
1111
1605
    if (!ctype && retry)
1112
1606
    {
1113
1607
        QTimer::singleShot(0, this, SLOT(slotCameraAutoDetect()));
1122
1616
 
1123
1617
void DigikamApp::slotSetup()
1124
1618
{
1125
 
    Setup setup(this);
1126
 
 
1127
 
    // For to show the number of KIPI plugins in the setup dialog.
1128
 
 
1129
 
    KIPI::PluginLoader::PluginList list = KipiPluginLoader_->pluginList();
1130
 
    setup.pluginsPage_->initPlugins((int)list.count());
 
1619
    setup();
 
1620
}
 
1621
 
 
1622
bool DigikamApp::setup(bool iccSetupPage)
 
1623
{
 
1624
    Setup setup(this, 0, iccSetupPage ? Setup::IccProfiles : Setup::LastPageUsed);
 
1625
 
 
1626
    // To show the number of KIPI plugins in the setup dialog.
 
1627
 
 
1628
    KIPI::PluginLoader::PluginList list = d->kipiPluginLoader->pluginList();
 
1629
    setup.kipiPluginsPage()->initPlugins((int)list.count());
1131
1630
 
1132
1631
    if (setup.exec() != QDialog::Accepted)
1133
 
        return;
 
1632
        return false;
1134
1633
 
1135
 
    setup.pluginsPage_->applyPlugins();
1136
 
    m_ImagePluginsLoader->loadPluginsFromList(setup.editorPage_->getImagePluginsListEnable());
 
1634
    setup.kipiPluginsPage()->applyPlugins();
1137
1635
 
1138
1636
    slotSetupChanged();
 
1637
 
 
1638
    return true;
1139
1639
}
1140
1640
 
1141
1641
void DigikamApp::slotSetupCamera()
1144
1644
 
1145
1645
    // For to show the number of KIPI plugins in the setup dialog.
1146
1646
 
1147
 
    KIPI::PluginLoader::PluginList list = KipiPluginLoader_->pluginList();
1148
 
    setup.pluginsPage_->initPlugins((int)list.count());
 
1647
    KIPI::PluginLoader::PluginList list = d->kipiPluginLoader->pluginList();
 
1648
    setup.kipiPluginsPage()->initPlugins((int)list.count());
1149
1649
 
1150
1650
    if (setup.exec() != QDialog::Accepted)
1151
1651
        return;
1152
1652
 
1153
 
    setup.pluginsPage_->applyPlugins();
1154
 
    m_ImagePluginsLoader->loadPluginsFromList(setup.editorPage_->getImagePluginsListEnable());
 
1653
    setup.kipiPluginsPage()->applyPlugins();
1155
1654
 
1156
1655
    slotSetupChanged();
1157
1656
}
1158
1657
 
1159
1658
void DigikamApp::slotSetupChanged()
1160
1659
{
1161
 
    if(mAlbumSettings->getAlbumLibraryPath() != mAlbumManager->getLibraryPath())
1162
 
        mView->clearHistory();
1163
 
    mAlbumManager->setLibraryPath(mAlbumSettings->getAlbumLibraryPath());
1164
 
    mAlbumManager->startScan();
1165
 
 
1166
 
    mView->applySettings(mAlbumSettings);
1167
 
    updateDeleteTrashMenu();
1168
 
    if (ImageWindow::imagewindow())
 
1660
    // raw loading options might have changed
 
1661
    LoadingCacheInterface::cleanCache();
 
1662
 
 
1663
    if(d->albumSettings->getAlbumLibraryPath() != d->albumManager->getLibraryPath())
 
1664
        d->view->clearHistory();
 
1665
 
 
1666
    d->albumManager->setLibraryPath(d->albumSettings->getAlbumLibraryPath());
 
1667
    d->albumManager->startScan();
 
1668
 
 
1669
    if(d->albumSettings->getShowFolderTreeViewItemsCount())
 
1670
        d->albumManager->refresh();
 
1671
 
 
1672
    d->view->applySettings();
 
1673
    d->albumIconViewFilter->readSettings();
 
1674
    
 
1675
    AlbumThumbnailLoader::instance()->setThumbnailSize(d->albumSettings->getDefaultTreeIconSize());
 
1676
 
 
1677
    if (ImageWindow::imagewindowCreated())
1169
1678
        ImageWindow::imagewindow()->applySettings();
1170
1679
 
1171
 
    m_config->sync();
 
1680
    if (LightTableWindow::lightTableWindowCreated())
 
1681
        LightTableWindow::lightTableWindow()->applySettings();
 
1682
 
 
1683
    d->config->sync();
1172
1684
}
1173
1685
 
1174
1686
void DigikamApp::slotEditKeys()
1176
1688
    KKeyDialog* dialog = new KKeyDialog();
1177
1689
    dialog->insert( actionCollection(), i18n( "General" ) );
1178
1690
 
1179
 
    KIPI::PluginLoader::PluginList list = KipiPluginLoader_->pluginList();
 
1691
    KIPI::PluginLoader::PluginList list = d->kipiPluginLoader->pluginList();
1180
1692
 
1181
1693
    for( KIPI::PluginLoader::PluginList::Iterator it = list.begin() ; it != list.end() ; ++it )
1182
 
        {
 
1694
    {
1183
1695
        KIPI::Plugin* plugin = (*it)->plugin();
1184
1696
 
1185
1697
        if ( plugin )
1186
1698
           dialog->insert( plugin->actionCollection(), (*it)->comment() );
1187
 
        }
 
1699
    }
1188
1700
 
1189
1701
    dialog->configure();
1190
1702
    delete dialog;
1195
1707
    saveMainWindowSettings(KGlobal::config());
1196
1708
    KEditToolbar *dlg = new KEditToolbar(actionCollection(), "digikamui.rc");
1197
1709
 
1198
 
    if(dlg->exec());
 
1710
    if(dlg->exec())
1199
1711
    {
1200
1712
        createGUI(QString::fromLatin1( "digikamui.rc" ), false);
1201
1713
        applyMainWindowSettings(KGlobal::config());
1202
 
        plugActionList( QString::fromLatin1("file_actions_import"), m_kipiFileActionsImport );
1203
 
        plugActionList( QString::fromLatin1("image_actions"), m_kipiImageActions );
1204
 
        plugActionList( QString::fromLatin1("tool_actions"), m_kipiToolsActions );
1205
 
        plugActionList( QString::fromLatin1("batch_actions"), m_kipiBatchActions );
1206
 
        plugActionList( QString::fromLatin1("album_actions"), m_kipiAlbumActions );
1207
 
        plugActionList( QString::fromLatin1("file_actions_export"), m_kipiFileActionsExport );
 
1714
        plugActionList( QString::fromLatin1("file_actions_import"), d->kipiFileActionsImport );
 
1715
        plugActionList( QString::fromLatin1("image_actions"), d->kipiImageActions );
 
1716
        plugActionList( QString::fromLatin1("tool_actions"), d->kipiToolsActions );
 
1717
        plugActionList( QString::fromLatin1("batch_actions"), d->kipiBatchActions );
 
1718
        plugActionList( QString::fromLatin1("album_actions"), d->kipiAlbumActions );
 
1719
        plugActionList( QString::fromLatin1("file_actions_export"), d->kipiFileActionsExport );
1208
1720
    }
 
1721
    
1209
1722
    delete dlg;
1210
1723
}
1211
1724
 
1212
1725
void DigikamApp::slotToggleFullScreen()
1213
1726
{
1214
 
    if (mFullScreen)
 
1727
    if (d->fullScreen)
1215
1728
    {
1216
1729
#if QT_VERSION >= 0x030300
1217
1730
        setWindowState( windowState() & ~WindowFullScreen );
1218
1731
#else
1219
1732
        showNormal();
1220
1733
#endif
1221
 
        mFullScreen = false;
 
1734
        menuBar()->show();
 
1735
        statusBar()->show();
 
1736
        topDock()->show();
 
1737
        bottomDock()->show();
 
1738
        leftDock()->show();
 
1739
        rightDock()->show();
 
1740
        d->view->showSideBars();
 
1741
 
 
1742
        d->fullScreen = false;
1222
1743
    }
1223
1744
    else
1224
1745
    {
 
1746
        KConfig* config = kapp->config();
 
1747
        config->setGroup("ImageViewer Settings");
 
1748
        bool fullScreenHideToolBar = config->readBoolEntry("FullScreen Hide ToolBar", false);
 
1749
 
 
1750
        menuBar()->hide();
 
1751
        statusBar()->hide();
 
1752
        if (fullScreenHideToolBar)
 
1753
            topDock()->hide();
 
1754
        bottomDock()->hide();
 
1755
        leftDock()->hide();
 
1756
        rightDock()->hide();
 
1757
        d->view->hideSideBars();
 
1758
 
1225
1759
        showFullScreen();
1226
 
        mFullScreen = true;
 
1760
        d->fullScreen = true;
1227
1761
    }
1228
1762
}
1229
1763
 
1232
1766
#if KDE_IS_VERSION(3,2,0)
1233
1767
    QStringList tipsFiles;
1234
1768
    tipsFiles.append("digikam/tips");
1235
 
    tipsFiles.append("digikamimageplugins/tips");
 
1769
 
1236
1770
    tipsFiles.append("kipi/tips");
1237
1771
 
1238
1772
    KTipDialog::showMultiTip(this, tipsFiles, true);
1243
1777
 
1244
1778
void DigikamApp::slotShowKipiHelp()
1245
1779
{
1246
 
    KApplication::kApplication()->invokeHelp( QString::null, "kipi-plugins" );
 
1780
    KApplication::kApplication()->invokeHelp( QString(), "kipi-plugins" );
 
1781
}
 
1782
 
 
1783
void DigikamApp::slotRawCameraList()
 
1784
{
 
1785
    RawCameraDlg dlg(this);
 
1786
    dlg.exec();
1247
1787
}
1248
1788
 
1249
1789
void DigikamApp::loadPlugins()
1250
1790
{
 
1791
    if(d->splashScreen)
 
1792
        d->splashScreen->message(i18n("Loading Kipi Plugins"), AlignLeft, white);
 
1793
 
1251
1794
    QStringList ignores;
1252
 
    KipiInterface_ = new DigikamKipiInterface( this, "Digikam_KIPI_interface" );
 
1795
    d->kipiInterface = new DigikamKipiInterface( this, "Digikam_KIPI_interface" );
1253
1796
 
1254
1797
    ignores.append( "HelloWorld" );
1255
1798
    ignores.append( "KameraKlient" );
1256
1799
 
1257
 
    KipiPluginLoader_ = new KIPI::PluginLoader( ignores, KipiInterface_ );
 
1800
    d->kipiPluginLoader = new KIPI::PluginLoader( ignores, d->kipiInterface );
1258
1801
 
1259
 
    connect( KipiPluginLoader_, SIGNAL( replug() ),
 
1802
    connect( d->kipiPluginLoader, SIGNAL( replug() ),
1260
1803
             this, SLOT( slotKipiPluginPlug() ) );
1261
1804
 
1262
 
    KipiPluginLoader_->loadPlugins();
 
1805
    d->kipiPluginLoader->loadPlugins();
1263
1806
 
1264
 
    KipiInterface_->slotCurrentAlbumChanged(mAlbumManager->currentAlbum());
 
1807
    d->kipiInterface->slotCurrentAlbumChanged(d->albumManager->currentAlbum());
1265
1808
 
1266
1809
    // Setting the initial menu options after all plugins have been loaded
1267
 
    mView->slot_albumSelected(mAlbumManager->currentAlbum());
 
1810
    d->view->slotAlbumSelected(d->albumManager->currentAlbum());
1268
1811
 
1269
 
    m_ImagePluginsLoader = new ImagePluginLoader(this, mSplash);
 
1812
    d->imagePluginsLoader = new ImagePluginLoader(this, d->splashScreen);
1270
1813
}
1271
1814
 
1272
1815
void DigikamApp::slotKipiPluginPlug()
1278
1821
    unplugActionList( QString::fromLatin1("batch_actions") );
1279
1822
    unplugActionList( QString::fromLatin1("album_actions") );
1280
1823
 
1281
 
    m_kipiImageActions.clear();
1282
 
    m_kipiFileActionsExport.clear();
1283
 
    m_kipiFileActionsImport.clear();
1284
 
    m_kipiToolsActions.clear();
1285
 
    m_kipiBatchActions.clear();
1286
 
    m_kipiAlbumActions.clear();
 
1824
    d->kipiImageActions.clear();
 
1825
    d->kipiFileActionsExport.clear();
 
1826
    d->kipiFileActionsImport.clear();
 
1827
    d->kipiToolsActions.clear();
 
1828
    d->kipiBatchActions.clear();
 
1829
    d->kipiAlbumActions.clear();
1287
1830
 
1288
 
    KIPI::PluginLoader::PluginList list = KipiPluginLoader_->pluginList();
 
1831
    KIPI::PluginLoader::PluginList list = d->kipiPluginLoader->pluginList();
1289
1832
 
1290
1833
    int cpt = 0;
1291
1834
 
1298
1841
 
1299
1842
        ++cpt;
1300
1843
 
1301
 
        if(mSplash)
1302
 
            mSplash->message(i18n("Loading: %1").arg((*it)->name()));
 
1844
        //if(d->splashScreen)
 
1845
          //  d->splashScreen->message(i18n("Loading: %1").arg((*it)->name()));
1303
1846
 
1304
1847
        plugin->setup( this );
1305
1848
        QPtrList<KAction>* popup = 0;
1311
1854
        for( KActionPtrList::Iterator it2 = actions.begin(); it2 != actions.end(); ++it2 )
1312
1855
        {
1313
1856
            if ( plugin->category(*it2) == KIPI::IMAGESPLUGIN )
1314
 
               popup = &m_kipiImageActions;
 
1857
               popup = &d->kipiImageActions;
1315
1858
 
1316
1859
            else if ( plugin->category(*it2) == KIPI::EXPORTPLUGIN )
1317
 
               popup = &m_kipiFileActionsExport;
 
1860
               popup = &d->kipiFileActionsExport;
1318
1861
 
1319
1862
            else if ( plugin->category(*it2) == KIPI::IMPORTPLUGIN )
1320
 
               popup = &m_kipiFileActionsImport;
 
1863
               popup = &d->kipiFileActionsImport;
1321
1864
 
1322
1865
            else if ( plugin->category(*it2) == KIPI::TOOLSPLUGIN )
1323
 
               popup = &m_kipiToolsActions;
 
1866
               popup = &d->kipiToolsActions;
1324
1867
 
1325
1868
            else if ( plugin->category(*it2) == KIPI::BATCHPLUGIN )
1326
 
               popup = &m_kipiBatchActions;
 
1869
               popup = &d->kipiBatchActions;
1327
1870
 
1328
1871
            else if ( plugin->category(*it2) == KIPI::COLLECTIONSPLUGIN )
1329
 
               popup = &m_kipiAlbumActions;
 
1872
               popup = &d->kipiAlbumActions;
1330
1873
 
1331
1874
            // Plug the KIPI plugins actions in according with the KAction method.
1332
1875
 
1333
1876
            if ( popup )
1334
1877
               popup->append( *it2 );
1335
1878
            else
1336
 
               kdDebug() << "No menu found for a plugin!!!" << endl;
 
1879
               DDebug() << "No menu found for a plugin!!!" << endl;
1337
1880
        }
1338
1881
 
1339
1882
        plugin->actionCollection()->readShortcutSettings();
1340
1883
    }
1341
1884
 
1342
 
    if(mSplash)
1343
 
        mSplash->message(i18n("1 Kipi Plugin Loaded", "%n Kipi Plugins Loaded", cpt));
 
1885
    //if(d->splashScreen)
 
1886
      //  d->splashScreen->message(i18n("1 Kipi Plugin Loaded", "%n Kipi Plugins Loaded", cpt));
1344
1887
 
1345
1888
    // Create GUI menu in according with plugins.
1346
1889
 
1347
 
    plugActionList( QString::fromLatin1("file_actions_export"), m_kipiFileActionsExport );
1348
 
    plugActionList( QString::fromLatin1("file_actions_import"), m_kipiFileActionsImport );
1349
 
    plugActionList( QString::fromLatin1("image_actions"), m_kipiImageActions );
1350
 
    plugActionList( QString::fromLatin1("tool_actions"), m_kipiToolsActions );
1351
 
    plugActionList( QString::fromLatin1("batch_actions"), m_kipiBatchActions );
1352
 
    plugActionList( QString::fromLatin1("album_actions"), m_kipiAlbumActions );
 
1890
    plugActionList( QString::fromLatin1("file_actions_export"), d->kipiFileActionsExport );
 
1891
    plugActionList( QString::fromLatin1("file_actions_import"), d->kipiFileActionsImport );
 
1892
    plugActionList( QString::fromLatin1("image_actions"), d->kipiImageActions );
 
1893
    plugActionList( QString::fromLatin1("tool_actions"), d->kipiToolsActions );
 
1894
    plugActionList( QString::fromLatin1("batch_actions"), d->kipiBatchActions );
 
1895
    plugActionList( QString::fromLatin1("album_actions"), d->kipiAlbumActions );
1353
1896
}
1354
1897
 
1355
1898
void DigikamApp::loadCameras()
1356
1899
{
1357
 
    mCameraList->load();
1358
 
  
1359
 
//    TA: unfinished  
1360
 
//    mCameraMenuAction->popupMenu()->insertSeparator();
1361
 
//    mCameraMenuAction->popupMenu()->insertItem(i18n("Media Browse"), mCameraMediaList);
1362
 
    
1363
 
    mCameraMenuAction->popupMenu()->insertSeparator();
1364
 
    
1365
 
    mCameraMenuAction->insert(new KAction(i18n("Add Camera..."), 0,
 
1900
    d->cameraList->load();
 
1901
 
 
1902
    d->cameraMenuAction->popupMenu()->insertSeparator();
 
1903
 
 
1904
    d->cameraMenuAction->popupMenu()->insertItem(i18n("Browse Media"), d->cameraMediaList);
 
1905
 
 
1906
    d->cameraMenuAction->popupMenu()->insertSeparator();
 
1907
 
 
1908
    d->cameraMenuAction->insert(new KAction(i18n("Add Camera..."), 0,
1366
1909
                                          this, SLOT(slotSetupCamera()),
1367
1910
                                          actionCollection(),
1368
1911
                                          "camera_add"));
1370
1913
 
1371
1914
void DigikamApp::populateThemes()
1372
1915
{
1373
 
    Digikam::ThemeEngine::instance()->scanThemes();
1374
 
    QStringList themes(Digikam::ThemeEngine::instance()->themeNames());
1375
 
 
1376
 
    mThemeMenuAction->setItems(themes);
1377
 
    int index = themes.findIndex(mAlbumSettings->getCurrentTheme());
 
1916
    if(d->splashScreen)
 
1917
        d->splashScreen->message(i18n("Loading themes"), AlignLeft, white);
 
1918
 
 
1919
    ThemeEngine::instance()->scanThemes();
 
1920
    d->themeMenuAction->setItems(ThemeEngine::instance()->themeNames());
 
1921
    slotThemeChanged();
 
1922
    ThemeEngine::instance()->slotChangeTheme(d->themeMenuAction->currentText());
 
1923
}
 
1924
 
 
1925
void DigikamApp::slotChangeTheme(const QString& theme)
 
1926
{
 
1927
    d->albumSettings->setCurrentTheme(theme);
 
1928
    ThemeEngine::instance()->slotChangeTheme(theme);
 
1929
}
 
1930
 
 
1931
void DigikamApp::slotThemeChanged()
 
1932
{
 
1933
    QStringList themes(ThemeEngine::instance()->themeNames());
 
1934
    int index = themes.findIndex(d->albumSettings->getCurrentTheme());
1378
1935
    if (index == -1)
1379
1936
        index = themes.findIndex(i18n("Default"));
1380
 
    mThemeMenuAction->setCurrentItem(index);
1381
 
    Digikam::ThemeEngine::instance()->slotChangeTheme(mThemeMenuAction->currentText());
1382
 
}
1383
 
 
1384
 
void DigikamApp::slotChangeTheme(const QString& theme)
1385
 
{
1386
 
    mAlbumSettings->setCurrentTheme(theme);
1387
 
    Digikam::ThemeEngine::instance()->slotChangeTheme(theme);
1388
 
}
1389
 
 
1390
 
void DigikamApp::updateDeleteTrashMenu()
1391
 
{
1392
 
    if (mAlbumSettings->getUseTrash())
1393
 
    {
1394
 
        mDeleteAction->setText(i18n("Move Album to Trash"));
1395
 
        mDeleteAction->setIcon("edittrash");
1396
 
        mImageDeleteAction->setText(i18n("Move to Trash"));
1397
 
        mImageDeleteAction->setIcon("edittrash");
1398
 
    }
1399
 
    else
1400
 
    {
1401
 
        mDeleteAction->setText(i18n("Delete Album"));
1402
 
        mDeleteAction->setIcon("editdelete");
1403
 
        mImageDeleteAction->setText(i18n("Delete"));
1404
 
        mImageDeleteAction->setIcon("editdelete");
1405
 
    }
 
1937
 
 
1938
    d->themeMenuAction->setCurrentItem(index);
1406
1939
}
1407
1940
 
1408
1941
void DigikamApp::slotDatabaseRescan()
1409
1942
{
1410
1943
    ScanLib sLib;
1411
1944
    sLib.startScan();
1412
 
}
1413
 
 
1414
 
DigikamApp* DigikamApp::m_instance = 0;
1415
 
 
1416
 
#include "digikamapp.moc"
 
1945
 
 
1946
    d->view->refreshView();
 
1947
 
 
1948
    if (ImageWindow::imagewindowCreated())
 
1949
        ImageWindow::imagewindow()->refreshView();
 
1950
 
 
1951
    if (LightTableWindow::lightTableWindowCreated())
 
1952
        LightTableWindow::lightTableWindow()->refreshView();
 
1953
}
 
1954
 
 
1955
void DigikamApp::slotRebuildAllThumbs()
 
1956
{
 
1957
    QString msg = i18n("Rebuilding all image thumbnails can take some time.\n"
 
1958
                       "Do you want to continue?");
 
1959
    int result = KMessageBox::warningContinueCancel(this, msg);
 
1960
    if (result != KMessageBox::Continue)
 
1961
        return;
 
1962
 
 
1963
    BatchThumbsGenerator *thumbsGenerator = new BatchThumbsGenerator(this);
 
1964
    
 
1965
    connect(thumbsGenerator, SIGNAL(signalRebuildAllThumbsDone()),
 
1966
            this, SLOT(slotRebuildAllThumbsDone()));
 
1967
 
 
1968
    thumbsGenerator->exec();
 
1969
}
 
1970
 
 
1971
void DigikamApp::slotRebuildAllThumbsDone()
 
1972
{
 
1973
    d->view->applySettings();
 
1974
}
 
1975
 
 
1976
void DigikamApp::slotSyncAllPicturesMetadata()
 
1977
{
 
1978
    QString msg = i18n("Updating the metadata database can take some time. \nDo you want to continue?");
 
1979
    int result = KMessageBox::warningContinueCancel(this, msg);
 
1980
    if (result != KMessageBox::Continue)
 
1981
        return;
 
1982
 
 
1983
    BatchAlbumsSyncMetadata *syncMetadata = new BatchAlbumsSyncMetadata(this);
 
1984
 
 
1985
    connect(syncMetadata, SIGNAL(signalComplete()),
 
1986
            this, SLOT(slotSyncAllPicturesMetadataDone()));
 
1987
 
 
1988
    syncMetadata->exec();
 
1989
}
 
1990
 
 
1991
void DigikamApp::slotSyncAllPicturesMetadataDone()
 
1992
{
 
1993
    d->view->applySettings();
 
1994
}
 
1995
 
 
1996
void DigikamApp::slotDonateMoney()
 
1997
{
 
1998
    KApplication::kApplication()->invokeBrowser("http://www.digikam.org/?q=donation");
 
1999
}
 
2000
 
 
2001
void DigikamApp::slotContribute()
 
2002
{
 
2003
    KApplication::kApplication()->invokeBrowser("http://www.digikam.org/?q=contrib");
 
2004
}
 
2005
 
 
2006
void DigikamApp::slotRecurseAlbums(bool checked)
 
2007
{
 
2008
    AlbumLister::instance()->setRecurseAlbums(checked);
 
2009
}
 
2010
 
 
2011
void DigikamApp::slotRecurseTags(bool checked)
 
2012
{
 
2013
    AlbumLister::instance()->setRecurseTags(checked);
 
2014
}
 
2015
 
 
2016
void DigikamApp::slotZoomSliderChanged(int size)
 
2017
{
 
2018
    d->view->setThumbSize(size);
 
2019
}
 
2020
 
 
2021
void DigikamApp::slotThumbSizeChanged(int size)
 
2022
{
 
2023
    d->statusZoomBar->setZoomSliderValue(size);
 
2024
    d->statusZoomBar->setZoomTrackerText(i18n("Size: %1").arg(size));
 
2025
}
 
2026
 
 
2027
void DigikamApp::slotZoomChanged(double zoom, int size)
 
2028
{
 
2029
    d->statusZoomBar->setZoomSliderValue(size);
 
2030
    d->statusZoomBar->setZoomTrackerText(i18n("zoom: %1%").arg((int)(zoom*100.0)));
 
2031
}
 
2032
 
 
2033
void DigikamApp::slotTogglePreview(bool t)
 
2034
{
 
2035
    // NOTE: if 't' is true, we are in Preview Mode, else we are in AlbumView Mode
 
2036
 
 
2037
    // This is require if ESC is pressed to go out of Preview Mode. 
 
2038
    // imagePreviewAction is handled by F3 key only. 
 
2039
    d->imagePreviewAction->setChecked(t);
 
2040
 
 
2041
    // Here, we will toggle some menu actions depending of current Mode.
 
2042
    
 
2043
    // Select menu.
 
2044
    d->selectAllAction->setEnabled(!t);
 
2045
    d->selectNoneAction->setEnabled(!t);
 
2046
    d->selectInvertAction->setEnabled(!t);
 
2047
 
 
2048
    // View menu     
 
2049
    d->albumSortAction->setEnabled(!t);
 
2050
    d->imageSortAction->setEnabled(!t);
 
2051
    d->zoomTo100percents->setEnabled(t);
 
2052
    d->zoomFitToWindowAction->setEnabled(t);
 
2053
}
 
2054
 
 
2055
void DigikamApp::slotAlbumAddImages()
 
2056
{
 
2057
    QString path = KFileDialog::getExistingDirectory(KGlobalSettings::documentPath(), this,
 
2058
                                i18n("Select folder to parse"));
 
2059
 
 
2060
    if(path.isEmpty())
 
2061
        return;
 
2062
 
 
2063
    // The folder contents will be parsed by Camera interface in "Directory Browse" mode.
 
2064
    downloadFrom(path);
 
2065
}
 
2066
 
 
2067
}  // namespace Digikam