diff --git a/share/icons/application/22x22/action/edit-clear-locationbar-rtl.png b/share/icons/application/22x22/action/edit-clear-locationbar-rtl.png new file mode 100644 index 00000000..80ff24af Binary files /dev/null and b/share/icons/application/22x22/action/edit-clear-locationbar-rtl.png differ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2644103c..762f28c5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -64,6 +64,7 @@ set(keepassx_SOURCES gui/FileDialog.cpp gui/IconModels.cpp gui/KeePass1OpenDialog.cpp + gui/LineEdit.cpp gui/MainWindow.cpp gui/entry/EditEntryWidget.cpp gui/entry/EntryAttachmentsModel.cpp @@ -102,6 +103,7 @@ set(keepassx_MOC gui/EditWidget.h gui/EditWidgetIcons.h gui/IconModels.h + gui/LineEdit.h gui/MainWindow.h gui/entry/EditEntryWidget.h gui/entry/EntryAttachmentsModel.h diff --git a/src/gui/LineEdit.cpp b/src/gui/LineEdit.cpp new file mode 100644 index 00000000..4879fdeb --- /dev/null +++ b/src/gui/LineEdit.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (c) 2007 Trolltech ASA +** +** Use, modification and distribution is allowed without limitation, +** warranty, liability or support of any kind. +** +****************************************************************************/ + +#include "LineEdit.h" + +#include +#include + +#include "core/DataPath.h" + +LineEdit::LineEdit(QWidget* parent) + : QLineEdit(parent) +{ + clearButton = new QToolButton(this); + clearButton->setObjectName("clearButton"); + QIcon icon = dataPath()->icon("action", "edit-clear-locationbar-rtl"); + clearButton->setIcon(icon); + clearButton->setCursor(Qt::ArrowCursor); + clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }"); + clearButton->hide(); + connect(clearButton, SIGNAL(clicked()), this, SLOT(clear())); + connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(updateCloseButton(const QString&))); + int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + setStyleSheet(QString("QLineEdit { padding-right: %1px; } ") + .arg(clearButton->sizeHint().width() + frameWidth + 1)); + QSize msz = minimumSizeHint(); + setMinimumSize(qMax(msz.width(), clearButton->sizeHint().height() + frameWidth * 2 + 2), + qMax(msz.height(), clearButton->sizeHint().height() + frameWidth * 2 + 2)); +} + +void LineEdit::resizeEvent(QResizeEvent*) +{ + QSize sz = clearButton->sizeHint(); + int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + clearButton->move(rect().right() - frameWidth - sz.width(), + (rect().bottom() + 1 - sz.height())/2); +} + +void LineEdit::updateCloseButton(const QString& text) +{ + clearButton->setVisible(!text.isEmpty()); +} + + diff --git a/src/gui/LineEdit.h b/src/gui/LineEdit.h new file mode 100644 index 00000000..f74a9474 --- /dev/null +++ b/src/gui/LineEdit.h @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (c) 2007 Trolltech ASA +** +** Use, modification and distribution is allowed without limitation, +** warranty, liability or support of any kind. +** +****************************************************************************/ + +#ifndef KEEPASSX_LINEEDIT_H +#define KEEPASSX_LINEEDIT_H + +#include + +class QToolButton; + +class LineEdit : public QLineEdit +{ + Q_OBJECT + +public: + LineEdit(QWidget* parent = 0); + +protected: + void resizeEvent(QResizeEvent*); + +private Q_SLOTS: + void updateCloseButton(const QString& text); + +private: + QToolButton* clearButton; +}; + +#endif // KEEPASSX_LINEEDIT_H +