Applets
searchbar.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "ui/searchbar.h"
00022
00023
00024 #include <QCoreApplication>
00025 #include <QDir>
00026 #include <QFileInfo>
00027 #include <QHBoxLayout>
00028 #include <QKeyEvent>
00029 #include <QLabel>
00030 #include <QPainter>
00031 #include <QTimer>
00032
00033
00034 #include <KIcon>
00035 #include <KIconLoader>
00036 #include <KLineEdit>
00037 #include <KLocalizedString>
00038
00039
00040 #include <Plasma/Theme>
00041
00042 #include "ui/itemdelegate.h"
00043
00044 using namespace Kickoff;
00045
00046 class SearchBar::Private
00047 {
00048 public:
00049 Private() : editWidget(0), timer(0) {}
00050
00051 KLineEdit *editWidget;
00052 QLabel *searchLabel;
00053 QTimer *timer;
00054 };
00055
00056 SearchBar::SearchBar(QWidget *parent)
00057 : QWidget(parent)
00058 , d(new Private)
00059 {
00060
00061 d->timer = new QTimer(this);
00062 d->timer->setInterval(300);
00063 d->timer->setSingleShot(true);
00064 connect(d->timer, SIGNAL(timeout()), this, SLOT(updateTimerExpired()));
00065 connect(this, SIGNAL(startUpdateTimer()), d->timer, SLOT(start()));
00066
00067
00068 QHBoxLayout *layout = new QHBoxLayout;
00069 layout->setMargin(3);
00070 layout->setSpacing(0);
00071
00072 d->searchLabel = new QLabel(i18n("Search:"), this);
00073 QLabel *searchIcon = new QLabel(this);
00074
00075 QFileInfo fi(QDir(QDir::homePath()), ".face.icon");
00076 if (fi.exists()) {
00077 searchIcon->setPixmap(QPixmap(fi.absoluteFilePath()).scaled(KIconLoader::SizeMedium, KIconLoader::SizeMedium, Qt::KeepAspectRatio));
00078 } else {
00079 searchIcon->setPixmap(KIcon("system-search").pixmap(KIconLoader::SizeMedium, KIconLoader::SizeMedium));
00080 }
00081
00082 d->editWidget = new KLineEdit(this);
00083 d->editWidget->installEventFilter(this);
00084 d->editWidget->setClearButtonShown(true);
00085 connect(d->editWidget, SIGNAL(textChanged(QString)), this, SIGNAL(startUpdateTimer()));
00086
00087
00088 layout->addSpacing(2);
00089 layout->addWidget(searchIcon);
00090 layout->addSpacing(5);
00091 layout->addWidget(d->searchLabel);
00092 layout->addSpacing(5);
00093 layout->addWidget(d->editWidget);
00094 setLayout(layout);
00095
00096 setFocusProxy(d->editWidget);
00097
00098 updateThemedPalette();
00099 connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
00100 this, SLOT(updateThemedPalette()));
00101 }
00102
00103 void SearchBar::updateThemedPalette()
00104 {
00105 QColor color = Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor);
00106 QPalette p = d->searchLabel->palette();
00107 p.setColor(QPalette::Normal, QPalette::WindowText, color);
00108 p.setColor(QPalette::Inactive, QPalette::WindowText, color);
00109 d->searchLabel->setPalette(p);
00110 }
00111
00112 void SearchBar::updateTimerExpired()
00113 {
00114 emit queryChanged(d->editWidget->text());
00115 }
00116
00117 SearchBar::~SearchBar()
00118 {
00119 delete d;
00120 }
00121
00122 bool SearchBar::eventFilter(QObject *watched, QEvent *event)
00123 {
00124
00125
00126
00127
00128 if (watched == d->editWidget && event->type() == QEvent::KeyPress) {
00129 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
00130 if ((keyEvent->key() == Qt::Key_Left || keyEvent->key() == Qt::Key_Right) &&
00131 d->editWidget->text().isEmpty()) {
00132 QCoreApplication::sendEvent(this, event);
00133 return true;
00134 }
00135 }
00136 return false;
00137 }
00138
00139 void SearchBar::clear()
00140 {
00141 d->editWidget->clear();
00142 }
00143
00144 #include "searchbar.moc"