From 0efab730c144bf91cf121e05e5a7f330ff8ea0a9 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 8 Mar 2023 14:07:10 +0100 Subject: [PATCH] Gui: split icon handling from ExpressionBinding --- src/Gui/ExpressionBinding.cpp | 47 ++++++++++++++++++++--------------- src/Gui/ExpressionBinding.h | 23 +++++++++++------ src/Gui/InputField.cpp | 2 +- src/Gui/InputField.h | 2 +- src/Gui/SpinBox.h | 2 +- src/Gui/Widgets.h | 2 +- 6 files changed, 46 insertions(+), 32 deletions(-) diff --git a/src/Gui/ExpressionBinding.cpp b/src/Gui/ExpressionBinding.cpp index d90e0dedfb..b9d46d1206 100644 --- a/src/Gui/ExpressionBinding.cpp +++ b/src/Gui/ExpressionBinding.cpp @@ -48,9 +48,7 @@ using namespace App; namespace bp = boost::placeholders; ExpressionBinding::ExpressionBinding() - : iconLabel(nullptr) - , iconHeight(-1) - , m_autoApply(false) + : m_autoApply(false) { } @@ -190,22 +188,6 @@ bool ExpressionBinding::assignToProperty(const std::string & propName, double va return true; } -QPixmap ExpressionBinding::getIcon(const char* name, const QSize& size) const -{ - QString key = QString::fromLatin1("%1_%2x%3") - .arg(QString::fromLatin1(name)) - .arg(size.width()) - .arg(size.height()); - QPixmap icon; - if (QPixmapCache::find(key, &icon)) - return icon; - - icon = BitmapFactory().pixmapFromSvg(name, size); - if (!icon.isNull()) - QPixmapCache::insert(key, icon); - return icon; -} - bool ExpressionBinding::apply(const std::string & propName) { Q_UNUSED(propName); @@ -294,7 +276,32 @@ void ExpressionBinding::objectDeleted(const App::DocumentObject& obj) } } -void ExpressionBinding::makeLabel(QLineEdit* le) +// ---------------------------------------------------------------------------- + +ExpressionWidget::ExpressionWidget() + : iconLabel(nullptr) + , iconHeight(-1) +{ + +} + +QPixmap ExpressionWidget::getIcon(const char* name, const QSize& size) const +{ + QString key = QString::fromLatin1("%1_%2x%3") + .arg(QString::fromLatin1(name)) + .arg(size.width()) + .arg(size.height()); + QPixmap icon; + if (QPixmapCache::find(key, &icon)) + return icon; + + icon = BitmapFactory().pixmapFromSvg(name, size); + if (!icon.isNull()) + QPixmapCache::insert(key, icon); + return icon; +} + +void ExpressionWidget::makeLabel(QLineEdit* le) { defaultPalette = le->palette(); diff --git a/src/Gui/ExpressionBinding.h b/src/Gui/ExpressionBinding.h index bf59eec898..65d1bc9eec 100644 --- a/src/Gui/ExpressionBinding.h +++ b/src/Gui/ExpressionBinding.h @@ -53,8 +53,6 @@ public: virtual bool apply(); bool hasExpression() const; - QPixmap getIcon(const char *name, const QSize &size) const; - //auto apply means that the python code is issued not only on apply() but //also on setExpression bool autoApply() const {return m_autoApply;} @@ -71,17 +69,11 @@ protected: //gets called when the bound expression is changed, either by this binding or any external action virtual void onChange() {} - void makeLabel(QLineEdit* parent); - private: App::ObjectIdentifier path; std::shared_ptr lastExpression; protected: - ExpressionLabel* iconLabel; - QPalette defaultPalette; - int iconHeight; - void expressionChange(const App::ObjectIdentifier& id); void objectDeleted(const App::DocumentObject&); boost::signals2::scoped_connection expressionchanged; @@ -89,6 +81,21 @@ protected: bool m_autoApply; }; +class GuiExport ExpressionWidget : public ExpressionBinding +{ +public: + ExpressionWidget(); + QPixmap getIcon(const char *name, const QSize &size) const; + +protected: + void makeLabel(QLineEdit* parent); + +protected: + ExpressionLabel* iconLabel; + QPalette defaultPalette; + int iconHeight; +}; + } #endif // EXPRESSIONBINDING_H diff --git a/src/Gui/InputField.cpp b/src/Gui/InputField.cpp index 37937cee77..97646d82e4 100644 --- a/src/Gui/InputField.cpp +++ b/src/Gui/InputField.cpp @@ -69,7 +69,7 @@ private: InputField::InputField(QWidget * parent) : ExpressionLineEdit(parent), - ExpressionBinding(), + ExpressionWidget(), validInput(true), actUnitValue(0), Maximum(DOUBLE_MAX), diff --git a/src/Gui/InputField.h b/src/Gui/InputField.h index 2a22dbe73e..1aa7fb1c98 100644 --- a/src/Gui/InputField.h +++ b/src/Gui/InputField.h @@ -55,7 +55,7 @@ namespace Gui { * of a spin box. * \author Jürgen Riegel */ -class GuiExport InputField : public ExpressionLineEdit, public ExpressionBinding +class GuiExport InputField : public ExpressionLineEdit, public ExpressionWidget { Q_OBJECT diff --git a/src/Gui/SpinBox.h b/src/Gui/SpinBox.h index a0a9aced7a..8e59337f30 100644 --- a/src/Gui/SpinBox.h +++ b/src/Gui/SpinBox.h @@ -36,7 +36,7 @@ class NumberExpression; namespace Gui { -class GuiExport ExpressionSpinBox : public ExpressionBinding +class GuiExport ExpressionSpinBox : public ExpressionWidget { public: explicit ExpressionSpinBox(QAbstractSpinBox*); diff --git a/src/Gui/Widgets.h b/src/Gui/Widgets.h index 954d59350a..1dae00d8b6 100644 --- a/src/Gui/Widgets.h +++ b/src/Gui/Widgets.h @@ -572,7 +572,7 @@ private: * The ExpLineEdit class provides a lineedit that support expressing binding. * \author realthunder */ -class GuiExport ExpLineEdit : public QLineEdit, public ExpressionBinding +class GuiExport ExpLineEdit : public QLineEdit, public ExpressionWidget { Q_OBJECT