Git commit 5ad513d10049f484bad1a7a7c15c0520f1d9af3b by Jan Kundr?t, on behalf of Glad Deschrijver. Committed on 20/03/2013 at 00:34. Pushed by jkt into branch 'master'.
GUI: use LineEdit in the MessageListWidget M +33 -36 src/Gui/LineEdit.cpp M +9 -11 src/Gui/LineEdit.h M +4 -2 src/Gui/MessageListWidget.cpp M +2 -2 src/Gui/MessageListWidget.h http://commits.kde.org/trojita/5ad513d10049f484bad1a7a7c15c0520f1d9af3b diff --git a/src/Gui/LineEdit.cpp b/src/Gui/LineEdit.cpp index 364f351..2ae1a0b 100644 --- a/src/Gui/LineEdit.cpp +++ b/src/Gui/LineEdit.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** ** Copyright (c) 2007 Trolltech ASA <info at trolltech.com> -** Modified (c) 2009, 2011 by Glad Deschrijver <glad.deschrijver at gmail.com> +** Modified (c) 2009, 2011, 2013 by Glad Deschrijver <glad.deschrijver at gmail.com> ** ** Use, modification and distribution is allowed without limitation, ** warranty, liability or support of any kind. @@ -10,64 +10,61 @@ #include "LineEdit.h" +#include <QHBoxLayout> #include <QToolButton> #include <QStyle> LineEdit::LineEdit(const QString &text, QWidget *parent) : QLineEdit(parent) { - init(); - setText(text); + init(); + setText(text); } LineEdit::LineEdit(QWidget *parent) : QLineEdit(parent) { - init(); + init(); } void LineEdit::init() { - m_clearButton = new QToolButton(this); - const QPixmap pixmap(QLatin1String(":/icons/edit-clear-locationbar-rtl.png")); - m_clearButton->setIcon(QIcon(pixmap)); - m_clearButton->setIconSize(pixmap.size()); - m_clearButton->setCursor(Qt::ArrowCursor); - m_clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }"); - m_clearButton->setToolTip(tr("Clear input field")); - m_clearButton->setFocusPolicy(Qt::NoFocus); - m_clearButton->hide(); - connect(m_clearButton, SIGNAL(clicked()), this, SLOT(clear())); - connect(this, SIGNAL(textChanged(QString)), this, SLOT(updateClearButton(QString))); - const int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); -// setStyleSheet(QString("QLineEdit { padding-right: %1px; width: %2px; height: %3px; }") -// .arg(m_clearButton->sizeHint().width() + frameWidth + 1) -// .arg(sizeHint().width()) -// .arg(sizeHint().height())); - setStyleSheet(QString("QLineEdit { padding-right: %1px; }") - .arg(m_clearButton->sizeHint().width() + frameWidth + 1)); -// QSize msz = minimumSizeHint(); -// setMinimumSize(qMax(msz.width(), m_clearButton->sizeHint().height() + frameWidth * 2 + 2), -// qMax(msz.height(), m_clearButton->sizeHint().height() + frameWidth * 2 + 2)); + m_clearButton = new QToolButton(this); + const QPixmap pixmap(QLatin1String(":/icons/edit-clear-locationbar-rtl.png")); + m_clearButton->setIcon(QIcon(pixmap)); + m_clearButton->setIconSize(pixmap.size()); + m_clearButton->setCursor(Qt::ArrowCursor); + m_clearButton->setToolTip(tr("Clear input field")); + m_clearButton->setFocusPolicy(Qt::NoFocus); + m_clearButton->hide(); + connect(m_clearButton, SIGNAL(clicked()), this, SLOT(clear())); + connect(this, SIGNAL(textChanged(QString)), this, SLOT(updateClearButton(QString))); + + const int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + m_clearButton->setStyleSheet(QString("QToolButton { border: none; padding-left: 1px; padding-top: %1px; padding-bottom: %1px; padding-right: %1px; }") + .arg(frameWidth + 1)); + setStyleSheet(QString("QLineEdit { padding-right: %1px; }") + .arg(m_clearButton->sizeHint().width())); + + QHBoxLayout *layout = new QHBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); + layout->addStretch(); + layout->addWidget(m_clearButton); } -QSize LineEdit::sizeHint() const +QToolButton *LineEdit::clearButton() { - const QSize msz = QLineEdit::sizeHint(); - const int minimumHeight = m_clearButton->sizeHint().height() + style()->pixelMetric(QStyle::PM_DefaultFrameWidth) * 2; - return QSize(qMax(msz.width(), minimumHeight + 2), qMax(msz.height(), minimumHeight)); + return m_clearButton; } -void LineEdit::resizeEvent(QResizeEvent *event) +QSize LineEdit::sizeHint() const { - const QSize sz = m_clearButton->sizeHint(); - const int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); - m_clearButton->move(rect().right() - frameWidth - sz.width(), - (rect().bottom() + 1 - sz.height()) / 2); - QLineEdit::resizeEvent(event); + const QSize defaultSize = QLineEdit::sizeHint(); + const int minimumWidth = m_clearButton->sizeHint().width() + 2; + return QSize(qMax(defaultSize.width(), minimumWidth), defaultSize.height()); } void LineEdit::updateClearButton(const QString &text) { - m_clearButton->setVisible(!text.isEmpty()); + m_clearButton->setVisible(!text.isEmpty()); } diff --git a/src/Gui/LineEdit.h b/src/Gui/LineEdit.h index c4e7e77..1cb5212 100644 --- a/src/Gui/LineEdit.h +++ b/src/Gui/LineEdit.h @@ -1,7 +1,7 @@ /**************************************************************************** ** ** Copyright (c) 2007 Trolltech ASA <info at trolltech.com> -** Modified (c) 2009, 2011 by Glad Deschrijver <glad.deschrijver at gmail.com> +** Modified (c) 2009, 2011, 2013 by Glad Deschrijver <glad.deschrijver at gmail.com> ** ** Use, modification and distribution is allowed without limitation, ** warranty, liability or support of any kind. @@ -17,23 +17,21 @@ class QToolButton; class LineEdit : public QLineEdit { - Q_OBJECT + Q_OBJECT public: - explicit LineEdit(const QString &text, QWidget *parent = 0); - LineEdit(QWidget *parent = 0); - virtual QSize sizeHint() const; - -protected: - void resizeEvent(QResizeEvent *event); + explicit LineEdit(const QString &text, QWidget *parent = 0); + LineEdit(QWidget *parent = 0); + QToolButton *clearButton(); + virtual QSize sizeHint() const; private Q_SLOTS: - void updateClearButton(const QString &text); + void updateClearButton(const QString &text); private: - void init(); + void init(); - QToolButton *m_clearButton; + QToolButton *m_clearButton; }; #endif // LINEEDIT_H diff --git a/src/Gui/MessageListWidget.cpp b/src/Gui/MessageListWidget.cpp index 8391978..2fb2915 100644 --- a/src/Gui/MessageListWidget.cpp +++ b/src/Gui/MessageListWidget.cpp @@ -25,13 +25,13 @@ #include <QApplication> #include <QCheckBox> #include <QFrame> -#include <QLineEdit> #include <QMenu> #include <QTimer> #include <QToolButton> #include <QVBoxLayout> #include <QWidgetAction> #include "IconLoader.h" +#include "LineEdit.h" #include "MsgListView.h" namespace Gui { @@ -41,7 +41,7 @@ MessageListWidget::MessageListWidget(QWidget *parent) : { tree = new MsgListView(this); - m_quickSearchText = new QLineEdit(this); + m_quickSearchText = new LineEdit(this); #if QT_VERSION >= 0x040700 m_quickSearchText->setPlaceholderText(tr("Quick Search / Leading \":=\" for direct IMAP search")); #endif @@ -94,10 +94,12 @@ MessageListWidget::MessageListWidget(QWidget *parent) : m_searchOptions->setMenu(optionsMenu); connect (optionsMenu, SIGNAL(aboutToShow()), SLOT(slotDeActivateSimpleSearch())); + delete m_quickSearchText->layout(); QHBoxLayout *hlayout = new QHBoxLayout(m_quickSearchText); hlayout->setContentsMargins(0, 0, 0, 0); hlayout->addWidget(m_searchOptions); hlayout->addStretch(); + hlayout->addWidget(m_quickSearchText->clearButton()); hlayout->activate(); // this processes the layout and ensures the toolbutton has it's final dimensions #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) if (QGuiApplication::isLeftToRight()) diff --git a/src/Gui/MessageListWidget.h b/src/Gui/MessageListWidget.h index 15d3c80..744a47d 100644 --- a/src/Gui/MessageListWidget.h +++ b/src/Gui/MessageListWidget.h @@ -25,7 +25,7 @@ #include <QWidget> -class QLineEdit; +class LineEdit; class QTimer; class QToolButton; @@ -63,7 +63,7 @@ private slots: void slotUpdateSearchCursor(); private: - QLineEdit *m_quickSearchText; + LineEdit *m_quickSearchText; QToolButton *m_searchOptions; QAction *m_searchInSubject; QAction *m_searchInBody;
