[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [digikam/development/3.0.0] utilities/cameragui/views: Added the new views for import tool
From: Islam Wazery <wazery () ubuntu ! com>
Date: 2012-07-31 23:11:44
Message-ID: 20120731231144.CF0F0A6094 () git ! kde ! org
[Download RAW message or body]
Git commit b6d71e848b2731ea34140887cb372d1adc194d07 by Islam Wazery.
Committed on 01/08/2012 at 00:39.
Pushed by wazery into branch 'development/3.0.0'.
Added the new views for import tool
M +7 -5 utilities/cameragui/views/importcategorizedview.cpp
M +2 -2 utilities/cameragui/views/importcategorizedview.h
A +362 -0 utilities/cameragui/views/importiconview.cpp [License: UNKNOWN] *
A +64 -0 utilities/cameragui/views/importiconview.h [License: UNKNOWN] *
A +59 -0 utilities/cameragui/views/importiconview_p.cpp [License: UNKNOWN] \
* A +72 -0 utilities/cameragui/views/importiconview_p.h [License: GPL \
(v2+)] A +508 -0 utilities/cameragui/views/importpreviewview.cpp [License: \
GPL (v2+)] A +115 -0 utilities/cameragui/views/importpreviewview.h [License: \
GPL (v2+)] A +476 -0 utilities/cameragui/views/importstackedview.cpp \
[License: GPL (v2+)] A +137 -0 utilities/cameragui/views/importstackedview.h \
[License: GPL (v2+)] A +192 -0 utilities/cameragui/views/importthumbnailbar.cpp \
[License: UNKNOWN] * A +57 -0 utilities/cameragui/views/importthumbnailbar.h \
[License: UNKNOWN] * A +867 -0 utilities/cameragui/views/importview.cpp \
[License: UNKNOWN] * A +133 -0 utilities/cameragui/views/importview.h \
[License: UNKNOWN] *
The files marked with a * at the end have a non valid license. Please read: \
http://techbase.kde.org/Policies/Licensing_Policy and use the headers which are \
listed at that page.
http://commits.kde.org/digikam/b6d71e848b2731ea34140887cb372d1adc194d07
diff --git a/utilities/cameragui/views/importcategorizedview.cpp \
b/utilities/cameragui/views/importcategorizedview.cpp index 1ba4ef4..6d73b44 100644
--- a/utilities/cameragui/views/importcategorizedview.cpp
+++ b/utilities/cameragui/views/importcategorizedview.cpp
@@ -116,9 +116,10 @@ ImportCategorizedView::~ImportCategorizedView()
}
//FIXME: Needs testing
-void ImportCategorizedView::installDefaultModels()
+void ImportCategorizedView::installDefaultModels(CameraController* controller)
{
ImportModel* model = new ImportModel(this);
+ model->setupCameraController(controller);
ImportFilterModel* filterModel = new ImportFilterModel(this);
filterModel->setSourceImportModel(model);
@@ -148,7 +149,7 @@ void ImportCategorizedView::setModels(ImportImageModel* model, \
ImportSortFilterM
if (d->model)
{
- disconnect(d->model, SIGNAL(CamItemInfosAdded(QList<CamItemInfo>)),
+ disconnect(d->model, SIGNAL(itemInfosAdded(QList<CamItemInfo>)),
this, SLOT(slotCamItemInfosAdded()));
}
@@ -164,7 +165,7 @@ void ImportCategorizedView::setModels(ImportImageModel* model, \
ImportSortFilterM this, SLOT(layoutWasChanged()),
Qt::QueuedConnection);
- connect(d->model, SIGNAL(CamItemInfosAdded(QList<CamItemInfo>)),
+ connect(d->model, SIGNAL(itemInfosAdded(QList<CamItemInfo>)),
this, SLOT(slotCamItemInfosAdded()));
emit modelChanged();
@@ -207,7 +208,7 @@ ImportDelegate* ImportCategorizedView::delegate() const
void ImportCategorizedView::setItemDelegate(ImportDelegate* delegate)
{
- ThumbnailSize oldSize = thumbnailSize();
+ ThumbnailSize oldSize = thumbnailSize();
ImportDelegate* oldDelegate = d->delegate;
if (oldDelegate)
@@ -223,7 +224,8 @@ void ImportCategorizedView::setItemDelegate(ImportDelegate* \
delegate) }
d->delegate = delegate;
- d->delegate->setThumbnailSize(oldSize);
+ qDebug() << QString::number(oldSize.size());
+ delegate->setThumbnailSize(oldSize);
if (oldDelegate)
{
diff --git a/utilities/cameragui/views/importcategorizedview.h \
b/utilities/cameragui/views/importcategorizedview.h index c00b887..054efe0 100644
--- a/utilities/cameragui/views/importcategorizedview.h
+++ b/utilities/cameragui/views/importcategorizedview.h
@@ -150,8 +150,8 @@ protected Q_SLOTS:
protected:
- /// install default ImageAlbumModel and filter model, ready for use
- void installDefaultModels();
+ /// install default ImportModel and filter model, ready for use
+ void installDefaultModels(CameraController* controller);
/// Reimplement these in a subclass
virtual void activated(const CamItemInfo& info);
diff --git a/utilities/cameragui/views/importiconview.cpp \
b/utilities/cameragui/views/importiconview.cpp new file mode 100644
index 0000000..675291d
--- /dev/null
+++ b/utilities/cameragui/views/importiconview.cpp
@@ -0,0 +1,362 @@
+#include "importiconview_p.h"
+#include "importiconview.moc"
+
+// Qt includes
+
+#include <QPointer>
+#include <QAction>
+
+// KDE includes
+
+#include <KLocale>
+#include <KMenu>
+
+// Local includes
+
+#include "importsettings.h"
+#include "camitemsortsettings.h"
+#include "fileactionmngr.h"
+#include "importdelegate.h"
+#include "advancedrenamedialog.h"
+#include "advancedrenameprocessdialog.h"
+#include "imageviewutilities.h"
+#include "contextmenuhelper.h"
+
+namespace Digikam
+{
+
+ImportIconView::ImportIconView(QWidget* parent)
+ : ImportCategorizedView(parent), d(new ImportIconViewPriv(this))
+{
+}
+
+void ImportIconView::init(CameraController* controller)
+{
+ installDefaultModels(controller);
+
+ d->normalDelegate = new ImportNormalDelegate(this);
+ if(d->normalDelegate)
+ setItemDelegate(d->normalDelegate);
+ setSpacing(10);
+
+ ImportSettings* settings = ImportSettings::instance();
+
+ importFilterModel()->setCategorizationMode(CamItemSortSettings::CategoryByFormat);
+
+ setThumbnailSize((ThumbnailSize::Size)settings->getDefaultIconSize());
+
+ //importImageModel()->setDragDropHandler(new \
ImageDragDropHandler(importImageModel())); + //setDragEnabled(true);
+ setAcceptDrops(true);
+ setDropIndicatorShown(false);
+
+ setToolTipEnabled(settings->showToolTipsIsValid());
+ importFilterModel()->setSortRole((CamItemSortSettings::SortRole)settings->getImageSortOrder());
+ importFilterModel()->setSortOrder((CamItemSortSettings::SortOrder)settings->getImageSorting());
+ importFilterModel()->setCategorizationMode((CamItemSortSettings::CategorizationMode)settings->getImageGroupMode());
+
+ // selection overlay
+ addSelectionOverlay(d->normalDelegate);
+ //TODO: addSelectionOverlay(d->faceDelegate);
+
+ // rotation overlays
+ //TODO: d->rotateLeftOverlay = ImageRotateOverlay::left(this);
+ //TODO: d->rotateRightOverlay = ImageRotateOverlay::right(this);
+ //TODO: d->updateOverlays();
+
+ // rating overlay
+ //TODO: ImageRatingOverlay* ratingOverlay = new ImageRatingOverlay(this);
+ //TODO: addOverlay(ratingOverlay);
+
+ //TODO: GroupIndicatorOverlay* groupOverlay = new GroupIndicatorOverlay(this);
+ //TODO: addOverlay(groupOverlay);
+
+ //TODO: connect(ratingOverlay, SIGNAL(ratingEdited(QList<QModelIndex>,int)),
+ //this, SLOT(assignRating(QList<QModelIndex>,int)));
+
+ //TODO: connect(groupOverlay, SIGNAL(toggleGroupOpen(QModelIndex)),
+ //this, SLOT(groupIndicatorClicked(QModelIndex)));
+
+ //TODO: connect(groupOverlay, \
SIGNAL(showButtonContextMenu(QModelIndex,QContextMenuEvent*)), + //this, \
SLOT(showGroupContextMenu(QModelIndex,QContextMenuEvent*))); +
+ //TODO: connect(importImageModel()->dragDropHandler(), \
SIGNAL(assignTags(QList<CamItemInfo>,QList<int>)), + \
//FileActionMngr::instance(), SLOT(assignTags(QList<CamItemInfo>,QList<int>))); +
+ connect(importImageModel()->dragDropHandler(), \
SIGNAL(addToGroup(CamItemInfo,QList<CamItemInfo>)), + \
FileActionMngr::instance(), SLOT(addToGroup(CamItemInfo,QList<CamItemInfo>))); +
+ connect(settings, SIGNAL(setupChanged()),
+ this, SLOT(slotSetupChanged()));
+
+ slotSetupChanged();
+}
+
+ImportIconView::~ImportIconView()
+{
+ delete d;
+}
+
+ImageViewUtilities* ImportIconView::utilities() const
+{
+ return d->utilities;
+}
+
+void ImportIconView::setThumbnailSize(const ThumbnailSize& size)
+{
+ importThumbnailModel()->setThumbnailSize(size);
+ ImportCategorizedView::setThumbnailSize(size);
+}
+
+int ImportIconView::fitToWidthIcons()
+{
+ return delegate()->calculatethumbSizeToFit(viewport()->size().width());
+}
+
+void ImportIconView::slotSetupChanged()
+{
+ setToolTipEnabled(ImportSettings::instance()->showToolTipsIsValid());
+ setFont(ImportSettings::instance()->getIconViewFont());
+
+ d->updateOverlays();
+
+ ImportCategorizedView::slotSetupChanged();
+}
+
+void ImportIconView::rename()
+{
+ KUrl::List urls = selectedUrls();
+ NewNamesList newNamesList;
+
+ QPointer<AdvancedRenameDialog> dlg = new AdvancedRenameDialog(this);
+ dlg->slotAddImages(urls);
+
+ if (dlg->exec() == KDialog::Accepted)
+ {
+ newNamesList = dlg->newNames();
+ }
+
+ delete dlg;
+
+ if (!newNamesList.isEmpty())
+ {
+ QPointer<AdvancedRenameProcessDialog> dlg = new \
AdvancedRenameProcessDialog(newNamesList); + dlg->exec();
+ delete dlg;
+ }
+}
+
+void ImportIconView::deleteSelected(bool permanently)
+{
+ CamItemInfoList camItemInfoList = selectedCamItemInfos();
+
+ //FIXME: This way of deletion may not working with camera items.
+ //if (d->utilities->deleteImages(camItemInfoList, permanently))
+ //{
+ // awayFromSelection();
+ //}
+}
+
+void ImportIconView::deleteSelectedDirectly(bool permanently)
+{
+ CamItemInfoList camItemInfoList = selectedCamItemInfos();
+ //FIXME: This way of deletion may not working with camera items.
+ //d->utilities->deleteImagesDirectly(camItemInfoList, permanently);
+ awayFromSelection();
+}
+
+void ImportIconView::createGroupFromSelection()
+{
+ //TODO: Impelemnt grouping in import tool.
+ //QList<CamItemInfo> selectedInfos = selectedCamItemInfosCurrentFirst();
+ //CamItemInfo groupLeader = selectedInfos.takeFirst();
+ //FileActionMngr::instance()->addToGroup(groupLeader, selectedInfos);
+}
+
+void ImportIconView::createGroupByTimeFromSelection()
+{
+ //TODO: Impelemnt grouping in import tool.
+ //QList<CamItemInfo> selectedInfos = selectedCamItemInfosCurrentFirst();
+
+ //while (selectedInfos.size() > 0)
+ //{
+ //QList<CamItemInfo> group;
+ //CamItemInfo groupLeader = selectedInfos.takeFirst();
+ //QDateTime dateTime = groupLeader.dateTime();
+
+ //while (selectedInfos.size() > 0 && \
abs(dateTime.secsTo(selectedInfos.first().dateTime())) < 2) + //{
+ // group.push_back(selectedInfos.takeFirst());
+ //}
+
+ //FileActionMngr::instance()->addToGroup(groupLeader, group);
+ //}
+}
+
+void ImportIconView::ungroupSelected()
+{
+ //TODO: Impelemnt grouping in import tool.
+ //FileActionMngr::instance()->ungroup(selectedCamItemInfos());
+}
+
+void ImportIconView::removeSelectedFromGroup()
+{
+ //TODO: Impelemnt grouping in import tool.
+ //FileActionMngr::instance()->removeFromGroup(selectedCamItemInfos());
+}
+
+void ImportIconView::activated(const CamItemInfo& info)
+{
+ if (info.isNull())
+ {
+ return;
+ }
+
+ if (ImportSettings::instance()->getItemLeftClickAction() == \
ImportSettings::ShowPreview) + {
+ emit previewRequested(info);
+ }
+ else
+ {
+ //TODO: openInEditor(info);
+ }
+}
+
+//TODO: Implement context menu
+void ImportIconView::showContextMenuOnInfo(QContextMenuEvent* event, const \
CamItemInfo& info) +{
+// QList<CamItemInfo> selectedInfos = selectedCamItemInfosCurrentFirst();
+// QList<qlonglong> selectedImageIDs;
+// foreach(const CamItemInfo& info, selectedInfos)
+// {
+// selectedImageIDs << info.id;
+// }
+
+// // Temporary actions --------------------------------------
+
+// QAction* viewAction = new QAction(SmallIcon("viewimage"), i18nc("View the \
selected image", "Preview"), this); +// \
viewAction->setEnabled(selectedImageIDs.count() == 1); +
+// // --------------------------------------------------------
+
+// KMenu popmenu(this);
+// ContextMenuHelper cmhelper(&popmenu);
+// cmhelper.setImageFilterModel(importFilterModel());
+
+// cmhelper.addAction("full_screen");
+// cmhelper.addSeparator();
+// // --------------------------------------------------------
+// cmhelper.addAction("move_selection_to_album");
+// cmhelper.addAction(viewAction);
+// cmhelper.addAction("image_edit");
+// cmhelper.addServicesMenu(selectedUrls());
+// cmhelper.addGotoMenu(selectedImageIDs);
+// cmhelper.addRotateMenu(selectedImageIDs);
+// cmhelper.addSeparator();
+// // --------------------------------------------------------
+// cmhelper.addAction("image_find_similar");
+// cmhelper.addStandardActionLightTable();
+// cmhelper.addQueueManagerMenu();
+// cmhelper.addSeparator();
+// // --------------------------------------------------------
+// cmhelper.addAction("image_rename");
+// cmhelper.addAction("cut_album_selection");
+// cmhelper.addAction("copy_album_selection");
+// cmhelper.addAction("paste_album_selection");
+// cmhelper.addStandardActionItemDelete(this, SLOT(deleteSelected()), \
selectedImageIDs.count()); +// cmhelper.addSeparator();
+// // --------------------------------------------------------
+// cmhelper.addStandardActionThumbnail(selectedImageIDs, currentAlbum());
+// // --------------------------------------------------------
+// cmhelper.addAssignTagsMenu(selectedImageIDs);
+// cmhelper.addRemoveTagsMenu(selectedImageIDs);
+// cmhelper.addSeparator();
+// // --------------------------------------------------------
+// cmhelper.addLabelsAction();
+// if (!d->faceMode)
+// {
+// cmhelper.addGroupMenu(selectedImageIDs);
+// }
+
+// // special action handling --------------------------------
+
+// connect(&cmhelper, SIGNAL(signalAssignTag(int)),
+// this, SLOT(assignTagToSelected(int)));
+
+// connect(&cmhelper, SIGNAL(signalPopupTagsView()),
+// this, SIGNAL(signalPopupTagsView()));
+
+// connect(&cmhelper, SIGNAL(signalRemoveTag(int)),
+// this, SLOT(removeTagFromSelected(int)));
+
+// connect(&cmhelper, SIGNAL(signalGotoTag(int)),
+// this, SIGNAL(gotoTagAndImageRequested(int)));
+
+// connect(&cmhelper, SIGNAL(signalGotoAlbum(ImageInfo)),
+// this, SIGNAL(gotoAlbumAndImageRequested(ImageInfo)));
+
+// connect(&cmhelper, SIGNAL(signalGotoDate(ImageInfo)),
+// this, SIGNAL(gotoDateAndImageRequested(ImageInfo)));
+
+// connect(&cmhelper, SIGNAL(signalAssignPickLabel(int)),
+// this, SLOT(assignPickLabelToSelected(int)));
+
+// connect(&cmhelper, SIGNAL(signalAssignColorLabel(int)),
+// this, SLOT(assignColorLabelToSelected(int)));
+
+// connect(&cmhelper, SIGNAL(signalAssignRating(int)),
+// this, SLOT(assignRatingToSelected(int)));
+
+// connect(&cmhelper, SIGNAL(signalSetThumbnail(ImageInfo)),
+// this, SLOT(setAsAlbumThumbnail(ImageInfo)));
+
+// connect(&cmhelper, SIGNAL(signalAddToExistingQueue(int)),
+// this, SLOT(insertSelectedToExistingQueue(int)));
+
+// connect(&cmhelper, SIGNAL(signalCreateGroup()),
+// this, SLOT(createGroupFromSelection()));
+
+// connect(&cmhelper, SIGNAL(signalCreateGroupByTime()),
+// this, SLOT(createGroupByTimeFromSelection()));
+
+// connect(&cmhelper, SIGNAL(signalUngroup()),
+// this, SLOT(ungroupSelected()));
+
+// connect(&cmhelper, SIGNAL(signalRemoveFromGroup()),
+// this, SLOT(removeSelectedFromGroup()));
+
+// // --------------------------------------------------------
+
+// QAction* choice = cmhelper.exec(event->globalPos());
+
+// if (choice && (choice == viewAction))
+// {
+// emit previewRequested(info);
+// }
+}
+
+void ImportIconView::showContextMenu(QContextMenuEvent* event)
+{
+// Album* album = currentAlbum();
+
+// if (!album ||
+// album->isRoot() ||
+// (album->type() != Album::PHYSICAL && album->type() != Album::TAG) )
+// {
+// return;
+// }
+
+// KMenu popmenu(this);
+// ContextMenuHelper cmhelper(&popmenu);
+// cmhelper.setImageFilterModel(imageFilterModel());
+
+// cmhelper.addAction("full_screen");
+// cmhelper.addSeparator();
+// // --------------------------------------------------------
+// cmhelper.addStandardActionPaste(this, SLOT(paste()));
+// // --------------------------------------------------------
+
+// cmhelper.exec(event->globalPos());
+}
+
+} // namespace Digikam
diff --git a/utilities/cameragui/views/importiconview.h \
b/utilities/cameragui/views/importiconview.h new file mode 100644
index 0000000..b0aba96
--- /dev/null
+++ b/utilities/cameragui/views/importiconview.h
@@ -0,0 +1,64 @@
+#ifndef ImportIconView_H
+#define ImportIconView_H
+
+// Local includes
+
+#include "importcategorizedview.h"
+
+namespace Digikam
+{
+
+class ImageViewUtilities;
+
+class ImportIconView : public ImportCategorizedView
+{
+ Q_OBJECT
+
+public:
+
+ ImportIconView(QWidget* parent = 0);
+ ~ImportIconView();
+
+ void init(CameraController* controller);
+
+ ImageViewUtilities* utilities() const;
+
+ int fitToWidthIcons();
+
+ virtual void setThumbnailSize(const ThumbnailSize& size);
+
+public Q_SLOTS:
+
+ void deleteSelected(bool permanently = false);
+ void deleteSelectedDirectly(bool permanently = false);
+
+ void createGroupFromSelection();
+ void createGroupByTimeFromSelection();
+ void ungroupSelected();
+ void removeSelectedFromGroup();
+ void rename();
+
+Q_SIGNALS:
+
+ void previewRequested(const CamItemInfo& info);
+
+protected:
+
+ virtual void activated(const CamItemInfo& info);
+ virtual void showContextMenuOnInfo(QContextMenuEvent* event, const CamItemInfo& \
info); + virtual void showContextMenu(QContextMenuEvent* event);
+ virtual void slotSetupChanged();
+
+ void slotRotateLeft(const QList<QModelIndex>&);
+ void slotRotateRight(const QList<QModelIndex>&);
+ void slotInitProgressIndicator();
+
+private:
+
+ class ImportIconViewPriv;
+ ImportIconViewPriv* const d;
+};
+
+} // namespace Digikam
+
+#endif // ImportIconView_H
diff --git a/utilities/cameragui/views/importiconview_p.cpp \
b/utilities/cameragui/views/importiconview_p.cpp new file mode 100644
index 0000000..f54fc95
--- /dev/null
+++ b/utilities/cameragui/views/importiconview_p.cpp
@@ -0,0 +1,59 @@
+#include "importiconview_p.h"
+
+namespace Digikam
+{
+
+ImportIconView::ImportIconViewPriv::ImportIconViewPriv(ImportIconView* qq)
+ : overlaysActive(false), q_ptr(qq)
+{
+ //TODO: utilities = 0;
+ //TODO: rotateLeftOverlay = 0;
+ //TODO: rotateRightOverlay = 0;
+ normalDelegate = 0;
+}
+
+ImportIconView::ImportIconViewPriv::~ImportIconViewPriv()
+{
+}
+
+void ImportIconView::ImportIconViewPriv::updateOverlays()
+{
+ Q_Q(ImportIconView);
+ ImportSettings* settings = ImportSettings::instance();
+
+//TODO: Implement overlays.
+// if (overlaysActive)
+// {
+// if (!settings->getIconShowOverlays())
+// {
+// disconnect(rotateLeftOverlay, \
SIGNAL(signalRotate(QList<QModelIndex>)), +// q, \
SLOT(slotRotateLeft(QList<QModelIndex>))); +
+// disconnect(rotateRightOverlay, \
SIGNAL(signalRotate(QList<QModelIndex>)), +// q, \
SLOT(slotRotateRight(QList<QModelIndex>))); +
+// q->removeOverlay(rotateLeftOverlay);
+// q->removeOverlay(rotateRightOverlay);
+
+// overlaysActive = false;
+// }
+// }
+// else
+// {
+// if (settings->getIconShowOverlays())
+// {
+// q->addOverlay(rotateLeftOverlay, normalDelegate);
+// q->addOverlay(rotateRightOverlay, normalDelegate);
+
+// connect(rotateLeftOverlay, SIGNAL(signalRotate(QList<QModelIndex>)),
+// q, SLOT(slotRotateLeft(QList<QModelIndex>)));
+
+// connect(rotateRightOverlay, SIGNAL(signalRotate(QList<QModelIndex>)),
+// q, SLOT(slotRotateRight(QList<QModelIndex>)));
+
+// overlaysActive = true;
+// }
+// }
+}
+
+} // namespace Digikam
diff --git a/utilities/cameragui/views/importiconview_p.h \
b/utilities/cameragui/views/importiconview_p.h new file mode 100644
index 0000000..4d6e8c4
--- /dev/null
+++ b/utilities/cameragui/views/importiconview_p.h
@@ -0,0 +1,72 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2012-25-07
+ * Description : Private Qt item view for images
+ *
+ * Copyright (C) 2012 by Islam Wazery <wazery at ubuntu dot com>
+ *
+ * This program is free software you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation
+ * either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * ============================================================ */
+
+#ifndef IMPORTICONVIEW_P_H
+#define IMPORTICONVIEW_P_H
+
+// Qt includes
+
+#include <QObject>
+
+// Local includes
+
+#include "importiconview.h"
+#include "importdelegate.h"
+#include "importsettings.h"
+
+namespace Digikam
+{
+
+class ImportNormalDelegate;
+
+class ImportIconView::ImportIconViewPriv : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PUBLIC(ImportIconView)
+
+public:
+
+ ImportIconViewPriv(ImportIconView* qq);
+ virtual ~ImportIconViewPriv();
+
+ void updateOverlays();
+ void triggerRotateAction(const char* actionName);
+
+public:
+
+ ImageViewUtilities* utilities;
+ ImportNormalDelegate* normalDelegate;
+
+ bool overlaysActive;
+
+ //ImageRotateOverlay* rotateLeftOverlay;
+ //ImageRotateOverlay* rotateRightOverlay;
+
+private:
+
+ ImportIconView* q_ptr;
+};
+
+} // namespace Digikam
+
+#endif // IMPORTICONVIEW_P_H
diff --git a/utilities/cameragui/views/importpreviewview.cpp \
b/utilities/cameragui/views/importpreviewview.cpp new file mode 100644
index 0000000..0ff1b4d
--- /dev/null
+++ b/utilities/cameragui/views/importpreviewview.cpp
@@ -0,0 +1,508 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2012-14-07
+ * Description : An embedded view to show the cam item preview widget.
+ *
+ * Copyright (C) 2012 by Islam Wazery <wazery at ubuntu dot com>
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation;
+ * either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * ============================================================ */
+
+#include "importpreviewview.h"
+
+// Qt includes
+
+#include <QMouseEvent>
+#include <QGraphicsSceneContextMenuEvent>
+#include <QToolBar>
+
+// KDE includes
+
+#include <klocale.h>
+#include <ktoggleaction.h>
+#include <kmenu.h>
+#include <kapplication.h>
+
+// Local includes
+
+#include "dimgpreviewitem.h"
+#include "fileactionmngr.h"
+#include "contextmenuhelper.h"
+#include "previewlayout.h"
+#include "thememanager.h"
+#include "importsettings.h"
+
+namespace Digikam
+{
+
+class ImportPreviewViewItem : public DImgPreviewItem
+{
+public:
+
+ ImportPreviewViewItem(ImportPreviewView* view)
+ : m_view(view)/*, m_group(0)*/
+ {
+ setAcceptHoverEvents(true);
+ }
+
+ //void setFaceGroup(FaceGroup* group)
+ //{
+ // m_group = group;
+ //}
+
+ void contextMenuEvent(QGraphicsSceneContextMenuEvent* event)
+ {
+ m_view->showContextMenu(m_info, event);
+ }
+
+ void setCamItemInfo(const CamItemInfo& info)
+ {
+ m_info = info;
+
+ //FIXME: is this a valid path?
+ setPath(info.url().prettyUrl());
+ }
+
+ void hoverEnterEvent(QGraphicsSceneHoverEvent* e)
+ {
+ Q_UNUSED(e) //FIXME
+ //m_group->itemHoverEnterEvent(e);
+ }
+
+ void hoverLeaveEvent(QGraphicsSceneHoverEvent* e)
+ {
+ Q_UNUSED(e) //FIXME:
+ //m_group->itemHoverLeaveEvent(e);
+ }
+
+ void hoverMoveEvent(QGraphicsSceneHoverEvent* e)
+ {
+ Q_UNUSED(e) //FIXME:
+ //m_group->itemHoverMoveEvent(e);
+ }
+
+ CamItemInfo camItemInfo() const
+ {
+ return m_info;
+ }
+
+protected:
+
+ ImportPreviewView* m_view;
+ //FaceGroup* m_group;
+ CamItemInfo m_info;
+};
+
+// ---------------------------------------------------------------------
+
+class ImportPreviewView::ImportPreviewViewPriv
+{
+public:
+
+ ImportPreviewViewPriv()
+ {
+ //peopleTagsShown = false;
+ fullSize = 0;
+ scale = 1.0;
+ item = 0;
+ isValid = false;
+ toolBar = 0;
+ //back2FilesListAction = 0;
+ prevAction = 0;
+ nextAction = 0;
+ //rotLeftAction = 0;
+ //rotRightAction = 0;
+ //peopleToggleAction = 0;
+ //addPersonAction = 0;
+ //faceGroup = 0;
+ mode = ImportPreviewView::IconViewPreview;
+ }
+
+ //bool peopleTagsShown;
+ bool fullSize;
+ double scale;
+ bool isValid;
+
+ ImportPreviewView::Mode mode;
+
+ ImportPreviewViewItem* item;
+
+ //QAction* back2FilesListAction;
+ QAction* prevAction;
+ QAction* nextAction;
+ //QAction* rotLeftAction;
+ //QAction* rotRightAction;
+ //KToggleAction* peopleToggleAction;
+ //QAction* addPersonAction;
+ //QAction* forgetFacesAction;
+
+ QToolBar* toolBar;
+
+ //FaceGroup* faceGroup;
+};
+
+ImportPreviewView::ImportPreviewView(QWidget* parent, Mode mode)
+ : GraphicsDImgView(parent), d(new ImportPreviewViewPriv)
+{
+ d->mode = mode;
+ d->item = new ImportPreviewViewItem(this);
+ setItem(d->item);
+
+ //d->faceGroup = new FaceGroup(this);
+ //d->faceGroup->setShowOnHover(true);
+
+ //d->item->setFaceGroup(d->faceGroup);
+
+ connect(d->item, SIGNAL(loaded()),
+ this, SLOT(imageLoaded()));
+
+ connect(d->item, SIGNAL(loadingFailed()),
+ this, SLOT(imageLoadingFailed()));
+
+ // set default zoom
+ layout()->fitToWindow();
+
+ // ------------------------------------------------------------
+
+ installPanIcon();
+
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+
+ // ------------------------------------------------------------
+
+ //FIXME: d->back2FilesListAction = new QAction(SmallIcon("folder-image"), \
i18n("Back to Camera Files"), this); + d->prevAction = new \
QAction(SmallIcon("go-previous"), i18nc("go to previous image", "Back"), \
this); + d->nextAction = new QAction(SmallIcon("go-next"), \
i18nc("go to next image", "Forward"), this); + //FIXME: d->rotLeftAction = \
new QAction(SmallIcon("object-rotate-left"), i18nc("@info:tooltip", "Rotate Left"), \
this); + //FIXME: d->rotRightAction = new \
QAction(SmallIcon("object-rotate-right"), i18nc("@info:tooltip", "Rotate Right"), \
this); + //FIXME: d->addPersonAction = new QAction(SmallIcon("list-add-user"), \
i18n("Add a Face Tag"), this); + //FIXME: d->forgetFacesAction = \
new QAction(SmallIcon("list-remove-user"), i18n("Clear all faces on this image"), \
this); + //FIXME: d->peopleToggleAction = new KToggleAction(i18n("Show Face \
Tags"), this); + //FIXME: \
d->peopleToggleAction->setIcon(SmallIcon("user-identity")); +
+ d->toolBar = new QToolBar(this);
+
+ if (mode == IconViewPreview)
+ {
+ d->toolBar->addAction(d->prevAction);
+ d->toolBar->addAction(d->nextAction);
+ //FIXME: d->toolBar->addAction(d->back2FilesListAction);
+ }
+
+ //FIXME: d->toolBar->addAction(d->rotLeftAction);
+ //FIXME: d->toolBar->addAction(d->rotRightAction);
+ //FIXME: d->toolBar->addAction(d->peopleToggleAction);
+ //FIXME: d->toolBar->addAction(d->addPersonAction);
+
+ connect(d->prevAction, SIGNAL(triggered()),
+ this, SIGNAL(toPreviousImage()));
+
+ connect(d->nextAction, SIGNAL(triggered()),
+ this, SIGNAL(toNextImage()));
+
+ //FIXME: connect(d->back2FilesListAction, SIGNAL(triggered()),
+ //this, SIGNAL(signalBack2Album()));
+
+ //FIXME: connect(d->rotLeftAction, SIGNAL(triggered()),
+ //this, SLOT(slotRotateLeft()));
+
+ //FIXME: connect(d->rotRightAction, SIGNAL(triggered()),
+ //this, SLOT(slotRotateRight()));
+
+ //FIXME: connect(d->peopleToggleAction, SIGNAL(toggled(bool)),
+ //d->faceGroup, SLOT(setVisible(bool)));
+
+ //FIXME: connect(d->addPersonAction, SIGNAL(triggered()),
+ //d->faceGroup, SLOT(addFace()));
+
+ //FIXME: connect(d->forgetFacesAction, SIGNAL(triggered()),
+ //d->faceGroup, SLOT(rejectAll()));
+
+ // ------------------------------------------------------------
+
+ connect(this, SIGNAL(toNextImage()),
+ this, SIGNAL(signalNextItem()));
+
+ connect(this, SIGNAL(toPreviousImage()),
+ this, SIGNAL(signalPrevItem()));
+
+ //FIXME: connect(this, SIGNAL(activated()),
+ //this, SIGNAL(signalBack2Album()));
+
+ connect(ThemeManager::instance(), SIGNAL(signalThemeChanged()),
+ this, SLOT(slotThemeChanged()));
+
+ connect(ImportSettings::instance(), SIGNAL(setupChanged()),
+ this, SLOT(slotSetupChanged()));
+
+ slotSetupChanged();
+}
+
+ImportPreviewView::~ImportPreviewView()
+{
+ delete d->item;
+ delete d;
+}
+
+void ImportPreviewView::reload()
+{
+ previewItem()->reload();
+}
+
+void ImportPreviewView::camItemLoaded()
+{
+ emit signalPreviewLoaded(true);
+ //FIXME: d->rotLeftAction->setEnabled(true);
+ //FIXME: d->rotRightAction->setEnabled(true);
+
+ //FIXME: d->faceGroup->setInfo(d->item->camItemInfo());
+}
+
+void ImportPreviewView::camItemLoadingFailed()
+{
+ emit signalPreviewLoaded(false);
+ //FIXME: d->rotLeftAction->setEnabled(false);
+ //FIXME: d->rotRightAction->setEnabled(false);
+ //FIXME: d->faceGroup->setInfo(CamItemInfo());
+}
+
+void ImportPreviewView::setCamItemInfo(const CamItemInfo& info, const CamItemInfo& \
previous, const CamItemInfo& next) +{
+ //FIXME: d->faceGroup->aboutToSetInfo(info);
+ d->item->setCamItemInfo(info);
+
+ d->prevAction->setEnabled(!previous.isNull());
+ d->nextAction->setEnabled(!next.isNull());
+
+ QStringList previewPaths;
+
+ if (next.mime == "FIXME ... IMAGE")
+ {
+ //FIXME: is this a valid path?
+ previewPaths << next.url().prettyUrl();
+ }
+
+ if (previous.mime == "FIXME ... IMAGE")
+ {
+ //FIXME: is this a valid path?
+ previewPaths << previous.url().prettyUrl();
+ }
+
+ d->item->setPreloadPaths(previewPaths);
+}
+
+CamItemInfo ImportPreviewView::getCamItemInfo() const
+{
+ return d->item->camItemInfo();
+}
+
+bool ImportPreviewView::acceptsMouseClick(QMouseEvent* e)
+{
+ if (!GraphicsDImgView::acceptsMouseClick(e))
+ {
+ return false;
+ }
+ return false; //FIXME:
+
+ //FIXME: return d->faceGroup->acceptsMouseClick(mapToScene(e->pos()));
+}
+
+void ImportPreviewView::enterEvent(QEvent* e)
+{
+ Q_UNUSED(e) //FIXME
+ //FIXME: d->faceGroup->enterEvent(e);
+}
+
+void ImportPreviewView::leaveEvent(QEvent* e)
+{
+ Q_UNUSED(e) //FIXME
+ //FIXME: d->faceGroup->leaveEvent(e);
+}
+
+void ImportPreviewView::showEvent(QShowEvent* e)
+{
+ Q_UNUSED(e) //FIXME
+ GraphicsDImgView::showEvent(e);
+ //FIXME: d->faceGroup->setVisible(d->peopleToggleAction->isChecked());
+}
+
+void ImportPreviewView::showContextMenu(const CamItemInfo& info, \
QGraphicsSceneContextMenuEvent* event) +{
+ if (info.isNull())
+ {
+ return;
+ }
+
+ event->accept();
+
+ QList<qlonglong> idList;
+ idList << info.id;
+ KUrl::List selectedItems;
+ selectedItems << info.url();
+
+ // --------------------------------------------------------
+
+ KMenu popmenu(this);
+ ContextMenuHelper cmhelper(&popmenu);
+
+ cmhelper.addAction("full_screen");
+ cmhelper.addSeparator();
+
+ // --------------------------------------------------------
+
+ if (d->mode == IconViewPreview)
+ {
+ cmhelper.addAction(d->prevAction, true);
+ cmhelper.addAction(d->nextAction, true);
+ //FIXME: cmhelper.addAction(d->back2FilesListAction);
+ cmhelper.addGotoMenu(idList);
+ cmhelper.addSeparator();
+ }
+
+ // --------------------------------------------------------
+
+ //FIXME: cmhelper.addAction(d->peopleToggleAction, true);
+ //FIXME: cmhelper.addAction(d->addPersonAction, true);
+ //FIXME: cmhelper.addAction(d->forgetFacesAction, true);
+ //FIXME: cmhelper.addSeparator();
+
+ // --------------------------------------------------------
+
+ cmhelper.addAction("image_edit");
+ cmhelper.addServicesMenu(selectedItems);
+ cmhelper.addRotateMenu(idList);
+ cmhelper.addSeparator();
+
+ // --------------------------------------------------------
+
+ cmhelper.addAction("image_find_similar");
+
+ if (d->mode == IconViewPreview)
+ {
+ cmhelper.addStandardActionLightTable();
+ }
+
+ cmhelper.addQueueManagerMenu();
+ cmhelper.addSeparator();
+
+ // --------------------------------------------------------
+
+ cmhelper.addStandardActionItemDelete(this, SLOT(slotDeleteItem()));
+ cmhelper.addSeparator();
+
+ // --------------------------------------------------------
+
+ //FIXME: cmhelper.addAssignTagsMenu(idList);
+ //FIXME: cmhelper.addRemoveTagsMenu(idList);
+ //FIXME: cmhelper.addSeparator();
+
+ // --------------------------------------------------------
+
+ cmhelper.addLabelsAction();
+
+ // special action handling --------------------------------
+
+ //FIXME: connect(&cmhelper, SIGNAL(signalAssignTag(int)),
+ //this, SLOT(slotAssignTag(int)));
+
+ //FIXME: connect(&cmhelper, SIGNAL(signalPopupTagsView()),
+ //this, SIGNAL(signalPopupTagsView()));
+
+ //FIXME: connect(&cmhelper, SIGNAL(signalRemoveTag(int)),
+ //this, SLOT(slotRemoveTag(int)));
+
+ //FIXME: connect(&cmhelper, SIGNAL(signalAssignPickLabel(int)),
+ //this, SLOT(slotAssignPickLabel(int)));
+
+ //FIXME: connect(&cmhelper, SIGNAL(signalAssignColorLabel(int)),
+ //this, SLOT(slotAssignColorLabel(int)));
+
+ //FIXME: connect(&cmhelper, SIGNAL(signalAssignRating(int)),
+ //this, SLOT(slotAssignRating(int)));
+
+ //FIXME: connect(&cmhelper, SIGNAL(signalAddToExistingQueue(int)),
+ //this, SIGNAL(signalAddToExistingQueue(int)));
+
+ //FIXME: connect(&cmhelper, SIGNAL(signalGotoTag(int)),
+ //this, SIGNAL(signalGotoTagAndItem(int)));
+
+ //FIXME: connect(&cmhelper, SIGNAL(signalGotoFolder(CamItemInfo)),
+ //this, SIGNAL(signalGotoFolderAndItem(CamItemInfo)));
+
+ //FIXME: connect(&cmhelper, SIGNAL(signalGotoDate(CamItemInfo)),
+ //this, SIGNAL(signalGotoDateAndItem(CamItemInfo)));
+
+ cmhelper.exec(event->screenPos());
+}
+
+//void ImportPreviewView::slotAssignTag(int tagID)
+//{
+// FileActionMngr::instance()->assignTag(d->item->camItemInfo(), tagID);
+//}
+
+//void ImportPreviewView::slotRemoveTag(int tagID)
+//{
+// FileActionMngr::instance()->removeTag(d->item->camItemInfo(), tagID);
+//}
+
+//void ImportPreviewView::slotAssignPickLabel(int pickId)
+//{
+// FileActionMngr::instance()->assignPickLabel(d->item->camItemInfo(), pickId);
+//}
+
+//void ImportPreviewView::slotAssignColorLabel(int colorId)
+//{
+// FileActionMngr::instance()->assignColorLabel(d->item->camItemInfo(), colorId);
+//}
+
+//void ImportPreviewView::slotAssignRating(int rating)
+//{
+// FileActionMngr::instance()->assignRating(d->item->camItemInfo(), rating);
+//}
+
+void ImportPreviewView::slotThemeChanged()
+{
+ QPalette plt(palette());
+ plt.setColor(backgroundRole(), kapp->palette().color(QPalette::Base));
+ setPalette(plt);
+}
+
+void ImportPreviewView::slotSetupChanged()
+{
+ previewItem()->setLoadFullImageSize(ImportSettings::instance()->getPreviewLoadFullImageSize());
+
+ d->toolBar->setVisible(ImportSettings::instance()->getPreviewShowIcons());
+ setShowText(ImportSettings::instance()->getPreviewShowIcons());
+
+ // pass auto-suggest?
+}
+
+//void ImportPreviewView::slotRotateLeft()
+//{
+// FileActionMngr::instance()->transform(QList<CamItemInfo>() << \
d->item->camItemInfo(), KExiv2Iface::RotationMatrix::Rotate270); +//}
+
+//void ImportPreviewView::slotRotateRight()
+//{
+// FileActionMngr::instance()->transform(QList<CamItemInfo>() << \
d->item->camItemInfo(), KExiv2Iface::RotationMatrix::Rotate90); +//}
+
+void ImportPreviewView::slotDeleteItem()
+{
+ emit signalDeleteItem();
+}
+
+} // namespace Digikam
diff --git a/utilities/cameragui/views/importpreviewview.h \
b/utilities/cameragui/views/importpreviewview.h new file mode 100644
index 0000000..96a07c1
--- /dev/null
+++ b/utilities/cameragui/views/importpreviewview.h
@@ -0,0 +1,115 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2012-14-07
+ * Description : An embedded view to show the cam item preview widget.
+ *
+ * Copyright (C) 2012 by Islam Wazery <wazery at ubuntu dot com>
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation;
+ * either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * ============================================================ */
+
+#ifndef IMPORTPREVIEWVIEW_H
+#define IMPORTPREVIEWVIEW_H
+
+// Local includes
+
+#include "graphicsdimgview.h"
+#include "camiteminfo.h"
+
+namespace Digikam
+{
+
+class ImportPreviewView : public GraphicsDImgView
+{
+ Q_OBJECT
+
+public:
+
+ enum Mode
+ {
+ IconViewPreview
+ };
+
+ explicit ImportPreviewView(QWidget* parent, Mode mode = IconViewPreview);
+ ~ImportPreviewView();
+
+ void setCamItemInfo(const CamItemInfo& info = CamItemInfo(),
+ const CamItemInfo& previous = CamItemInfo(),
+ const CamItemInfo& next = CamItemInfo());
+
+ CamItemInfo getCamItemInfo() const;
+
+ void reload();
+ void setCamItemPath(const QString& path = QString());
+ void setPreviousNextPaths(const QString& previous, const QString& next);
+
+ void showContextMenu(const CamItemInfo& info, QGraphicsSceneContextMenuEvent* \
event); +
+Q_SIGNALS:
+
+ void signalNextItem();
+ void signalPrevItem();
+ void signalDeleteItem();
+ void signalEditItem();
+ void signalPreviewLoaded(bool success);
+ void signalBack2FilesList();
+ //void signalSlideShow();
+ //void signalInsert2LightTable();
+ //void signalInsert2QueueMgr();
+ //void signalFindSimilar();
+ //void signalAddToExistingQueue(int);
+
+ //void signalGotoFolderAndItem(const CamItemInfo&);
+ //void signalGotoDateAndItem(const CamItemInfo&);
+ //void signalGotoTagAndItem(int);
+ //void signalPopupTagsView();
+
+protected:
+
+ bool acceptsMouseClick(QMouseEvent* e);
+ void enterEvent(QEvent* e);
+ void leaveEvent(QEvent* e);
+ void showEvent(QShowEvent* e);
+
+private Q_SLOTS:
+
+ void camItemLoaded();
+ void camItemLoadingFailed();
+
+ //TOOD: Implement Tags, Rating, and Lables in Import Tool
+ //void slotAssignTag(int tagID);
+ //void slotRemoveTag(int tagID);
+ //void slotAssignRating(int rating);
+ //void slotAssignPickLabel(int pickId);
+ //void slotAssignColorLabel(int colorId);
+
+ void slotThemeChanged();
+ void slotSetupChanged();
+
+ //FIXME: Will the revamped Import Tool have a rotate option?
+ //void slotRotateLeft();
+ //void slotRotateRight();
+ void slotDeleteItem();
+
+private:
+
+ class ImportPreviewViewPriv;
+ ImportPreviewViewPriv* const d;
+};
+
+} // namespace Digikam
+
+#endif // IMPORTPREVIEWVIEW_H
diff --git a/utilities/cameragui/views/importstackedview.cpp \
b/utilities/cameragui/views/importstackedview.cpp new file mode 100644
index 0000000..c1ff88c
--- /dev/null
+++ b/utilities/cameragui/views/importstackedview.cpp
@@ -0,0 +1,476 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2012-05-07
+ * Description : QStackedWidget to handle different types of views
+ * (icon view, image preview, media view)
+ *
+ * Copyright (C) 2012 by Islam Wazery <wazery at ubuntu dot com>
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation;
+ * either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * ============================================================ */
+
+#include "importstackedview.moc"
+#include "importstackedview.h" //TOOD: Remove this line
+
+// Qt includes
+
+#include <QSplitter>
+
+// Local includes
+
+#include "previewlayout.h"
+#include "importsettings.h"
+
+namespace Digikam
+{
+
+class ImportStackedView::ImportStackedViewPriv
+{
+
+public:
+
+ ImportStackedViewPriv()
+ {
+ dockArea = 0;
+ splitter = 0;
+ //REM thumbBar = 0;
+ //REMthumbBarDock = 0;
+ importIconView = 0;
+ importPreviewView = 0;
+ //mediaPlayerView = 0;
+ //mapWidgetView = 0;
+ syncingSelection = false;
+ }
+
+ bool syncingSelection;
+
+ QMainWindow* dockArea;
+ QSplitter* splitter;
+
+ ImportIconView* importIconView;
+ //REMImportThumbnailBar* thumbBar;
+ ImportPreviewView* importPreviewView;
+ //REMThumbBarDock* thumbBarDock;
+ //FIXME: MediaPlayerView* mediaPlayerView;
+ //FIXME: MapWidgetView* mapWidgetView;
+};
+
+ImportStackedView::ImportStackedView(CameraController* controller, QWidget* parent)
+ : QStackedWidget(parent), d(new ImportStackedViewPriv)
+{
+ d->importIconView = new ImportIconView(this);
+ //d->importPreviewView = new ImportPreviewView(this);
+ //d->thumbBarDock = new ThumbBarDock();
+ //d->thumbBar = new ImportThumbnailBar(d->thumbBarDock);
+ //d->thumbBar->setModelsFiltered(d->importIconView->importImageModel(), \
d->importIconView->importFilterModel()); + //FIXME: \
d->thumbBar->installRatingOverlay(); +
+ //d->thumbBarDock->setWidget(d->thumbBar);
+ //d->thumbBarDock->setObjectName("import_thumbbar");
+
+ if(controller)
+ {
+ d->importIconView->init(controller);
+ }
+
+ //FIXME: d->mediaPlayerView = new MediaPlayerView(this);
+ //FIXME: d->mapWidgetView = new \
MapWidgetView(d->importIconView->getSelectionModel(), + \
//d->importIconView->imageFilterModel(), this); + //FIXME: \
d->mapWidgetView->setObjectName("import_mapwidgetview"); +
+ insertWidget(PreviewCameraMode, d->importIconView);
+ //REMinsertWidget(PreviewImageMode, d->importPreviewView);
+ //insertWidget(MediaPlayerMode, d->mediaPlayerView);
+ //insertWidget(MapWidgetMode, d->mapWidgetView);
+
+ setPreviewMode(PreviewCameraMode);
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ readSettings();
+
+ // -----------------------------------------------------------------
+
+ //FIXME: connect(d->importPreviewView, SIGNAL(signalPopupTagsView()),
+ //d->importIconView, SIGNAL(signalPopupTagsView()));
+
+ //REMconnect(d->importPreviewView, SIGNAL(signalGotoFolderAndItem(CamItemInfo)),
+ //REMthis, SIGNAL(signalGotoFolderAndItem(CamItemInfo)));
+
+ //REMconnect(d->importPreviewView, SIGNAL(signalGotoDateAndItem(CamItemInfo)),
+ //REMthis, SIGNAL(signalGotoDateAndItem(CamItemInfo)));
+
+ //FIXME: connect(d->importPreviewView, SIGNAL(signalGotoTagAndItem(int)),
+ //this, SIGNAL(signalGotoTagAndItem(int)));
+
+ //REMconnect(d->importPreviewView, SIGNAL(signalNextItem()),
+ //REMthis, SIGNAL(signalNextItem()));
+
+ //REMconnect(d->importPreviewView, SIGNAL(signalPrevItem()),
+ //REMthis, SIGNAL(signalPrevItem()));
+
+ //REM connect(d->importPreviewView, SIGNAL(signalEditItem()),
+ //REM this, SIGNAL(signalEditItem()));
+
+ //REMconnect(d->importPreviewView, SIGNAL(signalDeleteItem()),
+ //REM this, SIGNAL(signalDeleteItem()));
+
+ //FIXME: connect(d->importPreviewView, SIGNAL(signalBack2FilesList()),
+ //this, SIGNAL(signalBack2Album()));
+
+ //REMconnect(d->importPreviewView->layout(), SIGNAL(zoomFactorChanged(double)),
+ //REMthis, SLOT(slotZoomFactorChanged(double)));
+
+ //FIXME: connect(d->importPreviewView, SIGNAL(signalInsert2LightTable()),
+ //this, SIGNAL(signalInsert2LightTable()));
+
+ //FIXME: connect(d->importPreviewView, SIGNAL(signalInsert2QueueMgr()),
+ //this, SIGNAL(signalInsert2QueueMgr()));
+
+ //FIXME: connect(d->importPreviewView, SIGNAL(signalFindSimilar()),
+ //this, SIGNAL(signalFindSimilar()));
+
+ //FIXME: connect(d->importPreviewView, SIGNAL(signalAddToExistingQueue(int)),
+ //this, SIGNAL(signalAddToExistingQueue(int)));
+
+ //REMconnect(d->thumbBar, SIGNAL(selectionChanged()),
+ //REM this, SLOT(slotThumbBarSelectionChanged()));
+
+ connect(d->importIconView, SIGNAL(selectionChanged()),
+ this, SLOT(slotIconViewSelectionChanged()));
+
+ //REMconnect(d->thumbBarDock, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)),
+ //REMd->thumbBar, SLOT(slotDockLocationChanged(Qt::DockWidgetArea)));
+
+ //FIXME: connect(d->mediaPlayerView, SIGNAL(signalNextItem()),
+ //this, SIGNAL(signalNextItem()));
+
+ //FIXME: connect(d->mediaPlayerView, SIGNAL(signalPrevItem()),
+ //this, SIGNAL(signalPrevItem()));
+
+ //FIXME: connect(d->mediaPlayerView, SIGNAL(signalBack2Album()),
+ //this, SIGNAL(signalBack2Album()));
+
+ //REM connect(d->importPreviewView, SIGNAL(signalPreviewLoaded(bool)),
+ //REMthis, SLOT(slotPreviewLoaded(bool)));
+}
+ImportStackedView::~ImportStackedView()
+{
+ delete d;
+}
+
+void ImportStackedView::readSettings()
+{
+ ImportSettings* settings = ImportSettings::instance();
+ //REMbool showThumbbar = settings->getShowThumbbar();
+ //REMd->thumbBarDock->setShouldBeVisible(showThumbbar);
+}
+
+void ImportStackedView::setDockArea(QMainWindow* dockArea)
+{
+ // Attach the thumbbar dock to the given dock area and place it initially on \
top. + d->dockArea = dockArea;
+ //REMd->thumbBarDock->setParent(d->dockArea);
+ //REMd->dockArea->addDockWidget(Qt::TopDockWidgetArea, d->thumbBarDock);
+ //REMd->thumbBarDock->setFloating(false);
+}
+
+//REMThumbBarDock* ImportStackedView::thumbBarDock() const
+//REM{
+//REM return d->thumbBarDock;
+//REM}
+
+//REMImportThumbnailBar* ImportStackedView::thumbBar() const
+//REM{
+//REM return d->thumbBar;
+//REM}
+
+void ImportStackedView::slotEscapePreview()
+{
+//FIXME: Uncomment when MediaPlayerView is implemented
+// if (previewMode() == MediaPlayerMode)
+// {
+// d->mediaPlayerView->escapePreview();
+// }
+}
+
+ImportIconView* ImportStackedView::importIconView() const
+{
+ return d->importIconView;
+}
+
+ImportPreviewView* ImportStackedView::importPreviewView() const
+{
+ return d->importPreviewView;
+}
+
+//MapWidgetView* ImportStackedView::mapWidgetView() const
+//{
+// return d->mapWidgetView;
+//}
+
+//FIXME: Uncomment when MediaPlayerView is implemented
+//MediaPlayerView* ImportStackedView::mediaPlayerView() const
+//{
+// return d->mediaPlayerView;
+//}
+
+bool ImportStackedView::isInSingleFileMode() const
+{
+ return currentIndex() == PreviewImageMode || currentIndex() == MediaPlayerMode;
+}
+
+bool ImportStackedView::isInMultipleFileMode() const
+{
+ return currentIndex() == PreviewCameraMode || currentIndex() == MapWidgetMode;
+}
+
+void ImportStackedView::setPreviewItem(const CamItemInfo& info, const CamItemInfo& \
previous, const CamItemInfo& next) +{
+ if (info.isNull())
+ {
+ //FIXME: Uncomment when MediaPlayerView is implemented
+ //if (previewMode() == MediaPlayerMode)
+ //{
+ // d->mediaPlayerView->setCamItemInfo();
+ //}
+ /*else*/ if (previewMode() == PreviewImageMode)
+ {
+ //REM d->importPreviewView->setCamItemInfo();
+ }
+ }
+ else
+ {
+ if (identifyCategoryforMime(info.mime) == "audio" || \
identifyCategoryforMime(info.mime) == "video") + {
+ // Stop image viewer
+ if (previewMode() == PreviewImageMode)
+ {
+ //REMd->importPreviewView->setCamItemInfo();
+ }
+
+ //FIXME: Uncomment when MediaPlayerView is implemented
+ //setPreviewMode(MediaPlayerMode);
+ //d->mediaPlayerView->setCamItemInfo(info, previous, next);
+ }
+ else
+ {
+ // Stop media player if running...
+ //FIXME: Uncomment when MediaPlayerView is implemented
+ //if (previewMode() == MediaPlayerMode)
+ //{
+ // d->mediaPlayerView->setCamItemInfo();
+ //}
+
+ //REMd->importPreviewView->setCamItemInfo(info, previous, next);
+
+ // NOTE: No need to toggle immediately in PreviewImageMode here,
+ // because we will receive a signal for that when the image preview will \
be loaded. + // This will prevent a flicker effect with the old image \
preview loaded in stack. + }
+
+ // do not touch the selection, only adjust current info
+ //REMQModelIndex currentIndex = \
d->thumbBar->importSortFilterModel()->indexForCamItemInfo(info); + \
//REMd->thumbBar->selectionModel()->setCurrentIndex(currentIndex, \
QItemSelectionModel::NoUpdate); + }
+}
+
+QString ImportStackedView::identifyCategoryforMime(QString mime)
+{
+ return mime.split("/").at(0);
+}
+
+int ImportStackedView::previewMode()
+{
+ return indexOf(currentWidget());
+}
+
+void ImportStackedView::setPreviewMode(const int mode)
+{
+ if (mode != PreviewCameraMode && mode != PreviewImageMode &&
+ mode != MediaPlayerMode && mode != MapWidgetMode)
+ {
+ return;
+ }
+
+ if (mode == PreviewImageMode || mode == MediaPlayerMode)
+ {
+ //REMd->thumbBarDock->restoreVisibility();
+ //REMsyncSelection(d->importIconView, d->thumbBar);
+ }
+ else
+ {
+ //REMd->thumbBarDock->hide();
+ }
+
+ //TODO: Implement the MapPageMode
+ //if (mode == PreviewCameraMode || mode == WelcomePageMode || mode == \
MapWidgetMode) + //{
+ // setPreviewItem();
+ // setCurrentIndex(mode);
+ //}
+ //else
+ //{
+ // setCurrentIndex(mode);
+ //}
+
+ //d->mapWidgetView->setActive(mode == MapWidgetMode);
+
+ //if (mode == PreviewCameraMode)
+ //{
+ // d->importIconView->setFocus();
+ //}
+ //else if (mode == MapWidgetMode)
+ //{
+ // d->mapWidgetView->setFocus();
+ //}
+
+ emit signalViewModeChanged();
+}
+
+void ImportStackedView::syncSelection(ImportCategorizedView* from, \
ImportCategorizedView* to) +{
+ ImportSortFilterModel* fromModel = from->importSortFilterModel();
+ ImportSortFilterModel* toModel = to->importSortFilterModel();
+ // set current info
+ QModelIndex currentIndex = toModel->indexForCamItemInfo(from->currentInfo());
+ to->selectionModel()->setCurrentIndex(currentIndex, \
QItemSelectionModel::NoUpdate); +
+ // sync selection
+ QItemSelection selection = from->selectionModel()->selection();
+ QItemSelection newSelection;
+ foreach(const QItemSelectionRange& range, selection)
+ {
+ QModelIndex topLeft = \
toModel->indexForCamItemInfo(fromModel->camItemInfo(range.topLeft())); + \
QModelIndex bottomRight = \
toModel->indexForCamItemInfo(fromModel->camItemInfo(range.bottomRight())); + \
newSelection.select(topLeft, bottomRight); + }
+
+ d->syncingSelection = true;
+ to->selectionModel()->select(newSelection, QItemSelectionModel::ClearAndSelect);
+ d->syncingSelection = false;
+}
+
+void ImportStackedView::slotThumbBarSelectionChanged()
+{
+ if (currentIndex() != PreviewImageMode && currentIndex() != MediaPlayerMode)
+ {
+ return;
+ }
+
+ if (d->syncingSelection)
+ {
+ return;
+ }
+
+ //REMsyncSelection(d->thumbBar, d->importIconView);
+}
+
+void ImportStackedView::slotIconViewSelectionChanged()
+{
+ if (currentIndex() != PreviewCameraMode)
+ {
+ return;
+ }
+
+ if (d->syncingSelection)
+ {
+ return;
+ }
+
+ //REMsyncSelection(d->importIconView, d->thumbBar);
+}
+
+void ImportStackedView::previewLoaded()
+{
+ emit signalViewModeChanged();
+}
+
+void ImportStackedView::slotZoomFactorChanged(double z)
+{
+ if (previewMode() == PreviewImageMode)
+ {
+ emit signalZoomFactorChanged(z);
+ }
+}
+
+void ImportStackedView::increaseZoom()
+{
+ d->importPreviewView->layout()->increaseZoom();
+}
+
+void ImportStackedView::decreaseZoom()
+{
+ d->importPreviewView->layout()->decreaseZoom();
+}
+
+void ImportStackedView::zoomTo100Percents()
+{
+ d->importPreviewView->layout()->setZoomFactor(1.0);
+}
+
+void ImportStackedView::fitToWindow()
+{
+ d->importPreviewView->layout()->fitToWindow();
+}
+
+void ImportStackedView::toggleFitToWindowOr100()
+{
+ d->importPreviewView->layout()->toggleFitToWindowOr100();
+}
+
+bool ImportStackedView::maxZoom()
+{
+ return d->importPreviewView->layout()->atMaxZoom();
+}
+
+bool ImportStackedView::minZoom()
+{
+ return d->importPreviewView->layout()->atMinZoom();
+}
+
+void ImportStackedView::setZoomFactor(double z)
+{
+ // Giving a null anchor means to use the current view center
+ d->importPreviewView->layout()->setZoomFactor(z, QPoint());
+}
+
+void ImportStackedView::setZoomFactorSnapped(double z)
+{
+ d->importPreviewView->layout()->setZoomFactor(z, QPoint(), \
SinglePhotoPreviewLayout::SnapZoomFactor); +}
+
+double ImportStackedView::zoomFactor()
+{
+ return d->importPreviewView->layout()->zoomFactor();
+}
+
+double ImportStackedView::zoomMin()
+{
+ return d->importPreviewView->layout()->minZoomFactor();
+}
+
+double ImportStackedView::zoomMax()
+{
+ return d->importPreviewView->layout()->maxZoomFactor();
+}
+
+void ImportStackedView::slotPreviewLoaded(bool)
+{
+ setPreviewMode(ImportStackedView::PreviewImageMode);
+ previewLoaded();
+}
+
+} // namespace Digikam
diff --git a/utilities/cameragui/views/importstackedview.h \
b/utilities/cameragui/views/importstackedview.h new file mode 100644
index 0000000..ca6b13a
--- /dev/null
+++ b/utilities/cameragui/views/importstackedview.h
@@ -0,0 +1,137 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2012-05-07
+ * Description : QStackedWidget to handle different types of views
+ * (icon view, items preview, media view)
+ *
+ * Copyright (C) 2012 by Islam Wazery <wazery at ubuntu dot com>
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation;
+ * either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * ============================================================ */
+
+#ifndef IMPORTSTACKEDVIEW_H
+#define IMPORTSTACKEDVIEW_H
+
+// Qt inclueds
+
+#include <QStackedWidget>
+
+// Local includes
+
+#include "importthumbnailbar.h"
+#include "importpreviewview.h"
+#include "thumbbardock.h"
+#include "camiteminfo.h"
+#include "importiconview.h"
+
+namespace Digikam
+{
+
+class ImportStackedView : public QStackedWidget
+{
+ Q_OBJECT
+
+public:
+
+ enum StackedViewMode
+ {
+ PreviewCameraMode = 0, // previewing the set of items on the camera
+ PreviewImageMode,
+ MediaPlayerMode,
+ MapWidgetMode
+ };
+
+ ImportStackedView(CameraController* controller, QWidget* parent = 0);
+ ~ImportStackedView();
+
+ /*FIXME: Attach the thumbnail dock widget to the specified QMainWindow. */
+ void setDockArea(QMainWindow*);
+
+ //REMThumbBarDock* thumbBarDock() const;
+ //REMImportThumbnailBar* thumbBar() const;
+ ImportIconView* importIconView() const;
+ ImportPreviewView* importPreviewView() const;
+ //FIXME: MapWidgetView* mapWidgetView() const;
+ //FIXME: MediaPlayerView* mediaPlayerView() const;
+
+ bool isInSingleFileMode() const;
+ bool isInMultipleFileMode() const;
+ //FIXME: bool isInAbstractMode() const;
+
+ void setPreviewItem(const CamItemInfo& info = CamItemInfo(),
+ const CamItemInfo& previous = CamItemInfo(),
+ const CamItemInfo& next = CamItemInfo());
+
+ int previewMode();
+ void setPreviewMode(const int mode);
+ void previewLoaded();
+
+ void increaseZoom();
+ void decreaseZoom();
+ void fitToWindow();
+ void toggleFitToWindowOr100();
+ void zoomTo100Percents();
+ bool maxZoom();
+ bool minZoom();
+ void setZoomFactor(double z);
+ void setZoomFactorSnapped(double z);
+ double zoomFactor();
+ double zoomMin();
+ double zoomMax();
+
+Q_SIGNALS:
+
+ void signalNextItem();
+ void signalPrevItem();
+ //FIXME: void signalEditItem();
+ void signalDeleteItem();
+ void signalViewModeChanged();
+ //FIXME: void signalBack2FilesList();
+ //FIXME: void signalSlideShow();
+ void signalZoomFactorChanged(double);
+
+ //FIXME: void signalGotoAlbumAndItem(const CamItemInfo&);
+ //FIXME: void signalGotoDateAndItem(const CamItemInfo&);
+ //FIXME: void signalGotoTagAndItem(int);
+
+public Q_SLOTS:
+
+ void slotEscapePreview();
+
+private Q_SLOTS:
+
+ void slotPreviewLoaded(bool);
+ void slotZoomFactorChanged(double);
+ void slotThumbBarSelectionChanged();
+ void slotIconViewSelectionChanged();
+
+private:
+
+ void readSettings();
+ void syncSelection(ImportCategorizedView* from, ImportCategorizedView* to);
+
+ /// Used to return the category for a specified camera item.
+ QString identifyCategoryforMime(QString mime);
+
+private:
+
+ class ImportStackedViewPriv;
+ ImportStackedViewPriv* const d;
+};
+
+} // namespace Digikam
+
+#endif // IMPORTSTACKEDVIEW_H
diff --git a/utilities/cameragui/views/importthumbnailbar.cpp \
b/utilities/cameragui/views/importthumbnailbar.cpp new file mode 100644
index 0000000..4f2e5bb
--- /dev/null
+++ b/utilities/cameragui/views/importthumbnailbar.cpp
@@ -0,0 +1,192 @@
+#include "importthumbnailbar.h"
+
+// KDE includes
+
+#include <kdebug.h>
+
+// Local includes
+
+#include "importsettings.h"
+#include "importdelegate.h"
+#include "importfiltermodel.h"
+
+namespace Digikam
+{
+
+//class ImportThumbnailDelegate;
+
+class ImportThumbnailBar::ImportThumbnailBarPriv
+{
+public:
+
+ ImportThumbnailBarPriv()
+ {
+ scrollPolicy = Qt::ScrollBarAlwaysOn;
+ duplicatesFilter = 0;
+ }
+
+ Qt::ScrollBarPolicy scrollPolicy;
+ NoDuplicatesImportFilterModel* duplicatesFilter;
+};
+
+ImportThumbnailBar::ImportThumbnailBar(QWidget* parent)
+ : ImportCategorizedView(parent), d(new ImportThumbnailBarPriv())
+{
+ setItemDelegate(new ImportThumbnailDelegate(this));
+ setSpacing(3);
+ setUsePointingHandCursor(false);
+ setScrollStepGranularity(5);
+ setScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+
+ setDragEnabled(true);
+ setAcceptDrops(true);
+ setDropIndicatorShown(false);
+
+ //TODO: Implement Import Tool settings
+ //setToolTipEnabled(ImportSettings::instance()->showToolTipsIsValid());
+
+ connect(ImportSettings::instance(), SIGNAL(setupChanged()),
+ this, SLOT(slotSetupChanged()));
+
+ slotSetupChanged();
+ setFlow(LeftToRight);
+}
+
+ImportThumbnailBar::~ImportThumbnailBar()
+{
+ delete d;
+}
+
+void ImportThumbnailBar::setModelsFiltered(ImportImageModel* model, \
ImportSortFilterModel* filterModel) +{
+ if (!d->duplicatesFilter)
+ {
+ d->duplicatesFilter = new NoDuplicatesImportFilterModel(this);
+ }
+
+ d->duplicatesFilter->setSourceFilterModel(filterModel);
+ ImportCategorizedView::setModels(model, d->duplicatesFilter);
+}
+
+//TODO: Implement rating in Import Tool
+//void ImportThumbnailBar::installRatingOverlay()
+//{
+// ImageRatingOverlay* ratingOverlay = new ImageRatingOverlay(this);
+// addOverlay(ratingOverlay);
+
+// connect(ratingOverlay, SIGNAL(ratingEdited(QList<QModelIndex>,int)),
+// this, SLOT(assignRating(QList<QModelIndex>,int)));
+//}
+
+void ImportThumbnailBar::slotDockLocationChanged(Qt::DockWidgetArea area)
+{
+ if (area == Qt::LeftDockWidgetArea || area == Qt::RightDockWidgetArea)
+ {
+ setFlow(TopToBottom);
+ }
+ else
+ {
+ setFlow(LeftToRight);
+ }
+
+ scrollTo(currentIndex());
+}
+
+void ImportThumbnailBar::setScrollBarPolicy(Qt::ScrollBarPolicy policy)
+{
+ if (policy == Qt::ScrollBarAsNeeded)
+ {
+ // Delegate resizing will cause endless relayouting, see bug #228807
+ kError() << "The Qt::ScrollBarAsNeeded policy is not supported by \
ImportThumbnailBar"; + }
+
+ d->scrollPolicy = policy;
+
+ if (flow() == TopToBottom)
+ {
+ setVerticalScrollBarPolicy(d->scrollPolicy);
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ }
+ else
+ {
+ setHorizontalScrollBarPolicy(d->scrollPolicy);
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ }
+}
+
+void ImportThumbnailBar::setFlow(QListView::Flow flow)
+{
+ setWrapping(false);
+
+ ImportCategorizedView::setFlow(flow);
+
+ ImportThumbnailDelegate* del = \
static_cast<ImportThumbnailDelegate*>(delegate()); + del->setFlow(flow);
+
+ // Reset the minimum and maximum sizes.
+ setMinimumSize(QSize(0, 0));
+ setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
+
+ // Adjust minimum and maximum width to thumbnail sizes.
+ if (flow == TopToBottom)
+ {
+ int viewportFullWidgetOffset = size().width() - viewport()->size().width();
+ setMinimumWidth(del->minimumSize() + viewportFullWidgetOffset);
+ setMaximumWidth(del->maximumSize() + viewportFullWidgetOffset);
+ }
+ else
+ {
+ int viewportFullWidgetOffset = size().height() - \
viewport()->size().height(); + setMinimumHeight(del->minimumSize() + \
viewportFullWidgetOffset); + setMaximumHeight(del->maximumSize() + \
viewportFullWidgetOffset); + }
+
+ setScrollBarPolicy(d->scrollPolicy);
+}
+
+void ImportThumbnailBar::slotSetupChanged()
+{
+ setToolTipEnabled(ImportSettings::instance()->showToolTipsIsValid());
+ setFont(ImportSettings::instance()->getIconViewFont());
+
+ ImportCategorizedView::slotSetupChanged();
+}
+
+//TODO: Implement rating in Import Tool
+//void ImportThumbnailBar::assignRating(const QList<QModelIndex>& indexes, int \
rating) +//{
+// FileActionMngr::instance()->assignRating(imageSortFilterModel()->imageInfos(indexes), \
rating); +//}
+
+bool ImportThumbnailBar::event(QEvent* e)
+{
+ // reset widget max/min sizes
+ if (e->type() == QEvent::StyleChange)
+ {
+ setFlow(flow());
+ }
+
+ return ImportCategorizedView::event(e);
+}
+
+QModelIndex ImportThumbnailBar::nextIndex(const QModelIndex& index) const
+{
+ return importFilterModel()->index(index.row() + 1, 0);
+}
+
+QModelIndex ImportThumbnailBar::previousIndex(const QModelIndex& index) const
+{
+ return importFilterModel()->index(index.row() - 1, 0);
+}
+
+QModelIndex ImportThumbnailBar::firstIndex() const
+{
+ return importFilterModel()->index(0, 0);
+}
+
+QModelIndex ImportThumbnailBar::lastIndex() const
+{
+ return importFilterModel()->index(importFilterModel()->rowCount() - 1, 0);
+}
+
+} // namespace Digikam
diff --git a/utilities/cameragui/views/importthumbnailbar.h \
b/utilities/cameragui/views/importthumbnailbar.h new file mode 100644
index 0000000..192a7e7
--- /dev/null
+++ b/utilities/cameragui/views/importthumbnailbar.h
@@ -0,0 +1,57 @@
+#ifndef IMPORTTHUMBNAILBAR_H
+#define IMPORTTHUMBNAILBAR_H
+
+// Local includes
+
+#include "importcategorizedview.h"
+
+namespace Digikam
+{
+
+class ImportThumbnailBar : public ImportCategorizedView
+{
+ Q_OBJECT
+
+public:
+
+ ImportThumbnailBar(QWidget* parent = 0);
+ ~ImportThumbnailBar();
+
+ /**
+ * This installs a duplicate filter model, if the ImportImageModel may contain \
duplicates. + * Otherwise, just use setModels().
+ */
+ void setModelsFiltered(ImportImageModel* model, ImportSortFilterModel* \
filterModel); +
+ QModelIndex nextIndex(const QModelIndex& index) const;
+ QModelIndex previousIndex(const QModelIndex& index) const;
+ QModelIndex firstIndex() const;
+ QModelIndex lastIndex() const;
+
+ /// Sets the policy always for the one scroll bar which is relevant, depending \
on orientation + void setScrollBarPolicy(Qt::ScrollBarPolicy policy);
+ void setFlow(QListView::Flow newFlow);
+
+ //TODO: Implement rating in Import Tool
+ //void installRatingOverlay();
+
+public Q_SLOTS:
+
+ //TODO: Implement rating in Import Tool
+ //void assignRating(const QList<QModelIndex>& index, int rating);
+ void slotDockLocationChanged(Qt::DockWidgetArea area);
+
+protected:
+
+ virtual void slotSetupChanged();
+ virtual bool event(QEvent*);
+
+private:
+
+ class ImportThumbnailBarPriv;
+ ImportThumbnailBarPriv* const d;
+};
+
+} // namespace Digikam
+
+#endif // IMPORTTHUMBNAILBAR_H
diff --git a/utilities/cameragui/views/importview.cpp \
b/utilities/cameragui/views/importview.cpp new file mode 100644
index 0000000..3abb951
--- /dev/null
+++ b/utilities/cameragui/views/importview.cpp
@@ -0,0 +1,867 @@
+//#include "importview.moc"
+#include "importview.h" //TODO: Remove this line
+
+// Qt includes
+
+#include <QTimer>
+#include <QShortcut>
+
+// KDE includes
+
+#include <KMessageBox>
+#include <KDebug>
+
+// Local includes
+
+#include "cameraui.h"
+#include "importiconview.h"
+#include "importstackedview.h"
+#include "thumbnailsize.h"
+#include "fileactionmngr.h"
+#include "importsettings.h"
+#include "sidebar.h"
+#include "dzoombar.h"
+#include "models/camitemsortsettings.h"
+
+namespace Digikam
+{
+
+class ImportView::ImportViewPriv
+{
+public:
+
+ ImportViewPriv() :
+ needDispatchSelection(false),
+ thumbSize(ThumbnailSize::Medium),
+ dockArea(0),
+ splitter(0),
+ selectionTimer(0),
+ thumbSizeTimer(0),
+ parent(0),
+ iconView(0),
+ StackedView(0),
+ lastPreviewMode(ImportStackedView::PreviewCameraMode),
+ leftSideBar(0)
+ //TODO: rightSideBar(0)
+ //FIXME: filterWidget(0)
+ {
+ }
+
+ void addPageUpDownActions(ImportView* q, QWidget* w);
+
+public:
+
+ bool needDispatchSelection;
+
+ //FIXME: int initialAlbumID;
+ int thumbSize;
+
+ QMainWindow* dockArea;
+
+ SidebarSplitter* splitter;
+
+ QTimer* selectionTimer;
+ QTimer* thumbSizeTimer;
+
+ // left side bar
+ CameraUI* parent;
+
+ ImportIconView* iconView;
+ //TODO: MapWidgetView* mapView;
+ ImportStackedView* StackedView;
+ int lastPreviewMode;
+
+ Sidebar* leftSideBar;
+ //TODO: ImagePropertiesSideBarDB* rightSideBar;
+
+ //FIXME: FilterSideBarWidget* filterWidget;
+
+ QString optionAlbumViewPrefix;
+
+ QList<SidebarWidget*> leftSideBarWidgets;
+};
+
+ImportView::ImportView(CameraUI* ui, QWidget* parent)
+ : KHBox(parent), d(new ImportViewPriv)
+{
+ d->parent = /*static_cast<CameraUI*>*/(ui);
+
+ d->splitter = new SidebarSplitter;
+ d->splitter->setFrameStyle(QFrame::NoFrame);
+ d->splitter->setFrameShadow(QFrame::Plain);
+ d->splitter->setFrameShape(QFrame::NoFrame);
+ d->splitter->setOpaqueResize(false);
+
+ d->leftSideBar = new Sidebar(this, d->splitter, KMultiTabBar::Left);
+ d->leftSideBar->setObjectName("Import Left Sidebar");
+ d->splitter->setParent(this);
+
+ // The dock area where the thumbnail bar is allowed to go.
+ d->dockArea = new QMainWindow(this, Qt::Widget);
+ d->splitter->addWidget(d->dockArea);
+ d->StackedView = new ImportStackedView(d->parent->getCameraController(), \
d->dockArea); + d->dockArea->setCentralWidget(d->StackedView);
+ d->StackedView->setDockArea(d->dockArea);
+
+ d->iconView = d->StackedView->importIconView();
+ //TODO: d->mapView = d->StackedView->mapWidgetView();
+
+ d->addPageUpDownActions(this, d->StackedView->importPreviewView());
+ //REMd->addPageUpDownActions(this, d->StackedView->thumbBar());
+ //TODO: d->addPageUpDownActions(this, d->StackedView->mediaPlayerView());
+
+ //TODO: d->rightSideBar = new ImagePropertiesSideBarDB(this, d->splitter, \
KMultiTabBar::Right, true); + //TODO: d->rightSideBar->setObjectName("Import Right \
Sidebar"); +
+ foreach(SidebarWidget* leftWidget, d->leftSideBarWidgets)
+ {
+ d->leftSideBar->appendTab(leftWidget, leftWidget->getIcon(),
+ leftWidget->getCaption());
+ connect(leftWidget, SIGNAL(requestActiveTab(SidebarWidget*)),
+ this, SLOT(slotLeftSideBarActivate(SidebarWidget*)));
+ }
+
+ // To the right.
+
+ //d->addPageUpDownActions(this, d->rightSideBar->imageDescEditTab());
+
+ d->selectionTimer = new QTimer(this);
+ d->selectionTimer->setSingleShot(true);
+ d->selectionTimer->setInterval(75);
+ d->thumbSizeTimer = new QTimer(this);
+ d->thumbSizeTimer->setSingleShot(true);
+ d->thumbSizeTimer->setInterval(300);
+
+ slotSidebarTabTitleStyleChanged();
+ setupConnections();
+}
+
+ImportView::~ImportView()
+{
+ delete d;
+}
+
+void ImportView::applySettings()
+{
+ foreach(SidebarWidget* sidebarWidget, d->leftSideBarWidgets)
+ {
+ sidebarWidget->applySettings();
+ }
+
+ refreshView();
+}
+
+void ImportView::refreshView()
+{
+ //d->rightSideBar->refreshTagsView();
+}
+
+void ImportView::setupConnections()
+{
+ // -- CameraUI connections ----------------------------------
+
+ connect(d->parent, SIGNAL(signalEscapePressed()),
+ this, SLOT(slotEscapePreview()));
+
+ connect(d->parent, SIGNAL(signalEscapePressed()),
+ d->StackedView, SLOT(slotEscapePreview()));
+
+ connect(d->parent, SIGNAL(signalNextItem()),
+ this, SLOT(slotNextItem()));
+
+ connect(d->parent, SIGNAL(signalPrevItem()),
+ this, SLOT(slotPrevItem()));
+
+ connect(d->parent, SIGNAL(signalFirstItem()),
+ this, SLOT(slotFirstItem()));
+
+ connect(d->parent, SIGNAL(signalLastItem()),
+ this, SLOT(slotLastItem()));
+
+ // -- IconView Connections -------------------------------------
+
+ connect(d->iconView->model(), SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(slotImageSelected()));
+
+ connect(d->iconView->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(slotImageSelected()));
+
+ connect(d->iconView->model(), SIGNAL(layoutChanged()),
+ this, SLOT(slotImageSelected()));
+
+ connect(d->iconView, SIGNAL(selectionChanged()),
+ this, SLOT(slotImageSelected()));
+
+ connect(d->iconView, SIGNAL(previewRequested(CamItemInfo)),
+ this, SLOT(slotTogglePreviewMode(CamItemInfo)));
+
+ connect(d->iconView, SIGNAL(zoomOutStep()),
+ this, SLOT(slotZoomOut()));
+
+ connect(d->iconView, SIGNAL(zoomInStep()),
+ this, SLOT(slotZoomIn()));
+
+ // -- Sidebar Connections -------------------------------------
+
+ connect(d->leftSideBar, SIGNAL(signalChangedTab(QWidget*)),
+ this, SLOT(slotLeftSidebarChangedTab(QWidget*)));
+
+ //TODO: connect(d->rightSideBar, SIGNAL(signalFirstItem()),
+ //this, SLOT(slotFirstItem()));
+
+ //TODO: connect(d->rightSideBar, SIGNAL(signalNextItem()),
+ //this, SLOT(slotNextItem()));
+
+ //TODO: connect(d->rightSideBar, SIGNAL(signalPrevItem()),
+ //this, SLOT(slotPrevItem()));
+
+ //TODO: connect(d->rightSideBar, SIGNAL(signalLastItem()),
+ //this, SLOT(slotLastItem()));
+
+ //TODO: connect(this, SIGNAL(signalNoCurrentItem()),
+ //d->rightSideBar, SLOT(slotNoCurrentItem()));
+
+ // -- Preview image widget Connections ------------------------
+
+ connect(d->StackedView, SIGNAL(signalNextItem()),
+ this, SLOT(slotNextItem()));
+
+ connect(d->StackedView, SIGNAL(signalPrevItem()),
+ this, SLOT(slotPrevItem()));
+
+ connect(d->StackedView, SIGNAL(signalEditItem()),
+ this, SLOT(slotImageEdit()));
+
+ connect(d->StackedView, SIGNAL(signalDeleteItem()),
+ this, SLOT(slotImageDelete()));
+
+ connect(d->StackedView, SIGNAL(signalViewModeChanged()),
+ this, SLOT(slotViewModeChanged()));
+
+ //FIXME: connect(d->StackedView, SIGNAL(signalBack2Album()),
+ //this, SLOT(slotEscapePreview()));
+
+ connect(d->StackedView, SIGNAL(signalZoomFactorChanged(double)),
+ this, SLOT(slotZoomFactorChanged(double)));
+
+ // -- FileActionMngr progress ---------------
+
+ connect(FileActionMngr::instance(), SIGNAL(signalImageChangeFailed(QString, \
QStringList)), + this, SLOT(slotImageChangeFailed(QString, QStringList)));
+
+ // -- timers ---------------
+
+ connect(d->selectionTimer, SIGNAL(timeout()),
+ this, SLOT(slotDispatchImageSelected()));
+
+ connect(d->thumbSizeTimer, SIGNAL(timeout()),
+ this, SLOT(slotThumbSizeEffect()) );
+
+ // -- Album Settings ----------------
+
+ connect(ImportSettings::instance(), SIGNAL(setupChanged()),
+ this, SLOT(slotSidebarTabTitleStyleChanged()));
+}
+
+//void ImportView::connectIconViewFilter(FilterStatusBar* filterbar)
+//{
+// ImageAlbumFilterModel* model = d->iconView->imageAlbumFilterModel();
+
+// connect(model, SIGNAL(filterMatches(bool)),
+// filterbar, SLOT(slotFilterMatches(bool)));
+
+// connect(model, SIGNAL(filterSettingsChanged(ImageFilterSettings)),
+// filterbar, SLOT(slotFilterSettingsChanged(ImageFilterSettings)));
+
+// connect(filterbar, SIGNAL(signalResetFilters()),
+// d->filterWidget, SLOT(slotResetFilters()));
+
+// connect(filterbar, SIGNAL(signalPopupFiltersView()),
+// this, SLOT(slotPopupFiltersView()));
+//}
+
+//void ImportView::slotPopupFiltersView()
+//{
+// d->rightSideBar->setActiveTab(d->filterWidget);
+// d->filterWidget->setFocusToTextFilter();
+//}
+
+void ImportView::ImportViewPriv::addPageUpDownActions(ImportView* q, QWidget* w)
+{
+ QShortcut *nextImageShortcut = new QShortcut(w);
+ nextImageShortcut->setKey(Qt::Key_PageDown);
+ nextImageShortcut->setContext(Qt::WidgetWithChildrenShortcut);
+ QObject::connect(nextImageShortcut, SIGNAL(activated()), q, \
SLOT(slotNextItem())); +
+ QShortcut *prevImageShortcut = new QShortcut(w);
+ prevImageShortcut->setKey(Qt::Key_PageUp);
+ prevImageShortcut->setContext(Qt::WidgetWithChildrenShortcut);
+ QObject::connect(prevImageShortcut, SIGNAL(activated()), q, \
SLOT(slotPrevItem())); +}
+
+void ImportView::loadViewState()
+{
+ foreach(SidebarWidget* widget, d->leftSideBarWidgets)
+ {
+ widget->loadState();
+ }
+
+ //TODO: d->filterWidget->loadState();
+
+ KSharedConfig::Ptr config = KGlobal::config();
+ KConfigGroup group = config->group("MainWindow");
+
+ // Restore the splitter
+ d->splitter->restoreState(group);
+
+ // Restore the thumbnail bar dock.
+ QByteArray thumbbarState;
+ thumbbarState = group.readEntry("ThumbbarState", thumbbarState);
+ d->dockArea->restoreState(QByteArray::fromBase64(thumbbarState));
+
+ //TODO: d->mapView->loadState();
+ //TODO: d->rightSideBar->loadState();
+}
+
+void ImportView::saveViewState()
+{
+ KSharedConfig::Ptr config = KGlobal::config();
+ KConfigGroup group = config->group("MainWindow");
+
+ foreach(SidebarWidget* widget, d->leftSideBarWidgets)
+ {
+ widget->saveState();
+ }
+
+ //TODO: d->filterWidget->saveState();
+
+ // Save the splitter states.
+ d->splitter->saveState(group);
+
+ // Save the position and size of the thumbnail bar. The thumbnail bar dock
+ // needs to be closed explicitly, because when it is floating and visible
+ // (when the user is in image preview mode) when the layout is saved, it
+ // also reappears when restoring the view, while it should always be hidden.
+ //REMd->StackedView->thumbBarDock()->close();
+ group.writeEntry("ThumbbarState", d->dockArea->saveState().toBase64());
+
+ //TODO: d->mapView->saveState();
+
+ //TODO: d->rightSideBar->saveState();
+}
+
+QList<SidebarWidget*> ImportView::leftSidebarWidgets()
+{
+ return d->leftSideBarWidgets;
+}
+
+KUrl::List ImportView::allUrls() const
+{
+ return d->iconView->urls();
+}
+
+KUrl::List ImportView::selectedUrls() const
+{
+ return d->iconView->selectedUrls();
+}
+
+void ImportView::showSideBars()
+{
+ d->leftSideBar->restore();
+ //d->rightSideBar->restore();
+}
+
+void ImportView::hideSideBars()
+{
+ d->leftSideBar->backup();
+ //d->rightSideBar->backup();
+}
+
+void ImportView::slotFirstItem()
+{
+ d->iconView->toFirstIndex();
+}
+
+void ImportView::slotPrevItem()
+{
+ d->iconView->toPreviousIndex();
+}
+
+void ImportView::slotNextItem()
+{
+ d->iconView->toNextIndex();
+}
+
+void ImportView::slotLastItem()
+{
+ d->iconView->toLastIndex();
+}
+
+void ImportView::slotSelectItemByUrl(const KUrl& url)
+{
+ d->iconView->toIndex(url);
+}
+
+void ImportView::slotImageSelected()
+{
+ // delay to slotDispatchImageSelected
+ d->needDispatchSelection = true;
+ d->selectionTimer->start();
+ emit signalSelectionChanged(d->iconView->numberOfSelectedIndexes());
+}
+
+void ImportView::slotDispatchImageSelected()
+{
+ if (d->needDispatchSelection)
+ {
+ // the list of CamItemInfos of currently selected items, currentItem first
+ // since the iconView tracks the changes also while we are in map widget \
mode, + // we can still pull the data from the iconView
+ const CamItemInfoList list = \
d->iconView->selectedCamItemInfosCurrentFirst(); +
+ const CamItemInfoList allImages = d->iconView->CamItemInfos();
+
+ if (list.isEmpty())
+ {
+ d->StackedView->setPreviewItem();
+ emit signalImageSelected(list, false, false, allImages);
+ emit signalNoCurrentItem();
+ }
+ else
+ {
+ //TODO: d->rightSideBar->itemChanged(list);
+
+ CamItemInfo previousInfo;
+ CamItemInfo nextInfo;
+
+ if (d->StackedView->previewMode() != ImportStackedView::MapWidgetMode)
+ {
+ previousInfo = d->iconView->previousInfo(list.first());
+ nextInfo = d->iconView->nextInfo(list.first());
+ }
+
+ if ( (d->StackedView->previewMode() != \
ImportStackedView::PreviewCameraMode) + && \
(d->StackedView->previewMode() != ImportStackedView::MapWidgetMode) ) + {
+ d->StackedView->setPreviewItem(list.first(), previousInfo, \
nextInfo); + }
+
+ emit signalImageSelected(list, !previousInfo.isNull(), \
!nextInfo.isNull(), allImages); + }
+
+ d->needDispatchSelection = false;
+ }
+}
+
+double ImportView::zoomMin()
+{
+ return d->StackedView->zoomMin();
+}
+
+double ImportView::zoomMax()
+{
+ return d->StackedView->zoomMax();
+}
+
+void ImportView::setZoomFactor(double zoom)
+{
+ d->StackedView->setZoomFactorSnapped(zoom);
+}
+
+void ImportView::slotZoomFactorChanged(double zoom)
+{
+ toggleZoomActions();
+ emit signalZoomChanged(zoom);
+}
+
+void ImportView::setThumbSize(int size)
+{
+ if (d->StackedView->previewMode() == ImportStackedView::PreviewImageMode)
+ {
+ double z = DZoomBar::zoomFromSize(size, zoomMin(), zoomMax());
+ setZoomFactor(z);
+ }
+ else if (d->StackedView->previewMode() == ImportStackedView::PreviewCameraMode)
+ {
+ if (size > ThumbnailSize::Huge)
+ {
+ d->thumbSize = ThumbnailSize::Huge;
+ }
+ else if (size < ThumbnailSize::Small)
+ {
+ d->thumbSize = ThumbnailSize::Small;
+ }
+ else
+ {
+ d->thumbSize = size;
+ }
+
+ emit signalThumbSizeChanged(d->thumbSize);
+
+ d->thumbSizeTimer->start();
+ }
+}
+
+ThumbnailSize ImportView::thumbnailSize()
+{
+ return d->thumbSize;
+}
+
+void ImportView::slotThumbSizeEffect()
+{
+ qDebug() << "SETTING THUMBNAIL SIZE IN <<<IMPORT VIEW>>>";
+ d->iconView->setThumbnailSize(d->thumbSize);
+ toggleZoomActions();
+
+ ImportSettings::instance()->setDefaultIconSize(d->thumbSize);
+}
+
+void ImportView::toggleZoomActions()
+{
+ if (d->StackedView->previewMode() == ImportStackedView::PreviewImageMode)
+ {
+ d->parent->enableZoomMinusAction(true);
+ d->parent->enableZoomPlusAction(true);
+
+ if (d->StackedView->maxZoom())
+ {
+ d->parent->enableZoomPlusAction(false);
+ }
+
+ if (d->StackedView->minZoom())
+ {
+ d->parent->enableZoomMinusAction(false);
+ }
+ }
+ else if (d->StackedView->previewMode() == ImportStackedView::PreviewCameraMode)
+ {
+ d->parent->enableZoomMinusAction(true);
+ d->parent->enableZoomPlusAction(true);
+
+ if (d->thumbSize >= ThumbnailSize::Huge)
+ {
+ d->parent->enableZoomPlusAction(false);
+ }
+
+ if (d->thumbSize <= ThumbnailSize::Small)
+ {
+ d->parent->enableZoomMinusAction(false);
+ }
+ }
+ else
+ {
+ d->parent->enableZoomMinusAction(false);
+ d->parent->enableZoomPlusAction(false);
+ }
+}
+
+void ImportView::slotZoomIn()
+{
+ if (d->StackedView->previewMode() == ImportStackedView::PreviewCameraMode)
+ {
+ setThumbSize(d->thumbSize + ThumbnailSize::Step);
+ toggleZoomActions();
+ emit signalThumbSizeChanged(d->thumbSize);
+ }
+ else if (d->StackedView->previewMode() == ImportStackedView::PreviewImageMode)
+ {
+ d->StackedView->increaseZoom();
+ }
+}
+
+void ImportView::slotZoomOut()
+{
+ if (d->StackedView->previewMode() == ImportStackedView::PreviewCameraMode)
+ {
+ setThumbSize(d->thumbSize - ThumbnailSize::Step);
+ toggleZoomActions();
+ emit signalThumbSizeChanged(d->thumbSize);
+ }
+ else if (d->StackedView->previewMode() == ImportStackedView::PreviewImageMode)
+ {
+ d->StackedView->decreaseZoom();
+ }
+}
+
+void ImportView::slotZoomTo100Percents()
+{
+ if (d->StackedView->previewMode() == ImportStackedView::PreviewImageMode)
+ {
+ d->StackedView->toggleFitToWindowOr100();
+ }
+}
+
+void ImportView::slotFitToWindow()
+{
+ if (d->StackedView->previewMode() == ImportStackedView::PreviewCameraMode)
+ {
+ int nts = d->iconView->fitToWidthIcons();
+ kDebug() << "new thumb size = " << nts;
+ setThumbSize(nts);
+ toggleZoomActions();
+ emit signalThumbSizeChanged(d->thumbSize);
+ }
+ else if (d->StackedView->previewMode() == ImportStackedView::PreviewImageMode)
+ {
+ d->StackedView->fitToWindow();
+ }
+}
+
+// ----------------------------------------------------------------
+
+void ImportView::slotEscapePreview()
+{
+ if (d->StackedView->previewMode() == ImportStackedView::PreviewCameraMode)
+ //TODO: || d->StackedView->previewMode() == \
ImportStackedView::WelcomePageMode) + {
+ return;
+ }
+
+ // pass a null camera item info, because we want to fall back to the old
+ // view mode
+ slotTogglePreviewMode(CamItemInfo());
+}
+
+//void ImportView::slotMapWidgetView()
+//{
+// d->StackedView->setPreviewMode(ImportStackedView::MapWidgetMode);
+//}
+
+void ImportView::slotIconView()
+{
+ if (d->StackedView->previewMode() == ImportStackedView::PreviewImageMode)
+ {
+ emit signalThumbSizeChanged(d->iconView->thumbnailSize().size());
+ }
+
+ // and switch to icon view
+ d->StackedView->setPreviewMode(ImportStackedView::PreviewCameraMode);
+
+ // make sure the next/previous buttons are updated
+ slotImageSelected();
+}
+
+void ImportView::slotImagePreview()
+{
+ const int currentPreviewMode = d->StackedView->previewMode();
+ CamItemInfo currentInfo;
+
+ if (currentPreviewMode == ImportStackedView::PreviewCameraMode)
+ {
+ currentInfo = d->iconView->currentInfo();
+ }
+ //TODO: Implement MapWidget
+ //else if (currentPreviewMode == ImportStackedView::MapWidgetMode)
+ //{
+ // currentInfo = d->mapView->currentInfo();
+ //}
+
+ slotTogglePreviewMode(currentInfo);
+}
+
+/**
+ * @brief This method toggles between IconView/MapWidgetView and ImagePreview modes, \
depending on the context. + */
+void ImportView::slotTogglePreviewMode(const CamItemInfo& info)
+{
+ if ( (d->StackedView->previewMode() == ImportStackedView::PreviewCameraMode
+ || d->StackedView->previewMode() == ImportStackedView::MapWidgetMode)
+ && !info.isNull() )
+ {
+ d->lastPreviewMode = d->StackedView->previewMode();
+
+ if (d->StackedView->previewMode() == ImportStackedView::PreviewCameraMode)
+ {
+ d->StackedView->setPreviewItem(info, d->iconView->previousInfo(info), \
d->iconView->nextInfo(info)); + }
+ else
+ {
+ d->StackedView->setPreviewItem(info, CamItemInfo(), CamItemInfo());
+ }
+ }
+ else
+ {
+ // go back to either CameraViewMode or MapWidgetMode
+ d->StackedView->setPreviewMode( d->lastPreviewMode );
+ }
+
+ // make sure the next/previous buttons are updated
+ slotImageSelected();
+}
+
+void ImportView::slotViewModeChanged()
+{
+ toggleZoomActions();
+
+ switch (d->StackedView->previewMode())
+ {
+ case ImportStackedView::PreviewCameraMode:
+ emit signalSwitchedToIconView();
+ emit signalThumbSizeChanged(d->iconView->thumbnailSize().size());
+ break;
+ case ImportStackedView::PreviewImageMode:
+ emit signalSwitchedToPreview();
+ slotZoomFactorChanged(d->StackedView->zoomFactor());
+ break;
+ //TODO: case ImportStackedView::WelcomePageMode:
+ //emit signalSwitchedToIconView();
+ //break;
+ case ImportStackedView::MediaPlayerMode:
+ emit signalSwitchedToPreview();
+ break;
+ case ImportStackedView::MapWidgetMode:
+ emit signalSwitchedToMapView();
+ //TODO: connect map view's zoom buttons to main status bar zoom buttons
+ break;
+ }
+}
+
+void ImportView::slotImageRename()
+{
+ d->iconView->rename();
+}
+
+//FIXME: Remove these functions
+//void ImportView::slotImageDelete()
+//{
+// d->iconView->deleteSelected(false);
+//}
+
+//void ImportView::slotImageDeletePermanently()
+//{
+// d->iconView->deleteSelected(true);
+//}
+
+//void ImportView::slotImageDeletePermanentlyDirectly()
+//{
+// d->iconView->deleteSelectedDirectly(false);
+//}
+
+//void ImportView::slotImageTrashDirectly()
+//{
+// d->iconView->deleteSelectedDirectly(true);
+//}
+
+void ImportView::slotSelectAll()
+{
+ d->iconView->selectAll();
+}
+
+void ImportView::slotSelectNone()
+{
+ d->iconView->clearSelection();
+}
+
+void ImportView::slotSelectInvert()
+{
+ d->iconView->invertSelection();
+}
+
+void ImportView::slotSortImages(int sortRole)
+{
+ ImportSettings* settings = ImportSettings::instance();
+
+ if (!settings)
+ {
+ return;
+ }
+
+ settings->setImageSortOrder(sortRole);
+ d->iconView->importFilterModel()->setSortRole((CamItemSortSettings::SortRole) \
sortRole); +}
+
+void ImportView::slotSortImagesOrder(int order)
+{
+ ImportSettings* settings = ImportSettings::instance();
+
+ if (!settings)
+ {
+ return;
+ }
+
+ settings->setImageSorting(order);
+ d->iconView->importFilterModel()->setSortOrder((CamItemSortSettings::SortOrder) \
order); +}
+
+void ImportView::slotGroupImages(int categoryMode)
+{
+ ImportSettings* settings = ImportSettings::instance();
+
+ if (!settings)
+ {
+ return;
+ }
+
+ settings->setImageGroupMode(categoryMode);
+ d->iconView->importFilterModel()->setCategorizationMode((CamItemSortSettings::CategorizationMode) \
categoryMode); +}
+
+void ImportView::slotLeftSidebarChangedTab(QWidget* w)
+{
+ // TODO update, temporary cast
+ SidebarWidget* widget = dynamic_cast<SidebarWidget*> (w);
+ foreach(SidebarWidget* sideBarWidget, d->leftSideBarWidgets)
+ {
+ bool active = (widget && (widget == sideBarWidget));
+ sideBarWidget->setActive(active);
+ }
+}
+
+void ImportView::slotSidebarTabTitleStyleChanged()
+{
+ //d->leftSideBar->setStyle(ImportSettings::instance()->getSidebarTitleStyle());
+ //TODO: d->rightSideBar->setStyle(ImportSettings::instance()->getSidebarTitleStyle());
+
+ /// @todo Which settings actually have to be reloaded?
+ // d->rightSideBar->applySettings();
+}
+
+void ImportView::toggleShowBar(bool b)
+{
+ //REMd->StackedView->thumbBarDock()->showThumbBar(b);
+}
+
+bool ImportView::isThumbBarVisible()
+{
+ //REMreturn d->StackedView->thumbBarDock()->isVisible();
+ return false;//REM
+}
+
+void ImportView::slotImageChangeFailed(const QString& message, const QStringList& \
fileNames) +{
+ if (fileNames.isEmpty())
+ {
+ return;
+ }
+
+ KMessageBox::errorList(0, message, fileNames);
+}
+
+void ImportView::slotLeftSideBarActivate(SidebarWidget* widget)
+{
+ d->leftSideBar->setActiveTab(widget);
+}
+
+void ImportView::slotLeftSideBarActivate(QWidget* widget)
+{
+ slotLeftSideBarActivate(static_cast<SidebarWidget*>(widget));
+}
+
+bool ImportView::hasCurrentItem() const
+{
+ // We should actually get this directly from the selection model,
+ // but the iconView is fine for now.
+ return !d->iconView->currentInfo().isNull();
+}
+
+//void ImportView::slotImageExifOrientation(int orientation)
+//{
+// FileActionMngr::instance()->setExifOrientation(d->iconView->selectedCamItemInfos(), \
orientation); +//}
+
+//void ImportView::imageTransform(KExiv2Iface::RotationMatrix::TransformationAction \
transform) +//{
+// FileActionMngr::instance()->transform(d->iconView->selectedCamItemInfos(), \
transform); +//}
+
+} // namespace Digikam
diff --git a/utilities/cameragui/views/importview.h \
b/utilities/cameragui/views/importview.h new file mode 100644
index 0000000..06f5aba
--- /dev/null
+++ b/utilities/cameragui/views/importview.h
@@ -0,0 +1,133 @@
+#ifndef IMPORTVIEW_H
+#define IMPORTVIEW_H
+
+// KDE includes
+
+#include <KHBox>
+
+// Local includes
+
+#include "camiteminfo.h"
+#include "sidebarwidget.h"
+#include "cameraui.h"
+#include "models/importmodel.h"
+
+namespace Digikam
+{
+
+class CameraUI;
+
+class ImportView : public KHBox
+{
+ Q_OBJECT
+
+public:
+
+ ImportView(CameraUI* ui, QWidget* parent);
+ ~ImportView();
+
+ void applySettings();
+ void refreshView();
+ void clearHistory();
+ void getForwardHistory(QStringList& titles);
+ void getBackwardHistory(QStringList& titles);
+ void showSideBars();
+ void hideSideBars();
+ void setThumbSize(int size);
+ void toggleShowBar(bool);
+ bool isThumbBarVisible();
+
+ KUrl::List allUrls() const;
+ KUrl::List selectedUrls() const;
+ bool hasCurrentItem() const;
+
+ double zoomMin();
+ double zoomMax();
+
+ ThumbnailSize thumbnailSize();
+
+ QList<SidebarWidget*> leftSidebarWidgets();
+
+Q_SIGNALS:
+
+ void signalImageSelected(const CamItemInfoList& selectedImage, bool hasPrevious, \
bool hasNext, + const CamItemInfoList& allImages);
+ void signalNoCurrentItem();
+ void signalSelectionChanged(int numberOfSelectedItems);
+ void signalThumbSizeChanged(int);
+ void signalZoomChanged(double);
+ void signalSwitchedToPreview();
+ void signalSwitchedToIconView();
+ void signalSwitchedToMapView();
+
+public Q_SLOTS:
+
+ void setZoomFactor(double zoom);
+
+ // View Action slots
+ void slotZoomIn();
+ void slotZoomOut();
+ void slotZoomTo100Percents();
+ void slotFitToWindow();
+
+ void slotImagePreview();
+ //TODO: void slotMapWidgetView();
+ void slotIconView();
+
+ void slotSelectAll();
+ void slotSelectNone();
+ void slotSelectInvert();
+
+ void slotImageRename();
+ //void slotImageDelete();
+ //void slotImageDeletePermanently();
+ //void slotImageDeletePermanentlyDirectly();
+ //void slotImageTrashDirectly();
+
+ void slotSortImages(int order);
+ void slotSortImagesOrder(int order);
+ void slotGroupImages(int mode);
+
+ void slotLeftSideBarActivate(QWidget* widget);
+ void slotLeftSideBarActivate(SidebarWidget* widget);
+
+private Q_SLOTS:
+
+ void slotImageSelected();
+ void slotTogglePreviewMode(const CamItemInfo& info);
+ void slotDispatchImageSelected();
+
+ void slotLeftSidebarChangedTab(QWidget* w);
+
+ void slotFirstItem();
+ void slotPrevItem();
+ void slotNextItem();
+ void slotLastItem();
+ void slotSelectItemByUrl(const KUrl&);
+
+ void slotViewModeChanged();
+ void slotEscapePreview();
+
+ void slotThumbSizeEffect();
+ void slotZoomFactorChanged(double);
+
+ void slotSidebarTabTitleStyleChanged();
+
+ void slotImageChangeFailed(const QString& message, const QStringList& \
fileNames); +
+private:
+
+ void toggleZoomActions();
+ void setupConnections();
+ void loadViewState();
+ void saveViewState();
+
+private:
+
+ class ImportViewPriv;
+ ImportViewPriv* const d;
+};
+
+} // namespace Digikam
+
+#endif // IMPORTVIEW_H
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic