Preserve source widget on click.
Remove TreeTableNodeText from parent, store it in TreeTableNodeLineEdit and moves it back when the latter loses focus.
This commit is contained in:
@@ -51,6 +51,7 @@ void TreeTableNodeText::OnClick()
|
|||||||
m_lineEdit->setReadOnly(true);
|
m_lineEdit->setReadOnly(true);
|
||||||
m_lineEdit->blurred().connect(m_lineEdit, &TreeTableNodeLineEdit::OnBlurred);
|
m_lineEdit->blurred().connect(m_lineEdit, &TreeTableNodeLineEdit::OnBlurred);
|
||||||
m_lineEdit->setSelection(0, text().toUTF8().length());
|
m_lineEdit->setSelection(0, text().toUTF8().length());
|
||||||
|
m_lineEdit->HoldSourceWidget(removeFromParent());
|
||||||
m_node->setColumnWidget(m_colIndex, unique_ptr<WLineEdit> (m_lineEdit));
|
m_node->setColumnWidget(m_colIndex, unique_ptr<WLineEdit> (m_lineEdit));
|
||||||
m_lineEdit->setFocus(true); // +++
|
m_lineEdit->setFocus(true); // +++
|
||||||
}
|
}
|
||||||
@@ -78,13 +79,15 @@ void TreeTableNodeLineEdit::Init(WTreeTableNode* node, uint colIndex)
|
|||||||
{
|
{
|
||||||
m_node = node;
|
m_node = node;
|
||||||
m_colIndex = colIndex;
|
m_colIndex = colIndex;
|
||||||
m_text = NULL;
|
|
||||||
clicked().connect(this, &TreeTableNodeLineEdit::OnBlurred);
|
clicked().connect(this, &TreeTableNodeLineEdit::OnBlurred);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TreeTableNodeLineEdit::OnBlurred()
|
void TreeTableNodeLineEdit::OnBlurred()
|
||||||
{
|
{
|
||||||
m_text = new TreeTableNodeText(text(), m_node, m_colIndex);
|
m_node->setColumnWidget(m_colIndex, std::move(m_sourceWidget));
|
||||||
m_text->clicked().connect(m_text, &TreeTableNodeText::OnClick);
|
}
|
||||||
m_node->setColumnWidget(m_colIndex, unique_ptr<TreeTableNodeText> (m_text));
|
|
||||||
|
void TreeTableNodeLineEdit::HoldSourceWidget(std::unique_ptr<WWidget> sourceWidget)
|
||||||
|
{
|
||||||
|
m_sourceWidget.swap(sourceWidget);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,13 +58,19 @@ public:
|
|||||||
WTreeTableNode * node, uint colIndex);
|
WTreeTableNode * node, uint colIndex);
|
||||||
virtual ~TreeTableNodeLineEdit();
|
virtual ~TreeTableNodeLineEdit();
|
||||||
/**
|
/**
|
||||||
* Creates back a TreeTableNodeText replacing this TreeTableNodeLineEdit.
|
* Move back the original TreeTableNodeText replacing this
|
||||||
|
* TreeTableNodeLineEdit.
|
||||||
*/
|
*/
|
||||||
void OnBlurred();
|
void OnBlurred();
|
||||||
|
/**
|
||||||
|
* Keep the original TreeTableNodeText verbatim.
|
||||||
|
* @param text
|
||||||
|
*/
|
||||||
|
void HoldSourceWidget(std::unique_ptr<WWidget> sourceWidget);
|
||||||
private:
|
private:
|
||||||
WTreeTableNode * m_node;
|
WTreeTableNode * m_node;
|
||||||
uint m_colIndex;
|
uint m_colIndex;
|
||||||
TreeTableNodeText * m_text;
|
std::unique_ptr<WWidget> m_sourceWidget;
|
||||||
|
|
||||||
void Init(WTreeTableNode * node, uint colIndex);
|
void Init(WTreeTableNode * node, uint colIndex);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user