diff --git a/components/projectgroups/projectgroup.pp b/components/projectgroups/projectgroup.pp index 1f1f6b5e53..f68c5c54ac 100644 --- a/components/projectgroups/projectgroup.pp +++ b/components/projectgroups/projectgroup.pp @@ -116,18 +116,13 @@ type procedure SaveProjectGroup; override; end; - TEditProjectGroupOption = (epgoReusewindow); - TEditProjectGroupOptions = Set of TEditProjectGroupOption; - - TEditProjectGroupHandler = procedure(AProjectGroup: TProjectGroup; - Options: TEditProjectGroupOptions); + TEditProjectGroupHandler = procedure(Sender: TObject; AProjectGroup: TProjectGroup); // Method variant. - TEditProjectGroupEvent = procedure(AProjectGroup: TProjectGroup; - Options: TEditProjectGroupOptions) of object; + TEditProjectGroupEvent = procedure(Sender: TObject; AProjectGroup: TProjectGroup) of object; var - OnEditProjectGroup: TEditProjectGroupHandler; // Takes precedence - OnEditProjectGroupEvent: TEditProjectGroupEvent; + OnShowProjectGroupEditor: TEditProjectGroupHandler; // Takes precedence + OnShowProjectGroupEditorEvent: TEditProjectGroupEvent; // method variant IDEProjectGroupManager: TIDEProjectGroupManager; // Project group editor(s). Should probably move to MenuIntf @@ -203,10 +198,10 @@ begin Result:=Assigned(FProjectGroup); if Result then begin - if Assigned(OnEditProjectGroup) then - OnEditProjectGroup(FProjectGroup,[]) - else if Assigned(OnEditProjectGroupEvent) then - OnEditProjectGroupEvent(FProjectGroup,[]) + if Assigned(OnShowProjectGroupEditor) then + OnShowProjectGroupEditor(FProjectGroup,FProjectGroup) + else if Assigned(OnShowProjectGroupEditorEvent) then + OnShowProjectGroupEditorEvent(FProjectGroup,FProjectGroup) else Result:=False; end; diff --git a/components/projectgroups/projectgroupeditor.lfm b/components/projectgroups/projectgroupeditor.lfm index 282914cca2..9677726397 100644 --- a/components/projectgroups/projectgroupeditor.lfm +++ b/components/projectgroups/projectgroupeditor.lfm @@ -7,7 +7,7 @@ object ProjectGroupEditorForm: TProjectGroupEditorForm ClientHeight = 358 ClientWidth = 646 OnCreate = FormCreate - OnShow = FormShow + OnDestroy = FormDestroy LCLVersion = '1.5' object TBProjectGroup: TToolBar Left = 0 diff --git a/components/projectgroups/projectgroupeditor.pas b/components/projectgroups/projectgroupeditor.pas index 5126ea3a5a..16a4289436 100644 --- a/components/projectgroups/projectgroupeditor.pas +++ b/components/projectgroups/projectgroupeditor.pas @@ -1,3 +1,10 @@ +{ + Todo: + - close windows on IDE close + - activate project when project is opened + - deactivate project when project is closed + - make dockable +} unit ProjectGroupEditor; {$mode objfpc}{$H+} @@ -6,8 +13,8 @@ interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, Menus, - ActnList, LazIDEIntf, PackageIntf, ProjectIntf, ProjectGroupIntf, MenuIntf, - IDEDialogs, LazFileUtils, + ActnList, LCLProc, LazIDEIntf, PackageIntf, ProjectIntf, ProjectGroupIntf, + MenuIntf, IDEDialogs, IDEWindowIntf, LazFileUtils, LazLogger, ProjectGroupStrConst, ProjectGroup; type @@ -107,7 +114,7 @@ type procedure ATargetUninstallUpdate(Sender: TObject); procedure DoFileNameChange(Sender: TObject); procedure FormCreate(Sender: TObject); - procedure FormShow(Sender: TObject); + procedure FormDestroy(Sender: TObject); procedure TVPGDblClick(Sender: TObject); private FProjectGroup: TProjectGroup; @@ -149,6 +156,7 @@ type protected procedure Localize; procedure ShowProjectGroup; + procedure UpdateShowing; override; public property ProjectGroup: TProjectGroup Read FProjectGroup Write SetProjectGroup; property ActiveTarget: TCompileTarget Read GetActiveTarget; @@ -156,7 +164,13 @@ type var ProjectGroupEditorForm: TProjectGroupEditorForm; + ProjectGroupEditorCreator: TIDEWindowCreator; // set by RegProjectGroup.Register +const + ProjectGroupEditorName = 'ProjectGroupEditor'; +procedure ShowProjectGroupEditor(Sender: TObject; AProjectGroup: TProjectGroup); +procedure CreateProjectGroupEditor(Sender: TObject; aFormName: string; + var AForm: TCustomForm; DoDisableAutoSizing: boolean); procedure SetProjectGroupEditorCallBack; implementation @@ -208,25 +222,31 @@ const piTargetCount = 0; piActiveTarget = 1; -procedure EditProjectGroup(AProjectGroup: TProjectGroup; Options: TEditProjectGroupOptions); +procedure ShowProjectGroupEditor(Sender: TObject; AProjectGroup: TProjectGroup); begin - if epgoReusewindow in Options then - begin - If Not Assigned(ProjectGroupEditorForm) then - ProjectGroupEditorForm:=TProjectGroupEditorForm.Create(Application); + IDEWindowCreators.ShowForm(ProjectGroupEditorCreator.FormName,true); + if AProjectGroup<>nil then ProjectGroupEditorForm.ProjectGroup:=AProjectGroup; - ProjectGroupEditorForm.Show; - end else - With TProjectGroupEditorForm.Create(Nil) do - begin - ProjectGroup:=AProjectGroup; - Show; - end; +end; + +procedure CreateProjectGroupEditor(Sender: TObject; aFormName: string; + var AForm: TCustomForm; DoDisableAutoSizing: boolean); +begin + if CompareText(aFormName,ProjectGroupEditorName)<>0 then begin + DebugLn(['ERROR: CreateProjectGroupEditor: there is already a form with this name']); + exit; + end; + IDEWindowCreators.CreateForm(AForm,TProjectGroupEditorForm,DoDisableAutoSizing, + LazarusIDE.OwningComponent); + AForm.Name:=aFormName; end; procedure SetProjectGroupEditorCallBack; begin - OnEditProjectGroup:=@EditProjectGroup; + ProjectGroupEditorCreator:=IDEWindowCreators.Add(ProjectGroupEditorName, + @CreateProjectGroupEditor,nil, + '30%','30%','+30%','+40%','ProjectGroupEditor',alNone); + OnShowProjectGroupEditor:=@ShowProjectGroupEditor; end; { TProjectGroupEditorForm } @@ -423,6 +443,8 @@ procedure TProjectGroupEditorForm.FormCreate(Sender: TObject); end; begin + if ProjectGroupEditorForm=nil then + ProjectGroupEditorForm:=Self; PGEditMenuSectionMisc.MenuItem:=PopupMenuMore.Items; SetItem(cmdTargetAdd,@AProjectGroupAddExistingExecute); SetItem(cmdTargetRemove,@AProjectGroupDeleteExecute); @@ -434,9 +456,10 @@ begin SetItem(cmdTargetEarlier,@ATargetEarlierExecute); end; -procedure TProjectGroupEditorForm.FormShow(Sender: TObject); +procedure TProjectGroupEditorForm.FormDestroy(Sender: TObject); begin - Localize; + if ProjectGroupEditorForm=Self then + ProjectGroupEditorForm:=nil; end; procedure TProjectGroupEditorForm.TVPGDblClick(Sender: TObject); @@ -853,6 +876,13 @@ begin SBPG.Panels[piTargetCount].Text:=Format(lisTargetCount,[FProjectGroup.TargetCount]); end; +procedure TProjectGroupEditorForm.UpdateShowing; +begin + inherited UpdateShowing; + if IsVisible then + Localize; +end; + procedure TProjectGroupEditorForm.FillProjectGroupNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; out TargetNodes: TTargetNodes); Const diff --git a/components/projectgroups/regprojectgroup.pp b/components/projectgroups/regprojectgroup.pp index 3b4f5205f6..0f6805af8f 100644 --- a/components/projectgroups/regprojectgroup.pp +++ b/components/projectgroups/regprojectgroup.pp @@ -54,6 +54,10 @@ begin // ToDo: Close (package editor) cmdTargetRun:=RegisterIDEMenuCommand(Section,'TargetRun',lisTargetRun);// ToDo cmdTargetProperties:=RegisterIDEMenuCommand(Section,'TargetProperties',lisTargetProperties);// ToDo + + Section:=RegisterIDEMenuSection(Root,'Misc'); + PGEditMenuSectionMisc:=Section; + // ToDo: Copy filename // ToDo: View source (project)