diff --git a/ide/dialogprocs.pas b/ide/dialogprocs.pas index 94958db233..56bda1dd80 100644 --- a/ide/dialogprocs.pas +++ b/ide/dialogprocs.pas @@ -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; diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 8ba752d2f8..dae95def55 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -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'; diff --git a/ide/main.pp b/ide/main.pp index 32dbf16758..8618acbf30 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -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; diff --git a/ide/mainintf.pas b/ide/mainintf.pas index a40f99d9dc..a6cf32d861 100644 --- a/ide/mainintf.pas +++ b/ide/mainintf.pas @@ -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 diff --git a/ide/projectinspector.lfm b/ide/projectinspector.lfm index 6f660a5b3b..27ce1a75fb 100644 --- a/ide/projectinspector.lfm +++ b/ide/projectinspector.lfm @@ -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] diff --git a/ide/projectinspector.pas b/ide/projectinspector.pas index c7c3f4b2a1..f8b12eb456 100644 --- a/ide/projectinspector.pas +++ b/ide/projectinspector.pas @@ -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; diff --git a/packager/basepkgmanager.pas b/packager/basepkgmanager.pas index 487d6d7ed8..4164c66612 100644 --- a/packager/basepkgmanager.pas +++ b/packager/basepkgmanager.pas @@ -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; diff --git a/packager/packageeditor.pas b/packager/packageeditor.pas index 78e964bc39..42a86f155c 100644 --- a/packager/packageeditor.pas +++ b/packager/packageeditor.pas @@ -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 diff --git a/packager/pkgmanager.pas b/packager/pkgmanager.pas index 350daf3187..ea9ac30b96 100644 --- a/packager/pkgmanager.pas +++ b/packager/pkgmanager.pas @@ -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