[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: =?utf-8?q?=5Bdigikam/development/2=2E0=5D_/=3A_Implement_manuall?=
From: Marcel Wiesweg <marcel.wiesweg () gmx ! de>
Date: 2011-03-05 12:40:26
Message-ID: 20110305124026.77097A60D3 () git ! kde ! org
[Download RAW message or body]
Git commit 1f9a1bbb4e1e64b73f52e1f42260a5c9b05c4e53 by Marcel Wiesweg.
Committed on 05/03/2011 at 13:39.
Pushed by mwiesweg into branch 'development/2.0'.
Implement manually adding a face
BUG: 262574
M +3 -1 NEWS
M +88 -22 utilities/facedetection/facegroup.cpp
M +4 -0 utilities/facedetection/facegroup.h
http://commits.kde.org/digikam/1f9a1bbb4e1e64b73f52e1f42260a5c9b05c4e53
diff --git a/NEWS b/NEWS
index 1bbd642..b5195c1 100644
--- a/NEWS
+++ b/NEWS
@@ -80,5 +80,7 @@ BUGFIXES FROM KDE BUGZILLA (alias B.K.O | http://bugs.kde.org):
058 ==> 266327 : Move libkexiv2 to git.
059 ==> 267361 : When using the luminosity curve in the image editor on an initial \
import from NEF, all changes are irreversible and cumulative. 060 ==> 266733 : \
digiKam crashes on startup on OS X.
-061 ==>
+061 ==> 262574 : Add a face tag does not do anything.
+062 ==>
+
diff --git a/utilities/facedetection/facegroup.cpp \
b/utilities/facedetection/facegroup.cpp index 963f613..206313d 100644
--- a/utilities/facedetection/facegroup.cpp
+++ b/utilities/facedetection/facegroup.cpp
@@ -39,6 +39,7 @@
#include "albumfiltermodel.h"
#include "albummanager.h"
#include "assignnamewidget.h"
+#include "clickdragreleaseitem.h"
#include "dimgpreviewitem.h"
#include "faceiface.h"
#include "facepipeline.h"
@@ -105,6 +106,8 @@ void FaceItem::setHudWidget(AssignNameWidget* widget)
m_widget = widget;
updateCurrentTag();
RegionFrameItem::setHudWidget(widget);
+ // Ensure that all HUD widgets are stacked before the frame items
+ hudWidget()->setZValue(1);
}
AssignNameWidget* FaceItem::widget() const
@@ -170,6 +173,8 @@ public:
view = 0;
autoSuggest = false;
showOnHover = false;
+ manuallyAddWrapItem = 0;
+ manuallyAddedItem = 0;
visibilityController = 0;
state = NoFaces;
tagModel = 0;
@@ -179,6 +184,7 @@ public:
void applyVisible();
FaceItem* createItem(const DatabaseFace& face);
+ FaceItem* addItem(const DatabaseFace& face);
AssignNameWidget* createAssignNameWidget(const DatabaseFace& face, \
const QVariant& identifier); AssignNameWidget::Mode \
assignWidgetMode(DatabaseFace::Type type); void checkModels();
@@ -193,6 +199,9 @@ public:
QList<FaceItem*> items;
+ ClickDragReleaseItem* manuallyAddWrapItem;
+ FaceItem* manuallyAddedItem;
+
FaceGroupState state;
ItemVisibilityController* visibilityController;
@@ -498,6 +507,21 @@ FaceItem* FaceGroup::FaceGroupPriv::createItem(const \
DatabaseFace& face) return item;
}
+FaceItem* FaceGroup::FaceGroupPriv::addItem(const DatabaseFace& face)
+{
+ FaceItem* item = createItem(face);
+
+ // for identification, use index in our list
+ AssignNameWidget* assignWidget = createAssignNameWidget(face, items.size());
+ item->setHudWidget(assignWidget);
+ //new StyleSheetDebugger(assignWidget);
+
+ visibilityController->addItem(item);
+
+ items << item;
+ return item;
+}
+
void FaceGroup::FaceGroupPriv::checkModels()
{
if (!tagModel)
@@ -573,16 +597,7 @@ void FaceGroup::load()
foreach (const DatabaseFace& face, faces)
{
- FaceItem* item = d->createItem(face);
-
- // for identification, use index in our list
- AssignNameWidget* assignWidget = d->createAssignNameWidget(face, \
d->items.size());
- item->setHudWidget(assignWidget);
- //new StyleSheetDebugger(assignWidget);
-
- d->visibilityController->addItem(item);
-
- d->items << item;
+ d->addItem(face);
}
d->state = FacesLoaded;
@@ -595,6 +610,7 @@ void FaceGroup::load()
void FaceGroup::clear()
{
+ cancelAddItem();
d->visibilityController->clear();
foreach (RegionFrameItem* item, d->items)
{
@@ -604,18 +620,6 @@ void FaceGroup::clear()
d->state = NoFaces;
}
-void FaceGroup::addFace()
-{
- /*
- int w = this->scene()->width()/2;
- int h = w;
- int x = this->scene()->width()/2 - w/2;
- int y = this->scene()->height()/2 - w/2;
-
- d->faceitems.append(new FaceItem(0, this->scene(), QRect(x, y, w, h), \
d->scale , "", d->scale));
- */
-}
-
void FaceGroup::rejectAll()
{
}
@@ -686,6 +690,68 @@ void FaceGroup::startAutoSuggest()
}
}
+void FaceGroup::addFace()
+{
+ d->manuallyAddWrapItem = new ClickDragReleaseItem(d->view->previewItem());
+ d->manuallyAddWrapItem->setFocus();
+
+ connect(d->manuallyAddWrapItem, SIGNAL(started(const QPointF&)),
+ this, SLOT(slotAddItemStarted(const QPointF&)));
+
+ connect(d->manuallyAddWrapItem, SIGNAL(moving(const QRectF&)),
+ this, SLOT(slotAddItemMoving(const QRectF&)));
+
+ connect(d->manuallyAddWrapItem, SIGNAL(finished(const QRectF&)),
+ this, SLOT(slotAddItemFinished(const QRectF&)));
+
+ connect(d->manuallyAddWrapItem, SIGNAL(cancelled()),
+ this, SLOT(cancelAddItem()));
+}
+
+void FaceGroup::slotAddItemStarted(const QPointF& pos)
+{
+ Q_UNUSED(pos);
+}
+
+void FaceGroup::slotAddItemMoving(const QRectF& rect)
+{
+ if (!d->manuallyAddedItem)
+ {
+ d->manuallyAddedItem = d->createItem(DatabaseFace());
+ d->visibilityController->addItem(d->manuallyAddedItem);
+ d->visibilityController->showItem(d->manuallyAddedItem);
+ }
+ d->manuallyAddedItem->setRectInSceneCoordinates(rect);
+}
+
+void FaceGroup::slotAddItemFinished(const QRectF& rect)
+{
+ if (d->manuallyAddedItem)
+ {
+ d->manuallyAddedItem->setRectInSceneCoordinates(rect);
+ DatabaseFace face = \
d->faceIface.addUnknownManually(d->view->previewItem()->image(), + \
d->info.id(), + \
d->manuallyAddedItem->originalRect()); + FaceItem* item = d->addItem(face);
+ d->visibilityController->setItemDirectlyVisible(item, true);
+ d->manuallyAddWrapItem->stackBefore(item);
+ }
+ cancelAddItem();
+}
+
+void FaceGroup::cancelAddItem()
+{
+ delete d->manuallyAddedItem;
+ d->manuallyAddedItem = 0;
+
+ if (d->manuallyAddWrapItem)
+ {
+ d->view->scene()->removeItem(d->manuallyAddWrapItem);
+ d->manuallyAddWrapItem->deleteLater();
+ d->manuallyAddWrapItem = 0;
+ }
+}
+
/*
void ImagePreviewView::trainFaces()
{
diff --git a/utilities/facedetection/facegroup.h \
b/utilities/facedetection/facegroup.h index 28595c3..70270e5 100644
--- a/utilities/facedetection/facegroup.h
+++ b/utilities/facedetection/facegroup.h
@@ -123,6 +123,10 @@ protected Q_SLOTS:
void slotAssigned(const TaggingAction& action, const ImageInfo& info, const \
QVariant& faceIdentifier);
void slotRejected(const ImageInfo& info, const QVariant& faceIdentifier);
void slotLabelClicked(const ImageInfo& info, const QVariant& faceIdentifier);
+ void slotAddItemStarted(const QPointF& pos);
+ void slotAddItemMoving(const QRectF& rect);
+ void slotAddItemFinished(const QRectF& rect);
+ void cancelAddItem();
private:
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic