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;
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;

View File

@ -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

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;
{$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

View File

@ -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)