mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-01 14:19:32 +01:00
project groups: started removed targets list
git-svn-id: trunk@50151 -
This commit is contained in:
parent
722d1f85ac
commit
dbc7d81566
@ -14,28 +14,32 @@
|
||||
<License Value="Same as IDEIntf.
|
||||
Modified LGPL-2."/>
|
||||
<Version Minor="1"/>
|
||||
<Files Count="5">
|
||||
<Files Count="6">
|
||||
<Item1>
|
||||
<Filename Value="projectgroupintf.pp"/>
|
||||
<UnitName Value="projectgroupintf"/>
|
||||
<UnitName Value="ProjectGroupIntf"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Filename Value="projectgroup.pp"/>
|
||||
<UnitName Value="projectgroup"/>
|
||||
<UnitName Value="ProjectGroup"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Filename Value="projectgroupeditor.pas"/>
|
||||
<UnitName Value="projectgroupeditor"/>
|
||||
<UnitName Value="ProjectGroupEditor"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<Filename Value="regprojectgroup.pp"/>
|
||||
<HasRegisterProc Value="True"/>
|
||||
<UnitName Value="regprojectgroup"/>
|
||||
<UnitName Value="RegProjectGroup"/>
|
||||
</Item4>
|
||||
<Item5>
|
||||
<Filename Value="README.txt"/>
|
||||
<Type Value="Binary"/>
|
||||
</Item5>
|
||||
<Item6>
|
||||
<Filename Value="projectgroupstrconst.pas"/>
|
||||
<UnitName Value="ProjectGroupStrConst"/>
|
||||
</Item6>
|
||||
</Files>
|
||||
<RequiredPkgs Count="1">
|
||||
<Item1>
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
ToDo:
|
||||
- Build file
|
||||
- build modes of project as nodes with checkboxes
|
||||
- run external tool
|
||||
}
|
||||
unit ProjectGroup;
|
||||
|
||||
@ -13,31 +14,32 @@ uses
|
||||
Classes, SysUtils, contnrs,
|
||||
Laz2_XMLCfg,
|
||||
Controls, Forms, Dialogs, LazFileUtils, LazFileCache,
|
||||
ProjectGroupIntf, PackageIntf, ProjectIntf, MenuIntf,
|
||||
LazIDEIntf, IDEDialogs, CompOptsIntf;
|
||||
PackageIntf, ProjectIntf, MenuIntf,
|
||||
LazIDEIntf, IDEDialogs, CompOptsIntf, ProjectGroupIntf,
|
||||
ProjectGroupStrConst;
|
||||
|
||||
|
||||
Type
|
||||
type
|
||||
|
||||
{ TIDECompileTarget }
|
||||
|
||||
TIDECompileTarget = class(TCompileTarget)
|
||||
private
|
||||
FTarget : TPersistent;
|
||||
FTarget: TPersistent;
|
||||
protected
|
||||
Procedure LoadPackage;
|
||||
Procedure LoadProject;
|
||||
Procedure LoadProjectGroup;
|
||||
Function ProjectAction(AAction : TTargetAction) : TActionResult;
|
||||
Function PackageAction(AAction : TTargetAction) : TActionResult;
|
||||
Function ProjectGroupAction(AAction : TTargetAction) : TActionResult;
|
||||
procedure LoadPackage;
|
||||
procedure LoadProject;
|
||||
procedure LoadProjectGroup;
|
||||
function ProjectAction(AAction: TTargetAction): TActionResult;
|
||||
function PackageAction(AAction: TTargetAction): TActionResult;
|
||||
function ProjectGroupAction(AAction: TTargetAction): TActionResult;
|
||||
function GetIDEPackage: TIDEPackage; override;
|
||||
function GetLazProject: TLazProject; override;
|
||||
function GetProjectGroup: TProjectGroup; override;
|
||||
function PerformAction(AAction: TTargetAction): TActionResult; override;
|
||||
public
|
||||
Procedure LoadTarget;
|
||||
Procedure UnLoadTarget;
|
||||
procedure LoadTarget;
|
||||
procedure UnLoadTarget;
|
||||
end;
|
||||
|
||||
// Since a project group iself is also a target, we need a target to represent
|
||||
@ -48,12 +50,12 @@ Type
|
||||
TProjectGroupTarget = Class(TIDECompileTarget)
|
||||
protected
|
||||
procedure SetTargetType(AValue: TTargetType); override;
|
||||
Public
|
||||
Constructor Create(AProjectGroup : TProjectGroup);
|
||||
public
|
||||
constructor Create(AProjectGroup: TProjectGroup);
|
||||
end;
|
||||
|
||||
TTargetEvent = Procedure(Sender : TObject; Target : TCompileTarget) of object;
|
||||
TTargetExchangeEvent = Procedure(Sender : TObject; Target1,Target2 : TCompileTarget) of object;
|
||||
TTargetEvent = procedure(Sender: TObject; Target: TCompileTarget) of object;
|
||||
TTargetExchangeEvent = procedure(Sender: TObject; Target1,Target2: TCompileTarget) of object; // ToDo: use index
|
||||
|
||||
{ TIDEProjectGroup }
|
||||
|
||||
@ -64,62 +66,66 @@ Type
|
||||
FOnTargetAdded: TTargetEvent;
|
||||
FOnTargetDeleted: TTargetEvent;
|
||||
FOnTargetsExchanged: TTargetExchangeEvent;
|
||||
FTargets : TFPObjectList;
|
||||
FModified : Boolean;
|
||||
FTargets: TFPObjectList;
|
||||
FRemovedTargets: TFPObjectList;
|
||||
FModified: Boolean;
|
||||
protected
|
||||
procedure SetFileName(AValue: String); override;
|
||||
function GetModified: Boolean; override;
|
||||
function GetTarget(AIndex: Integer): TCompileTarget; override;
|
||||
function GetTarget(Index: Integer): TCompileTarget; override;
|
||||
function GetTargetCount: Integer; override;
|
||||
Public
|
||||
Constructor Create;
|
||||
Function AddTarget(Const AFileName: String): TCompileTarget; override;
|
||||
Procedure RemoveTarget(T : TCompileTarget) ; override;
|
||||
Procedure ExchangeTargets(ASource, ATarget: Integer); override;
|
||||
Procedure ActivateTarget(T : TCompileTarget); override;
|
||||
Function LoadFromFile(Options : TProjectGroupLoadOptions ) : Boolean;
|
||||
Function SaveToFile : Boolean;
|
||||
Property OnFileNameChange : TNotifyEvent Read FOnFileNameChange Write FOnFileNameChange;
|
||||
Property OnTargetAdded : TTargetEvent Read FOnTargetAdded Write FOnTargetAdded;
|
||||
Property OnTargetDeleted : TTargetEvent Read FOnTargetDeleted Write FOnTargetDeleted;
|
||||
Property OnTargetActivated : TTargetEvent Read FOnTargetActivated Write FOnTargetActivated;
|
||||
Property OnTargetsExchanged : TTargetExchangeEvent Read FOnTargetsExchanged Write FOnTargetsExchanged;
|
||||
function GetRemovedTargetCount: Integer; override;
|
||||
function GetRemovedTarget(Index: Integer): TCompileTarget; override;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
function AddTarget(Const AFileName: String): TCompileTarget; override;
|
||||
procedure RemoveTarget(Index: Integer); override;
|
||||
procedure ExchangeTargets(ASource, ATarget: Integer); override;
|
||||
procedure ActivateTarget(T: TCompileTarget); override;
|
||||
function LoadFromFile(Options: TProjectGroupLoadOptions): Boolean;
|
||||
function SaveToFile: Boolean;
|
||||
property OnFileNameChange: TNotifyEvent Read FOnFileNameChange Write FOnFileNameChange;
|
||||
property OnTargetAdded: TTargetEvent Read FOnTargetAdded Write FOnTargetAdded;
|
||||
property OnTargetDeleted: TTargetEvent Read FOnTargetDeleted Write FOnTargetDeleted;
|
||||
property OnTargetActivated: TTargetEvent Read FOnTargetActivated Write FOnTargetActivated;
|
||||
property OnTargetsExchanged: TTargetExchangeEvent Read FOnTargetsExchanged Write FOnTargetsExchanged;
|
||||
end;
|
||||
|
||||
{ TIDEProjectGroupManager }
|
||||
|
||||
TIDEProjectGroupManager = Class(TProjectGroupManager)
|
||||
private
|
||||
Function GetNewFileName: Boolean;
|
||||
Protected
|
||||
FProjectGroup : TIDEProjectGroup;
|
||||
function GetNewFileName: Boolean;
|
||||
protected
|
||||
Function CheckSaved : Boolean;
|
||||
FProjectGroup: TIDEProjectGroup;
|
||||
protected
|
||||
function CheckSaved: Boolean;
|
||||
function GetCurrentProjectGroup: TProjectGroup; override;
|
||||
Function ShowProjectGroupEditor : Boolean;
|
||||
function ShowProjectGroupEditor: Boolean;
|
||||
public
|
||||
// Events for main menu
|
||||
Procedure DoNewClick(Sender : TObject); virtual;
|
||||
Procedure DoOpenClick(Sender : TObject); virtual;
|
||||
Procedure DoSaveClick(Sender : TObject); virtual;
|
||||
Procedure DoSaveAsClick(Sender : TObject); virtual;
|
||||
procedure DoNewClick(Sender: TObject); virtual;
|
||||
procedure DoOpenClick(Sender: TObject); virtual;
|
||||
procedure DoSaveClick(Sender: TObject); virtual;
|
||||
procedure DoSaveAsClick(Sender: TObject); virtual;
|
||||
// Public interface
|
||||
Procedure LoadProjectGroup(AFileName: string; AOptions: TProjectGroupLoadOptions); override;
|
||||
Procedure SaveProjectGroup; override;
|
||||
procedure LoadProjectGroup(AFileName: string; AOptions: TProjectGroupLoadOptions); override;
|
||||
procedure SaveProjectGroup; override;
|
||||
end;
|
||||
|
||||
TEditProjectGroupOption = (epgoReusewindow);
|
||||
TEditProjectGroupOptions = Set of TEditProjectGroupOption;
|
||||
|
||||
TEditProjectGroupHandler = Procedure(AProjectGroup : TProjectGroup; Options : TEditProjectGroupOptions);
|
||||
TEditProjectGroupHandler = procedure(AProjectGroup: TProjectGroup; Options: TEditProjectGroupOptions);
|
||||
// Method variant.
|
||||
TEditProjectGroupEvent = Procedure(AProjectGroup : TProjectGroup; Options : TEditProjectGroupOptions) of object;
|
||||
TEditProjectGroupEvent = procedure(AProjectGroup: TProjectGroup; Options: TEditProjectGroupOptions) of object;
|
||||
|
||||
Var
|
||||
OnEditProjectGroup : TEditProjectGroupHandler; // Takes precedence
|
||||
OnEditProjectGroupEvent : TEditProjectGroupEvent;
|
||||
OnEditProjectGroup: TEditProjectGroupHandler; // Takes precedence
|
||||
OnEditProjectGroupEvent: TEditProjectGroupEvent;
|
||||
|
||||
IDEProjectGroupManager : TIDEProjectGroupManager;
|
||||
IDEProjectGroupManager: TIDEProjectGroupManager;
|
||||
// Project group editor(s). Should probably move to MenuIntf
|
||||
ProjectGroupMenuRoot: TIDEMenuSection = nil;
|
||||
PGEditMenuSectionFiles, // e.g. sort files, clean up files
|
||||
@ -151,27 +157,9 @@ Var
|
||||
|
||||
implementation
|
||||
|
||||
Resourcestring
|
||||
lisErrTargetDoesNotExist = 'Target does not exist. Remove ?';
|
||||
lisErrNoSuchFile = 'Could not find target file'+sLineBreak+
|
||||
'"%s"'+sLineBreak+
|
||||
'What do you want to do ?';
|
||||
lisRemoveTarget = 'Remove target';
|
||||
lisAbortLoadingProjectGroup = 'Abort loading project group';
|
||||
lisSkipAllTargets = 'Remove all invalid targets';
|
||||
lisErrOnlyProjectGroupAllowed = 'Only target type "projectgroup" is allowed for root project group';
|
||||
lisProjectGroupModified = 'Project group modified';
|
||||
lisProjectGroupModifiedConfirm = 'Project group "%s" is modified.'+sLineBreak+
|
||||
'what do you want to do?';
|
||||
|
||||
lisSavePG = 'Save project group';
|
||||
lisDiscard = 'Discard changes';
|
||||
lisAbort = 'Abort';
|
||||
|
||||
|
||||
{ TIDEProjectGroupManager }
|
||||
|
||||
Function TIDEProjectGroupManager.CheckSaved: Boolean;
|
||||
function TIDEProjectGroupManager.CheckSaved: Boolean;
|
||||
begin
|
||||
Result:=Not Assigned(FProjectGroup);
|
||||
if Not Result then
|
||||
@ -206,7 +194,7 @@ begin
|
||||
Result:=FProjectGroup;
|
||||
end;
|
||||
|
||||
Function TIDEProjectGroupManager.ShowProjectGroupEditor : Boolean;
|
||||
function TIDEProjectGroupManager.ShowProjectGroupEditor: Boolean;
|
||||
|
||||
begin
|
||||
Result:=Assigned(FProjectGroup);
|
||||
@ -221,7 +209,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TIDEProjectGroupManager.DoNewClick(Sender: TObject);
|
||||
procedure TIDEProjectGroupManager.DoNewClick(Sender: TObject);
|
||||
begin
|
||||
if Not CheckSaved then
|
||||
Exit;
|
||||
@ -230,10 +218,10 @@ begin
|
||||
ShowProjectGroupEditor;
|
||||
end;
|
||||
|
||||
Procedure TIDEProjectGroupManager.DoOpenClick(Sender: TObject);
|
||||
procedure TIDEProjectGroupManager.DoOpenClick(Sender: TObject);
|
||||
|
||||
Var
|
||||
F : TOpenDialog;
|
||||
F: TOpenDialog;
|
||||
begin
|
||||
if Not CheckSaved then
|
||||
Exit;
|
||||
@ -251,14 +239,14 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TIDEProjectGroupManager.DoSaveClick(Sender: TObject);
|
||||
procedure TIDEProjectGroupManager.DoSaveClick(Sender: TObject);
|
||||
begin
|
||||
SaveProjectGroup;
|
||||
end;
|
||||
|
||||
Function TIDEProjectGroupManager.GetNewFileName : Boolean;
|
||||
function TIDEProjectGroupManager.GetNewFileName: Boolean;
|
||||
Var
|
||||
F : TSaveDialog;
|
||||
F: TSaveDialog;
|
||||
begin
|
||||
Result:=False;
|
||||
F:=TSaveDialog.Create(Nil);
|
||||
@ -278,13 +266,13 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TIDEProjectGroupManager.DoSaveAsClick(Sender: TObject);
|
||||
procedure TIDEProjectGroupManager.DoSaveAsClick(Sender: TObject);
|
||||
begin
|
||||
if GetNewFileName then
|
||||
SaveProjectGroup;
|
||||
end;
|
||||
|
||||
Procedure TIDEProjectGroupManager.LoadProjectGroup(AFileName: string;
|
||||
procedure TIDEProjectGroupManager.LoadProjectGroup(AFileName: string;
|
||||
AOptions: TProjectGroupLoadOptions);
|
||||
begin
|
||||
AFileName:=TrimAndExpandFilename(AFileName);
|
||||
@ -298,7 +286,7 @@ begin
|
||||
ShowProjectGroupEditor;
|
||||
end;
|
||||
|
||||
Procedure TIDEProjectGroupManager.SaveProjectGroup;
|
||||
procedure TIDEProjectGroupManager.SaveProjectGroup;
|
||||
begin
|
||||
If Assigned(FProjectGroup) then
|
||||
begin
|
||||
@ -337,9 +325,9 @@ begin
|
||||
Result:=FModified;
|
||||
end;
|
||||
|
||||
function TIDEProjectGroup.GetTarget(AIndex: Integer): TCompileTarget;
|
||||
function TIDEProjectGroup.GetTarget(Index: Integer): TCompileTarget;
|
||||
begin
|
||||
Result:=TCompileTarget(FTargets[AIndex]);
|
||||
Result:=TCompileTarget(FTargets[Index]);
|
||||
end;
|
||||
|
||||
function TIDEProjectGroup.GetTargetCount: Integer;
|
||||
@ -347,13 +335,31 @@ begin
|
||||
Result:=FTargets.Count;
|
||||
end;
|
||||
|
||||
Constructor TIDEProjectGroup.Create;
|
||||
function TIDEProjectGroup.GetRemovedTargetCount: Integer;
|
||||
begin
|
||||
Result:=FRemovedTargets.Count;
|
||||
end;
|
||||
|
||||
function TIDEProjectGroup.GetRemovedTarget(Index: Integer): TCompileTarget;
|
||||
begin
|
||||
Result:=TCompileTarget(FRemovedTargets[Index]);
|
||||
end;
|
||||
|
||||
constructor TIDEProjectGroup.Create;
|
||||
begin
|
||||
inherited Create;
|
||||
FTargets:=TFPObjectList.Create(True);
|
||||
FRemovedTargets:=TFPObjectList.Create(True);
|
||||
end;
|
||||
|
||||
Function TIDEProjectGroup.AddTarget(Const AFileName: String): TCompileTarget;
|
||||
destructor TIDEProjectGroup.Destroy;
|
||||
begin
|
||||
FreeAndNil(FTargets);
|
||||
FreeAndNil(FRemovedTargets);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TIDEProjectGroup.AddTarget(const AFileName: String): TCompileTarget;
|
||||
begin
|
||||
Result:=Nil;
|
||||
if FileExistsCached(AFileName) then
|
||||
@ -367,14 +373,19 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TIDEProjectGroup.RemoveTarget(T: TCompileTarget);
|
||||
procedure TIDEProjectGroup.RemoveTarget(Index: Integer);
|
||||
var
|
||||
Target: TCompileTarget;
|
||||
begin
|
||||
If Assigned(FOnTargetDeleted) then
|
||||
FOnTargetDeleted(Self,T);
|
||||
inherited RemoveTarget(T);
|
||||
Target:=Targets[Index];
|
||||
if Assigned(FOnTargetDeleted) then
|
||||
FOnTargetDeleted(Self,Target);
|
||||
FTargets.Delete(Index);
|
||||
FRemovedTargets.Add(Target);
|
||||
Target.Removed:=true;
|
||||
end;
|
||||
|
||||
Procedure TIDEProjectGroup.ExchangeTargets(ASource, ATarget: Integer);
|
||||
procedure TIDEProjectGroup.ExchangeTargets(ASource, ATarget: Integer);
|
||||
begin
|
||||
if ASource=ATarget then exit;
|
||||
if Assigned(FOnTargetsExchanged) then
|
||||
@ -383,7 +394,7 @@ begin
|
||||
FModified:=True;
|
||||
end;
|
||||
|
||||
Procedure TIDEProjectGroup.ActivateTarget(T: TCompileTarget);
|
||||
procedure TIDEProjectGroup.ActivateTarget(T: TCompileTarget);
|
||||
begin
|
||||
if T.Active then exit;
|
||||
inherited ActivateTarget(T);
|
||||
@ -391,15 +402,15 @@ begin
|
||||
FOnTargetActivated(Self,T);
|
||||
end;
|
||||
|
||||
Function TIDEProjectGroup.LoadFromFile(Options: TProjectGroupLoadOptions
|
||||
function TIDEProjectGroup.LoadFromFile(Options: TProjectGroupLoadOptions
|
||||
): Boolean;
|
||||
Var
|
||||
ARoot : String;
|
||||
TargetFileName : String;
|
||||
TargetPath : String;
|
||||
XMLConfig : TXMLConfig;
|
||||
I,ACount : Integer;
|
||||
Target : TCompileTarget;
|
||||
ARoot: String;
|
||||
TargetFileName: String;
|
||||
TargetPath: String;
|
||||
XMLConfig: TXMLConfig;
|
||||
I,ACount: Integer;
|
||||
Target: TCompileTarget;
|
||||
begin
|
||||
TargetPath:=ExpandFileNameUTF8(ExtractFilePath(FileName));
|
||||
Result:=True;
|
||||
@ -465,14 +476,14 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Function TIDEProjectGroup.SaveToFile: Boolean;
|
||||
function TIDEProjectGroup.SaveToFile: Boolean;
|
||||
Var
|
||||
TargetPath : String;
|
||||
RelativeFileName : String;
|
||||
ARoot : String;
|
||||
XMLConfig : TXMLConfig;
|
||||
I,ACount : Integer;
|
||||
CompTarget : TCompileTarget;
|
||||
TargetPath: String;
|
||||
RelativeFileName: String;
|
||||
ARoot: String;
|
||||
XMLConfig: TXMLConfig;
|
||||
I,ACount: Integer;
|
||||
CompTarget: TCompileTarget;
|
||||
begin
|
||||
TargetPath:=ExtractFilePath(FileName);
|
||||
Result:=True;
|
||||
@ -514,58 +525,53 @@ end;
|
||||
|
||||
{ TIDECompileTarget }
|
||||
|
||||
Procedure TIDECompileTarget.LoadTarget;
|
||||
procedure TIDECompileTarget.LoadTarget;
|
||||
begin
|
||||
Case TargetType of
|
||||
ttProject : LoadProject;
|
||||
ttPackage : LoadPackage;
|
||||
ttProjectGroup : LoadProjectGroup;
|
||||
case TargetType of
|
||||
ttProject: LoadProject;
|
||||
ttPackage: LoadPackage;
|
||||
ttProjectGroup: LoadProjectGroup;
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TIDECompileTarget.UnLoadTarget;
|
||||
procedure TIDECompileTarget.UnLoadTarget;
|
||||
begin
|
||||
if (FTarget<>Nil) and (FTarget is TProjectGroup) then
|
||||
FreeAndNil(FTarget);
|
||||
FTarget:=Nil;
|
||||
end;
|
||||
|
||||
Procedure TIDECompileTarget.LoadPackage;
|
||||
|
||||
Var
|
||||
MR : TModalResult;
|
||||
I : Integer;
|
||||
Pkg : TIDEPackage;
|
||||
|
||||
procedure TIDECompileTarget.LoadPackage;
|
||||
var
|
||||
MR: TModalResult;
|
||||
I: Integer;
|
||||
Pkg: TIDEPackage;
|
||||
begin
|
||||
FTarget:=Nil;
|
||||
MR:=PackageEditingInterface.DoOpenPackageFile(Filename,
|
||||
[pofRevert, pofConvertMacros, pofDoNotOpenEditor],
|
||||
False);
|
||||
If (MR=mrOK) then
|
||||
begin
|
||||
if (MR=mrOK) then
|
||||
begin
|
||||
I:=0;
|
||||
While (FTarget=Nil) and (I<PackageEditingInterface.GetPackageCount) do
|
||||
begin
|
||||
while (FTarget=Nil) and (I<PackageEditingInterface.GetPackageCount) do
|
||||
begin
|
||||
Pkg:=PackageEditingInterface.GetPackages(I);
|
||||
If CompareFilenames(Pkg.Filename,Self.Filename)=0 then
|
||||
if CompareFilenames(Pkg.Filename,Self.Filename)=0 then
|
||||
FTarget:=Pkg; // ToDo: free notification
|
||||
Inc(I);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TIDECompileTarget.LoadProject;
|
||||
|
||||
Const
|
||||
procedure TIDECompileTarget.LoadProject;
|
||||
const
|
||||
Flags = [];
|
||||
{ Flags = [ofOnlyIfExists, ofProjectLoading, ofQuiet, ofVirtualFile,
|
||||
ofUseCache, ofMultiOpen, ofDoNotLoadResource,
|
||||
ofLoadHiddenResource, ofInternalFile];}
|
||||
|
||||
Var
|
||||
MR : TModalResult;
|
||||
|
||||
var
|
||||
MR: TModalResult;
|
||||
begin
|
||||
UnloadTarget;
|
||||
MR:=LazarusIDE.DoOpenProjectFile(FileName,Flags);
|
||||
@ -573,29 +579,27 @@ begin
|
||||
FTarget:=LazarusIDE.ActiveProject; // ToDo: free notification
|
||||
end;
|
||||
|
||||
Procedure TIDECompileTarget.LoadProjectGroup;
|
||||
|
||||
Var
|
||||
PG : TIDEProjectGroup;
|
||||
|
||||
procedure TIDECompileTarget.LoadProjectGroup;
|
||||
var
|
||||
PG: TIDEProjectGroup;
|
||||
begin
|
||||
PG:=TIDEProjectGroup.Create;
|
||||
PG.FileName:=Self.FileName;
|
||||
PG.LoadFromFile([]);
|
||||
end;
|
||||
|
||||
Function TIDECompileTarget.ProjectAction(AAction: TTargetAction): TActionResult;
|
||||
Var
|
||||
F : TProjectBuildFlags;
|
||||
function TIDECompileTarget.ProjectAction(AAction: TTargetAction): TActionResult;
|
||||
var
|
||||
F: TProjectBuildFlags;
|
||||
begin
|
||||
Result:=arOK;
|
||||
If (LazarusIDE.ActiveProject.ProjectInfoFile<>LazProject.ProjectInfoFile) then
|
||||
if (LazarusIDE.ActiveProject.ProjectInfoFile<>LazProject.ProjectInfoFile) then
|
||||
if LazarusIDE.DoOpenProjectFile(FileName,[ofOnlyIfExists,ofQuiet,ofUseCache])<>mrOK then
|
||||
exit;
|
||||
// If action was open, we're now all set
|
||||
Case AAction of
|
||||
case AAction of
|
||||
taSettings :
|
||||
; // TODO : Need IDE integration
|
||||
; // TODO: Need IDE integration
|
||||
taCompileClean,
|
||||
taCompile :
|
||||
begin
|
||||
@ -605,24 +609,24 @@ begin
|
||||
LazarusIDE.DoBuildProject(crCompile,F);
|
||||
end;
|
||||
taRun :
|
||||
; // TODO : Need IDE integration
|
||||
; // TODO: Need IDE integration
|
||||
end;
|
||||
end;
|
||||
|
||||
Function TIDECompileTarget.PackageAction(AAction: TTargetAction): TActionResult;
|
||||
function TIDECompileTarget.PackageAction(AAction: TTargetAction): TActionResult;
|
||||
Var
|
||||
L : TObjectList;
|
||||
L: TObjectList;
|
||||
begin
|
||||
Result:=arOK;
|
||||
if (AAction in [taOpen,taSettings]) then
|
||||
PackageEditingInterface.DoOpenPackageFile(FileName,[],False);
|
||||
Case AAction of
|
||||
case AAction of
|
||||
taSettings :
|
||||
; // TODO : Need IDE integration
|
||||
; // TODO: Need IDE integration
|
||||
taCompile :
|
||||
; // TODO : Need IDE integration
|
||||
; // TODO: Need IDE integration
|
||||
taCompileClean :
|
||||
; // TODO : Need IDE integration
|
||||
; // TODO: Need IDE integration
|
||||
taInstall :
|
||||
begin
|
||||
L:=TObjectList.Create(False);
|
||||
@ -634,11 +638,11 @@ begin
|
||||
end;
|
||||
end;
|
||||
taUninstall :
|
||||
; // TODO : Need IDE integration
|
||||
; // TODO: Need IDE integration
|
||||
end;
|
||||
end;
|
||||
|
||||
Function TIDECompileTarget.ProjectGroupAction(AAction: TTargetAction
|
||||
function TIDECompileTarget.ProjectGroupAction(AAction: TTargetAction
|
||||
): TActionResult;
|
||||
begin
|
||||
if AAction=taOpen then
|
||||
@ -672,10 +676,10 @@ function TIDECompileTarget.PerformAction(AAction: TTargetAction): TActionResult;
|
||||
begin
|
||||
if FTarget=Nil then
|
||||
LoadTarget;
|
||||
Case TargetType of
|
||||
ttProject : Result:=ProjectAction(AAction);
|
||||
ttPackage : Result:=PackageAction(AAction);
|
||||
ttProjectGroup : Result:=ProjectGroupAction(AAction);
|
||||
case TargetType of
|
||||
ttProject: Result:=ProjectAction(AAction);
|
||||
ttPackage: Result:=PackageAction(AAction);
|
||||
ttProjectGroup: Result:=ProjectGroupAction(AAction);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
@ -7,7 +7,8 @@ interface
|
||||
uses
|
||||
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, Menus,
|
||||
ActnList, LazIDEIntf, PackageIntf, ProjectIntf, ProjectGroupIntf, MenuIntf,
|
||||
IDEDialogs, LazFileUtils, ProjectGroup;
|
||||
IDEDialogs, LazFileUtils,
|
||||
ProjectGroupStrConst, ProjectGroup;
|
||||
|
||||
type
|
||||
TNodeType = (ntUnknown,
|
||||
@ -115,96 +116,53 @@ type
|
||||
FActiveTarget : TCompileTarget;
|
||||
FTargetNodes : TTargetNodes;
|
||||
// Project group callbacks
|
||||
Procedure ConfigNode(Node: TTreeNode; Const ACaption: String;
|
||||
procedure ConfigNode(Node: TTreeNode; Const ACaption: String;
|
||||
ANodeData: TNodeData);
|
||||
Procedure DoTargetAdded(Sender: TObject; Target: TCompileTarget);
|
||||
Procedure DoTargetDeleted(Sender: TObject; Target: TCompileTarget);
|
||||
Procedure DoTargetActivated(Sender: TObject; Target: TCompileTarget);
|
||||
Procedure DoTargetExchanged(Sender: TObject; Target1,Target2: TCompileTarget);
|
||||
procedure DoTargetAdded(Sender: TObject; Target: TCompileTarget);
|
||||
procedure DoTargetDeleted(Sender: TObject; Target: TCompileTarget);
|
||||
procedure DoTargetActivated(Sender: TObject; Target: TCompileTarget);
|
||||
procedure DoTargetExchanged(Sender: TObject; Target1, Target2: TCompileTarget);
|
||||
function AllowPerform(ATargetAction: TTargetAction; AAction: TAction= Nil): Boolean;
|
||||
procedure ClearEventCallBacks(AProjectGroup : TProjectGroup);
|
||||
procedure SetEventCallBacks(AProjectGroup : TProjectGroup);
|
||||
// Some helpers
|
||||
procedure SetProjectGroup(AValue: TProjectGroup);
|
||||
Procedure ShowDependencies(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TObject; Out PD: TTargetNodes);
|
||||
Procedure ShowFileName;
|
||||
procedure ShowDependencies(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TObject; Out PD: TTargetNodes);
|
||||
procedure ShowFileName;
|
||||
procedure Perform(ATargetAction: TTargetAction);
|
||||
function GetActiveTarget: TCompileTarget;
|
||||
// Treeview Node management
|
||||
Function FindNodeFromTarget(ATarget: TCompileTarget): TTreeNode;
|
||||
Procedure FreeNodeData;
|
||||
Class Function TargetFromNode(N : TTreeNode) : TCompileTarget;
|
||||
Function DisplayFileName(AProjectGroup : TProjectGroup;NodeType: TNodeType; AFileName: String): String;
|
||||
Function CreateNode(AParent: TTreeNode; Const ACaption: String; ANodeType: TNodeType; ANodeData: TCompileTarget; AProjectGroup : TProjectGroup): TTreeNode;
|
||||
Procedure FillPackageNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TIDEPackage);
|
||||
Procedure FillProjectNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TLazProject);
|
||||
Procedure FillTargetNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TCompileTarget);
|
||||
Procedure FillProjectGroupNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; Out TargetNodes: TTargetNodes);
|
||||
Function GetNodeIndex(ANodeType: TNodeType; ANodeData: TCompileTarget ): Integer;
|
||||
Function SelectedNodeData : TNodeData;
|
||||
Function SelectedTarget : TCompileTarget;
|
||||
Function SelectedNodeType : TCompileTarget;
|
||||
function FindNodeFromTarget(ATarget: TCompileTarget): TTreeNode;
|
||||
procedure FreeNodeData;
|
||||
class function TargetFromNode(N : TTreeNode) : TCompileTarget;
|
||||
function DisplayFileName(AProjectGroup : TProjectGroup;NodeType: TNodeType; AFileName: String): String;
|
||||
function CreateNode(AParent: TTreeNode; Const ACaption: String; ANodeType: TNodeType; ANodeData: TCompileTarget; AProjectGroup : TProjectGroup): TTreeNode;
|
||||
procedure FillPackageNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TIDEPackage);
|
||||
procedure FillProjectNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TLazProject);
|
||||
procedure FillTargetNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TCompileTarget);
|
||||
procedure FillProjectGroupNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; Out TargetNodes: TTargetNodes);
|
||||
function GetNodeIndex(ANodeType: TNodeType; ANodeData: TCompileTarget ): Integer;
|
||||
function SelectedNodeData : TNodeData;
|
||||
function SelectedTarget : TCompileTarget;
|
||||
function SelectedNodeType : TCompileTarget;
|
||||
procedure UpdateIDEMenuCommandFromAction(Sender: TObject; Item: TIDEMenuCommand);
|
||||
protected
|
||||
Procedure Localize;
|
||||
Procedure ShowProjectGroup;
|
||||
procedure Localize;
|
||||
procedure ShowProjectGroup;
|
||||
public
|
||||
Property ProjectGroup : TProjectGroup Read FProjectGroup Write SetProjectGroup;
|
||||
Property ActiveTarget : TCompileTarget Read GetActiveTarget;
|
||||
property ProjectGroup : TProjectGroup Read FProjectGroup Write SetProjectGroup;
|
||||
property ActiveTarget : TCompileTarget Read GetActiveTarget;
|
||||
end;
|
||||
|
||||
var
|
||||
ProjectGroupEditorForm: TProjectGroupEditorForm;
|
||||
|
||||
Procedure SetProjectGroupEditorCallBack;
|
||||
procedure SetProjectGroupEditorCallBack;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
Resourcestring
|
||||
lisProjectGroup = 'Project Group %s';
|
||||
lisNewProjectGroup = 'New Project group';
|
||||
lisNodeTargets = 'Targets';
|
||||
lisNodeRemovedTargets = 'Removed Targets';
|
||||
lisNodeFiles = 'Files';
|
||||
lisNodeRemovedFiles = 'Removed files';
|
||||
lisNodeDependencies = 'Dependencies';
|
||||
lisNodeRemovedDependencies = 'Removed Dependencies';
|
||||
lisTargetCount = '%d targets';
|
||||
lisActiveTarget = 'Target: %s';
|
||||
|
||||
lisProjectGroupSaveCaption = 'Save';
|
||||
lisProjectGroupSaveHint = 'Save project group';
|
||||
lisProjectGroupSaveAsCaption = 'Save As';
|
||||
lisProjectGroupSaveAsHint = 'Save project group with a new name';
|
||||
lisProjectGroupAddExistingCaption = 'Add';
|
||||
lisProjectGroupAddExistingHint = 'Add existing target to project group';
|
||||
lisProjectGroupDeleteCaption = 'Remove';
|
||||
lisProjectGroupDeleteHint = 'Remove target from project group';
|
||||
lisProjectGroupAddNewCaption = 'New';
|
||||
lisProjectGroupAddNewHint = 'Add new target to project group';
|
||||
lisTargetEarlierCaption = 'Earlier';
|
||||
lisTargetEarlierHint = 'Build target earlier';
|
||||
lisTargetLaterCaption = 'Later';
|
||||
lisTargetLaterHint = 'Build target later';
|
||||
lisTargetCompileCaption = 'Compile';
|
||||
lisTargetCompileHint = 'Compile selected target';
|
||||
lisTargetCompileCleanCaption = 'Compile Clean';
|
||||
lisTargetCompileCleanHint = 'Compile selected target clean';
|
||||
lisTargetPropertiesCaption = 'Properties';
|
||||
lisTargetPropertiesHint = 'Show property dialog for selected target';
|
||||
lisTargetRunCaption = 'Run';
|
||||
lisTargetRunHint = 'Run selected target';
|
||||
lisTargetInstallCaption = 'Install';
|
||||
lisTargetInstallHint = 'Install selected target';
|
||||
lisTargetUninstallCaption = 'Uninstall';
|
||||
lisTargetUninstallHint = 'Uninstall selected target';
|
||||
lisTargetActivateCaption = 'Activate';
|
||||
lisTargetActivateHint = 'Activate selected target';
|
||||
lisTargetOpenCaption = 'Open';
|
||||
lisTargetOpenHint = 'Open selected target';
|
||||
|
||||
Var
|
||||
// Nodelist image indexes
|
||||
NIProjectGroup : integer = 0;
|
||||
@ -250,7 +208,7 @@ Const
|
||||
piTargetCount = 0;
|
||||
piActiveTarget = 1;
|
||||
|
||||
Procedure EditProjectGroup(AProjectGroup : TProjectGroup; Options : TEditProjectGroupOptions);
|
||||
procedure EditProjectGroup(AProjectGroup : TProjectGroup; Options : TEditProjectGroupOptions);
|
||||
|
||||
begin
|
||||
if epgoReusewindow in Options then
|
||||
@ -268,7 +226,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure SetProjectGroupEditorCallBack;
|
||||
procedure SetProjectGroupEditorCallBack;
|
||||
|
||||
begin
|
||||
OnEditProjectGroup:=@EditProjectGroup;
|
||||
@ -312,18 +270,23 @@ end;
|
||||
procedure TProjectGroupEditorForm.SetProjectGroup(AValue: TProjectGroup);
|
||||
begin
|
||||
if FProjectGroup=AValue then Exit;
|
||||
ClearEventCallBacks(FProjectGroup);
|
||||
if ProjectGroup<>nil then
|
||||
begin
|
||||
ClearEventCallBacks(ProjectGroup);
|
||||
end;
|
||||
FreeAndNil(FProjectGroupTarget);
|
||||
FProjectGroup:=AValue;
|
||||
SetEventCallBacks(FProjectGroup);
|
||||
FProjectGroupTarget:=TProjectGroupTarget.Create(AValue);
|
||||
if ProjectGroup<>nil then begin
|
||||
SetEventCallBacks(ProjectGroup);
|
||||
FProjectGroupTarget:=TProjectGroupTarget.Create(AValue);
|
||||
end;
|
||||
FActiveTarget:=Nil;
|
||||
ShowProjectGroup;
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.Localize;
|
||||
procedure TProjectGroupEditorForm.Localize;
|
||||
|
||||
Procedure ConfigAction(A : TAction; AImageIndex : Integer; Const ACaption,AHint : String; Mnu : TIDEMenuCommand);
|
||||
procedure ConfigAction(A : TAction; AImageIndex : Integer; Const ACaption,AHint : String; Mnu : TIDEMenuCommand);
|
||||
|
||||
begin
|
||||
A.Caption:=ACaption;
|
||||
@ -502,7 +465,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.DoTargetAdded(Sender: TObject;
|
||||
procedure TProjectGroupEditorForm.DoTargetAdded(Sender: TObject;
|
||||
Target: TCompileTarget);
|
||||
Var
|
||||
PG : TProjectGroup;
|
||||
@ -516,7 +479,7 @@ begin
|
||||
SBPG.Panels[piTargetCount].Text:=Format(lisTargetCount,[FProjectGroup.TargetCount]);
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.DoTargetDeleted(Sender: TObject;
|
||||
procedure TProjectGroupEditorForm.DoTargetDeleted(Sender: TObject;
|
||||
Target: TCompileTarget);
|
||||
Var
|
||||
PG : TProjectGroup;
|
||||
@ -531,7 +494,7 @@ begin
|
||||
SBPG.Panels[piTargetCount].Text:=Format(lisTargetCount,[FProjectGroup.TargetCount]);
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.DoTargetActivated(Sender: TObject;
|
||||
procedure TProjectGroupEditorForm.DoTargetActivated(Sender: TObject;
|
||||
Target: TCompileTarget);
|
||||
Var
|
||||
NC,NA : TTreeNode;
|
||||
@ -551,14 +514,14 @@ begin
|
||||
SBPG.Panels[piActiveTarget].Text:=Format(lisActiveTarget,[N]);
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.DoTargetExchanged(Sender: TObject; Target1,
|
||||
procedure TProjectGroupEditorForm.DoTargetExchanged(Sender: TObject; Target1,
|
||||
Target2: TCompileTarget);
|
||||
Var
|
||||
S,N1,N2 : TTreeNode;
|
||||
ND1,ND2 : TNodeData;
|
||||
NT1,NT2 : TCaption;
|
||||
begin
|
||||
N1:=FindNodeFromTarget(Target1);
|
||||
N1:=FindNodeFromTarget( Target1);
|
||||
N2:=FindNodeFromTarget(Target2);
|
||||
If (N1=Nil) or (N2=Nil) then
|
||||
exit;
|
||||
@ -738,7 +701,7 @@ begin
|
||||
IDEProjectGroupManager.DoSaveAsClick(Sender);
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.FreeNodeData;
|
||||
procedure TProjectGroupEditorForm.FreeNodeData;
|
||||
|
||||
Var
|
||||
N : TTreeNode;
|
||||
@ -756,7 +719,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Function TProjectGroupEditorForm.GetNodeIndex(ANodeType : TNodeType; ANodeData : TCompileTarget) : Integer;
|
||||
function TProjectGroupEditorForm.GetNodeIndex(ANodeType : TNodeType; ANodeData : TCompileTarget) : Integer;
|
||||
|
||||
begin
|
||||
Case ANodeType of
|
||||
@ -788,7 +751,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Function TProjectGroupEditorForm.SelectedNodeData: TNodeData;
|
||||
function TProjectGroupEditorForm.SelectedNodeData: TNodeData;
|
||||
|
||||
Var
|
||||
N : TTreeNode;
|
||||
@ -801,7 +764,7 @@ begin
|
||||
Result:=Nil;
|
||||
end;
|
||||
|
||||
Function TProjectGroupEditorForm.SelectedTarget: TCompileTarget;
|
||||
function TProjectGroupEditorForm.SelectedTarget: TCompileTarget;
|
||||
|
||||
Var
|
||||
N : TNodeData;
|
||||
@ -814,7 +777,7 @@ begin
|
||||
Result:=Nil;
|
||||
end;
|
||||
|
||||
Function TProjectGroupEditorForm.SelectedNodeType: TCompileTarget;
|
||||
function TProjectGroupEditorForm.SelectedNodeType: TCompileTarget;
|
||||
|
||||
Var
|
||||
N : TNodeData;
|
||||
@ -827,7 +790,8 @@ begin
|
||||
Result:=Nil;
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.ConfigNode(Node : TTreeNode; Const ACaption : String; ANodeData : TNodeData) ;
|
||||
procedure TProjectGroupEditorForm.ConfigNode(Node: TTreeNode;
|
||||
const ACaption: String; ANodeData: TNodeData);
|
||||
|
||||
begin
|
||||
Node.Data:=ANodeData;
|
||||
@ -841,7 +805,9 @@ begin
|
||||
Node.StateIndex:=-1;
|
||||
end;
|
||||
|
||||
Function TProjectGroupEditorForm.CreateNode(AParent : TTreeNode; Const ACaption : String; ANodeType : TNodeType; ANodeData : TCompileTarget; AProjectGroup : TProjectGroup) : TTreeNode;
|
||||
function TProjectGroupEditorForm.CreateNode(AParent: TTreeNode;
|
||||
const ACaption: String; ANodeType: TNodeType; ANodeData: TCompileTarget;
|
||||
AProjectGroup: TProjectGroup): TTreeNode;
|
||||
|
||||
Var
|
||||
ND : TNodeData;
|
||||
@ -855,7 +821,7 @@ begin
|
||||
ConfigNode(Result,'',ND);
|
||||
end;
|
||||
|
||||
Function TProjectGroupEditorForm.DisplayFileName(AProjectGroup: TProjectGroup;NodeType : TNodeType; AFileName : String) : String;
|
||||
function TProjectGroupEditorForm.DisplayFileName(AProjectGroup: TProjectGroup;NodeType : TNodeType; AFileName : String) : String;
|
||||
|
||||
Var
|
||||
P : String;
|
||||
@ -873,7 +839,7 @@ begin
|
||||
Result:=ChangeFileExt(Result,'');
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.ShowFileName;
|
||||
procedure TProjectGroupEditorForm.ShowFileName;
|
||||
|
||||
Var
|
||||
N : String;
|
||||
@ -887,7 +853,7 @@ begin
|
||||
FNPG.Text:=DisplayFileName(FProjectGroup,ntProjectGroup,FProjectGroup.FileName);
|
||||
end;
|
||||
|
||||
Function TProjectGroupEditorForm.FindNodeFromTarget(ATarget : TCompileTarget) : TTreeNode;
|
||||
function TProjectGroupEditorForm.FindNodeFromTarget(ATarget : TCompileTarget) : TTreeNode;
|
||||
|
||||
Var
|
||||
I : Integer;
|
||||
@ -904,7 +870,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.ShowProjectGroup;
|
||||
procedure TProjectGroupEditorForm.ShowProjectGroup;
|
||||
|
||||
Var
|
||||
N : TTreeNode;
|
||||
@ -928,7 +894,8 @@ begin
|
||||
SBPG.Panels[piTargetCount].Text:=Format(lisTargetCount,[FProjectGroup.TargetCount]);
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.FillProjectGroupNode(AParent : TTreeNode; AProjectGroup : TProjectGroup; Out TargetNodes : TTargetNodes);
|
||||
procedure TProjectGroupEditorForm.FillProjectGroupNode(AParent: TTreeNode;
|
||||
AProjectGroup: TProjectGroup; out TargetNodes: TTargetNodes);
|
||||
|
||||
Const
|
||||
TNT : Array[Boolean] of TNodeType = (ntTarget,ntRemovedTarget);
|
||||
@ -966,7 +933,8 @@ begin
|
||||
TargetNodes[True].Expand(False);
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.ShowDependencies(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TObject; Out PD : TTargetNodes);
|
||||
procedure TProjectGroupEditorForm.ShowDependencies(AParent: TTreeNode;
|
||||
AProjectGroup: TProjectGroup; T: TObject; out PD: TTargetNodes);
|
||||
Var
|
||||
L : TfPList;
|
||||
I : Integer;
|
||||
@ -982,7 +950,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.FillProjectNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TLazProject);
|
||||
procedure TProjectGroupEditorForm.FillProjectNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TLazProject);
|
||||
Var
|
||||
PF,PD : TTargetNodes;
|
||||
I : Integer;
|
||||
@ -996,7 +964,7 @@ begin
|
||||
// TODO: Build mode info Not available ?
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.FillPackageNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TIDEPackage);
|
||||
procedure TProjectGroupEditorForm.FillPackageNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TIDEPackage);
|
||||
Var
|
||||
PF,PD : TTargetNodes;
|
||||
I : Integer;
|
||||
@ -1009,7 +977,7 @@ begin
|
||||
ShowDependencies(AParent,AProjectGroup,T,PD);
|
||||
end;
|
||||
|
||||
Procedure TProjectGroupEditorForm.FillTargetNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TCompileTarget);
|
||||
procedure TProjectGroupEditorForm.FillTargetNode(AParent: TTreeNode; AProjectGroup : TProjectGroup; T: TCompileTarget);
|
||||
Var
|
||||
PN : TTargetNodes;
|
||||
begin
|
||||
@ -1029,7 +997,7 @@ begin
|
||||
Result:=FActiveTarget;
|
||||
end;
|
||||
|
||||
Class Function TProjectGroupEditorForm.TargetFromNode(N: TTreeNode
|
||||
class function TProjectGroupEditorForm.TargetFromNode(N: TTreeNode
|
||||
): TCompileTarget;
|
||||
begin
|
||||
if (N<>Nil) and (N.Data<>Nil) then
|
||||
|
||||
@ -10,16 +10,32 @@ uses
|
||||
Classes, SysUtils, IDEOptionsIntf, PackageIntf, ProjectIntf, LazFileUtils;
|
||||
|
||||
Type
|
||||
TTargetType = (ttUnknown, ttProject, ttPackage, ttProjectGroup);
|
||||
TTargetType = (
|
||||
ttUnknown,
|
||||
ttProject,
|
||||
ttPackage,
|
||||
ttProjectGroup, // nested group
|
||||
ttUnit, // build/run file, parameters stored IDE directives
|
||||
ttExternalTool
|
||||
);
|
||||
TTargetTypes = set of TTargetType;
|
||||
TTargetAction = (taOpen,taSettings,taCompile,taCompileClean,taRun,taInstall,taUninstall);
|
||||
|
||||
TTargetAction = (
|
||||
taOpen,
|
||||
taSettings,
|
||||
taCompile,
|
||||
taCompileClean,
|
||||
taRun,
|
||||
taInstall,
|
||||
taUninstall);
|
||||
TTargetActions = set of TTargetAction;
|
||||
|
||||
TActionResult = (arNotAllowed,arOK,arFailed);
|
||||
TActionResults = set of TActionResult;
|
||||
|
||||
TProjectGroup = class;
|
||||
|
||||
{ TCompileTarget - can be a project, package or project group}
|
||||
{ TCompileTarget - a node in the tree, e.g. a project, package or group }
|
||||
|
||||
TCompileTarget = class
|
||||
private
|
||||
@ -28,8 +44,8 @@ Type
|
||||
FTargetType: TTargetType;
|
||||
FRemoved: boolean;
|
||||
protected
|
||||
Function PerformAction (AAction : TTargetAction) : TActionResult; virtual; abstract;
|
||||
Function Perform (AAction : TTargetAction) : TActionResult;
|
||||
function PerformAction (AAction: TTargetAction): TActionResult; virtual; abstract;
|
||||
function Perform (AAction: TTargetAction): TActionResult;
|
||||
// By default, return all allowed actions for target type.
|
||||
function GetAllowedActions: TTargetActions; virtual;
|
||||
function GetLazProject: TLazProject; virtual; abstract;
|
||||
@ -38,55 +54,60 @@ Type
|
||||
procedure SetFilename(const AValue: string); virtual;
|
||||
function GetIDEPackage: TIDEPackage; virtual; abstract;
|
||||
procedure SetRemoved(const AValue: boolean); virtual;
|
||||
Procedure Activate; virtual;
|
||||
Procedure DeActivate; virtual;
|
||||
procedure Activate; virtual;
|
||||
procedure DeActivate; virtual;
|
||||
public
|
||||
// Fully qualified FileName. Not relative. (ToDo: store them relative)
|
||||
property Filename: string read FFilename write SetFilename;
|
||||
property Filename: string read FFilename write SetFilename; // Absolute, not relative. (ToDo: store them relative)
|
||||
property Removed: boolean read FRemoved write SetRemoved;
|
||||
property TargetType: TTargetType read FTargetType write SetTargetType;
|
||||
property Active : Boolean Read FActive;
|
||||
property Active: Boolean Read FActive;
|
||||
// Currently allowed actions.
|
||||
property AllowedActions : TTargetActions Read GetAllowedActions;
|
||||
property AllowedActions: TTargetActions Read GetAllowedActions;
|
||||
//
|
||||
property LazPackage: TIDEPackage read GetIDEPackage;
|
||||
property LazProject : TLazProject Read GetLazProject;
|
||||
property ProjectGroup : TProjectGroup Read GetProjectGroup;
|
||||
property LazProject: TLazProject Read GetLazProject;
|
||||
property ProjectGroup: TProjectGroup Read GetProjectGroup;
|
||||
end;
|
||||
|
||||
{ TProjectGroup }
|
||||
|
||||
TProjectGroup = Class(TPersistent)
|
||||
TProjectGroup = class(TPersistent)
|
||||
private
|
||||
FFileName: String;
|
||||
function GetActiveTarget: TCompileTarget;
|
||||
procedure SetActiveTarget(AValue: TCompileTarget);
|
||||
Protected
|
||||
protected
|
||||
procedure SetFileName(AValue: String); virtual;
|
||||
function GetTargetCount: Integer; virtual; abstract;
|
||||
function GetModified: Boolean; virtual; abstract;
|
||||
function GetTarget(AIndex : Integer): TCompileTarget; virtual; abstract;
|
||||
Public
|
||||
Function Perform(AIndex : Integer;AAction : TTargetAction) : TActionResult;
|
||||
Function Perform(Const AFileName : String;AAction : TTargetAction) : TActionResult;
|
||||
Function Perform(ATarget : TCompileTarget; AAction : TTargetAction) : TActionResult; virtual;
|
||||
Function ActionAllowsFrom(AIndex : Integer;AAction : TTargetAction) : Boolean; virtual;
|
||||
Function PerformFrom (AIndex : Integer;AAction : TTargetAction) : TActionResult; virtual;
|
||||
Function IndexOfTarget(Const T : TCompileTarget) : Integer; virtual;
|
||||
Function IndexOfTarget(Const AFilename : String) : Integer; virtual;
|
||||
Function AddTarget(Const AFileName : String) : TCompileTarget; virtual; abstract;
|
||||
Procedure ExchangeTargets(ASource,ATarget : Integer); virtual; abstract;
|
||||
Procedure RemoveTarget(AIndex : Integer);
|
||||
Procedure RemoveTarget(Const AFileName : String) ;
|
||||
Procedure RemoveTarget(T : TCompileTarget) ; virtual;
|
||||
Procedure ActivateTarget(AIndex : Integer);
|
||||
Procedure ActivateTarget(Const AFileName : String);
|
||||
Procedure ActivateTarget(T : TCompileTarget); virtual;
|
||||
Property FileName : String Read FFileName Write SetFileName;
|
||||
Property Targets[AIndex : Integer] : TCompileTarget Read GetTarget;
|
||||
Property TargetCount : Integer Read GetTargetCount;
|
||||
Property ActiveTarget : TCompileTarget Read GetActiveTarget Write SetActiveTarget;
|
||||
Property Modified : Boolean Read GetModified;
|
||||
function GetTargetCount: Integer; virtual; abstract;
|
||||
function GetTarget(Index: Integer): TCompileTarget; virtual; abstract;
|
||||
function GetRemovedTargetCount: Integer; virtual; abstract;
|
||||
function GetRemovedTarget(Index: Integer): TCompileTarget; virtual; abstract;
|
||||
public
|
||||
function Perform(Index: Integer; AAction: TTargetAction): TActionResult;
|
||||
function Perform(Const AFileName: String; AAction: TTargetAction): TActionResult;
|
||||
function Perform(Target: TCompileTarget; AAction: TTargetAction): TActionResult; virtual;
|
||||
function ActionAllowsFrom(Index: Integer; AAction: TTargetAction): Boolean; virtual;
|
||||
function PerformFrom(AIndex: Integer; AAction: TTargetAction): TActionResult; virtual;
|
||||
function IndexOfTarget(Const Target: TCompileTarget): Integer; virtual; abstract;
|
||||
function IndexOfTarget(Const AFilename: String): Integer; virtual;
|
||||
function IndexOfRemovedTarget(Const Target: TCompileTarget): Integer; virtual; abstract;
|
||||
function IndexOfRemovedTarget(Const AFilename: String): Integer; virtual;
|
||||
function AddTarget(Const AFileName: String): TCompileTarget; virtual; abstract;
|
||||
procedure ExchangeTargets(ASource, ATarget: Integer); virtual; abstract;
|
||||
procedure RemoveTarget(Index: Integer); virtual; abstract;
|
||||
procedure RemoveTarget(Const AFileName: String);
|
||||
procedure RemoveTarget(Target: TCompileTarget);
|
||||
procedure ActivateTarget(Index: Integer);
|
||||
procedure ActivateTarget(Const AFileName: String);
|
||||
procedure ActivateTarget(Target: TCompileTarget); virtual;
|
||||
property FileName: String Read FFileName Write SetFileName; // absolute
|
||||
property Targets[Index: Integer]: TCompileTarget Read GetTarget;
|
||||
property TargetCount: Integer Read GetTargetCount;
|
||||
property RemovedTargets[Index: Integer]: TCompileTarget Read GetRemovedTarget;
|
||||
property RemovedTargetCount: Integer Read GetRemovedTargetCount;
|
||||
property ActiveTarget: TCompileTarget Read GetActiveTarget Write SetActiveTarget;
|
||||
property Modified: Boolean Read GetModified;
|
||||
end;
|
||||
|
||||
TProjectGroupLoadOption = (
|
||||
@ -102,56 +123,55 @@ Type
|
||||
TProjectGroupManager = Class(TPersistent)
|
||||
protected
|
||||
function GetCurrentProjectGroup: TProjectGroup; virtual; abstract;
|
||||
Public
|
||||
Procedure LoadProjectGroup(AFileName : string; AOptions : TProjectGroupLoadOptions); virtual; abstract;
|
||||
Procedure SaveProjectGroup; virtual; abstract;
|
||||
Property CurrentProjectGroup : TProjectGroup Read GetCurrentProjectGroup; // Always top-level.
|
||||
public
|
||||
procedure LoadProjectGroup(AFileName: string; AOptions: TProjectGroupLoadOptions); virtual; abstract;
|
||||
procedure SaveProjectGroup; virtual; abstract;
|
||||
property CurrentProjectGroup: TProjectGroup Read GetCurrentProjectGroup; // Always top-level.
|
||||
end;
|
||||
|
||||
Var
|
||||
ProjectGroupManager : TProjectGroupManager = nil;
|
||||
var
|
||||
ProjectGroupManager: TProjectGroupManager = nil;
|
||||
|
||||
Function TargetTypeFromExtenstion (AExt : String) : TTargetType;
|
||||
Function TargetActions(ATarget : TTargetType) : TTargetActions;
|
||||
Function TargetSupportsAction(ATarget : TTargetType; AAction : TTargetAction) : Boolean;
|
||||
Function ActionAllowsMulti(AAction : TTargetAction) : Boolean;
|
||||
const
|
||||
TargetActions: array[TTargetType] of TTargetActions = (
|
||||
[], // ttUnknown
|
||||
[taOpen,taSettings,taCompile,taCompileClean,taRun], // ttProject
|
||||
[taOpen,taSettings,taCompile,taCompileClean,taInstall,taUninstall], // ttPackage
|
||||
[taOpen,taCompile,taCompileClean], // ttProjectGroup
|
||||
[taOpen,taCompile], // ttUnit
|
||||
[taOpen,taRun] // ttExternalTool
|
||||
);
|
||||
|
||||
function TargetTypeFromExtenstion(AExt: String): TTargetType;
|
||||
function TargetSupportsAction(ATarget: TTargetType; AAction: TTargetAction): Boolean;
|
||||
function ActionAllowsMulti(AAction: TTargetAction): Boolean;
|
||||
|
||||
implementation
|
||||
|
||||
Function TargetTypeFromExtenstion (AExt : String) : TTargetType;
|
||||
function TargetTypeFromExtenstion (AExt: String): TTargetType;
|
||||
begin
|
||||
While (AExt<>'') and (AExt[1]='.') do
|
||||
while (AExt<>'') and (AExt[1]='.') do
|
||||
Delete(AExt,1,1);
|
||||
Case LowerCase(AExt) of
|
||||
case LowerCase(AExt) of
|
||||
'lpi',
|
||||
'lpr' : Result:=ttProject;
|
||||
'lpk' : Result:=ttPackage;
|
||||
'lpg' : Result:=ttProjectGroup;
|
||||
'lpr': Result:=ttProject;
|
||||
'lpk': Result:=ttPackage;
|
||||
'lpg': Result:=ttProjectGroup;
|
||||
'pas',
|
||||
'pp',
|
||||
'p' : Result:=ttUnit;
|
||||
else
|
||||
Result:=ttUnknown;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TargetActions(ATarget: TTargetType): TTargetActions;
|
||||
begin
|
||||
begin
|
||||
Case ATarget of
|
||||
ttUnknown : Result:=[];
|
||||
ttProject : Result:=[taOpen,taSettings,taCompile,taCompileClean,taRun];
|
||||
ttPackage : Result:=[taOpen,taSettings,taCompile,taCompileClean,taInstall,taUninstall];
|
||||
ttProjectGroup : Result:=[taOpen,taCompile,taCompileClean];
|
||||
end;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
function TargetSupportsAction(ATarget: TTargetType; AAction: TTargetAction
|
||||
): Boolean;
|
||||
begin
|
||||
Result:=AAction in TargetActions(ATarget);
|
||||
Result:=AAction in TargetActions[ATarget];
|
||||
end;
|
||||
|
||||
Function ActionAllowsMulti(AAction: TTargetAction): Boolean;
|
||||
function ActionAllowsMulti(AAction: TTargetAction): Boolean;
|
||||
begin
|
||||
Result:=AAction in [taCompile,taCompileClean];
|
||||
end;
|
||||
@ -161,7 +181,7 @@ end;
|
||||
|
||||
function TProjectGroup.GetActiveTarget: TCompileTarget;
|
||||
Var
|
||||
I : Integer;
|
||||
I: Integer;
|
||||
begin
|
||||
I:=0;
|
||||
for i:=0 to TargetCount-1 do
|
||||
@ -183,114 +203,109 @@ begin
|
||||
FFileName:=AValue;
|
||||
end;
|
||||
|
||||
Function TProjectGroup.Perform(AIndex: Integer; AAction: TTargetAction
|
||||
function TProjectGroup.Perform(Index: Integer; AAction: TTargetAction
|
||||
): TActionResult;
|
||||
begin
|
||||
Result:=Perform(GetTarget(AIndex),AAction);
|
||||
Result:=Perform(GetTarget(Index),AAction);
|
||||
end;
|
||||
|
||||
Function TProjectGroup.Perform(Const AFileName: String; AAction: TTargetAction
|
||||
function TProjectGroup.Perform(const AFileName: String; AAction: TTargetAction
|
||||
): TActionResult;
|
||||
begin
|
||||
Result:=Perform(IndexOfTarget(AFileName),AAction);
|
||||
end;
|
||||
|
||||
Function TProjectGroup.Perform(ATarget: TCompileTarget; AAction : TTargetAction): TActionResult;
|
||||
function TProjectGroup.Perform(Target: TCompileTarget; AAction: TTargetAction): TActionResult;
|
||||
begin
|
||||
Result:=ATarget.Perform(AAction);
|
||||
Result:=Target.Perform(AAction);
|
||||
end;
|
||||
|
||||
Function TProjectGroup.ActionAllowsFrom(AIndex: Integer; AAction: TTargetAction
|
||||
function TProjectGroup.ActionAllowsFrom(Index: Integer; AAction: TTargetAction
|
||||
): Boolean;
|
||||
Var
|
||||
C : Integer;
|
||||
T : TCompileTarget;
|
||||
C: Integer;
|
||||
T: TCompileTarget;
|
||||
begin
|
||||
Result:=ActionAllowsMulti(AAction);
|
||||
C:=TargetCount;
|
||||
While Result and (AIndex<C) do
|
||||
begin
|
||||
T:=GetTarget(AIndex);
|
||||
while Result and (Index<C) do
|
||||
begin
|
||||
T:=GetTarget(Index);
|
||||
if not T.Removed then
|
||||
Result:=AAction in T.AllowedActions;;
|
||||
Inc(AIndex);
|
||||
end;
|
||||
Inc(Index);
|
||||
end;
|
||||
end;
|
||||
|
||||
Function TProjectGroup.PerformFrom(AIndex: Integer; AAction: TTargetAction
|
||||
function TProjectGroup.PerformFrom(AIndex: Integer; AAction: TTargetAction
|
||||
): TActionResult;
|
||||
Var
|
||||
I : Integer;
|
||||
I: Integer;
|
||||
begin
|
||||
Result:=arOK;
|
||||
I:=AIndex;
|
||||
While (Result=arOK) and (I<TargetCount) do
|
||||
while (Result=arOK) and (I<TargetCount) do
|
||||
if Not GetTarget(i).Removed then
|
||||
begin
|
||||
begin
|
||||
Result:=Perform(I,AAction);
|
||||
Inc(I);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
Function TProjectGroup.IndexOfTarget(Const T: TCompileTarget): Integer;
|
||||
function TProjectGroup.IndexOfTarget(const AFilename: String): Integer;
|
||||
begin
|
||||
Result:=TargetCount-1;
|
||||
While (Result>=0) and (T<>GetTarget(Result)) do
|
||||
while (Result>=0) and (CompareFilenames(AFileName,GetTarget(Result).Filename)<>0) do
|
||||
Dec(Result);
|
||||
end;
|
||||
|
||||
Function TProjectGroup.IndexOfTarget(Const AFilename: String): Integer;
|
||||
function TProjectGroup.IndexOfRemovedTarget(const AFilename: String): Integer;
|
||||
begin
|
||||
Result:=TargetCount-1;
|
||||
While (Result>=0) and (CompareFilenames(AFileName,GetTarget(Result).Filename)<>0) do
|
||||
Result:=RemovedTargetCount-1;
|
||||
while (Result>=0) and (CompareFilenames(AFileName,GetRemovedTarget(Result).Filename)<>0) do
|
||||
Dec(Result);
|
||||
end;
|
||||
|
||||
Procedure TProjectGroup.RemoveTarget(AIndex: Integer);
|
||||
begin
|
||||
RemoveTarget(Targets[AIndex])
|
||||
end;
|
||||
|
||||
Procedure TProjectGroup.RemoveTarget(Const AFileName: String);
|
||||
procedure TProjectGroup.RemoveTarget(const AFileName: String);
|
||||
begin
|
||||
RemoveTarget(IndexOfTarget(AFileName))
|
||||
end;
|
||||
|
||||
Procedure TProjectGroup.RemoveTarget(T: TCompileTarget);
|
||||
procedure TProjectGroup.RemoveTarget(Target: TCompileTarget);
|
||||
begin
|
||||
T.Removed:=True;
|
||||
RemoveTarget(IndexOfTarget(Target))
|
||||
end;
|
||||
|
||||
Procedure TProjectGroup.ActivateTarget(AIndex: Integer);
|
||||
procedure TProjectGroup.ActivateTarget(Index: Integer);
|
||||
begin
|
||||
ActivateTarget(GetTarget(AIndex));
|
||||
ActivateTarget(GetTarget(Index));
|
||||
end;
|
||||
|
||||
Procedure TProjectGroup.ActivateTarget(Const AFileName: String);
|
||||
procedure TProjectGroup.ActivateTarget(const AFileName: String);
|
||||
begin
|
||||
ActivateTarget(IndexOfTarget(AFileName));
|
||||
end;
|
||||
|
||||
Procedure TProjectGroup.ActivateTarget(T: TCompileTarget);
|
||||
Var
|
||||
I : Integer;
|
||||
TD : TCompileTarget;
|
||||
procedure TProjectGroup.ActivateTarget(Target: TCompileTarget);
|
||||
var
|
||||
I: Integer;
|
||||
TD: TCompileTarget;
|
||||
begin
|
||||
if T.Active then exit;
|
||||
For I:=0 to TargetCount-1 do
|
||||
begin
|
||||
if Target.Active then exit;
|
||||
for I:=0 to TargetCount-1 do
|
||||
begin
|
||||
TD:=GetTarget(I);
|
||||
If TD.Active then
|
||||
if TD.Active then
|
||||
TD.Deactivate;
|
||||
end;
|
||||
T.Activate;
|
||||
end;
|
||||
Target.Activate;
|
||||
end;
|
||||
|
||||
{ TCompileTarget }
|
||||
|
||||
function TCompileTarget.GetAllowedActions: TTargetActions;
|
||||
begin
|
||||
Result:=TargetActions(TargetType)
|
||||
Result:=TargetActions[TargetType];
|
||||
end;
|
||||
|
||||
procedure TCompileTarget.SetTargetType(AValue: TTargetType);
|
||||
@ -324,7 +339,7 @@ begin
|
||||
FActive:=False;
|
||||
end;
|
||||
|
||||
Function TCompileTarget.Perform(AAction: TTargetAction) : TActionResult;
|
||||
function TCompileTarget.Perform(AAction: TTargetAction): TActionResult;
|
||||
begin
|
||||
if Not (AAction in AllowedActions) then
|
||||
Result:=arNotAllowed
|
||||
|
||||
@ -10,35 +10,16 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, ProjectGroupIntf, MenuIntf,
|
||||
ProjectGroup, ProjectGroupEditor;
|
||||
ProjectGroupStrConst, ProjectGroup, ProjectGroupEditor;
|
||||
|
||||
procedure RegisterStandardProjectGroupMenuItems;
|
||||
Procedure Register;
|
||||
procedure Register;
|
||||
|
||||
implementation
|
||||
|
||||
Const
|
||||
const
|
||||
ProjectGroupEditorMenuRootName = 'ProjectGroupEditorMenu';
|
||||
|
||||
Resourcestring
|
||||
lisTargetAdd = 'Add target';
|
||||
lisTargetRemove = 'Remove target';
|
||||
lisTargetCompile = 'Compile';
|
||||
lisTargetCompileClean = 'Compile clean';
|
||||
lisTargetInstall = 'Install';
|
||||
lisTargetUnInstall = 'Uninstall';
|
||||
lisTargetActivate = 'Activate target';
|
||||
lisTargetOpen = 'Open Target';
|
||||
lisTargetRun = 'Run Target';
|
||||
lisTargetProperties = 'Target properties';
|
||||
lisTargetLater = 'Compile target later';
|
||||
lisTargetEarlier = 'Compile target earlier';
|
||||
lisNewProjectGroup = 'New Project group';
|
||||
lisOpenProjectGroup = 'Open Project group';
|
||||
lisSaveProjectGroup = 'Save Project group';
|
||||
lisSaveProjectGroupAs = 'Save Project group as';
|
||||
|
||||
|
||||
procedure RegisterStandardProjectGroupMenuItems;
|
||||
var
|
||||
Section,Root : TIDEMenuSection;
|
||||
@ -79,9 +60,10 @@ begin
|
||||
// ToDo: find in files
|
||||
// ToDo: find references in files
|
||||
|
||||
// ToDo: D&D order compile targets
|
||||
end;
|
||||
|
||||
Procedure Register;
|
||||
procedure Register;
|
||||
begin
|
||||
RegisterStandardProjectGroupMenuItems;
|
||||
IDEProjectGroupManager:=TIDEProjectGroupManager.Create;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user