// ======================================================================
// Fllt alle Treeviews aus den Listen
//

procedure FuelleProArbeitspaket(
  Arbeitspaket: TArbeitspaket;
  var ParentAlle, ParentAusw: PVirtualNode;
  tvwAlle, tvwAusw: TVirtualStringTree;
  Alle, Ausw: TBasisListe);
var
  I, SearchIndex    : Integer;
  Node              : PVirtualNode;
  NodeData          : PNodeData;
begin
  ParentAlle := nil;
  ParentAusw := nil;
  if Assigned(Alle) and Assigned(Ausw) then
    try
      tvwAlle.BeginUpdate;
      tvwAusw.BeginUpdate;

      ParentAlle := tvwAlle.AddChild(nil);
      NodeData := tvwAlle.GetNodeData(ParentAlle);
      NodeData.Typ := tnArbeitspaket;
      NodeData.Name := Arbeitspaket.Programmstand;
      NodeData.Kommentar := '';
      NodeData.Arbeitspaket := Arbeitspaket;

      ParentAusw := tvwAusw.AddChild(nil);
      NodeData := tvwAusw.GetNodeData(ParentAusw);
      NodeData.Typ := tnArbeitspaket;
      NodeData.Name := Arbeitspaket.Programmstand;
      NodeData.Kommentar := '';
      NodeData.Arbeitspaket := Arbeitspaket;
      NodeData.ZielListe := Ausw;       // Zielliste zum Speichern der Daten beim Schlieen des Formulars festlegen.

      for i := 0 to Alle.Count - 1 do
        begin
          if Ausw.Find(TBasisObjekt(Alle[i]), SearchIndex) then
            begin
              Node := tvwAusw.AddChild(ParentAusw);
              NodeData := tvwAusw.GetNodeData(Node);
            end
          else
            begin
              Node := tvwAlle.AddChild(ParentAlle);
              NodeData := tvwAlle.GetNodeData(Node);
            end;
          NodeData.Typ := tnAuswLabel;
          NodeData.ParentAlle := ParentAlle;
          NodeData.ParentAusw := ParentAusw;
          NodeData.ZielListe := Ausw;
          NodeData.Objekt := TMessVerstell(Alle[i]);
        end;

    finally
      with tvwAlle do
        begin
          Header.SortColumn := 0;
          Header.SortDirection := sdAscending;
          SortTree(Header.SortColumn, Header.SortDirection);
          Expanded[ParentAlle] := true;
          EndUpdate;
        end;

      with tvwAusw do
        begin
          Header.SortColumn := 0;
          Header.SortDirection := sdAscending;
          SortTree(Header.SortColumn, Header.SortDirection);
          Expanded[ParentAusw] := true;
          EndUpdate;
        end;

      Alle.Reload := false;
      Ausw.Reload := false;
    end
end;

procedure TFormAuswahl.FuelleEinzelAuswahl;
var
  i                 : integer;
  Arbeitspaket      : TArbeitspaket;

begin
  tvwAlleRamzellen.Clear;
  tvwAuswRamzellen.Clear;
  tvwAlleBitKanaele.Clear;
  tvwAuswBitKanaele.Clear;
  tvwAlleKonstanten.Clear;
  tvwAuswKonstanten.Clear;
  tvwAlleKennfelder.Clear;
  tvwAuswKennfelder.Clear;
  tvwAlleStuetzstellen.Clear;
  tvwAuswStuetzstellen.Clear;

  for i := 0 to OptionenProjekt.Arbeitspakete.Count - 1 do
    begin
      Arbeitspaket := TArbeitspaket(OptionenProjekt.Arbeitspakete.Objects[i]);
      with Arbeitspaket do
        if Anzeigen then
          begin
            FuelleProArbeitspaket(Arbeitspaket, fRootAlle[i].RamRoot, fRootAusw[i].RamRoot, tvwAlleRamzellen, tvwAuswRamzellen, QuellListen.Ramzellen, fAuswahlClone[i].Ramzellen);
            FuelleProArbeitspaket(Arbeitspaket, fRootAlle[i].BitRoot, fRootAusw[i].BitRoot, tvwAlleBitKanaele, tvwAuswBitKanaele, QuellListen.Bitkanaele, fAuswahlClone[i].Bitkanaele);
            FuelleProArbeitspaket(Arbeitspaket, fRootAlle[i].KonstRoot, fRootAusw[i].KonstRoot, tvwAlleKonstanten, tvwAuswKonstanten, QuellListen.Konstanten, fAuswahlClone[i].Konstanten);
            FuelleProArbeitspaket(Arbeitspaket, fRootAlle[i].KennfRoot, fRootAusw[i].KennfRoot, tvwAlleKennfelder, tvwAuswKennfelder, QuellListen.Kennfelder, fAuswahlClone[i].Kennfelder);
            FuelleProArbeitspaket(Arbeitspaket, fRootAlle[i].SSVRoot, fRootAusw[i].SSVRoot, tvwAlleStuetzstellen, tvwAuswStuetzstellen, QuellListen.Stuetzstellen, fAuswahlClone[i].Stuetzstellen);
          end;
    end;
end;

