SVN commit 741799 by cgilles:
digiKam from KDE3 branch : optimize space everywhere when Search Text Bar is used. No need a label on the left of line edit. We use a gray text into edit field like Amarok. When user take focus on edit field, gray text desappear. When focus go out, gray text re-appear. CCMAIL: [hidden email] M +98 -8 searchtextbar.cpp M +35 -1 searchtextbar.h --- branches/extragear/kde3/graphics/digikam/libs/widgets/common/searchtextbar.cpp #741798:741799 @@ -4,7 +4,7 @@ * http://www.digikam.org * * Date : 2007-11-25 - * Description : a bar used to search a text somewhere. + * Description : a bar used to search a string. * * Copyright (C) 2007 by Gilles Caulier <caulier dot gilles at gmail dot com> * @@ -25,6 +25,7 @@ #include <qcolor.h> #include <qpalette.h> +#include <qpainter.h> #include <qlabel.h> #include <qlayout.h> #include <qtoolbutton.h> @@ -34,7 +35,6 @@ #include <kapplication.h> #include <kiconloader.h> #include <klocale.h> -#include <klineedit.h> #include <kdialogbase.h> // Local includes @@ -45,6 +45,101 @@ namespace Digikam { +class DLineEditPriv +{ +public: + + DLineEditPriv() + { + drawMsg = true; + } + + bool drawMsg; + + QString message; +}; + +DLineEdit::DLineEdit(const QString &msg, QWidget *parent) + : KLineEdit(parent) +{ + d = new DLineEditPriv; + setClickMessage(msg); +} + +DLineEdit::~DLineEdit() +{ + delete d; +} + +void DLineEdit::setClickMessage(const QString &msg) +{ + d->message = msg; + repaint(); +} + +void DLineEdit::setDrawMessage(bool draw) +{ + d->drawMsg = draw; + repaint(); +} + +bool DLineEdit::drawMessage() const +{ + return d->drawMsg; +} + +void DLineEdit::setText(const QString &txt) +{ + d->drawMsg = txt.isEmpty(); + repaint(); + KLineEdit::setText(txt); +} + +void DLineEdit::drawContents(QPainter *p) +{ + KLineEdit::drawContents(p); + + if (d->drawMsg && !hasFocus()) + { + QPen tmp = p->pen(); + p->setPen(palette().color( QPalette::Disabled, QColorGroup::Text)); + QRect cr = contentsRect(); + + // Add two pixel margin on the left side + cr.rLeft() += 3; + p->drawText( cr, AlignAuto | AlignVCenter, d->message ); + p->setPen( tmp ); + } +} + +void DLineEdit::dropEvent(QDropEvent *e) +{ + d->drawMsg = false; + KLineEdit::dropEvent(e); +} + +void DLineEdit::focusInEvent(QFocusEvent *e) +{ + if (d->drawMsg) + { + d->drawMsg = false; + repaint(); + } + QLineEdit::focusInEvent(e); +} + +void DLineEdit::focusOutEvent(QFocusEvent *e) +{ + if (text().isEmpty()) + { + d->drawMsg = true; + repaint(); + } + QLineEdit::focusOutEvent(e); +} + +// --------------------------------------------------------------------- + class SearchTextBarPriv { public: @@ -52,12 +147,9 @@ SearchTextBarPriv() { searchEdit = 0; - searchLabel = 0; clearButton = 0; } - QLabel *searchLabel; - QToolButton *clearButton; KLineEdit *searchEdit; @@ -77,13 +169,11 @@ d->clearButton->setIconSet(kapp->iconLoader()->loadIcon("clear_left", KIcon::Toolbar, KIcon::SizeSmall)); - d->searchLabel = new QLabel(i18n("Search:"), this); - d->searchEdit = new KLineEdit(this); + d->searchEdit = new DLineEdit(i18n("Search..."), this); d->searchEdit->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); hlay->setSpacing(0); hlay->setMargin(0); - hlay->addWidget(d->searchLabel); hlay->addWidget(d->searchEdit); hlay->addWidget(d->clearButton); --- branches/extragear/kde3/graphics/digikam/libs/widgets/common/searchtextbar.h #741798:741799 @@ -4,7 +4,7 @@ * http://www.digikam.org * * Date : 2007-11-25 - * Description : a bar used to search a text somewhere. + * Description : a bar used to search a string. * * Copyright (C) 2007 by Gilles Caulier <caulier dot gilles at gmail dot com> * @@ -29,6 +29,10 @@ #include <qwidget.h> #include <qstring.h> +// KDE includes. + +#include <klineedit.h> + // Local includes. #include "digikam_export.h" @@ -36,8 +40,38 @@ namespace Digikam { +class DLineEditPriv; class SearchTextBarPriv; +class DIGIKAM_EXPORT DLineEdit : public KLineEdit +{ + Q_OBJECT + +public: + + DLineEdit(const QString &msg, QWidget *parent); + ~DLineEdit(); + + void setClickMessage(const QString &msg); + QString clickMessage() const; + + void setDrawMessage(bool draw); + bool drawMessage() const; + + void setText(const QString& txt); + +protected: + + void drawContents(QPainter *p); + void dropEvent(QDropEvent *e); + void focusInEvent(QFocusEvent *e); + void focusOutEvent(QFocusEvent *e); + +private : + + DLineEditPriv* d; +}; + class DIGIKAM_EXPORT SearchTextBar : public QWidget { Q_OBJECT _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
Free forum by Nabble | Edit this page |