summaryrefslogtreecommitdiff
path: root/src/filterwidget.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-05-29 09:45:30 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-05-31 11:54:31 -0400
commit4d90e502266dfb886e1d089fb26780d19a38e5a7 (patch)
tree625a794ba0aafd3e022f097ef0e9841d3c106927 /src/filterwidget.cpp
parent64604c966aaade7ceb9f5e547dfad8f51372434c (diff)
added new filterwidget, will eventually get the operators functionality from the mod/pluging lists
Diffstat (limited to 'src/filterwidget.cpp')
-rw-r--r--src/filterwidget.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/filterwidget.cpp b/src/filterwidget.cpp
new file mode 100644
index 00000000..39324bc6
--- /dev/null
+++ b/src/filterwidget.cpp
@@ -0,0 +1,88 @@
+#include "filterwidget.h"
+#include "eventfilter.h"
+
+FilterWidget::FilterWidget()
+ : m_edit(nullptr), m_clear(nullptr), m_buddy(nullptr)
+{
+}
+
+void FilterWidget::set(QLineEdit* edit)
+{
+ if (m_clear) {
+ delete m_clear;
+ m_clear = nullptr;
+ }
+
+ m_edit = edit;
+ if (!m_edit) {
+ return;
+ }
+
+ createClear();
+ hookEvents();
+}
+
+void FilterWidget::clear()
+{
+ if (!m_edit) {
+ return;
+ }
+
+ m_edit->clear();
+}
+
+void FilterWidget::createClear()
+{
+ m_clear = new QToolButton(m_edit);
+
+ QPixmap pixmap(":/MO/gui/edit_clear");
+ m_clear->setIcon(QIcon(pixmap));
+ m_clear->setIconSize(pixmap.size());
+ m_clear->setCursor(Qt::ArrowCursor);
+ m_clear->setStyleSheet("QToolButton { border: none; padding: 0px; }");
+ m_clear->hide();
+
+ QObject::connect(m_clear, &QToolButton::clicked, [&]{ clear(); });
+ QObject::connect(m_edit, &QLineEdit::textChanged, [&]{ onTextChanged(); });
+
+ repositionClearButton();
+}
+
+void FilterWidget::hookEvents()
+{
+ auto* f = new EventFilter(m_edit, [&](auto* w, auto* e) {
+ if (e->type() == QEvent::Resize) {
+ onResized();
+ }
+
+ return false;
+ });
+
+ m_edit->installEventFilter(f);
+}
+
+void FilterWidget::onTextChanged()
+{
+ m_clear->setVisible(!m_edit->text().isEmpty());
+}
+
+void FilterWidget::onResized()
+{
+ repositionClearButton();
+}
+
+void FilterWidget::repositionClearButton()
+{
+ if (!m_clear) {
+ return;
+ }
+
+ const QSize sz = m_clear->sizeHint();
+ const int frame = m_edit->style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
+ const auto r = m_edit->rect();
+
+ const auto x = r.right() - frame - sz.width();
+ const auto y = (r.bottom() + 1 - sz.height()) / 2;
+
+ m_clear->move(x, y);
+}