mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 05:36:22 +02:00
project groups: dockable editor
git-svn-id: trunk@50338 -
This commit is contained in:
parent
d93436b400
commit
5b690a20f0
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user