project groups: started removed targets list

git-svn-id: trunk@50151 -
This commit is contained in:
mattias 2015-10-23 09:11:34 +00:00
parent 722d1f85ac
commit dbc7d81566
5 changed files with 366 additions and 393 deletions

View File

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

View File

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

View File

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

View File

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

View File

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