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