mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 07:36:14 +02:00
IDE: project inspector: menu item: copy/move file to directory
git-svn-id: trunk@45613 -
This commit is contained in:
parent
bc6d6a987d
commit
1d8608aa7f
@ -4284,6 +4284,8 @@ resourcestring
|
|||||||
+'have the same file name:%s%s%s%s%sin %s';
|
+'have the same file name:%s%s%s%s%sin %s';
|
||||||
lisPkgEditRevertPackage = 'Revert package?';
|
lisPkgEditRevertPackage = 'Revert package?';
|
||||||
lisMoveOrCopyFiles = 'Move or Copy files?';
|
lisMoveOrCopyFiles = 'Move or Copy files?';
|
||||||
|
lisTargetIsReadOnly = 'Target is read only';
|
||||||
|
lisTheTargetIsNotWritable = 'The target %s is not writable.';
|
||||||
lisMoveOrCopyFileSFromToTheDirectoryOfPackage = 'Move or copy %s file'
|
lisMoveOrCopyFileSFromToTheDirectoryOfPackage = 'Move or copy %s file'
|
||||||
+'(s) from %s to the directory%s%s%sof %s.';
|
+'(s) from %s to the directory%s%s%sof %s.';
|
||||||
lisMoveFileSFromToTheDirectoryOf = 'Move %s file(s) from %s to the directory%s%s%sof %s.';
|
lisMoveFileSFromToTheDirectoryOf = 'Move %s file(s) from %s to the directory%s%s%sof %s.';
|
||||||
|
@ -6413,6 +6413,7 @@ begin
|
|||||||
ProjInspector.OnReAddDependency:=@PkgBoss.OnProjectInspectorReAddDependency;
|
ProjInspector.OnReAddDependency:=@PkgBoss.OnProjectInspectorReAddDependency;
|
||||||
ProjInspector.OnDragOverTreeView:=@PkgBoss.OnProjectInspectorDragOverTreeView;
|
ProjInspector.OnDragOverTreeView:=@PkgBoss.OnProjectInspectorDragOverTreeView;
|
||||||
ProjInspector.OnDragDropTreeView:=@PkgBoss.OnProjectInspectorDragDropTreeView;
|
ProjInspector.OnDragDropTreeView:=@PkgBoss.OnProjectInspectorDragDropTreeView;
|
||||||
|
ProjInspector.OnCopyMoveFiles:=@PkgBoss.OnProjectInspectorCopyMoveFiles;
|
||||||
|
|
||||||
ProjInspector.LazProject:=Project1;
|
ProjInspector.LazProject:=Project1;
|
||||||
end;
|
end;
|
||||||
|
@ -102,6 +102,7 @@ type
|
|||||||
OptionsBitBtn: TToolButton;
|
OptionsBitBtn: TToolButton;
|
||||||
HelpBitBtn: TToolButton;
|
HelpBitBtn: TToolButton;
|
||||||
procedure AddBitBtnClick(Sender: TObject);
|
procedure AddBitBtnClick(Sender: TObject);
|
||||||
|
procedure CopyMoveToDirMenuItemClick(Sender: TObject);
|
||||||
procedure DirectoryHierarchyButtonClick(Sender: TObject);
|
procedure DirectoryHierarchyButtonClick(Sender: TObject);
|
||||||
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
|
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
|
||||||
procedure ItemsPopupMenuPopup(Sender: TObject);
|
procedure ItemsPopupMenuPopup(Sender: TObject);
|
||||||
@ -132,6 +133,7 @@ type
|
|||||||
FIdleConnected: boolean;
|
FIdleConnected: boolean;
|
||||||
FOnAddDependency: TAddProjInspDepEvent;
|
FOnAddDependency: TAddProjInspDepEvent;
|
||||||
FOnAddUnitToProject: TOnAddUnitToProject;
|
FOnAddUnitToProject: TOnAddUnitToProject;
|
||||||
|
FOnCopyMoveFiles: TNotifyEvent;
|
||||||
FOnDragDropTreeView: TDragDropEvent;
|
FOnDragDropTreeView: TDragDropEvent;
|
||||||
FOnDragOverTreeView: TOnDragOverTreeView;
|
FOnDragOverTreeView: TOnDragOverTreeView;
|
||||||
FOnReAddDependency: TAddProjInspDepEvent;
|
FOnReAddDependency: TAddProjInspDepEvent;
|
||||||
@ -224,6 +226,8 @@ type
|
|||||||
write FOnDragDropTreeView;
|
write FOnDragDropTreeView;
|
||||||
property OnDragOverTreeView: TOnDragOverTreeView read FOnDragOverTreeView
|
property OnDragOverTreeView: TOnDragOverTreeView read FOnDragOverTreeView
|
||||||
write FOnDragOverTreeView;
|
write FOnDragOverTreeView;
|
||||||
|
property OnCopyMoveFiles: TNotifyEvent read FOnCopyMoveFiles
|
||||||
|
write FOnCopyMoveFiles;
|
||||||
property SortAlphabetically: boolean read FSortAlphabetically write SetSortAlphabetically;
|
property SortAlphabetically: boolean read FSortAlphabetically write SetSortAlphabetically;
|
||||||
property ShowDirectoryHierarchy: boolean read FShowDirectoryHierarchy write SetShowDirectoryHierarchy;
|
property ShowDirectoryHierarchy: boolean read FShowDirectoryHierarchy write SetShowDirectoryHierarchy;
|
||||||
property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
|
property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
|
||||||
@ -418,6 +422,11 @@ begin
|
|||||||
AddResult.Free;
|
AddResult.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TProjectInspectorForm.CopyMoveToDirMenuItemClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
OnCopyMoveFiles(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TProjectInspectorForm.DirectoryHierarchyButtonClick(Sender: TObject);
|
procedure TProjectInspectorForm.DirectoryHierarchyButtonClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
ShowDirectoryHierarchy:=DirectoryHierarchyButton.Down;
|
ShowDirectoryHierarchy:=DirectoryHierarchyButton.Down;
|
||||||
@ -450,10 +459,8 @@ begin
|
|||||||
NewFile.Filename:=NewFilename;
|
NewFile.Filename:=NewFilename;
|
||||||
LazProject.AddFile(NewFile,false);
|
LazProject.AddFile(NewFile,false);
|
||||||
end;
|
end;
|
||||||
NewFile.IsPartOfProject:=true;
|
if OnAddUnitToProject(Self,NewFile)<>mrOk then
|
||||||
if Assigned(OnAddUnitToProject) then begin
|
break;
|
||||||
if OnAddUnitToProject(Self,NewFile)<>mrOk then break;
|
|
||||||
end;
|
|
||||||
UpdateAll;
|
UpdateAll;
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
@ -500,11 +507,13 @@ var
|
|||||||
Dependency: TPkgDependency;
|
Dependency: TPkgDependency;
|
||||||
HasValidDep: Integer;
|
HasValidDep: Integer;
|
||||||
CanClearDep: Integer;
|
CanClearDep: Integer;
|
||||||
|
CanMoveFileCount: Integer;
|
||||||
begin
|
begin
|
||||||
ItemCnt:=0;
|
ItemCnt:=0;
|
||||||
|
|
||||||
CanRemoveCount:=0;
|
CanRemoveCount:=0;
|
||||||
CanOpenCount:=0;
|
CanOpenCount:=0;
|
||||||
|
CanMoveFileCount:=0;
|
||||||
HasLFMCount:=0;
|
HasLFMCount:=0;
|
||||||
DisabledI18NForLFMCount:=0;
|
DisabledI18NForLFMCount:=0;
|
||||||
CanReAddCount:=0;
|
CanReAddCount:=0;
|
||||||
@ -518,8 +527,10 @@ begin
|
|||||||
if Item is TUnitInfo then begin
|
if Item is TUnitInfo then begin
|
||||||
CurUnitInfo:=TUnitInfo(Item);
|
CurUnitInfo:=TUnitInfo(Item);
|
||||||
inc(CanOpenCount);
|
inc(CanOpenCount);
|
||||||
if CurUnitInfo<>LazProject.MainUnitInfo then
|
if (CurUnitInfo<>LazProject.MainUnitInfo) and (not NodeData.Removed) then begin
|
||||||
inc(CanRemoveCount);
|
inc(CanRemoveCount);
|
||||||
|
inc(CanMoveFileCount);
|
||||||
|
end;
|
||||||
if FilenameIsPascalSource(CurUnitInfo.Filename)
|
if FilenameIsPascalSource(CurUnitInfo.Filename)
|
||||||
and FileExistsCached(ChangeFileExt(CurUnitInfo.Filename,'.lfm')) then begin
|
and FileExistsCached(ChangeFileExt(CurUnitInfo.Filename,'.lfm')) then begin
|
||||||
inc(HasLFMCount);
|
inc(HasLFMCount);
|
||||||
@ -546,14 +557,16 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Section headers
|
// general
|
||||||
AddPopupMenuItem(lisOpen, @OpenButtonClick, CanOpenCount>0);
|
AddPopupMenuItem(lisOpen, @OpenButtonClick, CanOpenCount>0);
|
||||||
AddPopupMenuItem(lisBtnDlgAdd, @AddBitBtnClick, AddBitBtn.Enabled);
|
AddPopupMenuItem(lisBtnDlgAdd, @AddBitBtnClick, AddBitBtn.Enabled);
|
||||||
AddPopupMenuItem(lisRemove, @RemoveBitBtnClick, CanRemoveCount>0);
|
AddPopupMenuItem(lisRemove, @RemoveBitBtnClick, CanRemoveCount>0);
|
||||||
AddPopupMenuItem(lisRemoveNonExistingFiles,@RemoveNonExistingFilesMenuItemClick,
|
|
||||||
not LazProject.IsVirtual);
|
|
||||||
|
|
||||||
// files section
|
// files section
|
||||||
|
AddPopupMenuItem(lisCopyMoveFileToDirectory,@CopyMoveToDirMenuItemClick,
|
||||||
|
(CanMoveFileCount>0));
|
||||||
|
AddPopupMenuItem(lisRemoveNonExistingFiles,@RemoveNonExistingFilesMenuItemClick,
|
||||||
|
not LazProject.IsVirtual);
|
||||||
if LazProject.EnableI18N and LazProject.EnableI18NForLFM
|
if LazProject.EnableI18N and LazProject.EnableI18NForLFM
|
||||||
and (HasLFMCount>0) then begin
|
and (HasLFMCount>0) then begin
|
||||||
AddPopupMenuItem(lisEnableI18NForLFM,
|
AddPopupMenuItem(lisEnableI18NForLFM,
|
||||||
|
@ -107,6 +107,7 @@ type
|
|||||||
function OnProjectInspectorDragOverTreeView(Sender, Source: TObject;
|
function OnProjectInspectorDragOverTreeView(Sender, Source: TObject;
|
||||||
X, Y: Integer; out TargetTVNode: TTreeNode;
|
X, Y: Integer; out TargetTVNode: TTreeNode;
|
||||||
out TargetTVType: TTreeViewInsertMarkType): boolean; virtual; abstract;
|
out TargetTVType: TTreeViewInsertMarkType): boolean; virtual; abstract;
|
||||||
|
procedure OnProjectInspectorCopyMoveFiles(Sender: TObject); virtual; abstract;
|
||||||
|
|
||||||
// package editors
|
// package editors
|
||||||
function DoNewPackage: TModalResult; virtual; abstract;
|
function DoNewPackage: TModalResult; virtual; abstract;
|
||||||
|
@ -292,6 +292,7 @@ type
|
|||||||
function OnProjectInspectorDragOverTreeView(Sender, Source: TObject;
|
function OnProjectInspectorDragOverTreeView(Sender, Source: TObject;
|
||||||
X, Y: Integer; out TargetTVNode: TTreeNode;
|
X, Y: Integer; out TargetTVNode: TTreeNode;
|
||||||
out TargetTVType: TTreeViewInsertMarkType): boolean; override;
|
out TargetTVType: TTreeViewInsertMarkType): boolean; override;
|
||||||
|
procedure OnProjectInspectorCopyMoveFiles(Sender: TObject); override;
|
||||||
|
|
||||||
// package editors
|
// package editors
|
||||||
function DoOpenPkgFile(PkgFile: TPkgFile): TModalResult;
|
function DoOpenPkgFile(PkgFile: TPkgFile): TModalResult;
|
||||||
@ -1936,7 +1937,7 @@ var
|
|||||||
aFilename:=CurFile.GetFullFilename;
|
aFilename:=CurFile.GetFullFilename;
|
||||||
if not FileExistsCached(aFilename) then begin
|
if not FileExistsCached(aFilename) then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles WARNING: file not found: ',aFilename]);
|
debugln(['TPkgManager.MoveFiles WARNING: file not found: ',aFilename]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
IDEFiles.Delete(i);
|
IDEFiles.Delete(i);
|
||||||
end;
|
end;
|
||||||
@ -1944,13 +1945,53 @@ var
|
|||||||
if (CurFile is TUnitInfo) and (TUnitInfo(CurFile)=TUnitInfo(CurFile).Project.MainUnitInfo)
|
if (CurFile is TUnitInfo) and (TUnitInfo(CurFile)=TUnitInfo(CurFile).Project.MainUnitInfo)
|
||||||
then begin
|
then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles WARNING: main unit of project cannot be moved: ',aFilename]);
|
debugln(['TPkgManager.MoveFiles WARNING: main unit of project cannot be moved: ',aFilename]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
IDEFiles.Delete(i);
|
IDEFiles.Delete(i);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function GetPkgProj(FilesEdit: IFilesEditorInterface; out aPkg: TLazPackage;
|
||||||
|
out aProject: TProject): boolean;
|
||||||
|
var
|
||||||
|
MainUnit: TUnitInfo;
|
||||||
|
Code: TCodeBuffer;
|
||||||
|
Tool: TCodeTool;
|
||||||
|
begin
|
||||||
|
Result:=false;
|
||||||
|
aPkg:=nil;
|
||||||
|
aProject:=nil;
|
||||||
|
if not FilenameIsAbsolute(FilesEdit.FilesBaseDirectory) then begin
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['TPkgManager.MoveFiles base dir not absolute: ',FilesEdit.FilesBaseDirectory]);
|
||||||
|
{$ENDIF}
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if FilesEdit.FilesOwner is TLazPackage then begin
|
||||||
|
aPkg:=TLazPackage(FilesEdit.FilesOwner);
|
||||||
|
Result:=true;
|
||||||
|
end else if FilesEdit.FilesOwner is TProject then begin
|
||||||
|
aProject:=TProject(FilesEdit.FilesOwner);
|
||||||
|
MainUnit:=aProject.MainUnitInfo;
|
||||||
|
if (MainUnit<>nil) and (pfMainUnitIsPascalSource in aProject.Flags) then
|
||||||
|
begin
|
||||||
|
// check project main source for syntax errors
|
||||||
|
if LoadCodeBuffer(Code,MainUnit.Filename,[lbfUpdateFromDisk,lbfCheckIfText],false)<>mrOk
|
||||||
|
then exit;
|
||||||
|
if not CodeToolBoss.Explore(Code,Tool,true) then begin
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['TPkgManager.MoveFiles project main source has errors: ',Code.Filename]);
|
||||||
|
{$ENDIF}
|
||||||
|
LazarusIDE.DoJumpToCodeToolBossError;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Result:=true;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function FileIsUnit(aFile: TIDEOwnedFile): boolean;
|
function FileIsUnit(aFile: TIDEOwnedFile): boolean;
|
||||||
begin
|
begin
|
||||||
if aFile is TPkgFile then
|
if aFile is TPkgFile then
|
||||||
@ -2051,6 +2092,7 @@ var
|
|||||||
WarnUnitClash: Boolean;
|
WarnUnitClash: Boolean;
|
||||||
WarnNameClash: Boolean;
|
WarnNameClash: Boolean;
|
||||||
Cnt: Integer;
|
Cnt: Integer;
|
||||||
|
SrcEdit: TSourceEditor;
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
WarnUnitClash:=true;
|
WarnUnitClash:=true;
|
||||||
@ -2068,6 +2110,14 @@ var
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
// close source editor
|
||||||
|
repeat
|
||||||
|
SrcEdit:=SourceEditorManager.SourceEditorIntfWithFilename(NewFilename);
|
||||||
|
if SrcEdit=nil then break;
|
||||||
|
if LazarusIDE.DoCloseEditorFile(SrcEdit,[cfSaveFirst,
|
||||||
|
cfCloseDependencies,cfSaveDependencies])<>mrOk then exit;
|
||||||
|
until false;
|
||||||
|
|
||||||
if (not SrcIsTarget) then begin
|
if (not SrcIsTarget) then begin
|
||||||
// warn duplicate names
|
// warn duplicate names
|
||||||
if FilenameIsPascalUnit(NewFilename) then begin
|
if FilenameIsPascalUnit(NewFilename) then begin
|
||||||
@ -2175,7 +2225,7 @@ var
|
|||||||
if PackageGraph.PreparePackageOutputDirectory(SrcPackage,true)<>mrOk then
|
if PackageGraph.PreparePackageOutputDirectory(SrcPackage,true)<>mrOk then
|
||||||
begin
|
begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles PreparePackageOutputDirectory failed']);
|
debugln(['TPkgManager.MoveFiles PreparePackageOutputDirectory failed']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
@ -2410,6 +2460,7 @@ var
|
|||||||
NewAddToUses: Boolean;
|
NewAddToUses: Boolean;
|
||||||
OldProjFile: TUnitInfo;
|
OldProjFile: TUnitInfo;
|
||||||
Code: TCodeBuffer;
|
Code: TCodeBuffer;
|
||||||
|
NewProjFile: TUnitInfo;
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
// check if needed
|
// check if needed
|
||||||
@ -2445,6 +2496,8 @@ var
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
OldPkgFile:=nil;
|
||||||
|
OldProjFile:=nil;
|
||||||
if SrcPackage<>nil then begin
|
if SrcPackage<>nil then begin
|
||||||
OldPkgFile:=SrcPackage.FindPkgFile(OldFilename,true,false);
|
OldPkgFile:=SrcPackage.FindPkgFile(OldFilename,true,false);
|
||||||
if OldPkgFile=nil then begin
|
if OldPkgFile=nil then begin
|
||||||
@ -2457,7 +2510,7 @@ var
|
|||||||
end;
|
end;
|
||||||
end else if SrcProject<>nil then begin
|
end else if SrcProject<>nil then begin
|
||||||
OldProjFile:=SrcProject.UnitInfoWithFilename(OldFilename,[pfsfOnlyProjectFiles]);
|
OldProjFile:=SrcProject.UnitInfoWithFilename(OldFilename,[pfsfOnlyProjectFiles]);
|
||||||
if OldPkgFile=nil then begin
|
if OldProjFile=nil then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['MoveOrCopyFile old file not in lpi: "',OldFilename,'"']);
|
debugln(['MoveOrCopyFile old file not in lpi: "',OldFilename,'"']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -2469,32 +2522,34 @@ var
|
|||||||
raise Exception.Create('implement me');
|
raise Exception.Create('implement me');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if TargetPackage<>nil then begin
|
if OldPkgFile<>nil then begin
|
||||||
// create new TPkgFile
|
NewUnitName:=OldPkgFile.Unit_Name;
|
||||||
|
NewFileType:=OldPkgFile.FileType;
|
||||||
if OldPkgFile<>nil then begin
|
if NewFileType=pftMainUnit then NewFileType:=pftUnit;
|
||||||
NewUnitName:=OldPkgFile.Unit_Name;
|
NewCompPrio:=OldPkgFile.ComponentPriority;
|
||||||
NewFileType:=OldPkgFile.FileType;
|
NewResourceBaseClass:=OldPkgFile.ResourceBaseClass;
|
||||||
if NewFileType=pftMainUnit then NewFileType:=pftUnit;
|
NewHasRegisterProc:=OldPkgFile.HasRegisterProc;
|
||||||
NewCompPrio:=OldPkgFile.ComponentPriority;
|
NewAddToUses:=OldPkgFile.AddToUsesPkgSection;
|
||||||
NewResourceBaseClass:=OldPkgFile.ResourceBaseClass;
|
end else begin
|
||||||
NewHasRegisterProc:=OldPkgFile.HasRegisterProc;
|
NewUnitName:=OldProjFile.Unit_Name;
|
||||||
NewAddToUses:=OldPkgFile.AddToUsesPkgSection;
|
NewFileType:=FileNameToPkgFileType(OldFilename);
|
||||||
end else begin
|
NewCompPrio:=ComponentPriorityNormal;
|
||||||
NewUnitName:=OldProjFile.Unit_Name;
|
NewResourceBaseClass:=OldProjFile.ResourceBaseClass;
|
||||||
NewFileType:=FileNameToPkgFileType(OldFilename);
|
NewHasRegisterProc:=false;
|
||||||
NewCompPrio:=ComponentPriorityNormal;
|
NewAddToUses:=true;
|
||||||
NewResourceBaseClass:=OldProjFile.ResourceBaseClass;
|
if NewFileType=pftUnit then begin
|
||||||
NewHasRegisterProc:=false;
|
Code:=CodeToolBoss.LoadFile(OldFilename,true,false);
|
||||||
NewAddToUses:=true;
|
if (Code<>nil) then begin
|
||||||
if NewFileType=pftUnit then begin
|
if TargetPackage<>nil then
|
||||||
Code:=CodeToolBoss.LoadFile(NewFilename,true,false);
|
|
||||||
if Code<>nil then begin
|
|
||||||
CodeToolBoss.HasInterfaceRegisterProc(Code,NewHasRegisterProc);
|
CodeToolBoss.HasInterfaceRegisterProc(Code,NewHasRegisterProc);
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
NewPkgFile:=nil;
|
||||||
|
NewProjFile:=nil;
|
||||||
|
if TargetPackage<>nil then begin
|
||||||
|
// create new TPkgFile
|
||||||
NewPkgFile:=TargetPackage.FindPkgFile(NewFilename,true,false);
|
NewPkgFile:=TargetPackage.FindPkgFile(NewFilename,true,false);
|
||||||
if NewPkgFile=nil then begin
|
if NewPkgFile=nil then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
@ -2521,23 +2576,53 @@ var
|
|||||||
end else if TargetProject<>nil then begin
|
end else if TargetProject<>nil then begin
|
||||||
// create new TUnitInfo
|
// create new TUnitInfo
|
||||||
|
|
||||||
raise Exception.Create('implement me');
|
NewProjFile:=TargetProject.UnitInfoWithFilename(NewFilename);
|
||||||
|
if NewProjFile=nil then begin
|
||||||
|
NewProjFile:=TUnitInfo.Create(nil);
|
||||||
|
NewProjFile.Filename:=NewFilename;
|
||||||
|
TargetProject.AddFile(NewProjFile,false);
|
||||||
|
end;
|
||||||
|
NewProjFile.IsPartOfProject:=true;
|
||||||
|
NewProjFile.ResourceBaseClass:=NewResourceBaseClass;
|
||||||
|
if OldProjFile<>nil then begin
|
||||||
|
NewProjFile.HasResources:=OldProjFile.HasResources;
|
||||||
|
NewProjFile.ComponentName:=OldProjFile.ComponentName;
|
||||||
|
NewProjFile.ComponentResourceName:=OldProjFile.ComponentResourceName;
|
||||||
|
NewProjFile.BuildFileIfActive:=OldProjFile.BuildFileIfActive;
|
||||||
|
NewProjFile.RunFileIfActive:=OldProjFile.RunFileIfActive;
|
||||||
|
NewProjFile.DefaultSyntaxHighlighter:=OldProjFile.DefaultSyntaxHighlighter;
|
||||||
|
NewProjFile.DisableI18NForLFM:=OldProjFile.DisableI18NForLFM;
|
||||||
|
NewProjFile.CustomDefaultHighlighter:=OldProjFile.CustomDefaultHighlighter;
|
||||||
|
end;
|
||||||
|
if (not SrcIsTarget)
|
||||||
|
and (pfMainUnitHasUsesSectionForAllUnits in TargetProject.Flags) then
|
||||||
|
begin
|
||||||
|
CodeToolBoss.AddUnitToMainUsesSection(
|
||||||
|
TargetProject.MainUnitInfo.Source,NewUnitName,'');
|
||||||
|
CodeToolBoss.SourceChangeCache.Apply;
|
||||||
|
TargetProject.MainUnitInfo.Modified:=true;
|
||||||
|
end;
|
||||||
end else begin
|
end else begin
|
||||||
raise Exception.Create('implement me');
|
raise Exception.Create('implement me');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// delete old
|
// delete old
|
||||||
if DeleteOld then begin
|
if DeleteOld then begin
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['MoveOrCopyFile delete "',OldFilename,'" from=',SrcFilesEdit.FilesOwnerName]);
|
||||||
|
{$ENDIF}
|
||||||
if OldPkgFile<>nil then begin
|
if OldPkgFile<>nil then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
|
||||||
debugln(['MoveOrCopyFile delete "',OldPkgFile.Filename,'" pkg=',OldPkgFile.LazPackage.Name]);
|
|
||||||
{$ENDIF}
|
|
||||||
SrcPackage.DeleteFile(OldPkgFile);
|
SrcPackage.DeleteFile(OldPkgFile);
|
||||||
end else if OldProjFile<>nil then begin
|
end else if OldProjFile<>nil then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
OldProjFile.IsPartOfProject:=false;
|
||||||
debugln(['MoveOrCopyFile delete "',OldProjFile.Filename,'"']);
|
if (not SrcIsTarget)
|
||||||
{$ENDIF}
|
and (pfMainUnitHasUsesSectionForAllUnits in SrcProject.Flags) then
|
||||||
raise Exception.Create('implement me');
|
begin
|
||||||
|
CodeToolBoss.RemoveUnitFromAllUsesSections(
|
||||||
|
TargetProject.MainUnitInfo.Source,NewUnitName);
|
||||||
|
CodeToolBoss.SourceChangeCache.Apply;
|
||||||
|
TargetProject.MainUnitInfo.Modified:=true;
|
||||||
|
end;
|
||||||
end else begin
|
end else begin
|
||||||
raise Exception.Create('implement me');
|
raise Exception.Create('implement me');
|
||||||
end;
|
end;
|
||||||
@ -2587,53 +2672,48 @@ var
|
|||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
|
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['TPkgManager.MoveFiles Self=',TargetFilesEdit.FilesOwnerName,' Src=',SrcFilesEdit.FilesOwnerName,' Dir="',TargetDirectory,'" FileCount=',IDEFiles.Count]);
|
||||||
|
{$ENDIF}
|
||||||
|
if not GetPkgProj(SrcFilesEdit,SrcPackage,SrcProject) then begin
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['TPkgManager.MoveFiles invalid src=',DbgSName(SrcFilesEdit.FilesOwner)]);
|
||||||
|
{$ENDIF}
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
if not GetPkgProj(TargetFilesEdit,TargetPackage,TargetProject) then begin
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['TPkgManager.MoveFiles invalid target=',DbgSName(TargetFilesEdit.FilesOwner)]);
|
||||||
|
{$ENDIF}
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
DeleteNonExistingPkgFiles;
|
DeleteNonExistingPkgFiles;
|
||||||
if IDEFiles.Count=0 then begin
|
if IDEFiles.Count=0 then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles PkgFiles.Count=0']);
|
debugln(['TPkgManager.MoveFiles PkgFiles.Count=0']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit(true);
|
exit(true);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if TargetFilesEdit.FilesOwnerReadOnly then begin
|
||||||
|
IDEMessageDialog(lisTargetIsReadOnly,
|
||||||
|
Format(lisTheTargetIsNotWritable, [TargetFilesEdit.FilesOwnerName]),
|
||||||
|
mtError, [mbCancel]);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
if not FilenameIsAbsolute(TargetDirectory) then begin
|
if not FilenameIsAbsolute(TargetDirectory) then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles invalid target dir=',TargetDirectory]);
|
debugln(['TPkgManager.MoveFiles invalid target dir=',TargetDirectory]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
TargetDirectory:=AppendPathDelim(TargetDirectory);
|
TargetDirectory:=AppendPathDelim(TargetDirectory);
|
||||||
|
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
|
||||||
debugln(['TPackageEditorForm.MoveFiles Self=',TargetFilesEdit.FilesOwnerName,' Src=',SrcFilesEdit.FilesOwnerName,' Dir="',TargetDirectory,'" FileCount=',IDEFiles.Count]);
|
|
||||||
{$ENDIF}
|
|
||||||
SrcPackage:=nil;
|
|
||||||
SrcProject:=nil;
|
|
||||||
if SrcFilesEdit.FilesOwner is TLazPackage then
|
|
||||||
SrcPackage:=TLazPackage(SrcFilesEdit.FilesOwner)
|
|
||||||
else if SrcFilesEdit.FilesOwner is TProject then
|
|
||||||
SrcProject:=TProject(SrcFilesEdit.FilesOwner)
|
|
||||||
else begin
|
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
|
||||||
debugln(['TPackageEditorForm.MoveFiles invalid src=',DbgSName(SrcFilesEdit.FilesOwner)]);
|
|
||||||
{$ENDIF}
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
TargetPackage:=nil;
|
|
||||||
TargetProject:=nil;
|
|
||||||
if TargetFilesEdit.FilesOwner is TLazPackage then
|
|
||||||
TargetPackage:=TLazPackage(TargetFilesEdit.FilesOwner)
|
|
||||||
else if TargetFilesEdit.FilesOwner is TProject then
|
|
||||||
TargetProject:=TProject(TargetFilesEdit.FilesOwner)
|
|
||||||
else begin
|
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
|
||||||
debugln(['TPackageEditorForm.MoveFiles invalid target=',DbgSName(TargetFilesEdit.FilesOwner)]);
|
|
||||||
{$ENDIF}
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
// check TargetDirectory
|
// check TargetDirectory
|
||||||
if CheckDirectoryIsWritable(TargetDirectory)<>mrOk then begin
|
if CheckDirectoryIsWritable(TargetDirectory)<>mrOk then begin
|
||||||
debugln(['TPackageEditorForm.MoveFiles not writable TargetDirectory=',TargetDirectory]);
|
debugln(['TPkgManager.MoveFiles not writable TargetDirectory=',TargetDirectory]);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2651,7 +2731,7 @@ begin
|
|||||||
// collect all affected files including resource files
|
// collect all affected files including resource files
|
||||||
if not CollectFiles(MoveFileCount) then begin
|
if not CollectFiles(MoveFileCount) then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles CollectFiles failed']);
|
debugln(['TPkgManager.MoveFiles CollectFiles failed']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
@ -2659,7 +2739,7 @@ begin
|
|||||||
// check if new position is free
|
// check if new position is free
|
||||||
if not CheckNewFilesDoNotExist then begin
|
if not CheckNewFilesDoNotExist then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles CheckNewFilesDoNotExist failed']);
|
debugln(['TPkgManager.MoveFiles CheckNewFilesDoNotExist failed']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
@ -2703,7 +2783,7 @@ begin
|
|||||||
// check uses sections
|
// check uses sections
|
||||||
if not CheckUsesSections then begin
|
if not CheckUsesSections then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles CheckUsesSections failed']);
|
debugln(['TPkgManager.MoveFiles CheckUsesSections failed']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
@ -2712,7 +2792,7 @@ begin
|
|||||||
// close files and res files in source editor
|
// close files and res files in source editor
|
||||||
if not CloseSrcEditors then begin
|
if not CloseSrcEditors then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles CloseSrcEditors failed']);
|
debugln(['TPkgManager.MoveFiles CloseSrcEditors failed']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
@ -2722,7 +2802,7 @@ begin
|
|||||||
// files will be moved to another package/project
|
// files will be moved to another package/project
|
||||||
if not ClearOldCompiledFiles then begin
|
if not ClearOldCompiledFiles then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles ClearOldCompiledFiles failed']);
|
debugln(['TPkgManager.MoveFiles ClearOldCompiledFiles failed']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
@ -2731,7 +2811,7 @@ begin
|
|||||||
// extend unit/include path of LazPackage
|
// extend unit/include path of LazPackage
|
||||||
if not ExtendSearchPaths then begin
|
if not ExtendSearchPaths then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles ExtendSearchPaths failed']);
|
debugln(['TPkgManager.MoveFiles ExtendSearchPaths failed']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
@ -2739,7 +2819,7 @@ begin
|
|||||||
// move/copy files
|
// move/copy files
|
||||||
if not MoveOrCopyFiles then begin
|
if not MoveOrCopyFiles then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles MoveOrCopyFiles failed']);
|
debugln(['TPkgManager.MoveFiles MoveOrCopyFiles failed']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
@ -6122,11 +6202,23 @@ end;
|
|||||||
function TPkgManager.OnProjectInspectorDragOverTreeView(Sender,
|
function TPkgManager.OnProjectInspectorDragOverTreeView(Sender,
|
||||||
Source: TObject; X, Y: Integer; out TargetTVNode: TTreeNode; out
|
Source: TObject; X, Y: Integer; out TargetTVNode: TTreeNode; out
|
||||||
TargetTVType: TTreeViewInsertMarkType): boolean;
|
TargetTVType: TTreeViewInsertMarkType): boolean;
|
||||||
|
var
|
||||||
|
SrcFilesEdit: IFilesEditorInterface;
|
||||||
|
TargetFilesEdit: IFilesEditorInterface;
|
||||||
|
aFileCount: integer;
|
||||||
|
aDependencyCount: integer;
|
||||||
|
aDirectoryCount: integer;
|
||||||
begin
|
begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPkgManager.OnProjectInspectorDragOverTreeView ']);
|
debugln(['TPkgManager.OnProjectInspectorDragOverTreeView ']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Result:=false;
|
Result:=CheckDrag(Sender, Source, X, Y, SrcFilesEdit, TargetFilesEdit,
|
||||||
|
aFileCount, aDependencyCount, aDirectoryCount, TargetTVNode, TargetTVType);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TPkgManager.OnProjectInspectorCopyMoveFiles(Sender: TObject);
|
||||||
|
begin
|
||||||
|
CopyMoveFiles(Sender);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPkgManager.CanOpenDesignerForm(AnUnitInfo: TUnitInfo;
|
function TPkgManager.CanOpenDesignerForm(AnUnitInfo: TUnitInfo;
|
||||||
|
Loading…
Reference in New Issue
Block a user