1 | /*************************************************************************** |
2 | * Copyright (C) 2005-2014 by the Quassel Project * |
3 | * devel@quassel-irc.org * |
4 | * * |
5 | * This program is free software; you can redistribute it and/or modify * |
6 | * it under the terms of the GNU General Public License as published by * |
7 | * the Free Software Foundation; either version 2 of the License, or * |
8 | * (at your option) version 3. * |
9 | * * |
10 | * This program is distributed in the hope that it will be useful, * |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
13 | * GNU General Public License for more details. * |
14 | * * |
15 | * You should have received a copy of the GNU General Public License * |
16 | * along with this program; if not, write to the * |
17 | * Free Software Foundation, Inc., * |
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * |
19 | ***************************************************************************/ |
20 | |
21 | #include "clearablelineedit.h" |
22 | |
23 | #include <QToolButton> |
24 | #include <QStyle> |
25 | |
26 | #include "iconloader.h" |
27 | |
28 | ClearableLineEdit::ClearableLineEdit(QWidget *parent) |
29 | : QLineEdit(parent) |
30 | { |
31 | clearButton = new QToolButton(this); |
32 | clearButton->setIcon(SmallIcon("edit-clear-locationbar-rtl" )); |
33 | #ifndef Q_WS_QWS |
34 | clearButton->setCursor(Qt::ArrowCursor); |
35 | #endif |
36 | clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }" ); |
37 | clearButton->hide(); |
38 | |
39 | connect(clearButton, SIGNAL(clicked()), this, SLOT(clear())); |
40 | connect(this, SIGNAL(textChanged(const QString &)), this, SLOT(updateClearButton(const QString &))); |
41 | |
42 | int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); |
43 | setStyleSheet(QString("QLineEdit { padding-right: %1px; } " ).arg(clearButton->sizeHint().width() + frameWidth + 1)); |
44 | QSize msz = minimumSizeHint(); |
45 | setMinimumSize(qMax(msz.width(), clearButton->sizeHint().height() + frameWidth * 2 + 2), |
46 | qMax(msz.height(), clearButton->sizeHint().height() + frameWidth * 2 + 2)); |
47 | } |
48 | |
49 | |
50 | void ClearableLineEdit::resizeEvent(QResizeEvent *) |
51 | { |
52 | QSize size = clearButton->sizeHint(); |
53 | int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); |
54 | clearButton->move(rect().right() - frameWidth - size.width(), |
55 | (rect().bottom() + 1 - size.height())/2); |
56 | } |
57 | |
58 | |
59 | void ClearableLineEdit::updateClearButton(const QString &text) |
60 | { |
61 | clearButton->setVisible(!text.isEmpty()); |
62 | } |
63 | |