mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 15:39:32 +02:00
project groups: fixed new project group
git-svn-id: trunk@50378 -
This commit is contained in:
parent
b4330dfd9e
commit
f29d2f8b35
@ -667,6 +667,7 @@ begin
|
|||||||
ActivateTarget(Target);
|
ActivateTarget(Target);
|
||||||
Inc(I);
|
Inc(I);
|
||||||
end;
|
end;
|
||||||
|
Modified:=false;
|
||||||
finally
|
finally
|
||||||
XMLConfig.Free;
|
XMLConfig.Free;
|
||||||
end;
|
end;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
Todo:
|
Todo:
|
||||||
|
- show * when modified
|
||||||
- close windows on IDE close
|
- close windows on IDE close
|
||||||
- activate project when project is opened
|
- activate project when project is opened
|
||||||
- deactivate project when project is closed
|
- deactivate project when project is closed
|
||||||
@ -112,7 +113,7 @@ type
|
|||||||
procedure ATargetLaterUpdate(Sender: TObject);
|
procedure ATargetLaterUpdate(Sender: TObject);
|
||||||
procedure ATargetUninstallExecute(Sender: TObject);
|
procedure ATargetUninstallExecute(Sender: TObject);
|
||||||
procedure ATargetUninstallUpdate(Sender: TObject);
|
procedure ATargetUninstallUpdate(Sender: TObject);
|
||||||
procedure DoFileNameChange(Sender: TObject);
|
procedure OnProjectGroupFileNameChanged(Sender: TObject);
|
||||||
procedure FormCreate(Sender: TObject);
|
procedure FormCreate(Sender: TObject);
|
||||||
procedure FormDestroy(Sender: TObject);
|
procedure FormDestroy(Sender: TObject);
|
||||||
procedure TVPGDblClick(Sender: TObject);
|
procedure TVPGDblClick(Sender: TObject);
|
||||||
@ -125,10 +126,11 @@ type
|
|||||||
// Project group callbacks
|
// Project group callbacks
|
||||||
procedure ConfigNode(Node: TTreeNode; Const ACaption: String;
|
procedure ConfigNode(Node: TTreeNode; Const ACaption: String;
|
||||||
ANodeData: TNodeData);
|
ANodeData: TNodeData);
|
||||||
procedure DoTargetAdded(Sender: TObject; Target: TPGCompileTarget);
|
procedure OnProjectGroupDestroy(Sender: TObject);
|
||||||
procedure DoTargetDeleted(Sender: TObject; Target: TPGCompileTarget);
|
procedure OnTargetAdded(Sender: TObject; Target: TPGCompileTarget);
|
||||||
procedure DoTargetActivated(Sender: TObject; Target: TPGCompileTarget);
|
procedure OnTargetDeleted(Sender: TObject; Target: TPGCompileTarget);
|
||||||
procedure DoTargetExchanged(Sender: TObject; Target1, Target2: TPGCompileTarget);
|
procedure OnTargetActivated(Sender: TObject; Target: TPGCompileTarget);
|
||||||
|
procedure OnTargetExchanged(Sender: TObject; Target1, Target2: TPGCompileTarget);
|
||||||
function AllowPerform(ATargetAction: TPGTargetAction; AAction: TAction= Nil): Boolean;
|
function AllowPerform(ATargetAction: TPGTargetAction; AAction: TAction= Nil): Boolean;
|
||||||
procedure ClearEventCallBacks(AProjectGroup: TProjectGroup);
|
procedure ClearEventCallBacks(AProjectGroup: TProjectGroup);
|
||||||
procedure SetEventCallBacks(AProjectGroup: TProjectGroup);
|
procedure SetEventCallBacks(AProjectGroup: TProjectGroup);
|
||||||
@ -269,6 +271,7 @@ begin
|
|||||||
PG:=TIDEProjectGroup(AProjectGroup)
|
PG:=TIDEProjectGroup(AProjectGroup)
|
||||||
else
|
else
|
||||||
exit;
|
exit;
|
||||||
|
PG.RemoveAllHandlersOfObject(Self);
|
||||||
PG.OnFileNameChange:=Nil;
|
PG.OnFileNameChange:=Nil;
|
||||||
PG.OnTargetAdded:=Nil;
|
PG.OnTargetAdded:=Nil;
|
||||||
PG.OnTargetDeleted:=Nil;
|
PG.OnTargetDeleted:=Nil;
|
||||||
@ -280,15 +283,16 @@ procedure TProjectGroupEditorForm.SetEventCallBacks(AProjectGroup: TProjectGroup
|
|||||||
Var
|
Var
|
||||||
PG: TIDEProjectGroup;
|
PG: TIDEProjectGroup;
|
||||||
begin
|
begin
|
||||||
if AProjectGroup is TIDEProjectGroup then
|
if AProjectGroup is TIDEProjectGroup then
|
||||||
PG:=TIDEProjectGroup(AProjectGroup)
|
PG:=TIDEProjectGroup(AProjectGroup)
|
||||||
else
|
else
|
||||||
exit;
|
exit;
|
||||||
PG.OnFileNameChange:=@DoFileNameChange;
|
PG.AddHandlerOnDestroy(@OnProjectGroupDestroy);
|
||||||
PG.OnTargetAdded:=@DoTargetAdded;
|
PG.OnFileNameChange:=@OnProjectGroupFileNameChanged;
|
||||||
PG.OnTargetDeleted:=@DoTargetDeleted;
|
PG.OnTargetAdded:=@OnTargetAdded;
|
||||||
PG.OnTargetActivated:=@DoTargetActivated;
|
PG.OnTargetDeleted:=@OnTargetDeleted;
|
||||||
PG.OnTargetsExchanged:=@DoTargetExchanged;
|
PG.OnTargetActivated:=@OnTargetActivated;
|
||||||
|
PG.OnTargetsExchanged:=@OnTargetExchanged;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectGroupEditorForm.SetProjectGroup(AValue: TProjectGroup);
|
procedure TProjectGroupEditorForm.SetProjectGroup(AValue: TProjectGroup);
|
||||||
@ -432,7 +436,7 @@ begin
|
|||||||
UpdateIDEMenuCommandFromAction(Sender,cmdTargetUninstall);
|
UpdateIDEMenuCommandFromAction(Sender,cmdTargetUninstall);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectGroupEditorForm.DoFileNameChange(Sender: TObject);
|
procedure TProjectGroupEditorForm.OnProjectGroupFileNameChanged(Sender: TObject);
|
||||||
var
|
var
|
||||||
TVNode: TTreeNode;
|
TVNode: TTreeNode;
|
||||||
NodeData: TNodeData;
|
NodeData: TNodeData;
|
||||||
@ -515,11 +519,11 @@ begin
|
|||||||
begin
|
begin
|
||||||
ND.ProjectGroup.ActivateTarget(ND.Target);
|
ND.ProjectGroup.ActivateTarget(ND.Target);
|
||||||
if (ND.ProjectGroup<>FProjectGroup) then // No callback, fake it.
|
if (ND.ProjectGroup<>FProjectGroup) then // No callback, fake it.
|
||||||
DoTargetActivated(ND.ProjectGroup,ND.Target);
|
OnTargetActivated(ND.ProjectGroup,ND.Target);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectGroupEditorForm.DoTargetAdded(Sender: TObject;
|
procedure TProjectGroupEditorForm.OnTargetAdded(Sender: TObject;
|
||||||
Target: TPGCompileTarget);
|
Target: TPGCompileTarget);
|
||||||
Var
|
Var
|
||||||
PG: TProjectGroup;
|
PG: TProjectGroup;
|
||||||
@ -534,7 +538,7 @@ begin
|
|||||||
UpdateStatusBarTargetCount;
|
UpdateStatusBarTargetCount;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectGroupEditorForm.DoTargetDeleted(Sender: TObject;
|
procedure TProjectGroupEditorForm.OnTargetDeleted(Sender: TObject;
|
||||||
Target: TPGCompileTarget);
|
Target: TPGCompileTarget);
|
||||||
Var
|
Var
|
||||||
PG: TProjectGroup;
|
PG: TProjectGroup;
|
||||||
@ -549,7 +553,7 @@ begin
|
|||||||
UpdateStatusBarTargetCount;
|
UpdateStatusBarTargetCount;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectGroupEditorForm.DoTargetActivated(Sender: TObject;
|
procedure TProjectGroupEditorForm.OnTargetActivated(Sender: TObject;
|
||||||
Target: TPGCompileTarget);
|
Target: TPGCompileTarget);
|
||||||
Var
|
Var
|
||||||
NC,NA: TTreeNode;
|
NC,NA: TTreeNode;
|
||||||
@ -569,7 +573,7 @@ begin
|
|||||||
SBPG.Panels[piActiveTarget].Text:=Format(lisActiveTarget,[N]);
|
SBPG.Panels[piActiveTarget].Text:=Format(lisActiveTarget,[N]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectGroupEditorForm.DoTargetExchanged(Sender: TObject; Target1,
|
procedure TProjectGroupEditorForm.OnTargetExchanged(Sender: TObject; Target1,
|
||||||
Target2: TPGCompileTarget);
|
Target2: TPGCompileTarget);
|
||||||
Var
|
Var
|
||||||
S,N1,N2: TTreeNode;
|
S,N1,N2: TTreeNode;
|
||||||
@ -845,6 +849,13 @@ begin
|
|||||||
Node.StateIndex:=-1;
|
Node.StateIndex:=-1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TProjectGroupEditorForm.OnProjectGroupDestroy(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if Sender=FProjectGroup then begin
|
||||||
|
ProjectGroup:=nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function TProjectGroupEditorForm.CreateNode(AParent: TTreeNode;
|
function TProjectGroupEditorForm.CreateNode(AParent: TTreeNode;
|
||||||
const ACaption: String; ANodeType: TNodeType; ANodeData: TPGCompileTarget;
|
const ACaption: String; ANodeType: TNodeType; ANodeData: TPGCompileTarget;
|
||||||
AProjectGroup: TProjectGroup): TTreeNode;
|
AProjectGroup: TProjectGroup): TTreeNode;
|
||||||
|
@ -8,7 +8,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, IDEOptionsIntf, PackageIntf, ProjectIntf, LazFileUtils,
|
Classes, SysUtils, IDEOptionsIntf, PackageIntf, ProjectIntf, LazFileUtils,
|
||||||
LazFileCache;
|
LazFileCache, LazMethodList;
|
||||||
|
|
||||||
Type
|
Type
|
||||||
TPGTargetType = (
|
TPGTargetType = (
|
||||||
@ -81,10 +81,15 @@ Type
|
|||||||
property RequiredPackageCount: integer read GetRequiredPackageCount;
|
property RequiredPackageCount: integer read GetRequiredPackageCount;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
TProjectGroupHandler = (
|
||||||
|
pghDestroy
|
||||||
|
);
|
||||||
|
|
||||||
{ TProjectGroup }
|
{ TProjectGroup }
|
||||||
|
|
||||||
TProjectGroup = class(TPersistent)
|
TProjectGroup = class(TPersistent)
|
||||||
private
|
private
|
||||||
|
FHandlers: array[TProjectGroupHandler] of TMethodList;
|
||||||
FChangeStamp: int64;
|
FChangeStamp: int64;
|
||||||
FFileName: String;
|
FFileName: String;
|
||||||
FLastSavedChangeStamp: int64;
|
FLastSavedChangeStamp: int64;
|
||||||
@ -98,7 +103,14 @@ Type
|
|||||||
function GetTarget(Index: Integer): TPGCompileTarget; virtual; abstract;
|
function GetTarget(Index: Integer): TPGCompileTarget; virtual; abstract;
|
||||||
function GetRemovedTargetCount: Integer; virtual; abstract;
|
function GetRemovedTargetCount: Integer; virtual; abstract;
|
||||||
function GetRemovedTarget(Index: Integer): TPGCompileTarget; virtual; abstract;
|
function GetRemovedTarget(Index: Integer): TPGCompileTarget; virtual; abstract;
|
||||||
|
procedure DoCallNotifyHandler(HandlerType: TProjectGroupHandler;
|
||||||
|
Sender: TObject); overload;
|
||||||
|
procedure AddHandler(HandlerType: TProjectGroupHandler;
|
||||||
|
const AMethod: TMethod; AsLast: boolean = false);
|
||||||
|
procedure RemoveHandler(HandlerType: TProjectGroupHandler;
|
||||||
|
const AMethod: TMethod);
|
||||||
public
|
public
|
||||||
|
destructor Destroy; override;
|
||||||
function Perform(Index: Integer; AAction: TPGTargetAction): TPGActionResult;
|
function Perform(Index: Integer; AAction: TPGTargetAction): TPGActionResult;
|
||||||
function Perform(Const AFileName: String; AAction: TPGTargetAction): TPGActionResult;
|
function Perform(Const AFileName: String; AAction: TPGTargetAction): TPGActionResult;
|
||||||
function Perform(Target: TPGCompileTarget; AAction: TPGTargetAction): TPGActionResult; virtual;
|
function Perform(Target: TPGCompileTarget; AAction: TPGTargetAction): TPGActionResult; virtual;
|
||||||
@ -125,6 +137,10 @@ Type
|
|||||||
property ActiveTarget: TPGCompileTarget Read GetActiveTarget Write SetActiveTarget;
|
property ActiveTarget: TPGCompileTarget Read GetActiveTarget Write SetActiveTarget;
|
||||||
property Modified: Boolean Read GetModified write SetModified;
|
property Modified: Boolean Read GetModified write SetModified;
|
||||||
property ChangeStamp: int64 read FChangeStamp;
|
property ChangeStamp: int64 read FChangeStamp;
|
||||||
|
// handlers
|
||||||
|
procedure RemoveAllHandlersOfObject(AnObject: TObject);
|
||||||
|
procedure AddHandlerOnDestroy(const OnDestroy: TNotifyEvent; AsLast: boolean = false);
|
||||||
|
procedure RemoveHandlerOnDestroy(const OnDestroy: TNotifyEvent);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TProjectGroupLoadOption = (
|
TProjectGroupLoadOption = (
|
||||||
@ -242,6 +258,32 @@ begin
|
|||||||
Result:=FLastSavedChangeStamp<>FChangeStamp;
|
Result:=FLastSavedChangeStamp<>FChangeStamp;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TProjectGroup.DoCallNotifyHandler(HandlerType: TProjectGroupHandler;
|
||||||
|
Sender: TObject);
|
||||||
|
begin
|
||||||
|
FHandlers[HandlerType].CallNotifyEvents(Sender);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TProjectGroup.AddHandler(HandlerType: TProjectGroupHandler;
|
||||||
|
const AMethod: TMethod; AsLast: boolean);
|
||||||
|
begin
|
||||||
|
if FHandlers[HandlerType]=nil then
|
||||||
|
FHandlers[HandlerType]:=TMethodList.Create;
|
||||||
|
FHandlers[HandlerType].Add(AMethod,AsLast);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TProjectGroup.RemoveHandler(HandlerType: TProjectGroupHandler;
|
||||||
|
const AMethod: TMethod);
|
||||||
|
begin
|
||||||
|
FHandlers[HandlerType].Remove(AMethod);
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TProjectGroup.Destroy;
|
||||||
|
begin
|
||||||
|
DoCallNotifyHandler(pghDestroy,Self);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
function TProjectGroup.Perform(Index: Integer; AAction: TPGTargetAction
|
function TProjectGroup.Perform(Index: Integer; AAction: TPGTargetAction
|
||||||
): TPGActionResult;
|
): TPGActionResult;
|
||||||
begin
|
begin
|
||||||
@ -345,6 +387,25 @@ begin
|
|||||||
LUIncreaseChangeStamp64(FChangeStamp);
|
LUIncreaseChangeStamp64(FChangeStamp);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TProjectGroup.RemoveAllHandlersOfObject(AnObject: TObject);
|
||||||
|
var
|
||||||
|
HandlerType: TProjectGroupHandler;
|
||||||
|
begin
|
||||||
|
for HandlerType in TProjectGroupHandler do
|
||||||
|
FHandlers[HandlerType].RemoveAllMethodsOfObject(AnObject);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TProjectGroup.AddHandlerOnDestroy(const OnDestroy: TNotifyEvent;
|
||||||
|
AsLast: boolean);
|
||||||
|
begin
|
||||||
|
AddHandler(pghDestroy,TMethod(OnDestroy),AsLast);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TProjectGroup.RemoveHandlerOnDestroy(const OnDestroy: TNotifyEvent);
|
||||||
|
begin
|
||||||
|
RemoveHandler(pghDestroy,TMethod(OnDestroy));
|
||||||
|
end;
|
||||||
|
|
||||||
{ TPGCompileTarget }
|
{ TPGCompileTarget }
|
||||||
|
|
||||||
function TPGCompileTarget.GetAllowedActions: TPGTargetActions;
|
function TPGCompileTarget.GetAllowedActions: TPGTargetActions;
|
||||||
|
Loading…
Reference in New Issue
Block a user