Skip to content

Commit a59b15c

Browse files
committed
Revert "Fix #85 crash when removing TreeView from Box"
This reverts commit f811e98. Signed-off-by: jiajia_deng <[email protected]>
1 parent 78e3db2 commit a59b15c

File tree

2 files changed

+23
-26
lines changed

2 files changed

+23
-26
lines changed

tool_kits/duilib/Control/TreeView.cpp

+22-25
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ TreeNode::TreeNode() :
1010
m_pTreeView(nullptr),
1111
m_pParentTreeNode(nullptr),
1212
m_iDepth(ROOT_NODE_DEPTH),
13-
m_aTreeNodes()
13+
mTreeNodes()
1414
{
1515

1616
}
@@ -37,12 +37,9 @@ void TreeNode::SetInternVisible(bool bVisible)
3737

3838
void TreeNode::SetWindow(Window* pManager, Box* pParent, bool bInit)
3939
{
40-
for (auto it = m_aTreeNodes.begin(); it != m_aTreeNodes.end(); it++)
40+
for (auto it = mTreeNodes.begin(); it != mTreeNodes.end(); it++)
4141
{
42-
// 将所有子控件的父节点(GetParent)都设置为 TreeView 中隐藏的 TreeNode
43-
// 在 TreeView 递归销毁子控件时不会因为获取不到父容器指针而崩溃
44-
// RootNode 是一个智能指针,在 TreeView 完全销毁以后会自动销毁
45-
(*it)->SetWindow(pManager, m_pTreeView->GetRootNode(), bInit);
42+
(*it)->SetWindow(pManager, this, bInit);
4643
}
4744

4845
ListContainerElement::SetWindow(pManager, pParent, bInit);
@@ -78,8 +75,8 @@ bool TreeNode::AddChildNode(TreeNode* pTreeNode)
7875

7976
bool TreeNode::AddChildNodeAt(TreeNode* pTreeNode, std::size_t iIndex)
8077
{
81-
if( iIndex < 0 || iIndex > m_aTreeNodes.size() ) return false;
82-
m_aTreeNodes.insert(m_aTreeNodes.begin() + iIndex, pTreeNode);
78+
if( iIndex < 0 || iIndex > mTreeNodes.size() ) return false;
79+
mTreeNodes.insert(mTreeNodes.begin() + iIndex, pTreeNode);
8380

8481
pTreeNode->m_iDepth = m_iDepth + 1;
8582
pTreeNode->SetParentNode(this);
@@ -98,50 +95,50 @@ bool TreeNode::AddChildNodeAt(TreeNode* pTreeNode, std::size_t iIndex)
9895
std::size_t nGlobalIndex = iIndex;
9996
for (std::size_t i = 0; i < iIndex; i++)
10097
{
101-
nGlobalIndex += ((TreeNode*)m_aTreeNodes[i])->GetDescendantNodeCount();
98+
nGlobalIndex += ((TreeNode*)mTreeNodes[i])->GetDescendantNodeCount();
10299
}
103100

104101
return m_pTreeView->ListBox::AddAt(pTreeNode, (int)(nodeIndex + nGlobalIndex + 1));
105102
}
106103

107104
bool TreeNode::RemoveChildNodeAt(std::size_t iIndex)
108105
{
109-
if (iIndex < 0 || iIndex >= m_aTreeNodes.size()) {
106+
if (iIndex < 0 || iIndex >= mTreeNodes.size()) {
110107
return false;
111108
}
112109

113-
TreeNode* pTreeNode = ((TreeNode*)m_aTreeNodes[iIndex]);
114-
m_aTreeNodes.erase(m_aTreeNodes.begin() + iIndex);
110+
TreeNode* pTreeNode = ((TreeNode*)mTreeNodes[iIndex]);
111+
mTreeNodes.erase(mTreeNodes.begin() + iIndex);
115112

116113
return pTreeNode->RemoveSelf();
117114
}
118115

119116
bool TreeNode::RemoveChildNode(TreeNode* pTreeNode)
120117
{
121-
auto it = std::find(m_aTreeNodes.begin(), m_aTreeNodes.end(), pTreeNode);
122-
if (it == m_aTreeNodes.end()) {
118+
auto it = std::find(mTreeNodes.begin(), mTreeNodes.end(), pTreeNode);
119+
if (it == mTreeNodes.end()) {
123120
return false;
124121
}
125122

126-
int iIndex = it - m_aTreeNodes.begin();
123+
int iIndex = it - mTreeNodes.begin();
127124
return RemoveChildNodeAt(iIndex);
128125
}
129126

130127
void TreeNode::RemoveAllChildNode()
131128
{
132-
while (m_aTreeNodes.size() > 0)
129+
while (mTreeNodes.size() > 0)
133130
{
134131
RemoveChildNodeAt(0);
135132
}
136133
}
137134

138135
bool TreeNode::RemoveSelf()
139136
{
140-
for( auto it = m_aTreeNodes.begin(); it != m_aTreeNodes.end(); it++ )
137+
for( auto it = mTreeNodes.begin(); it != mTreeNodes.end(); it++ )
141138
{
142139
(*it)->RemoveSelf();
143140
}
144-
m_aTreeNodes.clear();
141+
mTreeNodes.clear();
145142

146143
if (m_iDepth != ROOT_NODE_DEPTH) {
147144
return m_pTreeView->ListBox::RemoveAt(GetIndex());
@@ -153,7 +150,7 @@ bool TreeNode::RemoveSelf()
153150
int TreeNode::GetDescendantNodeCount()
154151
{
155152
int nodeCount = (int)GetChildNodeCount();
156-
for( auto it = m_aTreeNodes.begin(); it != m_aTreeNodes.end(); it++ )
153+
for( auto it = mTreeNodes.begin(); it != mTreeNodes.end(); it++ )
157154
{
158155
nodeCount += (*it)->GetDescendantNodeCount();
159156
}
@@ -163,22 +160,22 @@ int TreeNode::GetDescendantNodeCount()
163160

164161
std::size_t TreeNode::GetChildNodeCount()
165162
{
166-
return m_aTreeNodes.size();
163+
return mTreeNodes.size();
167164
}
168165

169166
TreeNode* TreeNode::GetChildNode(std::size_t iIndex)
170167
{
171-
if( iIndex < 0 || iIndex >= m_aTreeNodes.size() ) return NULL;
172-
return static_cast<TreeNode*>(m_aTreeNodes[iIndex]);
168+
if( iIndex < 0 || iIndex >= mTreeNodes.size() ) return NULL;
169+
return static_cast<TreeNode*>(mTreeNodes[iIndex]);
173170
}
174171

175172
int TreeNode::GetChildNodeIndex(TreeNode* pTreeNode)
176173
{
177-
auto it = std::find(m_aTreeNodes.begin(), m_aTreeNodes.end(), pTreeNode);
178-
if (it == m_aTreeNodes.end()) {
174+
auto it = std::find(mTreeNodes.begin(), mTreeNodes.end(), pTreeNode);
175+
if (it == mTreeNodes.end()) {
179176
return -1;
180177
}
181-
return it - m_aTreeNodes.begin();
178+
return it - mTreeNodes.begin();
182179
}
183180

184181
bool TreeNode::IsExpand() const

tool_kits/duilib/Control/TreeView.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class UILIB_API TreeNode : public ListContainerElement
140140
bool m_bExpand;
141141
TreeView *m_pTreeView;
142142
TreeNode *m_pParentTreeNode;
143-
std::vector<TreeNode*> m_aTreeNodes;
143+
std::vector<TreeNode*> mTreeNodes;
144144
};
145145

146146
class UILIB_API TreeView : public ListBox

0 commit comments

Comments
 (0)