From bbc62a6efa6f43ccd245c822e9f52e883dce46f6 Mon Sep 17 00:00:00 2001 From: SET Date: Sun, 22 Nov 2020 18:58:04 +0100 Subject: [PATCH] Preserve source widget on click. Remove TreeTableNodeText from parent, store it in TreeTableNodeLineEdit and moves it back when the latter loses focus. --- SensitiveTreeTableNodeText.cpp | 11 +++++++---- SensitiveTreeTableNodeText.h | 10 ++++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/SensitiveTreeTableNodeText.cpp b/SensitiveTreeTableNodeText.cpp index d56c212..dc9afe9 100644 --- a/SensitiveTreeTableNodeText.cpp +++ b/SensitiveTreeTableNodeText.cpp @@ -51,6 +51,7 @@ void TreeTableNodeText::OnClick() m_lineEdit->setReadOnly(true); m_lineEdit->blurred().connect(m_lineEdit, &TreeTableNodeLineEdit::OnBlurred); m_lineEdit->setSelection(0, text().toUTF8().length()); + m_lineEdit->HoldSourceWidget(removeFromParent()); m_node->setColumnWidget(m_colIndex, unique_ptr (m_lineEdit)); m_lineEdit->setFocus(true); // +++ } @@ -78,13 +79,15 @@ void TreeTableNodeLineEdit::Init(WTreeTableNode* node, uint colIndex) { m_node = node; m_colIndex = colIndex; - m_text = NULL; clicked().connect(this, &TreeTableNodeLineEdit::OnBlurred); } void TreeTableNodeLineEdit::OnBlurred() { - m_text = new TreeTableNodeText(text(), m_node, m_colIndex); - m_text->clicked().connect(m_text, &TreeTableNodeText::OnClick); - m_node->setColumnWidget(m_colIndex, unique_ptr (m_text)); + m_node->setColumnWidget(m_colIndex, std::move(m_sourceWidget)); +} + +void TreeTableNodeLineEdit::HoldSourceWidget(std::unique_ptr sourceWidget) +{ + m_sourceWidget.swap(sourceWidget); } diff --git a/SensitiveTreeTableNodeText.h b/SensitiveTreeTableNodeText.h index f716ad4..24b8078 100644 --- a/SensitiveTreeTableNodeText.h +++ b/SensitiveTreeTableNodeText.h @@ -58,13 +58,19 @@ public: WTreeTableNode * node, uint colIndex); virtual ~TreeTableNodeLineEdit(); /** - * Creates back a TreeTableNodeText replacing this TreeTableNodeLineEdit. + * Move back the original TreeTableNodeText replacing this + * TreeTableNodeLineEdit. */ void OnBlurred(); + /** + * Keep the original TreeTableNodeText verbatim. + * @param text + */ + void HoldSourceWidget(std::unique_ptr sourceWidget); private: WTreeTableNode * m_node; uint m_colIndex; - TreeTableNodeText * m_text; + std::unique_ptr m_sourceWidget; void Init(WTreeTableNode * node, uint colIndex); };