Jacek
Jacek

Reputation: 63

TTreeView check all parents from child

This is a code that checks all childes when user check one parent. But how to check all parent checking one childe? By the way. I tried to use Node->getPrevSibling();but there is no effect.

void __fastcall TForm1::UpdateChildStates( TTreeNode *Node )
{
    int state = TreeView_GetItemState(TreeView1->Handle, Node->ItemId, TVIS_STATEIMAGEMASK);
    int StateIndex = ((state & TVIS_STATEIMAGEMASK)>>12);

    Node = Node->getFirstChild();
    while( Node )
    {
        Node->StateIndex = StateIndex;
        UpdateChildStates( Node );
        Node = Node->getNextSibling();
    }
}
//-------------------------------------------------------------------------

void __fastcall TForm1::TreeView1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
  TTreeNode *Node;

  THitTests HitTests = TreeView1->GetHitTestInfoAt(X, Y);
  if( HitTests.Contains(htOnStateIcon) )
    Node = TreeView1->GetNodeAt( X, Y );
  else return;

  if( Node )
  {
    TreeView1->Items->BeginUpdate();

    try {
        UpdateChildStates(Node);
    }
    __finally {
        TreeView1->Items->EndUpdate();
    }
  }
}

Upvotes: 0

Views: 90

Answers (1)

Tom Brunberg
Tom Brunberg

Reputation: 21033

Traverse parent nodes using Node = Node->Parent;

Upvotes: 2

Related Questions