void __fastcall TMainFrm::SaveExpandedNodes(TTreeView *ATree,
std::map<AnsiString, Pointer>& g_TempList)
{
TTreeNode *ANode;
TTreeNode *ANextNode;
TTreeNodes *ANodes;
ANodes = ATree->Items;
g_TempList.clear();
Cardinal FlagVal = 0;
bool Expaned1 = false;
bool Selected1 = false;
ANode = ANodes->GetFirstNode();
while (ANode)
{
Expaned1 = ANode->Expanded;
Selected1 = ANode->Selected;
if (Expaned1 || Selected1)
{
FlagVal = Selected1 << 1;
FlagVal = FlagVal | Expaned1;
AnsiString S = ANode->Text;
g_TempList[S] = Pointer(FlagVal);
}
ANextNode = ANode->getFirstChild();
while (ANextNode)
{
bool Expaned = ANextNode->Expanded;
bool Selected = ANextNode->Selected;
if (Expaned || Selected) {
FlagVal = Selected << 1;
FlagVal = FlagVal | Expaned;
AnsiString S = ANode->Text + ANextNode->Text;
g_TempList[S] = Pointer(FlagVal);
}
ANextNode = ANode->GetNextChild(ANextNode);
}
ANode = ANode->getNextSibling();
}
}
void __fastcall TMainFrm::ExpandNodes(TTreeView *ATree, std::map<AnsiString,
Pointer>& g_TempList)
{
TTreeNodes *ANodes = ATree->Items;
TTreeNode *ANode = ANodes->GetFirstNode();
TTreeNode *ANextNode;
AnsiString S;
Pointer P;
Cardinal FlagVal;
bool Expand, Selected;
while (ANode)
{
S = ANode->Text;
P = g_TempList[S];
if (P != 0)
{
FlagVal = Cardinal(P);
Expand = FlagVal & 1;
Selected = (FlagVal >> 1) & 1;
if (Expand)
{
ANode->Expand(true);
}
if (Selected)
{
ANode->Selected = true;
}
}
ANextNode = ANode->getFirstChild();
while (ANextNode)
{
S = ANextNode->Text;
P = g_TempList[ANode->Text + S];
if (P != 0)
{
FlagVal = Cardinal(P);
Expand = FlagVal & 1;
Selected = (FlagVal >> 1) & 1;
if (Expand)
{
ANextNode->Expand(true);
}
if (Selected)
{
ANextNode->Selected = true;
}
}
ANextNode = ANode->GetNextChild(ANextNode);
}
ANode = ANode->getNextSibling();
}
}