project groups: dockable editor

git-svn-id: trunk@50338 -
This commit is contained in:
mattias 2015-11-16 11:52:33 +00:00
parent d93436b400
commit 5b690a20f0
4 changed files with 61 additions and 32 deletions

View File

@ -116,18 +116,13 @@ type
procedure SaveProjectGroup; override; procedure SaveProjectGroup; override;
end; end;
TEditProjectGroupOption = (epgoReusewindow); TEditProjectGroupHandler = procedure(Sender: TObject; AProjectGroup: TProjectGroup);
TEditProjectGroupOptions = Set of TEditProjectGroupOption;
TEditProjectGroupHandler = procedure(AProjectGroup: TProjectGroup;
Options: TEditProjectGroupOptions);
// Method variant. // Method variant.
TEditProjectGroupEvent = procedure(AProjectGroup: TProjectGroup; TEditProjectGroupEvent = procedure(Sender: TObject; AProjectGroup: TProjectGroup) of object;
Options: TEditProjectGroupOptions) of object;
var var
OnEditProjectGroup: TEditProjectGroupHandler; // Takes precedence OnShowProjectGroupEditor: TEditProjectGroupHandler; // Takes precedence
OnEditProjectGroupEvent: TEditProjectGroupEvent; OnShowProjectGroupEditorEvent: TEditProjectGroupEvent; // method variant
IDEProjectGroupManager: TIDEProjectGroupManager; IDEProjectGroupManager: TIDEProjectGroupManager;
// Project group editor(s). Should probably move to MenuIntf // Project group editor(s). Should probably move to MenuIntf
@ -203,10 +198,10 @@ begin
Result:=Assigned(FProjectGroup); Result:=Assigned(FProjectGroup);
if Result then if Result then
begin begin
if Assigned(OnEditProjectGroup) then if Assigned(OnShowProjectGroupEditor) then
OnEditProjectGroup(FProjectGroup,[]) OnShowProjectGroupEditor(FProjectGroup,FProjectGroup)
else if Assigned(OnEditProjectGroupEvent) then else if Assigned(OnShowProjectGroupEditorEvent) then
OnEditProjectGroupEvent(FProjectGroup,[]) OnShowProjectGroupEditorEvent(FProjectGroup,FProjectGroup)
else else
Result:=False; Result:=False;
end; end;

View File

@ -7,7 +7,7 @@ object ProjectGroupEditorForm: TProjectGroupEditorForm
ClientHeight = 358 ClientHeight = 358
ClientWidth = 646 ClientWidth = 646
OnCreate = FormCreate OnCreate = FormCreate
OnShow = FormShow OnDestroy = FormDestroy
LCLVersion = '1.5' LCLVersion = '1.5'
object TBProjectGroup: TToolBar object TBProjectGroup: TToolBar
Left = 0 Left = 0

View File

