IDE: project inspector: rusing package editor types

git-svn-id: trunk@45588 -
This commit is contained in:
mattias 2014-06-20 10:55:44 +00:00
parent 62a230bb86
commit c07eaa50e2
9 changed files with 203 additions and 88 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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]);
if (SrcPkgEdit=nil) or SrcPkgEdit.LazPackage.ReadOnly
or SrcPkgEdit.LazPackage.IsVirtual then
exit;
end else
exit;
if (SrcPkgEdit=nil) or SrcPkgEdit.LazPackage.ReadOnly
or SrcPkgEdit.LazPackage.IsVirtual then
exit;
// get target
if Sender is TTreeView then begin
TargetPkgEdit:=PackageEditors.TreeViewToPkgEditor(TTreeView(Sender));
if (TargetPkgEdit=nil) or TargetPkgEdit.LazPackage.ReadOnly
or TargetPkgEdit.LazPackage.IsVirtual then
exit;
end else
exit;
if (TargetPkgEdit=nil) or TargetPkgEdit.LazPackage.ReadOnly
or TargetPkgEdit.LazPackage.IsVirtual then
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