mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-25 22:27:11 +01:00
IDE: project inspector: rusing package editor types
git-svn-id: trunk@45588 -
This commit is contained in:
parent
62a230bb86
commit
c07eaa50e2
@ -36,8 +36,8 @@ unit DialogProcs;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, LCLProc, LResources, Forms, Controls, Dialogs, FileProcs,
|
||||
FileUtil, LazFileUtils, Laz2_XMLCfg, lazutf8classes, LazFileCache,
|
||||
Classes, SysUtils, LCLProc, LResources, Forms, Controls, Dialogs, ComCtrls,
|
||||
FileProcs, FileUtil, LazFileUtils, Laz2_XMLCfg, lazutf8classes, LazFileCache,
|
||||
CodeToolsConfig, CodeCache, CodeToolManager, AVL_Tree, LazIDEIntf, IDEProcs,
|
||||
LazarusIDEStrConsts, IDEDialogs;
|
||||
|
||||
@ -56,6 +56,10 @@ type
|
||||
TOnBackupFileInteractive =
|
||||
function(const Filename: string): TModalResult of object;
|
||||
|
||||
TOnDragOverTreeView = function(Sender, Source: TObject; X, Y: Integer;
|
||||
out TargetTVNode: TTreeNode; out TargetTVType: TTreeViewInsertMarkType
|
||||
): boolean of object;
|
||||
|
||||
var
|
||||
OnBackupFileInteractive: TOnBackupFileInteractive = nil;
|
||||
|
||||
|
||||
@ -4260,9 +4260,13 @@ resourcestring
|
||||
+'currently not in the include path of the package.%sAdd "%s" to the '
|
||||
+'include path?';
|
||||
lisExtendUnitPath2 = 'Extend Unit Path?';
|
||||
lisExtendUnitSearchPathOfProjectWith = 'Extend unit search path of project '
|
||||
+'with%s"%s"?';
|
||||
lisExtendUnitSearchPathOfPackageWith = 'Extend unit search path of package "'
|
||||
+'%s" with"%s"?';
|
||||
lisExtendIncludePath = 'Extend Include Path?';
|
||||
lisExtendIncludeFilesSearchPathOfProjectWith = 'Extend include files search '
|
||||
+'path of project with%s"%s"?';
|
||||
lisExtendIncludeFileSearchPathOfPackageWith = 'Extend include file search '
|
||||
+'path of package "%s" with"%s"?';
|
||||
lisConflictDetected = 'Conflict detected';
|
||||
|
||||
@ -6432,6 +6432,8 @@ begin
|
||||
ProjInspector.OnRemoveFile:=@ProjInspectorRemoveFile;
|
||||
ProjInspector.OnRemoveDependency:=@PkgBoss.OnProjectInspectorRemoveDependency;
|
||||
ProjInspector.OnReAddDependency:=@PkgBoss.OnProjectInspectorReAddDependency;
|
||||
ProjInspector.OnDragOverTreeView:=@PkgBoss.OnProjectInspectorDragOverTreeView;
|
||||
ProjInspector.OnDragDropTreeView:=@PkgBoss.OnProjectInspectorDragDropTreeView;
|
||||
|
||||
ProjInspector.LazProject:=Project1;
|
||||
end;
|
||||
|
||||
@ -64,7 +64,7 @@ uses
|
||||
CodeToolManager, CodeCache, AVL_Tree, SynEditKeyCmds,
|
||||
// IDEIntf
|
||||
PropEdits, ObjectInspector, MenuIntf, SrcEditorIntf, ProjectIntf,
|
||||
CompOptsIntf, LazIDEIntf,
|
||||
CompOptsIntf, LazIDEIntf, IDEDialogs,
|
||||
// IDE
|
||||
LazConf, LazarusIDEStrConsts, ProjectDefs, Project, PublishModule, BuildLazDialog,
|
||||
TransferMacros, ProgressDlg, EnvironmentOpts, EditorOptions, CompilerOptions,
|
||||
@ -177,6 +177,9 @@ type
|
||||
const SrcDirectory, DestDirectory: string
|
||||
): TModalResult; virtual; abstract;
|
||||
|
||||
function ExtendProjectUnitSearchPath(AProject: TProject; NewUnitPaths: string): boolean;
|
||||
function ExtendProjectIncSearchPath(AProject: TProject; NewIncPaths: string): boolean;
|
||||
|
||||
function DoFixupComponentReferences(RootComponent: TComponent;
|
||||
OpenFlags: TOpenFlags): TModalResult; virtual; abstract;
|
||||
|
||||
@ -367,6 +370,51 @@ begin
|
||||
UpdateCaption;
|
||||
end;
|
||||
|
||||
function TMainIDEInterface.ExtendProjectUnitSearchPath(AProject: TProject;
|
||||
NewUnitPaths: string): boolean;
|
||||
var
|
||||
CurUnitPaths: String;
|
||||
r: TModalResult;
|
||||
begin
|
||||
CurUnitPaths:=AProject.CompilerOptions.ParsedOpts.GetParsedValue(pcosUnitPath);
|
||||
NewUnitPaths:=RemoveSearchPaths(NewUnitPaths,CurUnitPaths);
|
||||
if NewUnitPaths<>'' then begin
|
||||
NewUnitPaths:=CreateRelativeSearchPath(NewUnitPaths,AProject.ProjectDirectory);
|
||||
r:=IDEMessageDialog(lisExtendUnitPath2,
|
||||
Format(lisExtendUnitSearchPathOfProjectWith, [#13, NewUnitPaths]),
|
||||
mtConfirmation, [mbYes, mbNo, mbCancel]);
|
||||
case r of
|
||||
mrYes: AProject.CompilerOptions.OtherUnitFiles:=
|
||||
MergeSearchPaths(AProject.CompilerOptions.OtherUnitFiles,NewUnitPaths);
|
||||
mrNo: ;
|
||||
else exit(false);
|
||||
end;
|
||||
end;
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
function TMainIDEInterface.ExtendProjectIncSearchPath(AProject: TProject;
|
||||
NewIncPaths: string): boolean;
|
||||
var
|
||||
CurIncPaths: String;
|
||||
r: TModalResult;
|
||||
begin
|
||||
CurIncPaths:=AProject.CompilerOptions.ParsedOpts.GetParsedValue(pcosIncludePath);
|
||||
NewIncPaths:=RemoveSearchPaths(NewIncPaths,CurIncPaths);
|
||||
if NewIncPaths<>'' then begin
|
||||
NewIncPaths:=CreateRelativeSearchPath(NewIncPaths,AProject.ProjectDirectory);
|
||||
r:=IDEMessageDialog(lisExtendIncludePath,
|
||||
Format(lisExtendIncludeFilesSearchPathOfProjectWith, [#13, NewIncPaths]),
|
||||
mtConfirmation, [mbYes, mbNo, mbCancel]);
|
||||
case r of
|
||||
mrYes: AProject.CompilerOptions.IncludePath:=
|
||||
MergeSearchPaths(AProject.CompilerOptions.IncludePath,NewIncPaths);
|
||||
mrNo: ;
|
||||
else exit(false);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TMainIDEInterface.DoJumpToSourcePosition(const Filename: string; NewX, NewY,
|
||||
NewTopLine: integer; AddJumpPoint: boolean; MarkLine: Boolean): TModalResult;
|
||||
var
|
||||
|
||||
@ -26,6 +26,8 @@ object ProjectInspectorForm: TProjectInspectorForm
|
||||
TabOrder = 0
|
||||
OnAdvancedCustomDrawItem = ItemsTreeViewAdvancedCustomDrawItem
|
||||
OnDblClick = ItemsTreeViewDblClick
|
||||
OnDragDrop = ItemsTreeViewDragDrop
|
||||
OnDragOver = ItemsTreeViewDragOver
|
||||
OnKeyDown = ItemsTreeViewKeyDown
|
||||
OnSelectionChanged = ItemsTreeViewSelectionChanged
|
||||
Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
||||
|
||||
@ -58,16 +58,18 @@ unit ProjectInspector;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
{$DEFINE VerboseProjInspDrag}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, LCLProc, LCLType, Forms, Controls, Buttons, ComCtrls,
|
||||
Menus, Dialogs, FileUtil, LazFileCache, ExtCtrls, Graphics, IDEHelpIntf,
|
||||
IDECommands, IDEDialogs, IDEImagesIntf, LazIDEIntf, ProjectIntf, PackageIntf,
|
||||
Project, LazarusIDEStrConsts, IDEProcs, IDEOptionDefs, AddToProjectDlg,
|
||||
PackageDefs, TreeFilterEdit, CodeToolManager, CodeCache, EnvironmentOpts;
|
||||
Menus, Dialogs, FileUtil, LazFileCache, ExtCtrls, Graphics,
|
||||
CodeToolManager, CodeCache, TreeFilterEdit,
|
||||
// IDEIntf
|
||||
IDEHelpIntf, IDECommands, IDEDialogs, IDEImagesIntf, LazIDEIntf, ProjectIntf,
|
||||
PackageIntf,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, IDEProcs, DialogProcs, IDEOptionDefs, EnvironmentOpts,
|
||||
PackageDefs, Project, PackageEditor, AddToProjectDlg;
|
||||
|
||||
type
|
||||
TOnAddUnitToProject =
|
||||
@ -87,19 +89,6 @@ type
|
||||
);
|
||||
TProjectInspectorFlags = set of TProjectInspectorFlag;
|
||||
|
||||
TPINodeType = (
|
||||
pntFile,
|
||||
pntDependency
|
||||
);
|
||||
|
||||
TPINodeData = class(TTFENodeData)
|
||||
public
|
||||
Typ: TPINodeType;
|
||||
Name: string; // file or package name
|
||||
Removed : Boolean;
|
||||
Next : TPINodeData;
|
||||
end;
|
||||
|
||||
{ TProjectInspectorForm }
|
||||
|
||||
TProjectInspectorForm = class(TForm)
|
||||
@ -125,6 +114,9 @@ type
|
||||
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
|
||||
var PaintImages, DefaultDraw: Boolean);
|
||||
procedure ItemsTreeViewDblClick(Sender: TObject);
|
||||
procedure ItemsTreeViewDragDrop(Sender, Source: TObject; X, Y: Integer);
|
||||
procedure ItemsTreeViewDragOver(Sender, Source: TObject; X, Y: Integer;
|
||||
State: TDragState; var Accept: Boolean);
|
||||
procedure ItemsTreeViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure ItemsTreeViewSelectionChanged(Sender: TObject);
|
||||
procedure MoveDependencyUpClick(Sender: TObject);
|
||||
@ -145,6 +137,8 @@ type
|
||||
FIdleConnected: boolean;
|
||||
FOnAddDependency: TAddProjInspDepEvent;
|
||||
FOnAddUnitToProject: TOnAddUnitToProject;
|
||||
FOnDragDropTreeView: TDragDropEvent;
|
||||
FOnDragOverTreeView: TOnDragOverTreeView;
|
||||
FOnReAddDependency: TAddProjInspDepEvent;
|
||||
FOnRemoveDependency: TRemoveProjInspDepEvent;
|
||||
FOnRemoveFile: TRemoveProjInspFileEvent;
|
||||
@ -168,12 +162,12 @@ type
|
||||
ImageIndexBinary: integer;
|
||||
ImageIndexDirectory: integer;
|
||||
FFlags: TProjectInspectorFlags;
|
||||
FProjectNodeDataList : array [TPINodeType] of TPINodeData;
|
||||
procedure FreeNodeData(Typ: TPINodeType);
|
||||
function CreateNodeData(Typ: TPINodeType; aName: string; aRemoved: boolean): TPINodeData;
|
||||
function GetNodeData(TVNode: TTreeNode): TPINodeData;
|
||||
function GetNodeItem(NodeData: TPINodeData): TObject;
|
||||
function GetNodeDataItem(TVNode: TTreeNode; out NodeData: TPINodeData;
|
||||
FProjectNodeDataList : array [TPENodeType] of TPENodeData;
|
||||
procedure FreeNodeData(Typ: TPENodeType);
|
||||
function CreateNodeData(Typ: TPENodeType; aName: string; aRemoved: boolean): TPENodeData;
|
||||
function GetNodeData(TVNode: TTreeNode): TPENodeData;
|
||||
function GetNodeItem(NodeData: TPENodeData): TObject;
|
||||
function GetNodeDataItem(TVNode: TTreeNode; out NodeData: TPENodeData;
|
||||
out Item: TObject): boolean;
|
||||
procedure SetDependencyDefaultFilename(AsPreferred: boolean);
|
||||
procedure SetIdleConnected(AValue: boolean);
|
||||
@ -202,6 +196,7 @@ type
|
||||
procedure UpdatePending;
|
||||
function CanUpdate(Flag: TProjectInspectorFlag): boolean;
|
||||
function GetSingleSelectedDependency: TPkgDependency;
|
||||
function TreeViewToInspector(TV: TTreeView): TProjectInspectorForm;
|
||||
public
|
||||
property LazProject: TProject read FLazProject write SetLazProject;
|
||||
property OnShowOptions: TNotifyEvent read FOnShowOptions write FOnShowOptions;
|
||||
@ -215,6 +210,10 @@ type
|
||||
read FOnRemoveDependency write FOnRemoveDependency;
|
||||
property OnReAddDependency: TAddProjInspDepEvent
|
||||
read FOnReAddDependency write FOnReAddDependency;
|
||||
property OnDragDropTreeView: TDragDropEvent read FOnDragDropTreeView
|
||||
write FOnDragDropTreeView;
|
||||
property OnDragOverTreeView: TOnDragOverTreeView read FOnDragOverTreeView
|
||||
write FOnDragOverTreeView;
|
||||
property SortAlphabetically: boolean read FSortAlphabetically write SetSortAlphabetically;
|
||||
property ShowDirectoryHierarchy: boolean read FShowDirectoryHierarchy write SetShowDirectoryHierarchy;
|
||||
property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
|
||||
@ -241,6 +240,32 @@ begin
|
||||
OpenButtonClick(Self);
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.ItemsTreeViewDragDrop(Sender, Source: TObject;
|
||||
X, Y: Integer);
|
||||
begin
|
||||
OnDragDropTreeView(Sender,Source,X,Y);
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.ItemsTreeViewDragOver(Sender, Source: TObject;
|
||||
X, Y: Integer; State: TDragState; var Accept: Boolean);
|
||||
var
|
||||
TargetTVNode: TTreeNode;
|
||||
TargetTVType: TTreeViewInsertMarkType;
|
||||
begin
|
||||
if not OnDragOverTreeView(Sender,Source,X,Y, TargetTVNode, TargetTVType) then
|
||||
begin
|
||||
ItemsTreeView.SetInsertMark(nil,tvimNone);
|
||||
Accept:=false;
|
||||
exit;
|
||||
end;
|
||||
|
||||
if State=dsDragLeave then
|
||||
ItemsTreeView.SetInsertMark(nil,tvimNone)
|
||||
else
|
||||
ItemsTreeView.SetInsertMark(TargetTVNode,TargetTVType);
|
||||
Accept:=true;
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.ItemsTreeViewKeyDown(Sender: TObject;
|
||||
var Key: Word; Shift: TShiftState);
|
||||
var
|
||||
@ -304,7 +329,7 @@ var
|
||||
CurDependency: TPkgDependency;
|
||||
i: Integer;
|
||||
TVNode: TTreeNode;
|
||||
NodeData: TPINodeData;
|
||||
NodeData: TPENodeData;
|
||||
Item: TObject;
|
||||
begin
|
||||
BeginUpdate;
|
||||
@ -442,7 +467,7 @@ var
|
||||
var
|
||||
i: Integer;
|
||||
TVNode: TTreeNode;
|
||||
NodeData: TPINodeData;
|
||||
NodeData: TPENodeData;
|
||||
Item: TObject;
|
||||
CanRemoveCount: Integer;
|
||||
CanOpenCount: Integer;
|
||||
@ -545,14 +570,14 @@ procedure TProjectInspectorForm.ItemsTreeViewAdvancedCustomDrawItem(
|
||||
Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState;
|
||||
Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean);
|
||||
var
|
||||
NodeData: TPINodeData;
|
||||
NodeData: TPENodeData;
|
||||
r: TRect;
|
||||
y: Integer;
|
||||
begin
|
||||
if Stage=cdPostPaint then begin
|
||||
NodeData:=GetNodeData(Node);
|
||||
if (NodeData<>nil) then begin
|
||||
if (NodeData.Typ=pntFile) and (not NodeData.Removed)
|
||||
if (NodeData.Typ=penFile) and (not NodeData.Removed)
|
||||
and FilenameIsAbsolute(NodeData.Name)
|
||||
and (not FileExistsCached(NodeData.Name))
|
||||
then begin
|
||||
@ -569,7 +594,7 @@ procedure TProjectInspectorForm.OpenButtonClick(Sender: TObject);
|
||||
var
|
||||
i: Integer;
|
||||
TVNode: TTreeNode;
|
||||
NodeData: TPINodeData;
|
||||
NodeData: TPENodeData;
|
||||
Item: TObject;
|
||||
CurFile: TUnitInfo;
|
||||
CurDependency: TPkgDependency;
|
||||
@ -611,7 +636,7 @@ var
|
||||
Dependency: TPkgDependency;
|
||||
i: Integer;
|
||||
TVNode: TTreeNode;
|
||||
NodeData: TPINodeData;
|
||||
NodeData: TPENodeData;
|
||||
Item: TObject;
|
||||
begin
|
||||
BeginUpdate;
|
||||
@ -636,7 +661,7 @@ var
|
||||
CurDependency: TPkgDependency;
|
||||
i: Integer;
|
||||
TVNode: TTreeNode;
|
||||
NodeData: TPINodeData;
|
||||
NodeData: TPENodeData;
|
||||
Item: TObject;
|
||||
Msg: String;
|
||||
DeleteCount: Integer;
|
||||
@ -780,7 +805,7 @@ var
|
||||
CurDependency: TPkgDependency;
|
||||
i: Integer;
|
||||
TVNode: TTreeNode;
|
||||
NodeData: TPINodeData;
|
||||
NodeData: TPENodeData;
|
||||
Item: TObject;
|
||||
begin
|
||||
BeginUpdate;
|
||||
@ -884,12 +909,12 @@ end;
|
||||
function TProjectInspectorForm.OnTreeViewGetImageIndex(Str: String; Data: TObject;
|
||||
var AIsEnabled: Boolean): Integer;
|
||||
var
|
||||
NodeData: TPINodeData;
|
||||
NodeData: TPENodeData;
|
||||
Item: TObject;
|
||||
begin
|
||||
Result := -1;
|
||||
if not (Data is TPINodeData) then exit;
|
||||
NodeData:=TPINodeData(Data);
|
||||
if not (Data is TPENodeData) then exit;
|
||||
NodeData:=TPENodeData(Data);
|
||||
Item:=GetNodeItem(NodeData);
|
||||
if Item=nil then exit;
|
||||
|
||||
@ -916,14 +941,14 @@ var
|
||||
CurFile: TUnitInfo;
|
||||
FilesBranch: TTreeFilterBranch;
|
||||
Filename: String;
|
||||
ANodeData : TPINodeData;
|
||||
ANodeData : TPENodeData;
|
||||
begin
|
||||
if not CanUpdate(pifNeedUpdateFiles) then exit;
|
||||
ItemsTreeView.BeginUpdate;
|
||||
try
|
||||
FilesBranch:=FilterEdit.GetBranch(FFilesNode);
|
||||
FilesBranch.Clear;
|
||||
FreeNodeData(pntFile);
|
||||
FreeNodeData(penFile);
|
||||
if LazProject<>nil then begin
|
||||
FilterEdit.SelectedPart:=FNextSelectedPart;
|
||||
FilterEdit.ShowDirHierarchy:=ShowDirectoryHierarchy;
|
||||
@ -934,7 +959,7 @@ begin
|
||||
while CurFile<>nil do begin
|
||||
Filename:=CurFile.GetShortFilename(true);
|
||||
if Filename<>'' then Begin
|
||||
ANodeData := CreateNodeData(pntFile, CurFile.Filename, False);
|
||||
ANodeData := CreateNodeData(penFile, CurFile.Filename, False);
|
||||
FilesBranch.AddNodeData(Filename, ANodeData, CurFile.Filename);
|
||||
end;
|
||||
CurFile:=CurFile.NextPartOfProject;
|
||||
@ -952,14 +977,14 @@ var
|
||||
Dependency: TPkgDependency;
|
||||
RequiredBranch, RemovedBranch: TTreeFilterBranch;
|
||||
NodeText, AFilename: String;
|
||||
ANodeData : TPINodeData;
|
||||
ANodeData : TPENodeData;
|
||||
begin
|
||||
if not CanUpdate(pifNeedUpdateDependencies) then exit;
|
||||
ItemsTreeView.BeginUpdate;
|
||||
try
|
||||
RequiredBranch:=FilterEdit.GetBranch(DependenciesNode);
|
||||
RequiredBranch.Clear;
|
||||
FreeNodeData(pntDependency);
|
||||
FreeNodeData(penDependency);
|
||||
Dependency:=Nil;
|
||||
if LazProject<>nil then begin
|
||||
// required packages
|
||||
@ -975,7 +1000,7 @@ begin
|
||||
NodeText:=Format(lisPckEditDefault, [NodeText, AFilename]);
|
||||
end;
|
||||
// Add the required package under the branch
|
||||
ANodeData := CreateNodeData(pntDependency, Dependency.PackageName, False);
|
||||
ANodeData := CreateNodeData(penDependency, Dependency.PackageName, False);
|
||||
RequiredBranch.AddNodeData(NodeText, ANodeData);
|
||||
Dependency:=Dependency.NextRequiresDependency;
|
||||
end;
|
||||
@ -993,7 +1018,7 @@ begin
|
||||
RemovedBranch:=FilterEdit.GetBranch(RemovedDependenciesNode);
|
||||
// Add all removed dependencies under the branch
|
||||
while Dependency<>nil do begin
|
||||
ANodeData := CreateNodeData(pntDependency, Dependency.PackageName, True);
|
||||
ANodeData := CreateNodeData(penDependency, Dependency.PackageName, True);
|
||||
RemovedBranch.AddNodeData(Dependency.AsString, ANodeData);
|
||||
Dependency:=Dependency.NextRequiresDependency;
|
||||
end;
|
||||
@ -1029,7 +1054,7 @@ procedure TProjectInspectorForm.EnableI18NForSelectedLFM(TheEnable: boolean);
|
||||
var
|
||||
i: Integer;
|
||||
TVNode: TTreeNode;
|
||||
NodeData: TPINodeData;
|
||||
NodeData: TPENodeData;
|
||||
Item: TObject;
|
||||
CurUnitInfo: TUnitInfo;
|
||||
begin
|
||||
@ -1061,7 +1086,7 @@ end;
|
||||
function TProjectInspectorForm.GetSingleSelectedDependency: TPkgDependency;
|
||||
var
|
||||
Item: TObject;
|
||||
NodeData: TPINodeData;
|
||||
NodeData: TPENodeData;
|
||||
begin
|
||||
Result:=nil;
|
||||
if not GetNodeDataItem(ItemsTreeView.Selected,NodeData,Item) then exit;
|
||||
@ -1069,6 +1094,15 @@ begin
|
||||
Result:=TPkgDependency(Item);
|
||||
end;
|
||||
|
||||
function TProjectInspectorForm.TreeViewToInspector(TV: TTreeView
|
||||
): TProjectInspectorForm;
|
||||
begin
|
||||
if TV=ItemsTreeView then
|
||||
Result:=Self
|
||||
else
|
||||
Result:=nil;
|
||||
end;
|
||||
|
||||
constructor TProjectInspectorForm.Create(TheOwner: TComponent);
|
||||
begin
|
||||
inherited Create(TheOwner);
|
||||
@ -1083,12 +1117,12 @@ end;
|
||||
|
||||
destructor TProjectInspectorForm.Destroy;
|
||||
var
|
||||
nt: TPINodeType;
|
||||
nt: TPENodeType;
|
||||
begin
|
||||
IdleConnected:=false;
|
||||
LazProject:=nil;
|
||||
inherited Destroy;
|
||||
for nt:=Low(TPINodeType) to High(TPINodeType) do
|
||||
for nt:=Low(TPENodeType) to High(TPENodeType) do
|
||||
FreeNodeData(nt);
|
||||
if ProjInspector=Self then
|
||||
ProjInspector:=nil;
|
||||
@ -1142,7 +1176,7 @@ procedure TProjectInspectorForm.UpdateButtons(Immediately: boolean);
|
||||
var
|
||||
i: Integer;
|
||||
TVNode: TTreeNode;
|
||||
NodeData: TPINodeData;
|
||||
NodeData: TPENodeData;
|
||||
Item: TObject;
|
||||
CanRemoveCount: Integer;
|
||||
CurUnitInfo: TUnitInfo;
|
||||
@ -1215,10 +1249,10 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.FreeNodeData(Typ: TPINodeType);
|
||||
procedure TProjectInspectorForm.FreeNodeData(Typ: TPENodeType);
|
||||
var
|
||||
NodeData,
|
||||
n: TPINodeData;
|
||||
n: TPENodeData;
|
||||
begin
|
||||
NodeData:=FProjectNodeDataList[Typ];
|
||||
while NodeData<>nil do begin
|
||||
@ -1229,17 +1263,15 @@ begin
|
||||
FProjectNodeDataList[Typ]:=nil;
|
||||
End;
|
||||
|
||||
function TProjectInspectorForm.CreateNodeData(Typ: TPINodeType; aName: string; aRemoved: boolean): TPINodeData;
|
||||
function TProjectInspectorForm.CreateNodeData(Typ: TPENodeType;
|
||||
aName: string; aRemoved: boolean): TPENodeData;
|
||||
Begin
|
||||
Result := TPINodeData.Create;
|
||||
Result.Name := aName;
|
||||
Result.Typ := Typ;
|
||||
Result.Removed := aRemoved;
|
||||
Result := TPENodeData.Create(Typ,aName,aRemoved);
|
||||
Result.Next := FProjectNodeDataList[Typ];
|
||||
FProjectNodeDataList[Typ] := Result;
|
||||
end;
|
||||
|
||||
function TProjectInspectorForm.GetNodeData(TVNode: TTreeNode): TPINodeData;
|
||||
function TProjectInspectorForm.GetNodeData(TVNode: TTreeNode): TPENodeData;
|
||||
var
|
||||
o: TObject;
|
||||
begin
|
||||
@ -1248,21 +1280,21 @@ begin
|
||||
o:=TObject(TVNode.Data);
|
||||
if o is TFileNameItem then
|
||||
o:=TObject(TFileNameItem(o).Data);
|
||||
if o is TPINodeData then
|
||||
Result:=TPINodeData(o);
|
||||
if o is TPENodeData then
|
||||
Result:=TPENodeData(o);
|
||||
end;
|
||||
|
||||
function TProjectInspectorForm.GetNodeItem(NodeData: TPINodeData): TObject;
|
||||
function TProjectInspectorForm.GetNodeItem(NodeData: TPENodeData): TObject;
|
||||
begin
|
||||
Result:=nil;
|
||||
if (LazProject=nil) or (NodeData=nil) then exit;
|
||||
case NodeData.Typ of
|
||||
pntFile:
|
||||
penFile:
|
||||
if NodeData.Removed then
|
||||
Result:=nil
|
||||
else
|
||||
Result:=LazProject.UnitInfoWithFilename(NodeData.Name,[pfsfOnlyProjectFiles]);
|
||||
pntDependency:
|
||||
penDependency:
|
||||
if NodeData.Removed then
|
||||
Result:=LazProject.FindRemovedDependencyByName(NodeData.Name)
|
||||
else
|
||||
@ -1271,7 +1303,7 @@ begin
|
||||
end;
|
||||
|
||||
function TProjectInspectorForm.GetNodeDataItem(TVNode: TTreeNode; out
|
||||
NodeData: TPINodeData; out Item: TObject): boolean;
|
||||
NodeData: TPENodeData; out Item: TObject): boolean;
|
||||
begin
|
||||
Result:=false;
|
||||
Item:=nil;
|
||||
|
||||
@ -43,7 +43,7 @@ uses
|
||||
{$IFDEF IDE_MEM_CHECK}
|
||||
MemCheck,
|
||||
{$ENDIF}
|
||||
TypInfo, Classes, SysUtils, Forms, FileUtil, LCLProc,
|
||||
TypInfo, Classes, SysUtils, Forms, FileUtil, LCLProc, ComCtrls,
|
||||
LazIDEIntf, PackageIntf, MenuIntf,
|
||||
LazarusIDEStrConsts, EnvironmentOpts,
|
||||
CompilerOptions, PackageDefs, PackageSystem, ComponentReg, Project;
|
||||
@ -102,6 +102,11 @@ type
|
||||
ADependency: TPkgDependency): TModalResult; virtual; abstract;
|
||||
function OnProjectInspectorReAddDependency(Sender: TObject;
|
||||
ADependency: TPkgDependency): TModalResult; virtual; abstract;
|
||||
procedure OnProjectInspectorDragDropTreeView(Sender, Source: TObject;
|
||||
X, Y: Integer); virtual; abstract;
|
||||
function OnProjectInspectorDragOverTreeView(Sender, Source: TObject;
|
||||
X, Y: Integer; out TargetTVNode: TTreeNode;
|
||||
out TargetTVType: TTreeViewInsertMarkType): boolean; virtual; abstract;
|
||||
|
||||
// package editors
|
||||
function DoNewPackage: TModalResult; virtual; abstract;
|
||||
|
||||
@ -34,14 +34,17 @@ interface
|
||||
uses
|
||||
// LCL FCL
|
||||
Classes, SysUtils, Forms, Controls, StdCtrls, ComCtrls, Buttons, Graphics,
|
||||
LCLType, LCLProc, Menus, Dialogs, FileUtil, LazFileCache,
|
||||
LCLType, LCLProc, Menus, Dialogs, FileUtil, LazFileCache, ExtCtrls,
|
||||
contnrs,
|
||||
// IDEIntf CodeTools
|
||||
IDEImagesIntf, MenuIntf, ExtCtrls, LazIDEIntf, ProjectIntf, CodeToolsStructs,
|
||||
CodeToolManager, CodeCache, CodeTree, FormEditingIntf, TreeFilterEdit,
|
||||
PackageIntf, IDEDialogs, IDEHelpIntf, IDEOptionsIntf, IDEProcs,
|
||||
LazarusIDEStrConsts, IDEDefs, CompilerOptions, ComponentReg, UnitResources,
|
||||
SrcEditorIntf, IDEMsgIntf, IDEExternToolIntf, EnvironmentOpts, DialogProcs,
|
||||
CodeToolManager, CodeCache, CodeTree,
|
||||
TreeFilterEdit,
|
||||
IDEImagesIntf, MenuIntf, LazIDEIntf, ProjectIntf, CodeToolsStructs,
|
||||
FormEditingIntf, PackageIntf, IDEHelpIntf, IDEOptionsIntf, SrcEditorIntf,
|
||||
IDEMsgIntf, IDEExternToolIntf,
|
||||
// IDE
|
||||
IDEDialogs, IDEProcs, LazarusIDEStrConsts, IDEDefs,
|
||||
CompilerOptions, ComponentReg, UnitResources, EnvironmentOpts, DialogProcs,
|
||||
PackageDefs, AddToPackageDlg, PkgVirtualUnitEditor, MissingPkgFilesDlg,
|
||||
PackageSystem, CleanPkgDeps;
|
||||
|
||||
@ -108,10 +111,6 @@ type
|
||||
TOnDeleteAmbiguousFiles =
|
||||
function(Sender: TObject; APackage: TLazPackage;
|
||||
const Filename: string): TModalResult of object;
|
||||
TOnDragDropTreeView = procedure(Sender, Source: TObject; X, Y: Integer) of object;
|
||||
TOnDragOverTreeView = function(Sender, Source: TObject; X, Y: Integer;
|
||||
out TargetTVNode: TTreeNode; out TargetTVType: TTreeViewInsertMarkType
|
||||
): boolean of object;
|
||||
TOnFreePkgEditor = procedure(APackage: TLazPackage) of object;
|
||||
TOnInstallPackage =
|
||||
function(Sender: TObject; APackage: TLazPackage): TModalResult of object;
|
||||
@ -370,7 +369,7 @@ type
|
||||
FOnCreateMakefile: TOnCreatePkgMakefile;
|
||||
FOnCreateFpmakeFile: TOnCreatePkgFpmakeFile;
|
||||
FOnDeleteAmbiguousFiles: TOnDeleteAmbiguousFiles;
|
||||
FOnDragDropTreeView: TOnDragDropTreeView;
|
||||
FOnDragDropTreeView: TDragDropEvent;
|
||||
FOnDragOverTreeView: TOnDragOverTreeView;
|
||||
FOnFreeEditor: TOnFreePkgEditor;
|
||||
FOnGetIDEFileInfo: TGetIDEFileStateEvent;
|
||||
@ -439,7 +438,7 @@ type
|
||||
write FOnCreateNewFile;
|
||||
property OnDeleteAmbiguousFiles: TOnDeleteAmbiguousFiles
|
||||
read FOnDeleteAmbiguousFiles write FOnDeleteAmbiguousFiles;
|
||||
property OnDragDropTreeView: TOnDragDropTreeView read FOnDragDropTreeView
|
||||
property OnDragDropTreeView: TDragDropEvent read FOnDragDropTreeView
|
||||
write FOnDragDropTreeView;
|
||||
property OnDragOverTreeView: TOnDragOverTreeView read FOnDragOverTreeView
|
||||
write FOnDragOverTreeView;
|
||||
@ -822,10 +821,6 @@ end;
|
||||
procedure TPackageEditorForm.ItemsTreeViewDragOver(Sender, Source: TObject; X,
|
||||
Y: Integer; State: TDragState; var Accept: Boolean);
|
||||
var
|
||||
SrcPkgEdit: TPackageEditorForm;
|
||||
FileCount: Integer;
|
||||
DepCount: Integer;
|
||||
DirCount: Integer;
|
||||
TargetTVNode: TTreeNode;
|
||||
TargetTVType: TTreeViewInsertMarkType;
|
||||
begin
|
||||
|
||||
@ -287,6 +287,11 @@ type
|
||||
ADependency: TPkgDependency): TModalResult; override;
|
||||
function OnProjectInspectorReAddDependency(Sender: TObject;
|
||||
ADependency: TPkgDependency): TModalResult; override;
|
||||
procedure OnProjectInspectorDragDropTreeView(Sender, Source: TObject;
|
||||
X, Y: Integer); override;
|
||||
function OnProjectInspectorDragOverTreeView(Sender, Source: TObject;
|
||||
X, Y: Integer; out TargetTVNode: TTreeNode;
|
||||
out TargetTVType: TTreeViewInsertMarkType): boolean; override;
|
||||
|
||||
// package editors
|
||||
function DoOpenPkgFile(PkgFile: TPkgFile): TModalResult;
|
||||
@ -1713,20 +1718,20 @@ begin
|
||||
if (Source is TTreeView) then begin
|
||||
SrcPkgEdit:=PackageEditors.TreeViewToPkgEditor(TTreeView(Source));
|
||||
//debugln(['TPkgManager.ItemsTreeViewDragOver from another package editor: ',SrcPkgEdit.LazPackage.Name]);
|
||||
end else
|
||||
exit;
|
||||
if (SrcPkgEdit=nil) or SrcPkgEdit.LazPackage.ReadOnly
|
||||
or SrcPkgEdit.LazPackage.IsVirtual then
|
||||
exit;
|
||||
end else
|
||||
exit;
|
||||
|
||||
// get target
|
||||
if Sender is TTreeView then begin
|
||||
TargetPkgEdit:=PackageEditors.TreeViewToPkgEditor(TTreeView(Sender));
|
||||
end else
|
||||
exit;
|
||||
if (TargetPkgEdit=nil) or TargetPkgEdit.LazPackage.ReadOnly
|
||||
or TargetPkgEdit.LazPackage.IsVirtual then
|
||||
exit;
|
||||
end else
|
||||
exit;
|
||||
|
||||
//debugln(['TPkgManager.CheckDrag Src=',SrcPkgEdit.LazPackage.Name,' Target=',TargetPkgEdit.LazPackage.Name]);
|
||||
|
||||
@ -5897,6 +5902,24 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TPkgManager.OnProjectInspectorDragDropTreeView(Sender,
|
||||
Source: TObject; X, Y: Integer);
|
||||
begin
|
||||
{$IFDEF VerbosePkgEditDrag}
|
||||
debugln(['TPkgManager.OnProjectInspectorDragDropTreeView START']);
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
function TPkgManager.OnProjectInspectorDragOverTreeView(Sender,
|
||||
Source: TObject; X, Y: Integer; out TargetTVNode: TTreeNode; out
|
||||
TargetTVType: TTreeViewInsertMarkType): boolean;
|
||||
begin
|
||||
{$IFDEF VerbosePkgEditDrag}
|
||||
debugln(['TPkgManager.OnProjectInspectorDragOverTreeView ']);
|
||||
{$ENDIF}
|
||||
Result:=false;
|
||||
end;
|
||||
|
||||
function TPkgManager.CanOpenDesignerForm(AnUnitInfo: TUnitInfo;
|
||||
Interactive: boolean): TModalResult;
|
||||
var
|
||||
|
||||
Loading…
Reference in New Issue
Block a user