summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2013-08-21 13:15:49 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-08-26 11:01:32 +0200
commitb29d07c554e5beed0e88b8d75fc42b40b77fee6c (patch)
tree86019b400868dc4ce8e79fa7eaaf87dd8cbc08af
parent66752cfe6e1d1579393a3241dca33dd9264a95ef (diff)
Use QLineEdit's clear button feature in Active Qt.v5.2.0-alpha1
Remove old filter widget. Change-Id: I1ee7d8695d98044cc22e83fad81dd1f2b486b419 Reviewed-by: Kevin Ottens <kevin.ottens@kdab.com> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
-rw-r--r--src/activeqt/container/container.pro2
-rw-r--r--src/activeqt/container/filterwidget.cpp320
-rw-r--r--src/activeqt/container/filterwidget_p.h150
-rw-r--r--src/activeqt/container/qaxselect.cpp2
-rw-r--r--src/activeqt/container/qaxselect.ui16
5 files changed, 9 insertions, 481 deletions
diff --git a/src/activeqt/container/container.pro b/src/activeqt/container/container.pro
index 27edf66..904a024 100644
--- a/src/activeqt/container/container.pro
+++ b/src/activeqt/container/container.pro
@@ -9,7 +9,6 @@ HEADERS = ../control/qaxaggregated.h \
qaxobject.h \
qaxscript.h \
qaxselect.h \
- filterwidget_p.h \
../shared/qaxtypes.h \
../shared/qaxutils_p.h
@@ -20,7 +19,6 @@ SOURCES = qaxbase.cpp \
qaxscript.cpp \
qaxscriptwrapper.cpp \
qaxselect.cpp \
- filterwidget.cpp \
../shared/qaxtypes.cpp \
../shared/qaxutils.cpp
diff --git a/src/activeqt/container/filterwidget.cpp b/src/activeqt/container/filterwidget.cpp
deleted file mode 100644
index b81fdcc..0000000
--- a/src/activeqt/container/filterwidget.cpp
+++ /dev/null
@@ -1,320 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the ActiveQt framework of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "filterwidget_p.h"
-
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QLineEdit>
-#include <QtGui/QFocusEvent>
-#include <QtGui/QPalette>
-#include <QtGui/QCursor>
-#include <QtWidgets/QToolButton>
-#include <QtGui/QPainter>
-#include <QtWidgets/QStyle>
-#include <QtWidgets/QStyleOption>
-
-#include <QtCore/QDebug>
-#include <QtCore/QPropertyAnimation>
-
-enum { debugFilter = 0 };
-
-/* XPM */
-static const char *cleartext_xpm[] = {
-"16 16 53 1",
-" c None",
-". c #2B2B2B",
-"+ c #2D2D2D",
-"@ c #2F2F2F",
-"# c #323232",
-"$ c #373737",
-"% c #3C3C3C",
-"& c #3E3E3E",
-"* c #363636",
-"= c #404040",
-"- c #494949",
-"; c #4E4E4E",
-"> c #525252",
-", c #444444",
-"' c #4F4F4F",
-") c #9C9C9C",
-"! c #6B6B6B",
-"~ c #626262",
-"{ c #333333",
-"] c #414141",
-"^ c #9B9B9B",
-"/ c #FFFFFF",
-"( c #E5E5E5",
-"_ c #737373",
-": c #3A3A3A",
-"< c #4A4A4A",
-"[ c #555555",
-"} c #5D5D5D",
-"| c #E0E0E0",
-"1 c #E7E7E7",
-"2 c #3F3F3F",
-"3 c #5A5A5A",
-"4 c #4B4B4B",
-"5 c #E2E2E2",
-"6 c #424242",
-"7 c #5E5E5E",
-"8 c #5B5B5B",
-"9 c #505050",
-"0 c #6A6A6A",
-"a c #E3E3E3",
-"b c #4D4D4D",
-"c c #545454",
-"d c #999999",
-"e c #DEDEDE",
-"f c #474747",
-"g c #878787",
-"h c #434343",
-"i c #414140",
-"j c #454545",
-"k c #484848",
-"l c #484949",
-"m c #484748",
-"n c #444544",
-" ",
-" .+@@+. ",
-" #$%&&%$# ",
-" *=-;>>;-=* ",
-" $,')!~~!)',$ ",
-" {]'^/(__(/^']{ ",
-" :<[}|/11/|}[<: ",
-" 2'3>45//54>3'2 ",
-" 6>}785//587}>6 ",
-" ]930a/||/a039] ",
-" &bcd/e%%e/dcb& ",
-" f;6gh]ihg6;f ",
-" -f=j99j=f- ",
-" k<b99b<k ",
-" jkl-mn ",
-" "};
-
-QT_BEGIN_NAMESPACE
-
-HintLineEdit::HintLineEdit(QWidget *parent) :
- QLineEdit(parent),
- m_defaultFocusPolicy(focusPolicy()),
- m_refuseFocus(false)
-{
-}
-
-IconButton::IconButton(QWidget *parent)
- : QToolButton(parent), m_fader(0)
-{
- setCursor(Qt::ArrowCursor);
-}
-
-void IconButton::paintEvent(QPaintEvent *)
-{
- QPainter painter(this);
- // Note isDown should really use the active state but in most styles
- // this has no proper feedback
- QIcon::Mode state = QIcon::Disabled;
- if (isEnabled())
- state = isDown() ? QIcon::Selected : QIcon::Normal;
- QPixmap iconpixmap = icon().pixmap(QSize(ICONBUTTON_SIZE, ICONBUTTON_SIZE),
- state, QIcon::Off);
- QRect pixmapRect = QRect(0, 0, iconpixmap.width(), iconpixmap.height());
- pixmapRect.moveCenter(rect().center());
- painter.setOpacity(m_fader);
- painter.drawPixmap(pixmapRect, iconpixmap);
-}
-
-void IconButton::animateShow(bool visible)
-{
- if (visible) {
- QPropertyAnimation *animation = new QPropertyAnimation(this, "fader");
- animation->setDuration(160);
- animation->setEndValue(1.0);
- animation->start(QAbstractAnimation::DeleteWhenStopped);
- } else {
- QPropertyAnimation *animation = new QPropertyAnimation(this, "fader");
- animation->setDuration(160);
- animation->setEndValue(0.0);
- animation->start(QAbstractAnimation::DeleteWhenStopped);
- }
-}
-
-bool HintLineEdit::refuseFocus() const
-{
- return m_refuseFocus;
-}
-
-void HintLineEdit::setRefuseFocus(bool v)
-{
- if (v == m_refuseFocus)
- return;
- m_refuseFocus = v;
- setFocusPolicy(m_refuseFocus ? Qt::NoFocus : m_defaultFocusPolicy);
-}
-
-void HintLineEdit::mousePressEvent(QMouseEvent *e)
-{
- if (debugFilter)
- qDebug() << Q_FUNC_INFO;
- // Explicitly focus on click.
- if (m_refuseFocus && !hasFocus())
- setFocus(Qt::OtherFocusReason);
- QLineEdit::mousePressEvent(e);
-}
-
-void HintLineEdit::focusInEvent(QFocusEvent *e)
-{
- if (debugFilter)
- qDebug() << Q_FUNC_INFO;
- if (m_refuseFocus) {
- // Refuse the focus if the mouse is outside. In addition to the mouse
- // press logic, this prevents a re-focusing which occurs once
- // we actually have focus
- const Qt::FocusReason reason = e->reason();
- if (reason == Qt::ActiveWindowFocusReason || reason == Qt::PopupFocusReason) {
- const QPoint mousePos = mapFromGlobal(QCursor::pos());
- const bool refuse = !geometry().contains(mousePos);
- if (debugFilter)
- qDebug() << Q_FUNC_INFO << refuse;
- if (refuse) {
- e->ignore();
- return;
- }
- }
- }
-
- QLineEdit::focusInEvent(e);
-}
-
-// ------------------- FilterWidget
-FilterWidget::FilterWidget(QWidget *parent, LayoutMode lm) :
- QWidget(parent),
- m_editor(new HintLineEdit(this)),
- m_button(new IconButton(m_editor)),
- m_buttonwidth(0)
-{
- m_editor->setPlaceholderText(tr("Filter"));
-
- // Let the style determine minimum height for our widget
- QSize size(ICONBUTTON_SIZE + 6, ICONBUTTON_SIZE + 2);
-
- // Note KDE does not reserve space for the highlight color
- if (style()->inherits("OxygenStyle"))
- size = size.expandedTo(QSize(24, 0));
-
- // Make room for clear icon
- QMargins margins = m_editor->textMargins();
- if (layoutDirection() == Qt::LeftToRight)
- margins.setRight(size.width());
- else
- margins.setLeft(size.width());
-
- m_editor->setTextMargins(margins);
-
- QHBoxLayout *l = new QHBoxLayout(this);
- l->setMargin(0);
- l->setSpacing(0);
- if (lm == LayoutAlignRight)
- l->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
-
- l->addWidget(m_editor);
-
- // KDE has custom icons for this. Notice that icon namings are counter intuitive
- // If these icons are not available we use the freedesktop standard name before
- // falling back to a bundled resource
- QIcon icon = QIcon::fromTheme(layoutDirection() == Qt::LeftToRight ?
- QStringLiteral("edit-clear-locationbar-rtl") :
- QStringLiteral("edit-clear-locationbar-ltr"),
- QIcon::fromTheme(QStringLiteral("edit-clear"),
- QIcon(QPixmap(cleartext_xpm))));
- Q_ASSERT(!icon.availableSizes().isEmpty());
- m_button->setIcon(icon);
- m_button->setToolTip(tr("Clear text"));
- connect(m_button, SIGNAL(clicked()), this, SLOT(reset()));
- connect(m_editor, SIGNAL(textChanged(QString)), this, SLOT(checkButton(QString)));
- connect(m_editor, SIGNAL(textEdited(QString)), this, SIGNAL(filterChanged(QString)));
-}
-
-QString FilterWidget::text() const
-{
- return m_editor->text();
-}
-
-void FilterWidget::checkButton(const QString &text)
-{
- if (m_oldText.isEmpty() || text.isEmpty())
- m_button->animateShow(!m_editor->text().isEmpty());
- m_oldText = text;
-}
-
-void FilterWidget::reset()
-{
- if (debugFilter)
- qDebug() << Q_FUNC_INFO;
-
- if (!m_editor->text().isEmpty()) {
- // Editor has lost focus once this is pressed
- m_editor->clear();
- emit filterChanged(QString());
- }
-}
-
-void FilterWidget::resizeEvent(QResizeEvent *)
-{
- QRect contentRect = m_editor->rect();
- if (layoutDirection() == Qt::LeftToRight) {
- const int iconoffset = m_editor->textMargins().right() + 4;
- m_button->setGeometry(contentRect.adjusted(m_editor->width() - iconoffset, 0, 0, 0));
- } else {
- const int iconoffset = m_editor->textMargins().left() + 4;
- m_button->setGeometry(contentRect.adjusted(0, 0, -m_editor->width() + iconoffset, 0));
- }
-}
-
-bool FilterWidget::refuseFocus() const
-{
- return m_editor->refuseFocus();
-}
-
-void FilterWidget::setRefuseFocus(bool v)
-{
- m_editor->setRefuseFocus(v);
-}
-
-QT_END_NAMESPACE
diff --git a/src/activeqt/container/filterwidget_p.h b/src/activeqt/container/filterwidget_p.h
deleted file mode 100644
index 36fcfc0..0000000
--- a/src/activeqt/container/filterwidget_p.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the ActiveQt framework of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists for the convenience
-// of Qt Designer. This header
-// file may change from version to version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#ifndef FILTERWIDGET_H
-#define FILTERWIDGET_H
-
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QLineEdit>
-#include <QtGui/QColor>
-#include <QtWidgets/QToolButton>
-
-QT_BEGIN_NAMESPACE
-
-class QToolButton;
-
-/* Note: This a copy of the filter widget found in the qtools repository
- * which was modified to contain cleartext.png as inline XPM image data
- * and to have LayoutAlignNone as default parameter in the constructor to
- * to suit the QAxSelect dialog's needs.
- *
- * This widget should never have initial focus
- * (ie, be the first widget of a dialog, otherwise the hint cannot be displayed.
- * For situations, where it is the only focusable control (widget box),
- * there is a special "refuseFocus()" mode, in which it clears the focus
- * policy and focuses explicitly on click (note that setting Qt::ClickFocus
- * is not sufficient for that as an ActivationFocus will occur). */
-
-#define ICONBUTTON_SIZE 16
-
-class HintLineEdit : public QLineEdit {
- Q_OBJECT
-public:
- explicit HintLineEdit(QWidget *parent = 0);
-
- bool refuseFocus() const;
- void setRefuseFocus(bool v);
-
-protected:
- virtual void mousePressEvent(QMouseEvent *event);
- virtual void focusInEvent(QFocusEvent *e);
-
-private:
- const Qt::FocusPolicy m_defaultFocusPolicy;
- bool m_refuseFocus;
-};
-
-// IconButton: This is a simple helper class that represents clickable icons
-
-class IconButton: public QToolButton
-{
- Q_OBJECT
- Q_PROPERTY(float fader READ fader WRITE setFader)
-public:
- IconButton(QWidget *parent);
- void paintEvent(QPaintEvent *event);
- float fader() { return m_fader; }
- void setFader(float value) { m_fader = value; update(); }
- void animateShow(bool visible);
-
-private:
- float m_fader;
-};
-
-// FilterWidget: For filtering item views, with reset button Uses HintLineEdit.
-
-class FilterWidget : public QWidget
-{
- Q_OBJECT
-public:
- enum LayoutMode {
- // For use in toolbars: Expand to the right
- LayoutAlignRight,
- // No special alignment
- LayoutAlignNone
- };
-
- explicit FilterWidget(QWidget *parent = 0, LayoutMode lm = LayoutAlignNone);
-
- QString text() const;
- void resizeEvent(QResizeEvent *);
- bool refuseFocus() const; // see HintLineEdit
- void setRefuseFocus(bool v);
-
-signals:
- void filterChanged(const QString &);
-
-public slots:
- void reset();
-
-private slots:
- void checkButton(const QString &text);
-
-private:
- HintLineEdit *m_editor;
- IconButton *m_button;
- int m_buttonwidth;
- QString m_oldText;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/activeqt/container/qaxselect.cpp b/src/activeqt/container/qaxselect.cpp
index f08ec34..4751d55 100644
--- a/src/activeqt/container/qaxselect.cpp
+++ b/src/activeqt/container/qaxselect.cpp
@@ -193,7 +193,7 @@ QAxSelect::QAxSelect(QWidget *parent, Qt::WindowFlags flags)
connect(d->selectUi.buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(d->selectUi.buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
- connect(d->selectUi.filterLineEdit, SIGNAL(filterChanged(QString)),
+ connect(d->selectUi.filterLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(onFilterLineEditChanged(QString)));
}
diff --git a/src/activeqt/container/qaxselect.ui b/src/activeqt/container/qaxselect.ui
index 6c088c7..8f88e42 100644
--- a/src/activeqt/container/qaxselect.ui
+++ b/src/activeqt/container/qaxselect.ui
@@ -59,7 +59,14 @@
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
- <widget class="FilterWidget" name="filterLineEdit"/>
+ <widget class="QLineEdit" name="filterLineEdit">
+ <property name="placeholderText">
+ <string>Filter</string>
+ </property>
+ <property name="clearButtonEnabled">
+ <bool>true</bool>
+ </property>
+ </widget>
</item>
<item>
<widget class="QListView" name="ActiveXList"/>
@@ -102,13 +109,6 @@
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
- <customwidgets>
- <customwidget>
- <class>FilterWidget</class>
- <extends>QWidget</extends>
- <header>filterwidget_p.h</header>
- </customwidget>
- </customwidgets>
<includes>
<include location="local">qaxwidget.h</include>
</includes>