mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-01 19:01:35 +02:00
IDE: move files: more generic
git-svn-id: trunk@45597 -
This commit is contained in:
parent
95e940dff4
commit
e36d6f373e
@ -93,8 +93,6 @@ resourcestring
|
|||||||
lisCut = 'Cut';
|
lisCut = 'Cut';
|
||||||
lisCopy = 'Copy';
|
lisCopy = 'Copy';
|
||||||
lisMoveFiles2 = 'Move files?';
|
lisMoveFiles2 = 'Move files?';
|
||||||
lisMoveFileSFromPackageToTheDirectoryOfPackage = 'Move %s file(s) from '
|
|
||||||
+'package %s to the directory%s%s%sof package %s.';
|
|
||||||
lisPaste = 'Paste';
|
lisPaste = 'Paste';
|
||||||
lisDown = 'Down';
|
lisDown = 'Down';
|
||||||
lisUp = 'Up';
|
lisUp = 'Up';
|
||||||
@ -4270,28 +4268,27 @@ resourcestring
|
|||||||
lisExtendIncludeFileSearchPathOfPackageWith = 'Extend include file search '
|
lisExtendIncludeFileSearchPathOfPackageWith = 'Extend include file search '
|
||||||
+'path of package "%s" with"%s"?';
|
+'path of package "%s" with"%s"?';
|
||||||
lisConflictDetected = 'Conflict detected';
|
lisConflictDetected = 'Conflict detected';
|
||||||
lisThereIsAlreadyAFileInPackage =
|
lisThereIsAlreadyAFileIn = 'There is already a file%s%s%sin %s';
|
||||||
'There is already a file%s%s%sin package %s';
|
|
||||||
lisDuplicateUnit = 'Duplicate Unit';
|
lisDuplicateUnit = 'Duplicate Unit';
|
||||||
lisThereIsAlreadyAUnitInPackageOldNewYouHaveToMakeSur = 'There is already a '
|
lisThereIsAlreadyAUnitInOldNewYouHaveToMakeSur = 'There is already a '
|
||||||
+'unit "%s" in package %s%sOld: %s%sNew: %s%sYou have to make sure that '
|
+'unit "%s" in %s%sOld: %s%sNew: %s%sYou have to make sure that '
|
||||||
+'the unit search path of the package contains only one of them.%s%'
|
+'the unit search path contains only one of them.%s%sContinue?';
|
||||||
+'sContinue?';
|
|
||||||
lisDuplicateFileName = 'Duplicate File Name';
|
lisDuplicateFileName = 'Duplicate File Name';
|
||||||
lisThereIsAlreadyAFileInPackageOldNewContinue = 'There is already a file "%s'
|
lisThereIsAlreadyAFileInOldNewContinue = 'There is already a file "%s'
|
||||||
+'" in package %s%sOld: %s%sNew: %s%s%sContinue?';
|
+'" in %s%sOld: %s%sNew: %s%s%sContinue?';
|
||||||
lisUnitNotFoundAtNewPosition = 'unit %s not found at new position "%s"';
|
lisUnitNotFoundAtNewPosition = 'unit %s not found at new position "%s"';
|
||||||
lisUnitRequiresPackage = 'unit %s requires package %s';
|
lisUnitRequiresPackage = 'unit %s requires package %s';
|
||||||
lisDifferentUnitFoundAtNewPosition = 'different unit %s found at new '
|
lisDifferentUnitFoundAtNewPosition = 'different unit %s found at new '
|
||||||
+'position "%s"';
|
+'position "%s"';
|
||||||
lisMoveFiles = 'Move Files';
|
lisMoveFiles = 'Move Files';
|
||||||
lisUnitNotFound = 'unit %s not found';
|
lisUnitNotFound = 'unit %s not found';
|
||||||
lisTwoMovedFilesWillHaveTheSameFileNameInPackage = 'Two moved files will '
|
lisTwoMovedFilesWillHaveTheSameFileNameIn = 'Two moved files will '
|
||||||
+'have the same file name:%s%s%s%s%sin package %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?';
|
||||||
lisMoveOrCopyFileSFromPackageToTheDirectoryOfPackage = 'Move or copy %s file'
|
lisMoveOrCopyFileSFromToTheDirectoryOfPackage = 'Move or copy %s file'
|
||||||
+'(s) from package %s to the directory%s%s%sof package %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.';
|
||||||
lisMove = 'Move';
|
lisMove = 'Move';
|
||||||
lisPkgEditDoYouReallyWantToForgetAllChangesToPackageAnd = 'Do you really '
|
lisPkgEditDoYouReallyWantToForgetAllChangesToPackageAnd = 'Do you really '
|
||||||
+'want to forget all changes to package %s and reload it from file?';
|
+'want to forget all changes to package %s and reload it from file?';
|
||||||
|
@ -6821,6 +6821,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
// update project resource files
|
||||||
if not Project1.ProjResources.Regenerate(Project1.MainFilename, False, True, TargetExeDirectory)
|
if not Project1.ProjResources.Regenerate(Project1.MainFilename, False, True, TargetExeDirectory)
|
||||||
then begin
|
then begin
|
||||||
debugln(['TMainIDE.DoBuildProject ProjResources.Regenerate failed']);
|
debugln(['TMainIDE.DoBuildProject ProjResources.Regenerate failed']);
|
||||||
|
@ -1185,7 +1185,7 @@ end;
|
|||||||
|
|
||||||
function TProjectInspectorForm.FilesOwnerName: string;
|
function TProjectInspectorForm.FilesOwnerName: string;
|
||||||
begin
|
begin
|
||||||
Result:='Project';
|
Result:='project';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TProjectInspectorForm.FilesOwnerReadOnly: boolean;
|
function TProjectInspectorForm.FilesOwnerReadOnly: boolean;
|
||||||
|
@ -2955,7 +2955,7 @@ end;
|
|||||||
|
|
||||||
function TPackageEditorForm.FilesOwnerName: string;
|
function TPackageEditorForm.FilesOwnerName: string;
|
||||||
begin
|
begin
|
||||||
Result:=LazPackage.Name;
|
Result:='package '+LazPackage.Name;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPackageEditorForm.TVNodeFiles: TTreeNode;
|
function TPackageEditorForm.TVNodeFiles: TTreeNode;
|
||||||
|
@ -203,7 +203,7 @@ type
|
|||||||
function MoveFiles(TargetFilesEdit, SrcFilesEdit: IFilesEditorInterface;
|
function MoveFiles(TargetFilesEdit, SrcFilesEdit: IFilesEditorInterface;
|
||||||
TargetDirectory: string): boolean;
|
TargetDirectory: string): boolean;
|
||||||
function MoveFiles(TargetFilesEdit, SrcFilesEdit: IFilesEditorInterface;
|
function MoveFiles(TargetFilesEdit, SrcFilesEdit: IFilesEditorInterface;
|
||||||
PkgFiles: TFPList; TargetDirectory: string): boolean;
|
IDEFiles: TFPList; TargetDirectory: string): boolean;
|
||||||
function CopyMoveFiles(Sender: TObject): boolean;
|
function CopyMoveFiles(Sender: TObject): boolean;
|
||||||
public
|
public
|
||||||
constructor Create(TheOwner: TComponent); override;
|
constructor Create(TheOwner: TComponent); override;
|
||||||
@ -1698,13 +1698,31 @@ function TPkgManager.CheckDrag(Sender, Source: TObject; X, Y: Integer; out
|
|||||||
SrcFilesEdit, TargetFilesEdit: IFilesEditorInterface; out aFileCount,
|
SrcFilesEdit, TargetFilesEdit: IFilesEditorInterface; out aFileCount,
|
||||||
aDependencyCount, aDirectoryCount: integer; out TargetTVNode: TTreeNode; out
|
aDependencyCount, aDirectoryCount: integer; out TargetTVNode: TTreeNode; out
|
||||||
TargetTVType: TTreeViewInsertMarkType): boolean;
|
TargetTVType: TTreeViewInsertMarkType): boolean;
|
||||||
|
|
||||||
|
function GetFilesEditIntf(o: TObject): IFilesEditorInterface;
|
||||||
|
var
|
||||||
|
PkgEdit: TPackageEditorForm;
|
||||||
|
aProjInsp: TProjectInspectorForm;
|
||||||
|
begin
|
||||||
|
Result:=nil;
|
||||||
|
if o is TTreeView then begin
|
||||||
|
PkgEdit:=PackageEditors.TreeViewToPkgEditor(TTreeView(o));
|
||||||
|
if PkgEdit<>nil then
|
||||||
|
Result:=PkgEdit
|
||||||
|
else begin
|
||||||
|
aProjInsp:=ProjInspector.TreeViewToInspector(TTreeView(o));
|
||||||
|
if aProjInsp<>nil then
|
||||||
|
Result:=aProjInsp;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
TVNode: TTreeNode;
|
TVNode: TTreeNode;
|
||||||
NodeData: TPENodeData;
|
NodeData: TPENodeData;
|
||||||
Item: TObject;
|
Item: TObject;
|
||||||
Directory: String;
|
Directory: String;
|
||||||
SrcPkgEdit: TPackageEditorForm;
|
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
SrcFilesEdit:=nil;
|
SrcFilesEdit:=nil;
|
||||||
@ -1716,26 +1734,18 @@ begin
|
|||||||
TargetTVType:=tvimNone;
|
TargetTVType:=tvimNone;
|
||||||
|
|
||||||
// get source
|
// get source
|
||||||
if (Source is TTreeView) then begin
|
SrcFilesEdit:=GetFilesEditIntf(Source);
|
||||||
SrcPkgEdit:=PackageEditors.TreeViewToPkgEditor(TTreeView(Source));
|
if (SrcFilesEdit=nil) or SrcFilesEdit.FilesOwnerReadOnly
|
||||||
//debugln(['TPkgManager.ItemsTreeViewDragOver from another package editor: ',SrcFilesEdit.LazPackage.Name]);
|
or (not FilenameIsAbsolute(SrcFilesEdit.FilesBaseDirectory)) then
|
||||||
if (SrcPkgEdit=nil) or SrcPkgEdit.LazPackage.ReadOnly
|
|
||||||
or SrcPkgEdit.LazPackage.IsVirtual then
|
|
||||||
exit;
|
|
||||||
SrcFilesEdit:=SrcPkgEdit;
|
|
||||||
end else
|
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
// get target
|
// get target
|
||||||
if Sender is TTreeView then begin
|
TargetFilesEdit:=GetFilesEditIntf(Sender);
|
||||||
TargetFilesEdit:=PackageEditors.TreeViewToPkgEditor(TTreeView(Sender));
|
if (TargetFilesEdit=nil) or TargetFilesEdit.FilesOwnerReadOnly
|
||||||
if (TargetFilesEdit=nil) or TargetFilesEdit.FilesOwnerReadOnly
|
or (not FilenameIsAbsolute(TargetFilesEdit.FilesBaseDirectory)) then
|
||||||
or (not FilenameIsAbsolute(TargetFilesEdit.FilesBaseDirectory)) then
|
|
||||||
exit;
|
|
||||||
end else
|
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
//debugln(['TPkgManager.CheckDrag Src=',SrcFilesEdit.LazPackage.Name,' Target=',TargetFilesEdit.LazPackage.Name]);
|
debugln(['TPkgManager.CheckDrag Src=',SrcFilesEdit.FilesOwnerName,' Target=',TargetFilesEdit.FilesOwnerName]);
|
||||||
|
|
||||||
// check items
|
// check items
|
||||||
aFileCount:=0;
|
aFileCount:=0;
|
||||||
@ -1745,7 +1755,10 @@ begin
|
|||||||
TVNode:=SrcFilesEdit.FilesEditTreeView.Selections[i];
|
TVNode:=SrcFilesEdit.FilesEditTreeView.Selections[i];
|
||||||
if SrcFilesEdit.GetNodeDataItem(TVNode,NodeData,Item) then begin
|
if SrcFilesEdit.GetNodeDataItem(TVNode,NodeData,Item) then begin
|
||||||
if NodeData.Removed then exit; // removed things cannot be moved
|
if NodeData.Removed then exit; // removed things cannot be moved
|
||||||
if Item is TPkgFile then begin
|
if Item is TIDEOwnedFile then begin
|
||||||
|
if (Item is TUnitInfo) and (TUnitInfo(Item)=TUnitInfo(Item).Project.MainUnitInfo)
|
||||||
|
then
|
||||||
|
continue;
|
||||||
inc(aFileCount);
|
inc(aFileCount);
|
||||||
end else if Item is TPkgDependency then begin
|
end else if Item is TPkgDependency then begin
|
||||||
inc(aDependencyCount);
|
inc(aDependencyCount);
|
||||||
@ -1879,7 +1892,10 @@ begin
|
|||||||
TVNode:=SrcFilesEdit.FilesEditTreeView.Selections[i];
|
TVNode:=SrcFilesEdit.FilesEditTreeView.Selections[i];
|
||||||
if not SrcFilesEdit.GetNodeDataItem(TVNode, NodeData, Item) then continue;
|
if not SrcFilesEdit.GetNodeDataItem(TVNode, NodeData, Item) then continue;
|
||||||
if NodeData.Removed then continue;
|
if NodeData.Removed then continue;
|
||||||
if not (Item is TPkgFile) then continue;
|
if not (Item is TIDEOwnedFile) then continue;
|
||||||
|
if (Item is TUnitInfo) and (TUnitInfo(Item)=TUnitInfo(Item).Project.MainUnitInfo)
|
||||||
|
then
|
||||||
|
continue;
|
||||||
Files.Add(Item);
|
Files.Add(Item);
|
||||||
end;
|
end;
|
||||||
if Files.Count=0 then begin
|
if Files.Count=0 then begin
|
||||||
@ -1896,36 +1912,53 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TPkgManager.MoveFiles(TargetFilesEdit, SrcFilesEdit: IFilesEditorInterface;
|
function TPkgManager.MoveFiles(TargetFilesEdit, SrcFilesEdit: IFilesEditorInterface;
|
||||||
PkgFiles: TFPList; TargetDirectory: string): boolean;
|
IDEFiles: TFPList; TargetDirectory: string): boolean;
|
||||||
var
|
var
|
||||||
ChangedFilenames: TFilenameToStringTree; // old to new file name
|
ChangedFilenames: TFilenameToStringTree; // old to new file name
|
||||||
AllChangedFilenames: TFilenameToStringTree; // including resouce files
|
AllChangedFilenames: TFilenameToStringTree; // including resouce files
|
||||||
NewFileToOldPkgFile: TFilenameToPointerTree; // filename to TPkgFile
|
NewFileToOldOwnedFile: TFilenameToPointerTree; // filename to TIDEOwnedFile
|
||||||
DeleteOld: Boolean;
|
DeleteOld: Boolean;
|
||||||
UnitFilenameToResFileList: TFilenameToPointerTree; // filename to TStringList
|
UnitFilenameToResFileList: TFilenameToPointerTree; // filename to TStringList
|
||||||
SrcDirToPkg: TFilenameToPointerTree;
|
SrcDirToPkg: TFilenameToPointerTree;
|
||||||
SrcPackage, TargetPackage: TLazPackage;
|
SrcPackage, TargetPackage: TLazPackage;
|
||||||
|
SrcProject, TargetProject: TProject;
|
||||||
SrcIsTarget: Boolean;
|
SrcIsTarget: Boolean;
|
||||||
|
|
||||||
procedure DeleteNonExistingPkgFiles;
|
procedure DeleteNonExistingPkgFiles;
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
PkgFile: TPkgFile;
|
CurFile: TIDEOwnedFile;
|
||||||
aFilename: String;
|
aFilename: String;
|
||||||
begin
|
begin
|
||||||
// ignore non existing files
|
// ignore non existing files
|
||||||
for i:=PkgFiles.Count-1 downto 0 do begin
|
for i:=IDEFiles.Count-1 downto 0 do begin
|
||||||
PkgFile:=TPkgFile(PkgFiles[i]);
|
CurFile:=TIDEOwnedFile(IDEFiles[i]);
|
||||||
aFilename:=PkgFile.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(['TPackageEditorForm.MoveFiles WARNING: file not found: ',aFilename]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
PkgFiles.Delete(i);
|
IDEFiles.Delete(i);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (CurFile is TUnitInfo) and (TUnitInfo(CurFile)=TUnitInfo(CurFile).Project.MainUnitInfo)
|
||||||
|
then begin
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['TPackageEditorForm.MoveFiles WARNING: main unit of project cannot be moved: ',aFilename]);
|
||||||
|
{$ENDIF}
|
||||||
|
IDEFiles.Delete(i);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function FileIsUnit(aFile: TIDEOwnedFile): boolean;
|
||||||
|
begin
|
||||||
|
if aFile is TPkgFile then
|
||||||
|
Result:=TPkgFile(aFile).FileType in PkgFileRealUnitTypes
|
||||||
|
else
|
||||||
|
Result:=FilenameIsPascalSource(aFile.Filename);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure AddResFile(ResFiles: TStringList; ResFile: string);
|
procedure AddResFile(ResFiles: TStringList; ResFile: string);
|
||||||
var
|
var
|
||||||
NewResFile: String;
|
NewResFile: String;
|
||||||
@ -1942,7 +1975,7 @@ var
|
|||||||
function CollectFiles(out MoveFileCount: integer): boolean;
|
function CollectFiles(out MoveFileCount: integer): boolean;
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
PkgFile: TPkgFile;
|
aFile: TIDEOwnedFile;
|
||||||
OldFilename: String;
|
OldFilename: String;
|
||||||
NewFilename: String;
|
NewFilename: String;
|
||||||
ResFileList: TStringList;
|
ResFileList: TStringList;
|
||||||
@ -1953,20 +1986,20 @@ var
|
|||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
MoveFileCount:=0;
|
MoveFileCount:=0;
|
||||||
for i:=0 to PkgFiles.Count-1 do begin
|
for i:=0 to IDEFiles.Count-1 do begin
|
||||||
PkgFile:=TPkgFile(PkgFiles[i]);
|
aFile:=TIDEOwnedFile(IDEFiles[i]);
|
||||||
OldFilename:=PkgFile.GetFullFilename;
|
OldFilename:=aFile.GetFullFilename;
|
||||||
NewFilename:=TargetDirectory+ExtractFilename(OldFilename);
|
NewFilename:=TargetDirectory+ExtractFilename(OldFilename);
|
||||||
|
|
||||||
// check if two copied/moved files will get the same new file name
|
// check if two copied/moved files will get the same new file name
|
||||||
if NewFileToOldPkgFile.Contains(NewFilename) then begin
|
if NewFileToOldOwnedFile.Contains(NewFilename) then begin
|
||||||
IDEMessageDialog(lisConflictDetected,
|
IDEMessageDialog(lisConflictDetected,
|
||||||
Format(lisTwoMovedFilesWillHaveTheSameFileNameInPackage, [#13, PkgFile
|
Format(lisTwoMovedFilesWillHaveTheSameFileNameIn, [#13, aFile
|
||||||
.Filename, #13, TPkgFile(NewFileToOldPkgFile[NewFilename]).
|
.Filename, #13, TIDEOwnedFile(NewFileToOldOwnedFile[NewFilename]).
|
||||||
Filename, #13, TargetFilesEdit.FilesOwnerName]), mtError, [mbCancel]);
|
Filename, #13, TargetFilesEdit.FilesOwnerName]), mtError, [mbCancel]);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
NewFileToOldPkgFile[NewFilename]:=PkgFile;
|
NewFileToOldOwnedFile[NewFilename]:=aFile;
|
||||||
|
|
||||||
if CompareFilenames(NewFilename,OldFilename)<>0 then begin
|
if CompareFilenames(NewFilename,OldFilename)<>0 then begin
|
||||||
// file be copied/moved to another directory
|
// file be copied/moved to another directory
|
||||||
@ -1977,7 +2010,7 @@ var
|
|||||||
AllChangedFilenames[OldFilename]:=NewFilename;
|
AllChangedFilenames[OldFilename]:=NewFilename;
|
||||||
|
|
||||||
// check resource file
|
// check resource file
|
||||||
if PkgFile.FileType in PkgFileRealUnitTypes then begin
|
if FileIsUnit(aFile) then begin
|
||||||
ResFileList:=TStringList.Create;
|
ResFileList:=TStringList.Create;
|
||||||
UnitFilenameToResFileList[OldFilename]:=ResFileList;
|
UnitFilenameToResFileList[OldFilename]:=ResFileList;
|
||||||
AddResFile(ResFileList,ChangeFileExt(OldFilename,'.lfm'));
|
AddResFile(ResFileList,ChangeFileExt(OldFilename,'.lfm'));
|
||||||
@ -1992,7 +2025,7 @@ var
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// remove res files, that are in PkgFiles
|
// remove res files, that are in IDEFiles
|
||||||
for S2PItem in UnitFilenameToResFileList do begin
|
for S2PItem in UnitFilenameToResFileList do begin
|
||||||
OldFilename:=S2PItem^.Name;
|
OldFilename:=S2PItem^.Name;
|
||||||
ResFileList:=TStringList(S2PItem^.Value);
|
ResFileList:=TStringList(S2PItem^.Value);
|
||||||
@ -2010,13 +2043,14 @@ var
|
|||||||
S2SItem: PStringToStringTreeItem;
|
S2SItem: PStringToStringTreeItem;
|
||||||
OldFilename: String;
|
OldFilename: String;
|
||||||
NewFilename: String;
|
NewFilename: String;
|
||||||
ConflictFile: TPkgFile;
|
ConflictFile: TIDEOwnedFile;
|
||||||
CurName: String;
|
CurName: String;
|
||||||
ShortFilename: String;
|
ShortFilename: String;
|
||||||
r: TModalResult;
|
r: TModalResult;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
WarnUnitClash: Boolean;
|
WarnUnitClash: Boolean;
|
||||||
WarnNameClash: Boolean;
|
WarnNameClash: Boolean;
|
||||||
|
Cnt: Integer;
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
WarnUnitClash:=true;
|
WarnUnitClash:=true;
|
||||||
@ -2029,7 +2063,7 @@ var
|
|||||||
// check file does not exist
|
// check file does not exist
|
||||||
if FileExistsCached(NewFilename) then begin
|
if FileExistsCached(NewFilename) then begin
|
||||||
IDEMessageDialog(lisConflictDetected,
|
IDEMessageDialog(lisConflictDetected,
|
||||||
Format(lisThereIsAlreadyAFileInPackage, [#13, NewFilename, #13,
|
Format(lisThereIsAlreadyAFileIn, [#13, NewFilename, #13,
|
||||||
TargetFilesEdit.FilesOwnerName]), mtError, [mbCancel]);
|
TargetFilesEdit.FilesOwnerName]), mtError, [mbCancel]);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
@ -2039,37 +2073,55 @@ var
|
|||||||
if FilenameIsPascalUnit(NewFilename) then begin
|
if FilenameIsPascalUnit(NewFilename) then begin
|
||||||
// warn duplicate unit name
|
// warn duplicate unit name
|
||||||
CurName:=ExtractFileNameOnly(NewFilename);
|
CurName:=ExtractFileNameOnly(NewFilename);
|
||||||
if TargetPackage<>nil then begin
|
if TargetPackage<>nil then
|
||||||
ConflictFile:=TargetPackage.FindUnit(CurName,true);
|
ConflictFile:=TargetPackage.FindUnit(CurName,true)
|
||||||
if (ConflictFile<>nil) and WarnUnitClash then begin
|
else if TargetProject<>nil then
|
||||||
ShortFilename:=NewFilename;
|
ConflictFile:=TargetProject.UnitWithUnitname(CurName)
|
||||||
TargetPackage.ShortenFilename(ShortFilename,true);
|
else
|
||||||
r:=IDEMessageDialog(lisDuplicateUnit,
|
ConflictFile:=nil;
|
||||||
Format(lisThereIsAlreadyAUnitInPackageOldNewYouHaveToMakeSur, [
|
if (ConflictFile<>nil) and WarnUnitClash then begin
|
||||||
CurName, TargetPackage.Name, #13, ConflictFile.GetShortFilename(
|
ShortFilename:=NewFilename;
|
||||||
true), #13, ShortFilename, #13, #13, #13])
|
ShortFilename:=CreateRelativePath(ShortFilename,TargetFilesEdit.FilesBaseDirectory);
|
||||||
,mtWarning,[mbYes,mbYesToAll,mbCancel]);
|
r:=IDEMessageDialog(lisDuplicateUnit,
|
||||||
case r of
|
Format(lisThereIsAlreadyAUnitInOldNewYouHaveToMakeSur, [
|
||||||
mrYes: ;
|
CurName, TargetFilesEdit.FilesOwnerName, #13,
|
||||||
mrYesToAll: WarnUnitClash:=false;
|
ConflictFile.GetShortFilename(true), #13,
|
||||||
else exit;
|
ShortFilename, #13, #13, #13])
|
||||||
end;
|
,mtWarning,[mbYes,mbYesToAll,mbCancel]);
|
||||||
|
case r of
|
||||||
|
mrYes: ;
|
||||||
|
mrYesToAll: WarnUnitClash:=false;
|
||||||
|
else exit;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end else if TargetPackage<>nil then begin
|
end else begin
|
||||||
// warn duplicate file
|
// warn duplicate file
|
||||||
for i:=0 to TargetPackage.FileCount-1 do begin
|
if TargetPackage<>nil then
|
||||||
|
Cnt:=TargetPackage.FileCount
|
||||||
|
else if TargetProject<>nil then
|
||||||
|
Cnt:=TargetProject.FileCount
|
||||||
|
else
|
||||||
|
Cnt:=0;
|
||||||
|
for i:=0 to Cnt-1 do begin
|
||||||
if not WarnNameClash then continue;
|
if not WarnNameClash then continue;
|
||||||
ConflictFile:=TargetPackage.Files[i];
|
if TargetPackage<>nil then
|
||||||
CurName:=ExtractFilename(NewFilename);
|
ConflictFile:=TargetPackage.Files[i]
|
||||||
if UTF8CompareText(CurName,ExtractFileName(ConflictFile.Filename))<>0
|
else if TargetProject<>nil then
|
||||||
then
|
ConflictFile:=TargetProject.Files[i]
|
||||||
|
else
|
||||||
continue;
|
continue;
|
||||||
|
ShortFilename:=ExtractFilename(NewFilename);
|
||||||
|
CurName:=ExtractFileName(ConflictFile.Filename);
|
||||||
|
if (UTF8CompareText(CurName,ShortFilename)<>0)
|
||||||
|
and (CompareFilenames(CurName,ShortFilename)<>0) then
|
||||||
|
continue;
|
||||||
|
// name clash on this or other platforms => warn
|
||||||
ShortFilename:=NewFilename;
|
ShortFilename:=NewFilename;
|
||||||
TargetPackage.ShortenFilename(ShortFilename,true);
|
ShortFilename:=CreateRelativePath(ShortFilename,TargetFilesEdit.FilesBaseDirectory);
|
||||||
r:=IDEMessageDialog(lisDuplicateFileName,
|
r:=IDEMessageDialog(lisDuplicateFileName,
|
||||||
Format(lisThereIsAlreadyAFileInPackageOldNewContinue, [CurName,
|
Format(lisThereIsAlreadyAFileInOldNewContinue, [CurName,
|
||||||
TargetPackage.Name, #13, ConflictFile.GetShortFilename(true), #13,
|
TargetFilesEdit.FilesOwnerName, #13,
|
||||||
|
ConflictFile.GetShortFilename(true), #13,
|
||||||
ShortFilename, #13, #13])
|
ShortFilename, #13, #13])
|
||||||
,mtWarning,[mbYes,mbYesToAll,mbCancel]);
|
,mtWarning,[mbYes,mbYesToAll,mbCancel]);
|
||||||
case r of
|
case r of
|
||||||
@ -2105,6 +2157,60 @@ var
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function ClearOldCompiledFiles: boolean;
|
||||||
|
var
|
||||||
|
OutDir: String;
|
||||||
|
CurFiles: TStrings;
|
||||||
|
OutFilename: String;
|
||||||
|
CurUnitName: String;
|
||||||
|
Ext: String;
|
||||||
|
S2SItem: PStringToStringTreeItem;
|
||||||
|
OldFilename: String;
|
||||||
|
SeparateOutDir: Boolean;
|
||||||
|
r: TModalResult;
|
||||||
|
begin
|
||||||
|
Result:=false;
|
||||||
|
// => clear output directory of Src
|
||||||
|
if SrcPackage<>nil then begin
|
||||||
|
if PackageGraph.PreparePackageOutputDirectory(SrcPackage,true)<>mrOk then
|
||||||
|
begin
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['TPackageEditorForm.MoveFiles PreparePackageOutputDirectory failed']);
|
||||||
|
{$ENDIF}
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end else if SrcProject<>nil then begin
|
||||||
|
OutDir:=ChompPathDelim(SrcProject.GetOutputDirectory);
|
||||||
|
if not FilenameIsAbsolute(OutDir) then exit(true);
|
||||||
|
CurFiles:=nil;
|
||||||
|
try
|
||||||
|
CodeToolBoss.DirectoryCachePool.GetListing(OutDir,CurFiles,false);
|
||||||
|
for OutFilename in CurFiles do begin
|
||||||
|
CurUnitName:=ExtractFilenameOnly(OutFilename);
|
||||||
|
for S2SItem in ChangedFilenames do begin
|
||||||
|
OldFilename:=S2SItem^.Name;
|
||||||
|
if not FilenameIsPascalSource(OldFilename) then continue;
|
||||||
|
if CompareTextCT(CurUnitName,ExtractFileNameOnly(OldFilename))<>0 then
|
||||||
|
continue;
|
||||||
|
// output filename and source have same unitname
|
||||||
|
SeparateOutDir:=CompareFilenames(ChompPathDelim(ExtractFilePath(OldFilename)),OutDir)<>0;
|
||||||
|
Ext:=lowercase(ExtractFileExt(OutFilename));
|
||||||
|
if (Ext='ppu') or (Ext='o') or (Ext='ppl') or (Ext='rst') or (Ext='lrt')
|
||||||
|
or (SeparateOutDir and ((Ext='lrs') or (Ext='lfm'))) then begin
|
||||||
|
// automatically created file found => delete
|
||||||
|
r:=DeleteFileInteractive(OutFilename,[mbCancel,mbIgnore]);
|
||||||
|
if not (r in [mrOk,mrIgnore]) then exit;
|
||||||
|
end;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
CurFiles.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Result:=true;
|
||||||
|
end;
|
||||||
|
|
||||||
function CheckUsesSection(Tool: TCodeTool; UsesNode: TCodeTreeNode;
|
function CheckUsesSection(Tool: TCodeTool; UsesNode: TCodeTreeNode;
|
||||||
NewUnitFilename: string): boolean;
|
NewUnitFilename: string): boolean;
|
||||||
// true if no warnings
|
// true if no warnings
|
||||||
@ -2211,7 +2317,7 @@ var
|
|||||||
// check that all used units are available in the target package
|
// check that all used units are available in the target package
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
PkgFile: TPkgFile;
|
aFile: TIDEOwnedFile;
|
||||||
OldFilename: String;
|
OldFilename: String;
|
||||||
Code: TCodeBuffer;
|
Code: TCodeBuffer;
|
||||||
Tool: TCodeTool;
|
Tool: TCodeTool;
|
||||||
@ -2228,12 +2334,12 @@ var
|
|||||||
exit(true);
|
exit(true);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// check that all used units are available in the target package
|
// check that all used units are available in the target
|
||||||
Result:=true;
|
Result:=true;
|
||||||
for i:=0 to PkgFiles.Count-1 do begin
|
for i:=0 to IDEFiles.Count-1 do begin
|
||||||
PkgFile:=TPkgFile(PkgFiles[i]);
|
aFile:=TIDEOwnedFile(IDEFiles[i]);
|
||||||
if not (PkgFile.FileType in PkgFileRealUnitTypes) then continue;
|
if not FileIsUnit(aFile) then continue;
|
||||||
OldFilename:=PkgFile.GetFullFilename;
|
OldFilename:=aFile.GetFullFilename;
|
||||||
NewFilename:=ChangedFilenames[OldFilename];
|
NewFilename:=ChangedFilenames[OldFilename];
|
||||||
if CompareFilenames(ExtractFilePath(OldFilename),ExtractFilePath(NewFilename))=0
|
if CompareFilenames(ExtractFilePath(OldFilename),ExtractFilePath(NewFilename))=0
|
||||||
then continue;
|
then continue;
|
||||||
@ -2258,19 +2364,24 @@ var
|
|||||||
function ExtendSearchPaths: boolean;
|
function ExtendSearchPaths: boolean;
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
PkgFile: TPkgFile;
|
aFile: TIDEOwnedFile;
|
||||||
NewDir: String;
|
NewDir: String;
|
||||||
NewUnitPaths: String;
|
NewUnitPaths: String;
|
||||||
NewIncPaths: String;
|
NewIncPaths: String;
|
||||||
OldFilename: String;
|
OldFilename: String;
|
||||||
|
FileType: TPkgFileType;
|
||||||
begin
|
begin
|
||||||
NewUnitPaths:='';
|
NewUnitPaths:='';
|
||||||
NewIncPaths:='';
|
NewIncPaths:='';
|
||||||
for i:=0 to PkgFiles.Count-1 do begin
|
for i:=0 to IDEFiles.Count-1 do begin
|
||||||
PkgFile:=TPkgFile(PkgFiles[i]);
|
aFile:=TIDEOwnedFile(IDEFiles[i]);
|
||||||
OldFilename:=PkgFile.GetFullFilename;
|
OldFilename:=aFile.GetFullFilename;
|
||||||
NewDir:=ChompPathDelim(ExtractFilePath(ChangedFilenames[OldFilename]));
|
NewDir:=ChompPathDelim(ExtractFilePath(ChangedFilenames[OldFilename]));
|
||||||
case PkgFile.FileType of
|
if aFile is TPkgFile then
|
||||||
|
FileType:=TPkgFile(aFile).FileType
|
||||||
|
else
|
||||||
|
FileType:=FileNameToPkgFileType(OldFilename);
|
||||||
|
case FileType of
|
||||||
pftUnit,pftMainUnit:
|
pftUnit,pftMainUnit:
|
||||||
MergeSearchPaths(NewUnitPaths,NewDir);
|
MergeSearchPaths(NewUnitPaths,NewDir);
|
||||||
pftInclude:
|
pftInclude:
|
||||||
@ -2291,6 +2402,14 @@ var
|
|||||||
r: TModalResult;
|
r: TModalResult;
|
||||||
OldPkgFile: TPkgFile;
|
OldPkgFile: TPkgFile;
|
||||||
NewPkgFile: TPkgFile;
|
NewPkgFile: TPkgFile;
|
||||||
|
NewFileType: TPkgFileType;
|
||||||
|
NewUnitName: String;
|
||||||
|
NewCompPrio: TComponentPriority;
|
||||||
|
NewResourceBaseClass: TPFComponentBaseClass;
|
||||||
|
NewHasRegisterProc: Boolean;
|
||||||
|
NewAddToUses: Boolean;
|
||||||
|
OldProjFile: TUnitInfo;
|
||||||
|
Code: TCodeBuffer;
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
// check if needed
|
// check if needed
|
||||||
@ -2333,37 +2452,76 @@ var
|
|||||||
debugln(['MoveOrCopyFile old file not in lpk: "',OldFilename,'" pkg=',SrcPackage.Name]);
|
debugln(['MoveOrCopyFile old file not in lpk: "',OldFilename,'" pkg=',SrcPackage.Name]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
// this is a resource file
|
// this is a resource file
|
||||||
// => do not create an entry in the target package
|
// => do not create an entry in the target
|
||||||
|
exit(true);
|
||||||
|
end;
|
||||||
|
end else if SrcProject<>nil then begin
|
||||||
|
OldProjFile:=SrcProject.UnitInfoWithFilename(OldFilename,[pfsfOnlyProjectFiles]);
|
||||||
|
if OldPkgFile=nil then begin
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['MoveOrCopyFile old file not in lpi: "',OldFilename,'"']);
|
||||||
|
{$ENDIF}
|
||||||
|
// this is a resource file
|
||||||
|
// => do not create an entry in the target
|
||||||
exit(true);
|
exit(true);
|
||||||
end;
|
end;
|
||||||
end else begin
|
end else begin
|
||||||
raise Exception.Create('implement me');
|
raise Exception.Create('implement me');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if TargetPackage<>nil then begin
|
if TargetPackage<>nil then begin
|
||||||
// create new TPkgFile
|
// create new TPkgFile
|
||||||
|
|
||||||
|
if OldPkgFile<>nil then begin
|
||||||
|
NewUnitName:=OldPkgFile.Unit_Name;
|
||||||
|
NewFileType:=OldPkgFile.FileType;
|
||||||
|
if NewFileType=pftMainUnit then NewFileType:=pftUnit;
|
||||||
|
NewCompPrio:=OldPkgFile.ComponentPriority;
|
||||||
|
NewResourceBaseClass:=OldPkgFile.ResourceBaseClass;
|
||||||
|
NewHasRegisterProc:=OldPkgFile.HasRegisterProc;
|
||||||
|
NewAddToUses:=OldPkgFile.AddToUsesPkgSection;
|
||||||
|
end else begin
|
||||||
|
NewUnitName:=OldProjFile.Unit_Name;
|
||||||
|
NewFileType:=FileNameToPkgFileType(OldFilename);
|
||||||
|
NewCompPrio:=ComponentPriorityNormal;
|
||||||
|
NewResourceBaseClass:=OldProjFile.ResourceBaseClass;
|
||||||
|
NewHasRegisterProc:=false;
|
||||||
|
NewAddToUses:=true;
|
||||||
|
if NewFileType=pftUnit then begin
|
||||||
|
Code:=CodeToolBoss.LoadFile(NewFilename,true,false);
|
||||||
|
if Code<>nil then begin
|
||||||
|
CodeToolBoss.HasInterfaceRegisterProc(Code,NewHasRegisterProc);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
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}
|
||||||
debugln(['MoveOrCopyFile create new "',NewFilename,'" pkg=',TargetPackage.Name]);
|
debugln(['MoveOrCopyFile create new "',NewFilename,'" pkg=',TargetPackage.Name]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
NewPkgFile:=TargetPackage.AddFile(NewFilename,OldPkgFile.Unit_Name,
|
NewPkgFile:=TargetPackage.AddFile(NewFilename,NewUnitName,
|
||||||
OldPkgFile.FileType,OldPkgFile.Flags,OldPkgFile.ComponentPriority.Category);
|
NewFileType,[],NewCompPrio.Category);
|
||||||
end else begin
|
end else begin
|
||||||
NewPkgFile.Unit_Name:=OldPkgFile.Unit_Name;
|
NewPkgFile.Unit_Name:=NewUnitName;
|
||||||
NewPkgFile.FileType:=OldPkgFile.FileType;
|
NewFileType:=NewFileType;
|
||||||
NewPkgFile.Flags:=OldPkgFile.Flags;
|
NewPkgFile.FileType:=NewFileType;
|
||||||
NewPkgFile.ComponentPriority:=OldPkgFile.ComponentPriority;
|
|
||||||
end;
|
end;
|
||||||
NewPkgFile.ResourceBaseClass:=OldPkgFile.ResourceBaseClass;
|
NewPkgFile.ComponentPriority:=NewCompPrio;
|
||||||
NewPkgFile.HasRegisterProc:=OldPkgFile.HasRegisterProc;
|
NewPkgFile.ResourceBaseClass:=NewResourceBaseClass;
|
||||||
if OldPkgFile.AddToUsesPkgSection
|
NewPkgFile.HasRegisterProc:=NewHasRegisterProc;
|
||||||
|
if NewAddToUses
|
||||||
and (TargetPackage.FindUsedUnit(ExtractFileNameOnly(NewFilename),NewPkgFile)<>nil)
|
and (TargetPackage.FindUsedUnit(ExtractFileNameOnly(NewFilename),NewPkgFile)<>nil)
|
||||||
then begin
|
then begin
|
||||||
// another unit with this name is already used
|
// another unit with this name is already used
|
||||||
NewPkgFile.AddToUsesPkgSection:=false;
|
NewPkgFile.AddToUsesPkgSection:=false;
|
||||||
end else begin
|
end else begin
|
||||||
NewPkgFile.AddToUsesPkgSection:=OldPkgFile.AddToUsesPkgSection;
|
NewPkgFile.AddToUsesPkgSection:=NewAddToUses;
|
||||||
end;
|
end;
|
||||||
|
end else if TargetProject<>nil then begin
|
||||||
|
// create new TUnitInfo
|
||||||
|
|
||||||
|
raise Exception.Create('implement me');
|
||||||
end else begin
|
end else begin
|
||||||
raise Exception.Create('implement me');
|
raise Exception.Create('implement me');
|
||||||
end;
|
end;
|
||||||
@ -2375,6 +2533,11 @@ var
|
|||||||
debugln(['MoveOrCopyFile delete "',OldPkgFile.Filename,'" pkg=',OldPkgFile.LazPackage.Name]);
|
debugln(['MoveOrCopyFile delete "',OldPkgFile.Filename,'" pkg=',OldPkgFile.LazPackage.Name]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
SrcPackage.DeleteFile(OldPkgFile);
|
SrcPackage.DeleteFile(OldPkgFile);
|
||||||
|
end else if OldProjFile<>nil then begin
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['MoveOrCopyFile delete "',OldProjFile.Filename,'"']);
|
||||||
|
{$ENDIF}
|
||||||
|
raise Exception.Create('implement me');
|
||||||
end else begin
|
end else begin
|
||||||
raise Exception.Create('implement me');
|
raise Exception.Create('implement me');
|
||||||
end;
|
end;
|
||||||
@ -2399,8 +2562,8 @@ var
|
|||||||
OldFilenames:=TStringList.Create;
|
OldFilenames:=TStringList.Create;
|
||||||
MovedFiles:=TFilenameToPointerTree.Create(false);
|
MovedFiles:=TFilenameToPointerTree.Create(false);
|
||||||
try
|
try
|
||||||
for i:=0 to PkgFiles.Count-1 do
|
for i:=0 to IDEFiles.Count-1 do
|
||||||
OldFilenames.Add(TPkgFile(PkgFiles[i]).GetFullFilename);
|
OldFilenames.Add(TIDEOwnedFile(IDEFiles[i]).GetFullFilename);
|
||||||
for i:=0 to OldFilenames.Count-1 do begin
|
for i:=0 to OldFilenames.Count-1 do begin
|
||||||
OldFilename:=OldFilenames[i];
|
OldFilename:=OldFilenames[i];
|
||||||
if not MoveOrCopyFile(OldFilename,MovedFiles) then exit;
|
if not MoveOrCopyFile(OldFilename,MovedFiles) then exit;
|
||||||
@ -2425,7 +2588,7 @@ begin
|
|||||||
Result:=false;
|
Result:=false;
|
||||||
|
|
||||||
DeleteNonExistingPkgFiles;
|
DeleteNonExistingPkgFiles;
|
||||||
if PkgFiles.Count=0 then begin
|
if IDEFiles.Count=0 then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles PkgFiles.Count=0']);
|
debugln(['TPackageEditorForm.MoveFiles PkgFiles.Count=0']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -2441,11 +2604,14 @@ begin
|
|||||||
TargetDirectory:=AppendPathDelim(TargetDirectory);
|
TargetDirectory:=AppendPathDelim(TargetDirectory);
|
||||||
|
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles Self=',TargetFilesEdit.FilesOwnerName,' Src=',SrcFilesEdit.FilesOwnerName,' Dir="',TargetDirectory,'" FileCount=',PkgFiles.Count]);
|
debugln(['TPackageEditorForm.MoveFiles Self=',TargetFilesEdit.FilesOwnerName,' Src=',SrcFilesEdit.FilesOwnerName,' Dir="',TargetDirectory,'" FileCount=',IDEFiles.Count]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
SrcPackage:=nil;
|
SrcPackage:=nil;
|
||||||
|
SrcProject:=nil;
|
||||||
if SrcFilesEdit.FilesOwner is TLazPackage then
|
if SrcFilesEdit.FilesOwner is TLazPackage then
|
||||||
SrcPackage:=TLazPackage(SrcFilesEdit.FilesOwner)
|
SrcPackage:=TLazPackage(SrcFilesEdit.FilesOwner)
|
||||||
|
else if SrcFilesEdit.FilesOwner is TProject then
|
||||||
|
SrcProject:=TProject(SrcFilesEdit.FilesOwner)
|
||||||
else begin
|
else begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles invalid src=',DbgSName(SrcFilesEdit.FilesOwner)]);
|
debugln(['TPackageEditorForm.MoveFiles invalid src=',DbgSName(SrcFilesEdit.FilesOwner)]);
|
||||||
@ -2453,11 +2619,14 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
TargetPackage:=nil;
|
TargetPackage:=nil;
|
||||||
|
TargetProject:=nil;
|
||||||
if TargetFilesEdit.FilesOwner is TLazPackage then
|
if TargetFilesEdit.FilesOwner is TLazPackage then
|
||||||
TargetPackage:=TLazPackage(TargetFilesEdit.FilesOwner)
|
TargetPackage:=TLazPackage(TargetFilesEdit.FilesOwner)
|
||||||
|
else if TargetFilesEdit.FilesOwner is TProject then
|
||||||
|
TargetProject:=TProject(TargetFilesEdit.FilesOwner)
|
||||||
else begin
|
else begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.MoveFiles invalid src=',DbgSName(TargetFilesEdit.FilesOwner)]);
|
debugln(['TPackageEditorForm.MoveFiles invalid target=',DbgSName(TargetFilesEdit.FilesOwner)]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
@ -2472,7 +2641,7 @@ begin
|
|||||||
|
|
||||||
IDEMessagesWindow.Clear;
|
IDEMessagesWindow.Clear;
|
||||||
|
|
||||||
NewFileToOldPkgFile:=TFilenameToPointerTree.Create(false);
|
NewFileToOldOwnedFile:=TFilenameToPointerTree.Create(false);
|
||||||
ChangedFilenames:=TFilenameToStringTree.Create(false);
|
ChangedFilenames:=TFilenameToStringTree.Create(false);
|
||||||
AllChangedFilenames:=TFilenameToStringTree.Create(false);
|
AllChangedFilenames:=TFilenameToStringTree.Create(false);
|
||||||
UnitFilenameToResFileList:=TFilenameToPointerTree.Create(false);
|
UnitFilenameToResFileList:=TFilenameToPointerTree.Create(false);
|
||||||
@ -2503,10 +2672,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
// ask for confirmation
|
// ask for confirmation
|
||||||
if PkgFiles.Count=MoveFileCount then begin
|
if IDEFiles.Count=MoveFileCount then begin
|
||||||
MsgResult:=IDEQuestionDialog(lisMoveOrCopyFiles,
|
MsgResult:=IDEQuestionDialog(lisMoveOrCopyFiles,
|
||||||
Format(lisMoveOrCopyFileSFromPackageToTheDirectoryOfPackage, [IntToStr(
|
Format(lisMoveOrCopyFileSFromToTheDirectoryOfPackage, [
|
||||||
MoveFileCount), SrcFilesEdit.FilesOwnerName, #13, TargetDirectory, #13, TargetFilesEdit.FilesOwnerName]),
|
IntToStr(MoveFileCount),
|
||||||
|
SrcFilesEdit.FilesOwnerName, #13,
|
||||||
|
TargetDirectory, #13,
|
||||||
|
TargetFilesEdit.FilesOwnerName]),
|
||||||
mtConfirmation, [100, lisMove, 101, lisCopy, mrCancel]);
|
mtConfirmation, [100, lisMove, 101, lisCopy, mrCancel]);
|
||||||
case MsgResult of
|
case MsgResult of
|
||||||
100: DeleteOld:=true;
|
100: DeleteOld:=true;
|
||||||
@ -2515,8 +2687,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
end else begin
|
end else begin
|
||||||
if IDEMessageDialog(lisMoveFiles2,
|
if IDEMessageDialog(lisMoveFiles2,
|
||||||
Format(lisMoveFileSFromPackageToTheDirectoryOfPackage, [IntToStr(
|
Format(lisMoveFileSFromToTheDirectoryOf, [
|
||||||
MoveFileCount), SrcFilesEdit.FilesOwnerName, #13, TargetDirectory, #13, TargetFilesEdit.FilesOwnerName]),
|
IntToStr(MoveFileCount),
|
||||||
|
SrcFilesEdit.FilesOwnerName, #13,
|
||||||
|
TargetDirectory, #13,
|
||||||
|
TargetFilesEdit.FilesOwnerName]),
|
||||||
mtConfirmation,[mbOk,mbCancel])<>mrOK
|
mtConfirmation,[mbOk,mbCancel])<>mrOK
|
||||||
then exit;
|
then exit;
|
||||||
DeleteOld:=true;
|
DeleteOld:=true;
|
||||||
@ -2545,17 +2720,11 @@ begin
|
|||||||
|
|
||||||
if (not SrcIsTarget) then begin
|
if (not SrcIsTarget) then begin
|
||||||
// files will be moved to another package/project
|
// files will be moved to another package/project
|
||||||
// => clear output directory of Src
|
if not ClearOldCompiledFiles then begin
|
||||||
if SrcPackage<>nil then begin
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
if PackageGraph.PreparePackageOutputDirectory(SrcPackage,true)<>mrOk then
|
debugln(['TPackageEditorForm.MoveFiles ClearOldCompiledFiles failed']);
|
||||||
begin
|
{$ENDIF}
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
exit;
|
||||||
debugln(['TPackageEditorForm.MoveFiles PreparePackageOutputDirectory failed']);
|
|
||||||
{$ENDIF}
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
end else begin
|
|
||||||
raise Exception.Create('implement me');
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2581,31 +2750,33 @@ begin
|
|||||||
UnitFilenameToResFileList.Free;
|
UnitFilenameToResFileList.Free;
|
||||||
AllChangedFilenames.Free;
|
AllChangedFilenames.Free;
|
||||||
ChangedFilenames.Free;
|
ChangedFilenames.Free;
|
||||||
NewFileToOldPkgFile.Free;
|
NewFileToOldOwnedFile.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPkgManager.CopyMoveFiles(Sender: TObject): boolean;
|
function TPkgManager.CopyMoveFiles(Sender: TObject): boolean;
|
||||||
var
|
var
|
||||||
SelDirDlg: TSelectDirectoryDialog;
|
SelDirDlg: TSelectDirectoryDialog;
|
||||||
PkgEdit: TPackageEditorForm;
|
FilesEdit: IFilesEditorInterface;
|
||||||
TargetDir: String;
|
TargetDir: String;
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
if Sender is TPackageEditorForm then begin
|
if Sender is TPackageEditorForm then
|
||||||
PkgEdit:=TPackageEditorForm(Sender);
|
FilesEdit:=TPackageEditorForm(Sender)
|
||||||
end else begin
|
else if Sender is TProjectInspectorForm then
|
||||||
|
FilesEdit:=TProjectInspectorForm(Sender)
|
||||||
|
else begin
|
||||||
debugln(['TPkgManager.CopyMoveFiles wrong Sender: ',DbgSName(Sender)]);
|
debugln(['TPkgManager.CopyMoveFiles wrong Sender: ',DbgSName(Sender)]);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
SelDirDlg:=TSelectDirectoryDialog.Create(nil);
|
SelDirDlg:=TSelectDirectoryDialog.Create(nil);
|
||||||
try
|
try
|
||||||
SelDirDlg.InitialDir:=PkgEdit.LazPackage.DirectoryExpanded;
|
SelDirDlg.InitialDir:=FilesEdit.FilesBaseDirectory;
|
||||||
SelDirDlg.Title:=lisSelectTargetDirectory;
|
SelDirDlg.Title:=lisSelectTargetDirectory;
|
||||||
SelDirDlg.Options:=SelDirDlg.Options+[ofPathMustExist,ofFileMustExist];
|
SelDirDlg.Options:=SelDirDlg.Options+[ofPathMustExist,ofFileMustExist];
|
||||||
if not SelDirDlg.Execute then exit;
|
if not SelDirDlg.Execute then exit;
|
||||||
TargetDir:=CleanAndExpandDirectory(SelDirDlg.FileName);
|
TargetDir:=CleanAndExpandDirectory(SelDirDlg.FileName);
|
||||||
Result:=MoveFiles(PkgEdit,PkgEdit,TargetDir);
|
Result:=MoveFiles(FilesEdit,FilesEdit,TargetDir);
|
||||||
finally
|
finally
|
||||||
SelDirDlg.Free;
|
SelDirDlg.Free;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user