1
/* ============================================================
3
* This file is a part of digiKam project
4
* http://www.digikam.org
7
* Description : A widget stack to embedded album content view
8
* or the current image preview.
10
* Copyright (C) 2006-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
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)
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.
23
* ============================================================ */
27
#include <qfileinfo.h>
32
#include <khtmlview.h>
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"
47
class AlbumWidgetStackPriv
52
AlbumWidgetStackPriv()
60
AlbumIconView *albumIconView;
62
ImagePreviewView *imagePreviewView;
64
WelcomePageView *welcomePageView;
66
MediaPlayerView *mediaPlayerView;
69
AlbumWidgetStack::AlbumWidgetStack(QWidget *parent)
70
: QWidgetStack(parent, 0, Qt::WDestructiveClose)
72
d = new AlbumWidgetStackPriv;
74
d->albumIconView = new AlbumIconView(this);
75
d->imagePreviewView = new ImagePreviewView(this);
76
d->welcomePageView = new WelcomePageView(this);
77
d->mediaPlayerView = new MediaPlayerView(this);
79
addWidget(d->albumIconView, PreviewAlbumMode);
80
addWidget(d->imagePreviewView, PreviewImageMode);
81
addWidget(d->welcomePageView->view(), WelcomePageMode);
82
addWidget(d->mediaPlayerView, MediaPlayerMode);
84
setPreviewMode(PreviewAlbumMode);
86
// -----------------------------------------------------------------
88
connect(d->imagePreviewView, SIGNAL(signalNextItem()),
89
this, SIGNAL(signalNextItem()));
91
connect(d->imagePreviewView, SIGNAL(signalPrevItem()),
92
this, SIGNAL(signalPrevItem()));
94
connect(d->imagePreviewView, SIGNAL(signalEditItem()),
95
this, SIGNAL(signalEditItem()));
97
connect(d->imagePreviewView, SIGNAL(signalDeleteItem()),
98
this, SIGNAL(signalDeleteItem()));
100
connect(d->imagePreviewView, SIGNAL(signalBack2Album()),
101
this, SIGNAL(signalBack2Album()));
103
connect(d->imagePreviewView, SIGNAL(signalSlideShow()),
104
this, SIGNAL(signalSlideShow()));
106
connect(d->imagePreviewView, SIGNAL(signalZoomFactorChanged(double)),
107
this, SLOT(slotZoomFactorChanged(double)));
109
connect(d->imagePreviewView, SIGNAL(signalInsert2LightTable()),
110
this, SIGNAL(signalInsert2LightTable()));
113
AlbumWidgetStack::~AlbumWidgetStack()
118
void AlbumWidgetStack::slotEscapePreview()
120
if (previewMode() == MediaPlayerMode)
121
d->mediaPlayerView->escapePreview();
124
AlbumIconView* AlbumWidgetStack::albumIconView()
126
return d->albumIconView;
129
ImagePreviewView* AlbumWidgetStack::imagePreviewView()
131
return d->imagePreviewView;
134
void AlbumWidgetStack::setPreviewItem(ImageInfo* info, ImageInfo *previous, ImageInfo *next)
138
if (previewMode() == MediaPlayerMode)
139
d->mediaPlayerView->setMediaPlayerFromUrl(KURL());
140
else if (previewMode() == PreviewImageMode)
142
d->imagePreviewView->setImageInfo();
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) )
155
setPreviewMode(MediaPlayerMode);
156
d->mediaPlayerView->setMediaPlayerFromUrl(info->kurl());
160
// Stop media player if running...
161
if (previewMode() == MediaPlayerMode)
164
d->imagePreviewView->setImageInfo(info, previous, next);
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.
173
int AlbumWidgetStack::previewMode(void)
175
return id(visibleWidget());
178
void AlbumWidgetStack::setPreviewMode(int mode)
180
if (mode != PreviewAlbumMode && mode != PreviewImageMode &&
181
mode != WelcomePageMode && mode != MediaPlayerMode)
184
if (mode == PreviewAlbumMode || mode == WelcomePageMode)
186
d->albumIconView->setFocus();
189
emit signalToggledToPreviewMode(false);
197
void AlbumWidgetStack::previewLoaded()
199
emit signalToggledToPreviewMode(true);
202
void AlbumWidgetStack::slotZoomFactorChanged(double z)
204
if (previewMode() == PreviewImageMode)
205
emit signalZoomFactorChanged(z);
208
void AlbumWidgetStack::slotItemsUpdated(const KURL::List& list)
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.
213
if (previewMode() == PreviewAlbumMode ||
214
previewMode() == WelcomePageMode ||
215
previewMode() == MediaPlayerMode) // What we can do with media player ?
218
if (list.contains(imagePreviewView()->getImageInfo()->kurl()))
219
d->imagePreviewView->reload();
222
void AlbumWidgetStack::increaseZoom()
224
d->imagePreviewView->slotIncreaseZoom();
227
void AlbumWidgetStack::decreaseZoom()
229
d->imagePreviewView->slotDecreaseZoom();
232
void AlbumWidgetStack::zoomTo100Percents()
234
d->imagePreviewView->setZoomFactor(1.0);
237
void AlbumWidgetStack::fitToWindow()
239
d->imagePreviewView->fitToWindow();
242
void AlbumWidgetStack::toggleFitToWindowOr100()
244
d->imagePreviewView->toggleFitToWindowOr100();
247
bool AlbumWidgetStack::maxZoom()
249
return d->imagePreviewView->maxZoom();
252
bool AlbumWidgetStack::minZoom()
254
return d->imagePreviewView->minZoom();
257
void AlbumWidgetStack::setZoomFactor(double z)
259
d->imagePreviewView->setZoomFactor(z);
262
void AlbumWidgetStack::setZoomFactorSnapped(double z)
264
d->imagePreviewView->setZoomFactorSnapped(z);
267
double AlbumWidgetStack::zoomFactor()
269
return d->imagePreviewView->zoomFactor();
272
double AlbumWidgetStack::zoomMin()
274
return d->imagePreviewView->zoomMin();
277
double AlbumWidgetStack::zoomMax()
279
return d->imagePreviewView->zoomMax();
282
} // namespace Digikam