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

« back to all changes in this revision

Viewing changes to digikam/digikam/albumwidgetstack.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
 * This file is a part of digiKam project
 
4
 * http://www.digikam.org
 
5
 * 
 
6
 * Date        : 2006-06-13
 
7
 * Description : A widget stack to embedded album content view
 
8
 *               or the current image preview.
 
9
 *
 
10
 * Copyright (C) 2006-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
 
11
 *
 
12
 * This program is free software; you can redistribute it
 
13
 * and/or modify it under the terms of the GNU General
 
14
 * Public License as published by the Free Software Foundation;
 
15
 * either version 2, or (at your option)
 
16
 * any later version.
 
17
 *
 
18
 * This program is distributed in the hope that it will be useful,
 
19
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
20
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
21
 * GNU General Public License for more details.
 
22
 *
 
23
 * ============================================================ */
 
24
 
 
25
// Qt includes.
 
26
 
 
27
#include <qfileinfo.h>
 
28
 
 
29
// KDE includes.
 
30
 
 
31
#include <kurl.h>
 
32
#include <khtmlview.h>
 
33
 
 
34
// Local includes.
 
35
 
 
36
#include "albumsettings.h"
 
37
#include "albumiconview.h"
 
38
#include "imagepreviewview.h"
 
39
#include "welcomepageview.h"
 
40
#include "mediaplayerview.h"
 
41
#include "albumwidgetstack.h"
 
42
#include "albumwidgetstack.moc"
 
43
 
 
44
namespace Digikam
 
