From 1a2f5ceefcf73f10fbd0b098cd77031eb8ac52f6 Mon Sep 17 00:00:00 2001 From: peri4 Date: Wed, 13 Sep 2023 10:33:52 +0300 Subject: [PATCH] fix CLineEdit read-only button PIValueTreeEdit support PIValueTree::Attribute::toolTip --- libs/piqt_utils/pivaluetree_edit.cpp | 1 + .../pivaluetree_edit_parameters.cpp | 11 ++++++++-- .../piqt_utils/pivaluetree_edit_parameters.ui | 10 +++++++++ libs/widgets/clineedit.cpp | 22 +++++++++++++++---- libs/widgets/clineedit.h | 10 +++------ 5 files changed, 41 insertions(+), 13 deletions(-) diff --git a/libs/piqt_utils/pivaluetree_edit.cpp b/libs/piqt_utils/pivaluetree_edit.cpp index 763c440..dae254b 100644 --- a/libs/piqt_utils/pivaluetree_edit.cpp +++ b/libs/piqt_utils/pivaluetree_edit.cpp @@ -608,6 +608,7 @@ void PIValueTreeEdit::applyVariantEdit(PIVariantEdit * ve, const PIValueTree & v ve->setAttributes(attributesWithRO(vt.attributes())); ve->setValue(vt.value()); ve->setFullEditMode(is_full_edit); + ve->setToolTip(PI2QString(vt.attribute(PIValueTree::Attribute::toolTip).toString())); } diff --git a/libs/piqt_utils/pivaluetree_edit_parameters.cpp b/libs/piqt_utils/pivaluetree_edit_parameters.cpp index a42316a..5a63b14 100644 --- a/libs/piqt_utils/pivaluetree_edit_parameters.cpp +++ b/libs/piqt_utils/pivaluetree_edit_parameters.cpp @@ -88,6 +88,7 @@ bool PIValueTreeEditParameters::showFor(PIValueTree & vt) { checkLabel->setChecked(vt.attribute(Attribute::isLabel, false).toBool()); checkLabel->blockSignals(false); lineComment->setText(PI2QString(vt.comment())); + lineToolTip->setText(PI2QString(vt.attribute(Attribute::toolTip).toString())); createAttributes(ve_attr, layoutAttributes, vt.attributes()); if (exec() != QDialog::Accepted) return false; @@ -109,8 +110,13 @@ void PIValueTreeEditParameters::createAttributes(QList & list, QFormLayout * lay, const PIVariantMap & attr, bool inv_filter) { - static PIStringList hidden( - {"type", Attribute::hidden, Attribute::readOnly, Attribute::isLabel, Attribute::arrayType, Attribute::expression}); + static PIStringList hidden({"type", + Attribute::hidden, + Attribute::readOnly, + Attribute::toolTip, + Attribute::isLabel, + Attribute::arrayType, + Attribute::expression}); static PIStringList filter({Attribute::arrayMinCount, Attribute::arrayMaxCount, Attribute::arrayReorder, Attribute::arrayResize}); list.clear(); while (lay->rowCount() > 0) @@ -163,6 +169,7 @@ void PIValueTreeEditParameters::applyAttributes(PIValueTree & vt) { vt.setAttribute(Attribute::hidden, checkHidden->isChecked()); vt.setAttribute(Attribute::readOnly, checkReadOnly->isChecked()); vt.setAttribute(Attribute::isLabel, checkLabel->isChecked()); + vt.setAttribute(Attribute::toolTip, Q2PIString(lineToolTip->text())); } diff --git a/libs/piqt_utils/pivaluetree_edit_parameters.ui b/libs/piqt_utils/pivaluetree_edit_parameters.ui index 90d46ab..ea82f91 100644 --- a/libs/piqt_utils/pivaluetree_edit_parameters.ui +++ b/libs/piqt_utils/pivaluetree_edit_parameters.ui @@ -57,6 +57,16 @@ + + + + Tool tip: + + + + + + diff --git a/libs/widgets/clineedit.cpp b/libs/widgets/clineedit.cpp index fa1f057..d941ed0 100644 --- a/libs/widgets/clineedit.cpp +++ b/libs/widgets/clineedit.cpp @@ -13,7 +13,7 @@ CLineEdit::CLineEdit(QWidget * parent): QLineEdit(parent) { cw->setToolTip(tr("Clear")); cw->hide(); cw->installEventFilter(this); - connect(this, &QLineEdit::textChanged, this, &CLineEdit::textChangedSlot); + connect(this, &QLineEdit::textChanged, this, &CLineEdit::textChangedInternal); int is = fontHeight(this); QMargins m = textMargins(); m.setRight(m.right() + (is * 1.2)); @@ -26,6 +26,20 @@ CLineEdit::~CLineEdit() { } +void CLineEdit::setReadOnly(bool yes) { + QLineEdit::setReadOnly(yes); + textChangedInternal(); +} + + +void CLineEdit::clearClick() { + if (!isEnabled()) return; + setText(dt); + emit cleared(); + emit textEdited(dt); +} + + bool CLineEdit::eventFilter(QObject * o, QEvent * e) { switch (e->type()) { case QEvent::MouseButtonRelease: clearMouseRelease(static_cast(e)); break; @@ -67,7 +81,7 @@ void CLineEdit::setDefaultText(const QString & t, bool set_text) { cw->hide(); return; } - textChangedSlot(text()); + textChangedInternal(); } @@ -78,6 +92,6 @@ void CLineEdit::clearMouseRelease(QMouseEvent * e) { } -void CLineEdit::textChangedSlot(QString text) { - cw->setVisible(text != dt); +void CLineEdit::textChangedInternal() { + cw->setVisible((text() != dt) && !isReadOnly()); } diff --git a/libs/widgets/clineedit.h b/libs/widgets/clineedit.h index 092b8f6..94c0020 100644 --- a/libs/widgets/clineedit.h +++ b/libs/widgets/clineedit.h @@ -34,14 +34,10 @@ public: ~CLineEdit() override; const QString & defaultText() const { return dt; } + void setReadOnly(bool yes); public slots: - void clearClick() { - if (!isEnabled()) return; - setText(dt); - emit cleared(); - emit textEdited(dt); - } + void clearClick(); void setDefaultText(const QString & t, bool set_text = false); signals: @@ -49,7 +45,7 @@ signals: private slots: void clearMouseRelease(QMouseEvent * e); - void textChangedSlot(QString text); + void textChangedInternal(); private: bool eventFilter(QObject * o, QEvent * e) override;