mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-08 05:19:08 +02:00
cody:lvlgraph: OnSelectionChanged
git-svn-id: trunk@40318 -
This commit is contained in:
parent
6662a11ade
commit
55d0aad334
@ -261,6 +261,7 @@ type
|
|||||||
procedure SetLevel(AValue: TLvlGraphLevel);
|
procedure SetLevel(AValue: TLvlGraphLevel);
|
||||||
procedure SetSelected(AValue: boolean);
|
procedure SetSelected(AValue: boolean);
|
||||||
procedure UnbindLevel;
|
procedure UnbindLevel;
|
||||||
|
procedure SelectionChanged;
|
||||||
public
|
public
|
||||||
Data: Pointer; // free for user data
|
Data: Pointer; // free for user data
|
||||||
constructor Create(TheGraph: TLvlGraph; TheCaption: string; TheLevel: TLvlGraphLevel);
|
constructor Create(TheGraph: TLvlGraph; TheCaption: string; TheLevel: TLvlGraphLevel);
|
||||||
@ -352,6 +353,7 @@ type
|
|||||||
FOnInvalidate: TNotifyEvent;
|
FOnInvalidate: TNotifyEvent;
|
||||||
FNodes: TFPList; // list of TLvlGraphNode
|
FNodes: TFPList; // list of TLvlGraphNode
|
||||||
fLevels: TFPList;
|
fLevels: TFPList;
|
||||||
|
FOnSelectionChanged: TNotifyEvent;
|
||||||
FOnStructureChanged: TOnLvlGraphStructureChanged;
|
FOnStructureChanged: TOnLvlGraphStructureChanged;
|
||||||
function GetLevelCount: integer;
|
function GetLevelCount: integer;
|
||||||
function GetLevels(Index: integer): TLvlGraphLevel;
|
function GetLevels(Index: integer): TLvlGraphLevel;
|
||||||
@ -360,6 +362,7 @@ type
|
|||||||
procedure InternalRemoveNode(Node: TLvlGraphNode);
|
procedure InternalRemoveNode(Node: TLvlGraphNode);
|
||||||
procedure InternalRemoveLevel(Lvl: TLvlGraphLevel);
|
procedure InternalRemoveLevel(Lvl: TLvlGraphLevel);
|
||||||
protected
|
protected
|
||||||
|
procedure SelectionChanged;
|
||||||
public
|
public
|
||||||
Data: Pointer; // free for user data
|
Data: Pointer; // free for user data
|
||||||
constructor Create;
|
constructor Create;
|
||||||
@ -369,6 +372,7 @@ type
|
|||||||
procedure Invalidate;
|
procedure Invalidate;
|
||||||
procedure StructureChanged(Element: TObject; Operation: TOperation);
|
procedure StructureChanged(Element: TObject; Operation: TOperation);
|
||||||
property OnInvalidate: TNotifyEvent read FOnInvalidate write FOnInvalidate;
|
property OnInvalidate: TNotifyEvent read FOnInvalidate write FOnInvalidate;
|
||||||
|
property OnSelectionChanged: TNotifyEvent read FOnSelectionChanged write FOnSelectionChanged;
|
||||||
property OnStructureChanged: TOnLvlGraphStructureChanged read FOnStructureChanged write FOnStructureChanged;// node, edge, level was added/deleted
|
property OnStructureChanged: TOnLvlGraphStructureChanged read FOnStructureChanged write FOnStructureChanged;// node, edge, level was added/deleted
|
||||||
|
|
||||||
// nodes
|
// nodes
|
||||||
@ -379,6 +383,8 @@ type
|
|||||||
property FirstSelected: TLvlGraphNode read FFirstSelected;
|
property FirstSelected: TLvlGraphNode read FFirstSelected;
|
||||||
property LastSelected: TLvlGraphNode read FLastSelected;
|
property LastSelected: TLvlGraphNode read FLastSelected;
|
||||||
procedure ClearSelection;
|
procedure ClearSelection;
|
||||||
|
procedure SingleSelect(Node: TLvlGraphNode);
|
||||||
|
function IsMultiSelection: boolean;
|
||||||
|
|
||||||
// edges
|
// edges
|
||||||
function GetEdge(SourceCaption, TargetCaption: string;
|
function GetEdge(SourceCaption, TargetCaption: string;
|
||||||
@ -484,6 +490,7 @@ type
|
|||||||
FGraph: TLvlGraph;
|
FGraph: TLvlGraph;
|
||||||
FNodeStyle: TLvlGraphNodeStyle;
|
FNodeStyle: TLvlGraphNodeStyle;
|
||||||
FNodeUnderMouse: TLvlGraphNode;
|
FNodeUnderMouse: TLvlGraphNode;
|
||||||
|
FOnSelectionChanged: TNotifyEvent;
|
||||||
FOptions: TLvlGraphCtrlOptions;
|
FOptions: TLvlGraphCtrlOptions;
|
||||||
fUpdateLock: integer;
|
fUpdateLock: integer;
|
||||||
FFlags: TLvlGraphControlFlags;
|
FFlags: TLvlGraphControlFlags;
|
||||||
@ -494,8 +501,9 @@ type
|
|||||||
procedure SetNodeUnderMouse(AValue: TLvlGraphNode);
|
procedure SetNodeUnderMouse(AValue: TLvlGraphNode);
|
||||||
procedure SetOptions(AValue: TLvlGraphCtrlOptions);
|
procedure SetOptions(AValue: TLvlGraphCtrlOptions);
|
||||||
protected
|
protected
|
||||||
procedure AutoLayoutLevels(TxtH: LongInt);
|
procedure AutoLayoutLevels(TxtH: LongInt); virtual;
|
||||||
procedure GraphInvalidate(Sender: TObject); virtual;
|
procedure GraphInvalidate(Sender: TObject); virtual;
|
||||||
|
procedure GraphSelectionChanged(Sender: TObject); virtual;
|
||||||
procedure GraphStructureChanged(Sender, Element: TObject; Operation: TOperation); virtual;
|
procedure GraphStructureChanged(Sender, Element: TObject; Operation: TOperation); virtual;
|
||||||
procedure DoSetBounds(ALeft, ATop, AWidth, AHeight: integer); override;
|
procedure DoSetBounds(ALeft, ATop, AWidth, AHeight: integer); override;
|
||||||
procedure Paint; override;
|
procedure Paint; override;
|
||||||
@ -517,6 +525,7 @@ type
|
|||||||
property NodeStyle: TLvlGraphNodeStyle read FNodeStyle write SetNodeStyle;
|
property NodeStyle: TLvlGraphNodeStyle read FNodeStyle write SetNodeStyle;
|
||||||
property NodeUnderMouse: TLvlGraphNode read FNodeUnderMouse write SetNodeUnderMouse;
|
property NodeUnderMouse: TLvlGraphNode read FNodeUnderMouse write SetNodeUnderMouse;
|
||||||
property Options: TLvlGraphCtrlOptions read FOptions write SetOptions default DefaultLvlGraphCtrlOptions;
|
property Options: TLvlGraphCtrlOptions read FOptions write SetOptions default DefaultLvlGraphCtrlOptions;
|
||||||
|
property OnSelectionChanged: TNotifyEvent read FOnSelectionChanged write FOnSelectionChanged;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TLvlGraphControl }
|
{ TLvlGraphControl }
|
||||||
@ -552,6 +561,7 @@ type
|
|||||||
property OnMouseLeave;
|
property OnMouseLeave;
|
||||||
property OnMouseMove;
|
property OnMouseMove;
|
||||||
property OnMouseUp;
|
property OnMouseUp;
|
||||||
|
property OnSelectionChanged;
|
||||||
property OnShowHint;
|
property OnShowHint;
|
||||||
property OnStartDrag;
|
property OnStartDrag;
|
||||||
property OnUTF8KeyPress;
|
property OnUTF8KeyPress;
|
||||||
@ -1001,6 +1011,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomLvlGraphControl.GraphSelectionChanged(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if OnSelectionChanged<>nil then
|
||||||
|
OnSelectionChanged(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCustomLvlGraphControl.DrawCaptions(const TxtH: integer);
|
procedure TCustomLvlGraphControl.DrawCaptions(const TxtH: integer);
|
||||||
var
|
var
|
||||||
Node: TLvlGraphNode;
|
Node: TLvlGraphNode;
|
||||||
@ -1199,6 +1215,7 @@ begin
|
|||||||
FOptions:=DefaultLvlGraphCtrlOptions;
|
FOptions:=DefaultLvlGraphCtrlOptions;
|
||||||
FGraph:=TLvlGraph.Create;
|
FGraph:=TLvlGraph.Create;
|
||||||
FGraph.OnInvalidate:=@GraphInvalidate;
|
FGraph.OnInvalidate:=@GraphInvalidate;
|
||||||
|
FGraph.OnSelectionChanged:=@GraphSelectionChanged;
|
||||||
FGraph.OnStructureChanged:=@GraphStructureChanged;
|
FGraph.OnStructureChanged:=@GraphStructureChanged;
|
||||||
FNodeStyle:=TLvlGraphNodeStyle.Create(Self);
|
FNodeStyle:=TLvlGraphNodeStyle.Create(Self);
|
||||||
end;
|
end;
|
||||||
@ -1457,6 +1474,19 @@ begin
|
|||||||
FirstSelected.Selected:=false;
|
FirstSelected.Selected:=false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TLvlGraph.SingleSelect(Node: TLvlGraphNode);
|
||||||
|
begin
|
||||||
|
if (Node=FirstSelected) and (Node.NextSelected=nil) then exit;
|
||||||
|
Node.Selected:=true;
|
||||||
|
while FirstSelected<>Node do
|
||||||
|
FirstSelected.Selected:=false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TLvlGraph.IsMultiSelection: boolean;
|
||||||
|
begin
|
||||||
|
Result:=(FirstSelected<>nil) and (FirstSelected.NextSelected<>nil);
|
||||||
|
end;
|
||||||
|
|
||||||
function TLvlGraph.GetEdge(SourceCaption, TargetCaption: string;
|
function TLvlGraph.GetEdge(SourceCaption, TargetCaption: string;
|
||||||
CreateIfNotExists: boolean): TLvlGraphEdge;
|
CreateIfNotExists: boolean): TLvlGraphEdge;
|
||||||
var
|
var
|
||||||
@ -1494,6 +1524,12 @@ begin
|
|||||||
StructureChanged(Lvl,opRemove);
|
StructureChanged(Lvl,opRemove);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TLvlGraph.SelectionChanged;
|
||||||
|
begin
|
||||||
|
if OnSelectionChanged<>nil then
|
||||||
|
OnSelectionChanged(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TLvlGraph.CreateTopologicalLevels;
|
procedure TLvlGraph.CreateTopologicalLevels;
|
||||||
{$DEFINE LvlGraphConsistencyCheck}
|
{$DEFINE LvlGraphConsistencyCheck}
|
||||||
var
|
var
|
||||||
@ -1981,18 +2017,9 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TLvlGraphNode.SetSelected(AValue: boolean);
|
procedure TLvlGraphNode.SetSelected(AValue: boolean);
|
||||||
begin
|
|
||||||
if FSelected=AValue then Exit;
|
procedure Unselect;
|
||||||
FSelected:=AValue;
|
begin
|
||||||
if Graph<>nil then begin
|
|
||||||
if Selected then begin
|
|
||||||
FPrevSelected:=Graph.LastSelected;
|
|
||||||
if FPrevSelected<>nil then
|
|
||||||
FPrevSelected.FNextSelected:=Self
|
|
||||||
else
|
|
||||||
Graph.FFirstSelected:=Self;
|
|
||||||
Graph.FLastSelected:=Self;
|
|
||||||
end else begin
|
|
||||||
if FPrevSelected<>nil then
|
if FPrevSelected<>nil then
|
||||||
FPrevSelected.FNextSelected:=FNextSelected
|
FPrevSelected.FNextSelected:=FNextSelected
|
||||||
else
|
else
|
||||||
@ -2004,8 +2031,37 @@ begin
|
|||||||
FNextSelected:=nil;
|
FNextSelected:=nil;
|
||||||
FPrevSelected:=nil;
|
FPrevSelected:=nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure Select;
|
||||||
|
begin
|
||||||
|
FPrevSelected:=Graph.LastSelected;
|
||||||
|
if FPrevSelected<>nil then
|
||||||
|
FPrevSelected.FNextSelected:=Self
|
||||||
|
else
|
||||||
|
Graph.FFirstSelected:=Self;
|
||||||
|
Graph.FLastSelected:=Self;
|
||||||
end;
|
end;
|
||||||
Invalidate;
|
|
||||||
|
begin
|
||||||
|
if FSelected=AValue then begin
|
||||||
|
if Graph=nil then exit;
|
||||||
|
if Graph.LastSelected=Self then exit;
|
||||||
|
// make this node the last selected
|
||||||
|
Unselect;
|
||||||
|
Select;
|
||||||
|
SelectionChanged;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
// change Selected
|
||||||
|
FSelected:=AValue;
|
||||||
|
if Graph<>nil then begin
|
||||||
|
if Selected then begin
|
||||||
|
Select;
|
||||||
|
end else begin
|
||||||
|
Unselect;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
SelectionChanged;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TLvlGraphNode.UnbindLevel;
|
procedure TLvlGraphNode.UnbindLevel;
|
||||||
@ -2014,6 +2070,12 @@ begin
|
|||||||
FLevel.fNodes.Remove(Self);
|
FLevel.fNodes.Remove(Self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TLvlGraphNode.SelectionChanged;
|
||||||
|
begin
|
||||||
|
if Graph<>nil then
|
||||||
|
Graph.SelectionChanged;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TLvlGraphNode.Invalidate;
|
procedure TLvlGraphNode.Invalidate;
|
||||||
begin
|
begin
|
||||||
if Graph<>nil then
|
if Graph<>nil then
|
||||||
|
Loading…
Reference in New Issue
Block a user