45
{
 
46
 
 
47
class AlbumWidgetStackPriv
 
48
{
 
49
 
 
50
public:
 
51
 
 
52
    AlbumWidgetStackPriv()
 
53
    {
 
54
        albumIconView    = 0;
 
55
        imagePreviewView = 0;
 
56
        welcomePageView  = 0;
 
57
        mediaPlayerView  = 0;
 
58
    }
 
59
 
 
60
    AlbumIconView    *albumIconView;
 
61
 
 
62
    ImagePreviewView *imagePreviewView;
 
63
 
 
64
    WelcomePageView  *welcomePageView;
 
65
 
 
66
    MediaPlayerView  *mediaPlayerView;
 
67
};
 
68
 
 
69
AlbumWidgetStack::AlbumWidgetStack(QWidget *parent)
 
70
                : QWidgetStack(parent, 0, Qt::WDestructiveClose)
 
71
{
 
72
    d = new AlbumWidgetStackPriv;
 
73
 
 
74
    d->albumIconView    = new AlbumIconView(this);
 
75
    d->imagePreviewView = new ImagePreviewView(this);
 
76
    d->welcomePageView  = new WelcomePageView(this);
 
77
    d->mediaPlayerView  = new MediaPlayerView(this);
 
78
 
 
79
    addWidget(d->albumIconView,           PreviewAlbumMode);
 
80
    addWidget(d->imagePreviewView,        PreviewImageMode);
 
81
    addWidget(d->welcomePageView->view(), WelcomePageMode);
 
82
    addWidget(d->mediaPlayerView,         MediaPlayerMode);
 
83
 
 
84
    setPreviewMode(PreviewAlbumMode);
 
85
 
 
86
    // -----------------------------------------------------------------
 
87
 
 
88
    connect(d->imagePreviewView, SIGNAL(signalNextItem()),
 
89
            this, SIGNAL(signalNextItem()));
 
90
 
 
91
    connect(d->imagePreviewView, SIGNAL(signalPrevItem()),
 
92
            this, SIGNAL(signalPrevItem()));
 
93
 
 
94
    connect(d->imagePreviewView, SIGNAL(signalEditItem()),
 
95
            this, SIGNAL(signalEditItem()));
 
96
 
 
97
    connect(d->imagePreviewView, SIGNAL(signalDeleteItem()),
 
98
            this, SIGNAL(signalDeleteItem()));
 
99
 
 
100
    connect(d->imagePreviewView, SIGNAL(signalBack2Album()),
 
101
            this, SIGNAL(signalBack2Album()));
 
102
 
 
103
    connect(d->imagePreviewView, SIGNAL(signalSlideShow()),
 
104
            this, SIGNAL(signalSlideShow()));
 
105
 
 
106
    connect(d->imagePreviewView, SIGNAL(signalZoomFactorChanged(double)),
 
107
            this, SLOT(slotZoomFactorChanged(double)));
 
108
 
 
109
    connect(d->imagePreviewView, SIGNAL(signalInsert2LightTable()),
 
110
            this, SIGNAL(signalInsert2LightTable()));
 
111
}
 
112
 
 
113
AlbumWidgetStack::~AlbumWidgetStack()
 
114
{
 
115
    delete d;
 
116
}
 
117
 
 
118
void AlbumWidgetStack::slotEscapePreview()
 
119
{
 
120
    if (previewMode() == MediaPlayerMode)
 
121
        d->mediaPlayerView->escapePreview();
 
122
}
 
123
 
 
124
AlbumIconView* AlbumWidgetStack::albumIconView()
 
125
{
 
126
    return d->albumIconView;
 
127
}
 
128
 
 
129
ImagePreviewView* AlbumWidgetStack::imagePreviewView()
 
130
{
 
131
    return d->imagePreviewView;
 
132
}
 
133
 
 
134
void AlbumWidgetStack::setPreviewItem(ImageInfo* info, ImageInfo *previous, ImageInfo *next)
 
135
{
 
136
    if (!info)
 
137
    {
 
138
        if (previewMode() == MediaPlayerMode)
 
139
            d->mediaPlayerView->setMediaPlayerFromUrl(KURL());
 
140
        else if (previewMode() == PreviewImageMode)
 
141
        {
 
142
            d->imagePreviewView->setImageInfo();
 
143
        }
 
144
    }    
 
145
    else
 
146
    {
 
147
        AlbumSettings *settings      = AlbumSettings::instance();
 
148
        QString currentFileExtension = QFileInfo(info->kurl().path()).extension(false);
 
149
        QString mediaplayerfilter    = settings->getMovieFileFilter().lower() +
 
150
                                       settings->getMovieFileFilter().upper() +
 
151
                                       settings->getAudioFileFilter().lower() +
 
152
                                       settings->getAudioFileFilter().upper();
 
153
        if (mediaplayerfilter.contains(currentFileExtension) )
 
154
        {
 
155
            setPreviewMode(MediaPlayerMode);
 
156
            d->mediaPlayerView->setMediaPlayerFromUrl(info->kurl());
 
157
        }
 
158
        else
 
159
        {
 
160
            // Stop media player if running...
 
161
            if (previewMode() == MediaPlayerMode)
 
162
                setPreviewItem();
 
163
 
 
164
            d->imagePreviewView->setImageInfo(info, previous, next);
 
165
 
 
166
            // NOTE: No need to toggle imediatly in PreviewImageMode here, 
 
167
            // because we will receive a signal for that when the image preview will be loaded.
 
168
            // This will prevent a flicker effect with the old image preview loaded in stack.
 
169
        }
 
170
    }
 
171
}
 
172
 
 
173
int AlbumWidgetStack::previewMode(void)
 
174
{
 
175
    return id(visibleWidget());
 
176
}
 
177
 
 
178
void AlbumWidgetStack::setPreviewMode(int mode)
 
179
{
 
180
    if (mode != PreviewAlbumMode && mode != PreviewImageMode && 
 
181
        mode != WelcomePageMode  && mode != MediaPlayerMode)
 
182
        return;
 
183
 
 
184
    if (mode == PreviewAlbumMode || mode == WelcomePageMode)
 
185
    {
 
186
        d->albumIconView->setFocus();   
 
187
        setPreviewItem();
 
188
        raiseWidget(mode);
 
189
        emit signalToggledToPreviewMode(false);
 
190
    }
 
191
    else
 
192
    { 
 
193
        raiseWidget(mode);
 
194
    }
 
195
}
 
196
 
 
197
void AlbumWidgetStack::previewLoaded()
 
198
{
 
199
     emit signalToggledToPreviewMode(true);
 
200
}
 
201
 
 
202
void AlbumWidgetStack::slotZoomFactorChanged(double z)
 
203
{
 
204
    if (previewMode() == PreviewImageMode)
 
205
        emit signalZoomFactorChanged(z);
 
206
}
 
207
 
 
208
void AlbumWidgetStack::slotItemsUpdated(const KURL::List& list)
 
209
{
 
210
    // If item are updated from Icon View, and if we are in Preview Mode,
 
211
    // We will check if the current item preview need to be reloaded.
 
212
 
 
213
    if (previewMode() == PreviewAlbumMode ||
 
214
        previewMode() == WelcomePageMode  ||
 
215
        previewMode() == MediaPlayerMode)    // What we can do with media player ?
 
216
        return;
 
217
 
 
218
    if (list.contains(imagePreviewView()->getImageInfo()->kurl()))
 
219
        d->imagePreviewView->reload();
 
220
}
 
221
 
 
222
void AlbumWidgetStack::increaseZoom()
 
223
{
 
224
    d->imagePreviewView->slotIncreaseZoom();
 
225
}
 
226
 
 
227
void AlbumWidgetStack::decreaseZoom()
 
228
{
 
229
    d->imagePreviewView->slotDecreaseZoom();
 
230
}
 
231
 
 
232
void AlbumWidgetStack::zoomTo100Percents()
 
233
{
 
234
    d->imagePreviewView->setZoomFactor(1.0);
 
235
}
 
236
 
 
237
void AlbumWidgetStack::fitToWindow()
 
238
{
 
239
    d->imagePreviewView->fitToWindow();
 
240
}
 
241
 
 
242
void AlbumWidgetStack::toggleFitToWindowOr100()
 
243
{
 
244
    d->imagePreviewView->toggleFitToWindowOr100();
 
245
}
 
246
 
 
247
bool AlbumWidgetStack::maxZoom()
 
248
{
 
249
    return d->imagePreviewView->maxZoom();
 
250
}
 
251
 
 
252
bool AlbumWidgetStack::minZoom()
 
253
{
 
254
    return d->imagePreviewView->minZoom();
 
255
}
 
256
 
 
257
void AlbumWidgetStack::setZoomFactor(double z)
 
258
{
 
259
    d->imagePreviewView->setZoomFactor(z);
 
260
}
 
261
 
 
262
void AlbumWidgetStack::setZoomFactorSnapped(double z)
 
263
{
 
264
    d->imagePreviewView->setZoomFactorSnapped(z);
 
265
}
 
266
 
 
267
double AlbumWidgetStack::zoomFactor()
 
268
{
 
269
    return d->imagePreviewView->zoomFactor();
 
270
}
 
271
 
 
272
double AlbumWidgetStack::zoomMin()
 
273
{
 
274
    return d->imagePreviewView->zoomMin();
 
275
}
 
276
 
 
277
double AlbumWidgetStack::zoomMax()
 
278
{
 
279
    return d->imagePreviewView->zoomMax();
 
280
}
 
281
 
 
282
}  // namespace Digikam