mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-31 17:21:34 +01: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; | ||||
| @ -284,11 +287,12 @@ begin | ||||
|     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
	 mattias
						mattias