@ -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; unit ProjectGroupEditor;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
@ -6,8 +13,8 @@ interface
uses uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, Menus, Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, Menus,
ActnList, LazIDEIntf, PackageIntf, ProjectIntf, ProjectGroupIntf, MenuIntf, ActnList, LCLProc, LazIDEIntf, PackageIntf, ProjectIntf, ProjectGroupIntf,
IDEDialogs, LazFileUtils, MenuIntf, IDEDialogs, IDEWindowIntf, LazFileUtils, LazLogger,
ProjectGroupStrConst, ProjectGroup; ProjectGroupStrConst, ProjectGroup;
type type
@ -107,7 +114,7 @@ type
procedure ATargetUninstallUpdate(Sender: TObject); procedure ATargetUninstallUpdate(Sender: TObject);
procedure DoFileNameChange(Sender: TObject); procedure DoFileNameChange(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject); procedure FormDestroy(Sender: TObject);
procedure TVPGDblClick(Sender: TObject); procedure TVPGDblClick(Sender: TObject);
private private
FProjectGroup: TProjectGroup; FProjectGroup: TProjectGroup;
@ -149,6 +156,7 @@ type
protected protected
procedure Localize; procedure Localize;
procedure ShowProjectGroup; procedure ShowProjectGroup;
procedure UpdateShowing; override;
public public
property ProjectGroup: TProjectGroup Read FProjectGroup Write SetProjectGroup; property ProjectGroup: TProjectGroup Read FProjectGroup Write SetProjectGroup;
property ActiveTarget: TCompileTarget Read GetActiveTarget; property ActiveTarget: TCompileTarget Read GetActiveTarget;
@ -156,7 +164,13 @@ type
var var
ProjectGroupEditorForm: TProjectGroupEditorForm; 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; procedure SetProjectGroupEditorCallBack;
implementation implementation
@ -208,25 +222,31 @@ const
piTargetCount = 0; piTargetCount = 0;
piActiveTarget = 1; piActiveTarget = 1;
procedure EditProjectGroup(AProjectGroup: TProjectGroup; Options: TEditProjectGroupOptions); procedure ShowProjectGroupEditor(Sender: TObject; AProjectGroup: TProjectGroup);
begin begin
if epgoReusewindow in Options then IDEWindowCreators.ShowForm(ProjectGroupEditorCreator.FormName,true);
begin if AProjectGroup<>nil then
If Not Assigned(ProjectGroupEditorForm) then
ProjectGroupEditorForm:=TProjectGroupEditorForm.Create(Application);
ProjectGroupEditorForm.ProjectGroup:=AProjectGroup; ProjectGroupEditorForm.ProjectGroup:=AProjectGroup;
ProjectGroupEditorForm.Show; end;
end else
With TProjectGroupEditorForm.Create(Nil) do procedure CreateProjectGroupEditor(Sender: TObject; aFormName: string;
begin var AForm: TCustomForm; DoDisableAutoSizing: boolean);
ProjectGroup:=AProjectGroup; begin
Show; if CompareText(aFormName,ProjectGroupEditorName)<>0 then begin
end; DebugLn(['ERROR: CreateProjectGroupEditor: there is already a form with this name']);
exit;
end;
IDEWindowCreators.CreateForm(AForm,TProjectGroupEditorForm,DoDisableAutoSizing,
LazarusIDE.OwningComponent);
AForm.Name:=aFormName;
end; end;
procedure SetProjectGroupEditorCallBack; procedure SetProjectGroupEditorCallBack;
begin begin
OnEditProjectGroup:=@EditProjectGroup; ProjectGroupEditorCreator:=IDEWindowCreators.Add(ProjectGroupEditorName,
@CreateProjectGroupEditor,nil,
'30%','30%','+30%','+40%','ProjectGroupEditor',alNone);
OnShowProjectGroupEditor:=@ShowProjectGroupEditor;
end; end;
{ TProjectGroupEditorForm } { TProjectGroupEditorForm }
@ -423,6 +443,8 @@ procedure TProjectGroupEditorForm.FormCreate(Sender: TObject);
end; end;
begin begin
if ProjectGroupEditorForm=nil then
ProjectGroupEditorForm:=Self;
PGEditMenuSectionMisc.MenuItem:=PopupMenuMore.Items; PGEditMenuSectionMisc.MenuItem:=PopupMenuMore.Items;
SetItem(cmdTargetAdd,@AProjectGroupAddExistingExecute); SetItem(cmdTargetAdd,@AProjectGroupAddExistingExecute);
SetItem(cmdTargetRemove,@AProjectGroupDeleteExecute); SetItem(cmdTargetRemove,@AProjectGroupDeleteExecute);
@ -434,9 +456,10 @@ begin
SetItem(cmdTargetEarlier,@ATargetEarlierExecute); SetItem(cmdTargetEarlier,@ATargetEarlierExecute);
end; end;
procedure TProjectGroupEditorForm.FormShow(Sender: TObject); procedure TProjectGroupEditorForm.FormDestroy(Sender: TObject);
begin begin
Localize; if ProjectGroupEditorForm=Self then
ProjectGroupEditorForm:=nil;
end; end;
procedure TProjectGroupEditorForm.TVPGDblClick(Sender: TObject); procedure TProjectGroupEditorForm.TVPGDblClick(Sender: TObject);
@ -853,6 +876,13 @@ begin
SBPG.Panels[piTargetCount].Text:=Format(lisTargetCount,[FProjectGroup.TargetCount]); SBPG.Panels[piTargetCount].Text:=Format(lisTargetCount,[FProjectGroup.TargetCount]);
end; end;
procedure TProjectGroupEditorForm.UpdateShowing;
begin
inherited UpdateShowing;
if IsVisible then
Localize;
end;
procedure TProjectGroupEditorForm.FillProjectGroupNode(AParent: TTreeNode; procedure TProjectGroupEditorForm.FillProjectGroupNode(AParent: TTreeNode;
AProjectGroup: TProjectGroup; out TargetNodes: TTargetNodes); AProjectGroup: TProjectGroup; out TargetNodes: TTargetNodes);
Const Const

View File

@ -54,6 +54,10 @@ begin
// ToDo: Close (package editor) // ToDo: Close (package editor)
cmdTargetRun:=RegisterIDEMenuCommand(Section,'TargetRun',lisTargetRun);// ToDo cmdTargetRun:=RegisterIDEMenuCommand(Section,'TargetRun',lisTargetRun);// ToDo
cmdTargetProperties:=RegisterIDEMenuCommand(Section,'TargetProperties',lisTargetProperties);// ToDo cmdTargetProperties:=RegisterIDEMenuCommand(Section,'TargetProperties',lisTargetProperties);// ToDo
Section:=RegisterIDEMenuSection(Root,'Misc');
PGEditMenuSectionMisc:=Section;
// ToDo: Copy filename // ToDo: Copy filename
// ToDo: View source (project) // ToDo: View source (project)