Jump to content

many TUniTreeView/TUniTreeNode features needed.


rgreat

Recommended Posts

TUniTreeView:

1. Add event: TUniTreeView.OnNodeExpand;

2. Add event: TUniTreeView.OnNodeCollapse;

3. Add MultiSelection ability (similar to TTreeView)

4. Add parameter (Shift: TShiftState) to event: TUniTreeView.OnChange;

5. Fix not working parameter Shift in event: TUniTreeView.OnMouseDown;

6. Fix not working parameter Shift in event: TUniTreeView.OnMouseUp;

7. Implement BeginUpdates/EndUpdates to speed up items update process.

8. Fix progressive slowdown in AddChild function.

9. Add option to disable node selection with right mouse button, or make selection with RMB functional.

10. Add an ability to insert node in the middle of the tree.

 

TUniTreeNode:

1. Add function GetNext: TUniTreeNode;

2. Add function GetPrev: TUniTreeNode;
3. Add function GetNextSibling: TUniTreeNode;
4. Add function GetPrevSibling: TUniTreeNode;
5. Add function TreeView: TUniTreeView;
 
Thanks. :)
Link to comment
Share on other sites

P.S. Semi functional helper for TUniTreeNode (will fail on root nodes if you do not pass TreeView):

 

 

 

TUniTreeNodeHelper = class helper for TUniTreeNode
    function GetNext(TV: TUniTreeView = nil): TUniTreeNode;
    function GetPrev(TV: TUniTreeView = nil): TUniTreeNode;
    function GetNextSibling(TV: TUniTreeView = nil): TUniTreeNode;
    function GetPrevSibling(TV: TUniTreeView = nil): TUniTreeNode;
end;

{ TUniTreeNodeHelper }

function TUniTreeNodeHelper.GetNext(TV: TUniTreeView = nil): TUniTreeNode;
var
  P : TUniTreeNode;
begin
  if Count>0 then begin
    Result:=Item[0];
  end else begin
    Result:=GetNextSibling(TV);
    if Result=nil then begin
      P:=Parent;
      while P<>nil do begin
        Result:=P.GetNextSibling(TV);
        if Result<>nil then Exit;
        P:=P.Parent;
      end;
    end;
  end;
end;

function TUniTreeNodeHelper.GetNextSibling(TV: TUniTreeView = nil): TUniTreeNode;
var
  i,n : integer;
begin
  n:=-1;
  Result:=nil;

  if Parent=nil then begin
    if TV=nil then Exit;

    for i:=0 to TV.Items.Count-1 do begin
      if (TV.Items[i].Level=0) and (TV.Items[i]=Self) then begin
        n:=i+1;
        Break;
      end;
    end;
    if (n>=0) and (n<TV.Items.Count) and (TV.Items[n].Level=0) then begin
      Result:=TV.Items[n];
    end;
  end else begin
    for i:=0 to Parent.Count-1 do begin
      if Parent.Item[i]=Self then begin
        n:=i+1;
        Break;
      end;
    end;
    if (n>=0) and (n<Parent.Count) then begin
      Result:=Parent.Item[n];
    end;
  end;
end;

function TUniTreeNodeHelper.GetPrev(TV: TUniTreeView = nil): TUniTreeNode;
begin
  Result:=GetPrevSibling(TV);
  if Result=nil then begin
    Result:=Parent;
  end;
end;

function TUniTreeNodeHelper.GetPrevSibling(TV: TUniTreeView = nil): TUniTreeNode;
var
  i,n : integer;
begin
  n:=-1;
  Result:=nil;

  if Parent=nil then begin
    if TV=nil then Exit;
    for i:=0 to TV.Items.Count-1 do begin
      if (TV.Items[i].Level=0) and (TV.Items[i]=Self) then begin
        n:=i-1;
        Break;
      end;
    end;
    if (n>=0) and (n<TV.Items.Count) and (TV.Items[n].Level=0) then begin
      Result:=TV.Items[n];
    end;
  end else begin
    for i:=0 to Parent.Count-1 do begin
      if Parent.Item[i]=Self then begin
        n:=i-1;
        Break;
      end;
    end;
    if (n>=0) and (n<Parent.Count) then begin
      Result:=Parent.Item[n];
    end;
  end;
end;
 

 

 

Link to comment
Share on other sites

  • 5 years later...
On 12/17/2015 at 5:36 PM, rgreat said:

3. Add function GetNextSibling: TUniTreeNode;

Подскажи, чем отличается от GetNext?

 

тут у меня есть код

http://forums.unigui.com/index.php?/topic/4218-extuxgridtristatetree/&tab=comments#comment-101192

так вот GetNextSibling работает правильно

Link to comment
Share on other sites

5 лет прошло. 😏

Топик давно не актуален.

 

Ты как первый день родился. 

GetNext бежит по всему дереву, а GetNextSibling только по соседям.

 

Link to comment
Share on other sites

×
×
  • Create New...