[Digikam-devel] extragear/graphics/digikam/digikam
Gilles Caulier
caulier.gilles at gmail.com
Mon May 19 14:22:43 BST 2008
SVN commit 809790 by cgilles:
digiKam from trunk : enable fuzzy search view based on a drawing sketch. Not yet suitable.
MOCUP: http://digikam3rdparty.free.fr/Screenshots/temp/sketchfuzzysearch.png
CCMAIL: marcel.wiesweg at gmx.de
CCMAIL: digikam-devel at kde.org
M +5 -0 digikamview.cpp
M +82 -2 fuzzysearchview.cpp
M +8 -3 fuzzysearchview.h
M +8 -2 sketchwidget.cpp
M +9 -4 sketchwidget.h
--- trunk/extragear/graphics/digikam/digikam/digikamview.cpp #809789:809790
@@ -78,6 +78,7 @@
#include "imagepreviewview.h"
#include "datefolderview.h"
#include "tagfolderview.h"
+#include "fuzzysearchview.h"
#include "searchfolderview.h"
#include "searchtabheader.h"
#include "statusprogressbar.h"
@@ -124,6 +125,7 @@
albumWidgetStack = 0;
selectionTimer = 0;
thumbSizeTimer = 0;
+ fuzzySearchView = 0;
needDispatchSelection = false;
cancelSlideShow = false;
thumbSize = ThumbnailSize::Medium;
@@ -167,6 +169,7 @@
SearchFolderView *searchFolderView;
SearchTabHeader *searchTabHeader;
TagFilterView *tagFilterView;
+ FuzzySearchView *fuzzySearchView;
};
DigikamView::DigikamView(QWidget *parent)
@@ -222,12 +225,14 @@
d->dateFolderView = new DateFolderView(this);
d->timeLineView = new TimeLineView(this);
+ d->fuzzySearchView = new FuzzySearchView(this);
d->leftSideBar->appendTab(d->folderBox, SmallIcon("folder-image"), i18n("Albums"));
d->leftSideBar->appendTab(d->dateFolderView, SmallIcon("view-calendar-list"), i18n("Calendar"));
d->leftSideBar->appendTab(d->tagBox, SmallIcon("tag"), i18n("Tags"));
d->leftSideBar->appendTab(d->timeLineView, SmallIcon("clock"), i18n("Timeline"));
d->leftSideBar->appendTab(d->searchBox, SmallIcon("edit-find"), i18n("Searches"));
+ d->leftSideBar->appendTab(d->fuzzySearchView, SmallIcon("tools-wizard"), i18n("Fuzzy Searches"));
// To the right.
--- trunk/extragear/graphics/digikam/digikam/fuzzysearchview.cpp #809789:809790
@@ -37,6 +37,9 @@
#include <kapplication.h>
#include <kstandarddirs.h>
#include <kmessagebox.h>
+#include <khuesaturationselect.h>
+#include <kcolorvalueselector.h>
+#include <knuminput.h>
// Local includes.
@@ -58,9 +61,21 @@
FuzzySearchViewPriv()
{
sketchWidget = 0;
+ hsSelector = 0;
+ vSelector = 0;
+ penSize = 0;
+ clearButton = 0;
}
- SketchWidget *sketchWidget;
+ QPushButton *clearButton;
+
+ KIntNumInput *penSize;
+
+ KHueSaturationSelector *hsSelector;
+
+ KColorValueSelector *vSelector;
+
+ SketchWidget *sketchWidget;
};
FuzzySearchView::FuzzySearchView(QWidget *parent)
@@ -76,13 +91,52 @@
// ---------------------------------------------------------------
d->sketchWidget = new SketchWidget(this);
+ d->hsSelector = new KHueSaturationSelector(this);
+ d->vSelector = new KColorValueSelector(this);
+ d->hsSelector->setMinimumSize(200, 142);
+ d->vSelector->setMinimumSize(26, 142);
// ---------------------------------------------------------------
+ d->penSize = new KIntNumInput(this);
+ d->penSize->setRange(1, 40, 1);
+ d->penSize->setSliderEnabled(true);
+ d->penSize->setValue(10);
+ d->penSize->setWhatsThis(i18n("<p>Set here the brush size in pixels used to draw sketch."));
+
+ // ---------------------------------------------------------------
+
+ d->clearButton = new QPushButton(i18n("Clear"), this);
+ d->clearButton->setWhatsThis(i18n("<p>Use this button to clear sketch contents."));
+
+ // ---------------------------------------------------------------
+
grid->addWidget(d->sketchWidget, 0, 0, 1, 2);
- grid->setRowStretch(1, 10);
+ grid->addWidget(d->hsSelector, 1, 0, 1, 1);
+ grid->addWidget(d->vSelector, 1, 1, 1, 1);
+ grid->addWidget(d->penSize, 2, 0, 1, 2);
+ grid->addWidget(d->clearButton, 3, 0, 1, 2);
+ grid->setRowStretch(4, 10);
+ grid->setColumnStretch(0, 10);
grid->setMargin(KDialog::spacingHint());
grid->setSpacing(KDialog::spacingHint());
+
+ // ---------------------------------------------------------------
+
+ connect(d->hsSelector, SIGNAL(valueChanged(int, int)),
+ this, SLOT(slotHSChanged(int, int)));
+
+ connect(d->vSelector, SIGNAL(valueChanged(int)),
+ this, SLOT(slotVChanged()));
+
+ connect(d->penSize, SIGNAL(valueChanged(int)),
+ d->sketchWidget, SLOT(setPenWidth(int)));
+
+ connect(d->clearButton, SIGNAL(clicked()),
+ d->sketchWidget, SLOT(slotClear()));
+
+ connect(d->sketchWidget, SIGNAL(signalSketchChanged(const QImage&)),
+ this, SLOT(slotSketchChanged(const QImage&)));
}
FuzzySearchView::~FuzzySearchView()
@@ -91,6 +145,32 @@
delete d;
}
+void FuzzySearchView::slotHSChanged(int h, int s)
+{
+ d->vSelector->blockSignals(true);
+ d->vSelector->setHue(h);
+ d->vSelector->setSaturation(s);
+ d->vSelector->updateContents();
+ d->vSelector->repaint();
+ d->vSelector->blockSignals(false);
+ slotVChanged();
+}
+
+void FuzzySearchView::slotVChanged()
+{
+ int hue = d->hsSelector->xValue();
+ int sat = d->hsSelector->yValue();
+ int val = d->vSelector->value();
+ QColor color = QColor::fromHsv(hue, sat, val);
+
+ d->sketchWidget->setPenColor(color);
+}
+
+void FuzzySearchView::slotSketchChanged(const QImage& /*img*/)
+{
+ // TODO: query database here !
+}
+
void FuzzySearchView::readConfig()
{
/* KSharedConfig::Ptr config = KGlobal::config();
--- trunk/extragear/graphics/digikam/digikam/fuzzysearchview.h #809789:809790
@@ -26,9 +26,8 @@
// Qt includes.
-#include <QDateTime>
#include <QFrame>
-#include <QString>
+#include <QImage>
namespace Digikam
{
@@ -51,9 +50,15 @@
void readConfig();
void writeConfig();
+private slots:
+
+ void slotHSChanged(int h, int s);
+ void slotVChanged();
+ void slotSketchChanged(const QImage&);
+
private:
- FuzzySearchViewPriv* d;
+ FuzzySearchViewPriv *d;
};
} // NameSpace Digikam
--- trunk/extragear/graphics/digikam/digikam/sketchwidget.cpp #809789:809790
@@ -66,7 +66,7 @@
setAttribute(Qt::WA_StaticContents);
setFixedSize(256, 256);
- clearSketch();
+ slotClear();
}
SketchWidget::~SketchWidget()
@@ -84,6 +84,11 @@
return d->penWidth;
}
+QImage SketchWidget::sketchImage() const
+{
+ return d->pixmap.toImage();
+}
+
void SketchWidget::setPenColor(const QColor &newColor)
{
d->penColor = newColor;
@@ -94,7 +99,7 @@
d->penWidth = newWidth;
}
-void SketchWidget::clearSketch()
+void SketchWidget::slotClear()
{
d->pixmap.fill(qRgb(255, 255, 255));
update();
@@ -121,6 +126,7 @@
{
drawLineTo(event->pos());
d->drawing = false;
+ emit signalSketchChanged(sketchImage());
}
}
--- trunk/extragear/graphics/digikam/digikam/sketchwidget.h #809789:809790
@@ -42,15 +42,20 @@
SketchWidget(QWidget *parent=0);
~SketchWidget();
- void setPenColor(const QColor& newColor);
QColor penColor() const;
-
- void setPenWidth(int newWidth);
int penWidth() const;
+ QImage sketchImage() const;
+
+signals:
+
+ void signalSketchChanged(const QImage&);
+
public slots:
- void clearSketch();
+ void setPenColor(const QColor& newColor);
+ void setPenWidth(int newWidth);
+ void slotClear();
protected:
More information about the Digikam-devel
mailing list