Browse Source

Revamp LineEdit implementation

PR #18917.
adaptive-webui-19844
Vladimir Golovnev 1 year ago committed by GitHub
parent
commit
147b22ddd3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 66
      src/gui/lineedit.cpp
  2. 46
      src/gui/lineedit.h

66
src/gui/lineedit.cpp

@ -1,20 +1,36 @@
/**************************************************************************** /*
** * Bittorrent Client using Qt and libtorrent.
** Copyright (c) 2007 Trolltech ASA <info@trolltech.com> * Copyright (C) 2023 Vladimir Golovnev <glassez@yandex.ru>
** * Copyright (c) 2007 Trolltech ASA <info@trolltech.com>
** Use, modification and distribution is allowed without limitation, *
** warranty, liability or support of any kind. * This program is free software; you can redistribute it and/or
** * modify it under the terms of the GNU General Public License
****************************************************************************/ * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* In addition, as a special exception, the copyright holders give permission to
* link this program with the OpenSSL project's "OpenSSL" library (or with
* modified versions of it that use the same license as the "OpenSSL" library),
* and distribute the linked executables. You must obey the GNU General Public
* License in all respects for all of the code used other than "OpenSSL". If you
* modify file(s), you may extend this exception to your version of the file(s),
* but you are not obligated to do so. If you do not wish to do so, delete this
* exception statement from your version.
*/
#include "lineedit.h" #include "lineedit.h"
#include <algorithm> #include <QAction>
#include <QKeyEvent>
#include <QGuiApplication>
#include <QResizeEvent>
#include <QStyle>
#include <QToolButton>
#include "base/global.h" #include "base/global.h"
#include "uithememanager.h" #include "uithememanager.h"
@ -22,35 +38,19 @@
LineEdit::LineEdit(QWidget *parent) LineEdit::LineEdit(QWidget *parent)
: QLineEdit(parent) : QLineEdit(parent)
{ {
m_searchButton = new QToolButton(this); auto *action = new QAction(UIThemeManager::instance()->getIcon(u"edit-find"_qs), QString());
m_searchButton->setIcon(UIThemeManager::instance()->getIcon(u"edit-find"_qs)); addAction(action, QLineEdit::LeadingPosition);
m_searchButton->setCursor(Qt::ArrowCursor);
m_searchButton->setStyleSheet(u"QToolButton {border: none; padding: 2px;}"_qs);
// padding between text and widget borders
setStyleSheet(u"QLineEdit {padding-left: %1px;}"_qs.arg(m_searchButton->sizeHint().width()));
setClearButtonEnabled(true); setClearButtonEnabled(true);
const int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
setMaximumHeight(std::max(sizeHint().height(), m_searchButton->sizeHint().height()) + frameWidth * 2);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
} }
void LineEdit::resizeEvent(QResizeEvent *e)
{
const int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
const int xPos = QGuiApplication::isLeftToRight()
? frameWidth
: (e->size().width() - m_searchButton->sizeHint().width() - frameWidth);
m_searchButton->move(xPos, (e->size().height() - m_searchButton->sizeHint().height()) / 2);
}
void LineEdit::keyPressEvent(QKeyEvent *event) void LineEdit::keyPressEvent(QKeyEvent *event)
{ {
if ((event->modifiers() == Qt::NoModifier) && (event->key() == Qt::Key_Escape)) if ((event->modifiers() == Qt::NoModifier) && (event->key() == Qt::Key_Escape))
{ {
clear(); clear();
} }
QLineEdit::keyPressEvent(event); QLineEdit::keyPressEvent(event);
} }

46
src/gui/lineedit.h

@ -1,30 +1,44 @@
/**************************************************************************** /*
** * Bittorrent Client using Qt and libtorrent.
** Copyright (c) 2007 Trolltech ASA <info@trolltech.com> * Copyright (C) 2023 Vladimir Golovnev <glassez@yandex.ru>
** * Copyright (c) 2007 Trolltech ASA <info@trolltech.com>
** Use, modification and distribution is allowed without limitation, *
** warranty, liability or support of any kind. * This program is free software; you can redistribute it and/or
** * modify it under the terms of the GNU General Public License
****************************************************************************/ * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* In addition, as a special exception, the copyright holders give permission to
* link this program with the OpenSSL project's "OpenSSL" library (or with
* modified versions of it that use the same license as the "OpenSSL" library),
* and distribute the linked executables. You must obey the GNU General Public
* License in all respects for all of the code used other than "OpenSSL". If you
* modify file(s), you may extend this exception to your version of the file(s),
* but you are not obligated to do so. If you do not wish to do so, delete this
* exception statement from your version.
*/
#pragma once #pragma once
#include <QLineEdit> #include <QLineEdit>
class QToolButton;
class LineEdit final : public QLineEdit class LineEdit final : public QLineEdit
{ {
Q_OBJECT Q_OBJECT
Q_DISABLE_COPY_MOVE(LineEdit) Q_DISABLE_COPY_MOVE(LineEdit)
public: public:
LineEdit(QWidget *parent = nullptr); explicit LineEdit(QWidget *parent = nullptr);
protected:
void resizeEvent(QResizeEvent *e) override;
void keyPressEvent(QKeyEvent *event) override;
private: private:
QToolButton *m_searchButton = nullptr; void keyPressEvent(QKeyEvent *event) override;
}; };

Loading…
Cancel
Save