mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-05 13:18:08 +02:00
ide: package editor: drop files: invalidate file cache, no warnings about duplicates
This commit is contained in:
parent
9c44d21c0e
commit
20d97cb590
@ -12628,6 +12628,7 @@ end;
|
|||||||
|
|
||||||
procedure TMainIDE.HandleApplicationActivate(Sender: TObject);
|
procedure TMainIDE.HandleApplicationActivate(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
|
//debugln(['TMainIDE.HandleApplicationActivate ']);
|
||||||
InvalidateFileStateCache;
|
InvalidateFileStateCache;
|
||||||
DoCheckFilesOnDisk;
|
DoCheckFilesOnDisk;
|
||||||
end;
|
end;
|
||||||
|
@ -3469,15 +3469,15 @@ begin
|
|||||||
NewFlags:=[];
|
NewFlags:=[];
|
||||||
NewUnitName:='';
|
NewUnitName:='';
|
||||||
if (NewFileType=pftUnit) then begin
|
if (NewFileType=pftUnit) then begin
|
||||||
InvalidateFileStateCache; // File may not be in cache in some d-n-d situations.
|
|
||||||
Code:=CodeToolBoss.LoadFile(aFilename,true,false);
|
Code:=CodeToolBoss.LoadFile(aFilename,true,false);
|
||||||
NewUnitName:=CodeToolBoss.GetSourceName(Code,false);
|
if Code<>nil then begin
|
||||||
Assert(NewUnitName<>'', 'TLazPackage.AddFileByName: NewUnitName is empty.');
|
NewUnitName:=CodeToolBoss.GetSourceName(Code,false);
|
||||||
//if NewUnitName='' then NewUnitName:=ExtractFileNameOnly(aFilename);
|
if NewUnitName='' then NewUnitName:=ExtractFileNameOnly(aFilename);
|
||||||
if FindUsedUnit(NewUnitName)=nil then
|
if FindUsedUnit(NewUnitName)=nil then
|
||||||
Include(NewFlags,pffAddToPkgUsesSection);
|
Include(NewFlags,pffAddToPkgUsesSection);
|
||||||
if CodeToolBoss.HasInterfaceRegisterProc(Code) then
|
if CodeToolBoss.HasInterfaceRegisterProc(Code) then
|
||||||
Include(NewFlags,pffHasRegisterProc);
|
Include(NewFlags,pffHasRegisterProc);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
AddFile(aFilename,NewUnitName,NewFileType,NewFlags,cpNormal);
|
AddFile(aFilename,NewUnitName,NewFileType,NewFlags,cpNormal);
|
||||||
CurDir:=ChompPathDelim(ExtractFilePath(aFilename));
|
CurDir:=ChompPathDelim(ExtractFilePath(aFilename));
|
||||||
|
@ -291,10 +291,10 @@ type
|
|||||||
procedure SetupComponents;
|
procedure SetupComponents;
|
||||||
procedure CreatePackageFileEditors;
|
procedure CreatePackageFileEditors;
|
||||||
function TreeViewGetImageIndex({%H-}Str: String; Data: TObject; var {%H-}AIsEnabled: Boolean): Integer;
|
function TreeViewGetImageIndex({%H-}Str: String; Data: TObject; var {%H-}AIsEnabled: Boolean): Integer;
|
||||||
procedure UpdatePending;
|
|
||||||
procedure StoreItemsTVSelectedNode(out OldView: TPETVSelectedView; StoreFilter: boolean);
|
procedure StoreItemsTVSelectedNode(out OldView: TPETVSelectedView; StoreFilter: boolean);
|
||||||
procedure RestoreItemsTVSelectedNode(const OldView: TPETVSelectedView);
|
procedure RestoreItemsTVSelectedNode(const OldView: TPETVSelectedView);
|
||||||
function CanUpdate(Flag: TPEFlag; Immediately: boolean): boolean;
|
function CanUpdate(Flag: TPEFlag; Immediately: boolean): boolean;
|
||||||
|
procedure UpdatePending;
|
||||||
procedure UpdateTitle(Immediately: boolean = false);
|
procedure UpdateTitle(Immediately: boolean = false);
|
||||||
procedure UpdateFiles(Immediately: boolean = false);
|
procedure UpdateFiles(Immediately: boolean = false);
|
||||||
procedure UpdateRemovedFiles(Immediately: boolean = false);
|
procedure UpdateRemovedFiles(Immediately: boolean = false);
|
||||||
@ -323,6 +323,7 @@ type
|
|||||||
ARect: TRect; {%H-}State: TOwnerDrawState);
|
ARect: TRect; {%H-}State: TOwnerDrawState);
|
||||||
procedure DisableI18NForLFMCheckBoxChange(Sender: TObject);
|
procedure DisableI18NForLFMCheckBoxChange(Sender: TObject);
|
||||||
procedure SelectFileNode(const AFileName: string);
|
procedure SelectFileNode(const AFileName: string);
|
||||||
|
procedure AddUserFiles(Filenames: TStrings);
|
||||||
protected
|
protected
|
||||||
fFlags: TPEFlags;
|
fFlags: TPEFlags;
|
||||||
procedure SetLazPackage(const AValue: TLazPackage); override;
|
procedure SetLazPackage(const AValue: TLazPackage); override;
|
||||||
@ -619,6 +620,7 @@ var
|
|||||||
NodeData: TPENodeData;
|
NodeData: TPENodeData;
|
||||||
Item: TObject;
|
Item: TObject;
|
||||||
YesToAll: TYesToAllList;
|
YesToAll: TYesToAllList;
|
||||||
|
r: TModalResult;
|
||||||
begin
|
begin
|
||||||
BeginUpdate;
|
BeginUpdate;
|
||||||
YesToAll:=TYesToAllList.Create;
|
YesToAll:=TYesToAllList.Create;
|
||||||
@ -631,9 +633,10 @@ begin
|
|||||||
begin // re-add file
|
begin // re-add file
|
||||||
PkgFile:=TPkgFile(Item);
|
PkgFile:=TPkgFile(Item);
|
||||||
AFilename:=PkgFile.GetFullFilename;
|
AFilename:=PkgFile.GetFullFilename;
|
||||||
if TPkgFileCheck.ReAddingUnit(LazPackage, PkgFile.FileType, AFilename,
|
r:=TPkgFileCheck.ReAddingFile(LazPackage, PkgFile.FileType, AFilename,
|
||||||
PackageEditors.OnGetIDEFileInfo,YesToAll)<>mrOk then
|
PackageEditors.OnGetIDEFileInfo,YesToAll);
|
||||||
exit;
|
if r=mrIgnore then continue;
|
||||||
|
if r<>mrOk then exit;
|
||||||
//PkgFile.Filename:=AFilename;
|
//PkgFile.Filename:=AFilename;
|
||||||
Assert(PkgFile.Filename=AFilename, 'TPackageEditorForm.ReAddMenuItemClick: Unexpected Filename.');
|
Assert(PkgFile.Filename=AFilename, 'TPackageEditorForm.ReAddMenuItemClick: Unexpected Filename.');
|
||||||
LazPackage.UnremovePkgFile(PkgFile);
|
LazPackage.UnremovePkgFile(PkgFile);
|
||||||
@ -642,7 +645,9 @@ begin
|
|||||||
Dependency:=TPkgDependency(Item);
|
Dependency:=TPkgDependency(Item);
|
||||||
// Re-add dependency
|
// Re-add dependency
|
||||||
fForcedFlags:=[pefNeedUpdateRemovedFiles,pefNeedUpdateRequiredPkgs];
|
fForcedFlags:=[pefNeedUpdateRemovedFiles,pefNeedUpdateRequiredPkgs];
|
||||||
if TPkgFileCheck.AddingDependency(LazPackage,Dependency,true)<>mrOk then exit;
|
r:=TPkgFileCheck.AddingDependency(LazPackage,Dependency,true);
|
||||||
|
if r=mrIgnore then continue;
|
||||||
|
if r<>mrOk then exit;
|
||||||
LazPackage.RemoveRemovedDependency(Dependency);
|
LazPackage.RemoveRemovedDependency(Dependency);
|
||||||
PackageGraph.AddDependencyToPackage(LazPackage,Dependency);
|
PackageGraph.AddDependencyToPackage(LazPackage,Dependency);
|
||||||
end;
|
end;
|
||||||
@ -1501,36 +1506,24 @@ procedure TPackageEditorForm.FormDropFiles(Sender: TObject;
|
|||||||
const FileNames: array of String);
|
const FileNames: array of String);
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
NewFilename, NewUnitPaths, NewIncPaths: String;
|
Files: TStringList;
|
||||||
YesToAll: TYesToAllList;
|
|
||||||
r: TModalResult;
|
|
||||||
begin
|
begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPackageEditorForm.FormDropFiles ',length(FileNames)]);
|
debugln(['TPackageEditorForm.FormDropFiles ',length(FileNames)]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
if length(FileNames)=0 then exit;
|
if length(FileNames)=0 then exit;
|
||||||
YesToAll:=TYesToAllList.Create;
|
|
||||||
BeginUpdate;
|
//debugln(['TPackageEditorForm.FormDropFiles ']);
|
||||||
|
// the Drop does not always trigger an application activate event -> invalidate here
|
||||||
|
InvalidateFileStateCache;
|
||||||
|
|
||||||
|
Files:=TStringList.Create;
|
||||||
try
|
try
|
||||||
NewUnitPaths:='';
|
|
||||||
NewIncPaths:='';
|
|
||||||
for i:=0 to high(Filenames) do
|
for i:=0 to high(Filenames) do
|
||||||
begin
|
Files.Add(FileNames[i]);
|
||||||
NewFilename:=FileNames[i];
|
AddUserFiles(Files);
|
||||||
r:=TPkgFileCheck.AddingUnit(LazPackage, NewFilename,
|
|
||||||
PackageEditors.OnGetIDEFileInfo,YesToAll);
|
|
||||||
if r=mrOK then
|
|
||||||
LazPackage.AddFileByName(NewFilename, NewUnitPaths, NewIncPaths)
|
|
||||||
else if r=mrAbort then
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
//UpdateAll(false);
|
|
||||||
// extend unit and include search path
|
|
||||||
if not LazPackage.ExtendUnitSearchPath(NewUnitPaths) then exit;
|
|
||||||
if not LazPackage.ExtendIncSearchPath(NewIncPaths) then exit;
|
|
||||||
finally
|
finally
|
||||||
YesToAll.Free;
|
Files.Free;
|
||||||
EndUpdate;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1596,6 +1589,45 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TPackageEditorForm.AddUserFiles(Filenames: TStrings);
|
||||||
|
var
|
||||||
|
YesToAll: TYesToAllList;
|
||||||
|
NewUnitPaths, NewIncPaths, NewFilename: String;
|
||||||
|
r: TModalResult;
|
||||||
|
i, j: Integer;
|
||||||
|
begin
|
||||||
|
if Filenames.Count=0 then exit;
|
||||||
|
YesToAll:=TYesToAllList.Create;
|
||||||
|
BeginUpdate;
|
||||||
|
try
|
||||||
|
NewUnitPaths:='';
|
||||||
|
NewIncPaths:='';
|
||||||
|
for i:=0 to Filenames.Count-1 do
|
||||||
|
begin
|
||||||
|
NewFilename:=ExpandFileNameUTF8(Filenames[i]);
|
||||||
|
j:=i-1;
|
||||||
|
while (j>=0) and (CompareFilenames(NewFilename,Filenames[j])<>0) do
|
||||||
|
dec(j);
|
||||||
|
if j>=0 then begin
|
||||||
|
debugln(['Warning: (lazarus) TPackageEditorForm.AddUserFiles ignoring duplicate "',NewFilename,'"']);
|
||||||
|
continue;
|
||||||
|
end;
|
||||||
|
r:=TPkgFileCheck.AddingFile(LazPackage, NewFilename,
|
||||||
|
PackageEditors.OnGetIDEFileInfo,YesToAll);
|
||||||
|
if r=mrOK then
|
||||||
|
LazPackage.AddFileByName(NewFilename, NewUnitPaths, NewIncPaths)
|
||||||
|
else if r=mrAbort then
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
// extend unit and include search path
|
||||||
|
if not LazPackage.ExtendUnitSearchPath(NewUnitPaths) then exit;
|
||||||
|
if not LazPackage.ExtendIncSearchPath(NewIncPaths) then exit;
|
||||||
|
finally
|
||||||
|
YesToAll.Free;
|
||||||
|
EndUpdate;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TPackageEditorForm.SaveAsClick(Sender: TObject);
|
procedure TPackageEditorForm.SaveAsClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoSave(true);
|
DoSave(true);
|
||||||
@ -1650,13 +1682,9 @@ procedure TPackageEditorForm.mnuAddDiskFileClick(Sender: TObject);
|
|||||||
var
|
var
|
||||||
OpenDialog: TOpenDialog;
|
OpenDialog: TOpenDialog;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
NewFilename, NewUnitPaths, NewIncPaths: String;
|
|
||||||
r: TModalResult;
|
|
||||||
YesToAll: TYesToAllList;
|
|
||||||
begin
|
begin
|
||||||
// is readonly
|
// is readonly
|
||||||
if TPkgFileCheck.ReadOnlyOk(LazPackage)<>mrOK then exit;
|
if TPkgFileCheck.ReadOnlyOk(LazPackage)<>mrOK then exit;
|
||||||
YesToAll:=nil;
|
|
||||||
OpenDialog:=TOpenDialog.Create(nil);
|
OpenDialog:=TOpenDialog.Create(nil);
|
||||||
try
|
try
|
||||||
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
||||||
@ -1674,26 +1702,9 @@ begin
|
|||||||
if OpenDialog.Execute then
|
if OpenDialog.Execute then
|
||||||
begin
|
begin
|
||||||
InputHistories.StoreFileDialogSettings(OpenDialog);
|
InputHistories.StoreFileDialogSettings(OpenDialog);
|
||||||
NewUnitPaths:='';
|
AddUserFiles(OpenDialog.Files);
|
||||||
NewIncPaths:='';
|
|
||||||
YesToAll:=TYesToAllList.Create;
|
|
||||||
for i:=0 to OpenDialog.Files.Count-1 do
|
|
||||||
begin
|
|
||||||
NewFilename:=OpenDialog.Files[i];
|
|
||||||
r:=TPkgFileCheck.AddingUnit(LazPackage, NewFilename,
|
|
||||||
PackageEditors.OnGetIDEFileInfo,YesToAll);
|
|
||||||
if r=mrOK then
|
|
||||||
LazPackage.AddFileByName(NewFilename, NewUnitPaths, NewIncPaths)
|
|
||||||
else if r=mrAbort then
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
//UpdateAll(false);
|
|
||||||
// extend unit and include search path
|
|
||||||
if not LazPackage.ExtendUnitSearchPath(NewUnitPaths) then exit;
|
|
||||||
if not LazPackage.ExtendIncSearchPath(NewIncPaths) then exit;
|
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
YesToAll.Free;
|
|
||||||
OpenDialog.Free;
|
OpenDialog.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -11,7 +11,7 @@ uses
|
|||||||
// LazUtils
|
// LazUtils
|
||||||
FileUtil, LazLoggerBase, LazFileUtils,
|
FileUtil, LazLoggerBase, LazFileUtils,
|
||||||
// Codetools
|
// Codetools
|
||||||
CodeToolManager, CodeCache,
|
CodeToolManager, CodeCache, BasicCodeTools,
|
||||||
// BuildIntf
|
// BuildIntf
|
||||||
PackageIntf, PackageDependencyIntf, ComponentReg,
|
PackageIntf, PackageDependencyIntf, ComponentReg,
|
||||||
// IDEIntf
|
// IDEIntf
|
||||||
@ -27,6 +27,8 @@ type
|
|||||||
|
|
||||||
TYesToAllList = class(TStringList)
|
TYesToAllList = class(TStringList)
|
||||||
public
|
public
|
||||||
|
WarnFileNotFound: boolean;
|
||||||
|
WarnAlreadyAdded: boolean;
|
||||||
function Inc(Name: string): integer;
|
function Inc(Name: string): integer;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -34,7 +36,7 @@ type
|
|||||||
|
|
||||||
TProjPackFileCheck = class
|
TProjPackFileCheck = class
|
||||||
protected
|
protected
|
||||||
class function UnitNameOk(const AFilename, AUnitFilename: string): TModalResult;
|
class function UnitNameOk(const AFilename, AnUnitName: string): TModalResult;
|
||||||
public
|
public
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -47,12 +49,12 @@ type
|
|||||||
class function PartOfProjectOk(const AFilename: string;
|
class function PartOfProjectOk(const AFilename: string;
|
||||||
OnGetIDEFileInfo: TGetIDEFileStateEvent; YesToAll: TYesToAllList): TModalResult;
|
OnGetIDEFileInfo: TGetIDEFileStateEvent; YesToAll: TYesToAllList): TModalResult;
|
||||||
class function UniqueUnitOk(LazPackage: TLazPackage;
|
class function UniqueUnitOk(LazPackage: TLazPackage;
|
||||||
const AUnitFilename: string; YesToAll: TYesToAllList): TModalResult;
|
const AnUnitName: string; YesToAll: TYesToAllList): TModalResult;
|
||||||
public
|
public
|
||||||
class function ReadOnlyOk(LazPackage: TLazPackage): TModalResult;
|
class function ReadOnlyOk(LazPackage: TLazPackage): TModalResult;
|
||||||
class function AddingUnit(LazPackage: TLazPackage; const AFilename: string;
|
class function AddingFile(LazPackage: TLazPackage; const AFilename: string;
|
||||||
OnGetIDEFileInfo: TGetIDEFileStateEvent; YesToAll: TYesToAllList): TModalResult; // ok=success, cancel=fail, abort=fail and stop multi add
|
OnGetIDEFileInfo: TGetIDEFileStateEvent; YesToAll: TYesToAllList): TModalResult; // ok=success, cancel=fail, abort=fail and stop multi add
|
||||||
class function ReAddingUnit(LazPackage: TLazPackage;
|
class function ReAddingFile(LazPackage: TLazPackage;
|
||||||
FileTyp: TPkgFileType; const AFilename: string;
|
FileTyp: TPkgFileType; const AFilename: string;
|
||||||
OnGetIDEFileInfo: TGetIDEFileStateEvent; YesToAll: TYesToAllList): TModalResult;
|
OnGetIDEFileInfo: TGetIDEFileStateEvent; YesToAll: TYesToAllList): TModalResult;
|
||||||
class function AddingDependency(LazPackage: TLazPackage;
|
class function AddingDependency(LazPackage: TLazPackage;
|
||||||
@ -98,33 +100,35 @@ end;
|
|||||||
|
|
||||||
{ TProjPackFileCheck }
|
{ TProjPackFileCheck }
|
||||||
|
|
||||||
class function TProjPackFileCheck.UnitNameOk(const AFilename, AUnitFilename: string): TModalResult;
|
class function TProjPackFileCheck.UnitNameOk(const AFilename, AnUnitName: string): TModalResult;
|
||||||
// This is called only for Pascal units.
|
// This is called only for Pascal units.
|
||||||
var
|
var
|
||||||
Unit_Name: string;
|
SrcUnitName: string;
|
||||||
CodeBuffer: TCodeBuffer;
|
CodeBuffer: TCodeBuffer;
|
||||||
begin
|
begin
|
||||||
Result:=mrCancel;
|
Result:=mrCancel;
|
||||||
// valid unitname
|
// check valid unitname
|
||||||
Unit_Name:='';
|
if not IsValidUnitName(AnUnitName) then
|
||||||
CodeBuffer:=CodeToolBoss.LoadFile(AFilename,true,false);
|
|
||||||
if CodeBuffer<>nil then begin
|
|
||||||
Unit_Name:=CodeToolBoss.GetSourceName(CodeBuffer,false);
|
|
||||||
// Unit_Name can be empty if Codetools had problems parsing the source.
|
|
||||||
if (Unit_Name<>'')
|
|
||||||
and (CompareText(StringReplace(Unit_Name,'&','',[rfReplaceAll]), AUnitFilename)<>0)
|
|
||||||
and (IDEMessageDialog(lisA2PInvalidUnitName,
|
|
||||||
Format(lisA2PTheUnitNameAndFilenameDiffer,
|
|
||||||
[Unit_Name,LineEnding,AUnitFilename]),
|
|
||||||
mtError,[mbIgnore,mbCancel]) <> mrIgnore) then exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if not IsValidUnitName(AUnitFilename) then
|
|
||||||
begin
|
begin
|
||||||
IDEMessageDialog(lisA2PFileNotUnit, Format(lisA2PisNotAValidUnitName,[AUnitFilename]),
|
IDEMessageDialog(lisA2PFileNotUnit, Format(lisA2PisNotAValidUnitName,[AnUnitName]),
|
||||||
mtWarning,[mbCancel]);
|
mtWarning,[mbCancel]);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
// check file and source match
|
||||||
|
SrcUnitName:='';
|
||||||
|
CodeBuffer:=CodeToolBoss.LoadFile(AFilename,true,false);
|
||||||
|
if CodeBuffer<>nil then begin
|
||||||
|
SrcUnitName:=CodeToolBoss.GetSourceName(CodeBuffer,false);
|
||||||
|
// SrcUnitName can be empty if Codetools had problems parsing the source.
|
||||||
|
if (SrcUnitName<>'')
|
||||||
|
and (CompareText(RemoveAmpersands(SrcUnitName), AnUnitName)<>0)
|
||||||
|
and (IDEMessageDialog(lisA2PInvalidUnitName,
|
||||||
|
Format(lisA2PTheUnitNameAndFilenameDiffer,
|
||||||
|
[SrcUnitName,LineEnding,AnUnitName]),
|
||||||
|
mtError,[mbIgnore,mbCancel]) <> mrIgnore) then exit;
|
||||||
|
end;
|
||||||
|
|
||||||
// Pascal extension
|
// Pascal extension
|
||||||
Assert(FilenameHasPascalExt(AFilename), 'TPkgFileCheck.UnitNameOk: Wrong extension.');
|
Assert(FilenameHasPascalExt(AFilename), 'TPkgFileCheck.UnitNameOk: Wrong extension.');
|
||||||
Result:=mrOK;
|
Result:=mrOK;
|
||||||
@ -159,6 +163,7 @@ begin
|
|||||||
// check if file exists
|
// check if file exists
|
||||||
if not FileExistsUTF8(AFilename) then
|
if not FileExistsUTF8(AFilename) then
|
||||||
begin
|
begin
|
||||||
|
if not YesToAll.WarnFileNotFound then exit(mrIgnore);
|
||||||
if YesToAll.Inc('FileNotFound')<4 then
|
if YesToAll.Inc('FileNotFound')<4 then
|
||||||
IDEMessageDialog(lisFileNotFound, Format(lisPkgMangFileNotFound,[AFilename]),
|
IDEMessageDialog(lisFileNotFound, Format(lisPkgMangFileNotFound,[AFilename]),
|
||||||
mtError, [mbCancel]);
|
mtError, [mbCancel]);
|
||||||
@ -168,6 +173,7 @@ begin
|
|||||||
PkgFile:=LazPackage.FindPkgFile(AFilename,true,false);
|
PkgFile:=LazPackage.FindPkgFile(AFilename,true,false);
|
||||||
if PkgFile<>nil then
|
if PkgFile<>nil then
|
||||||
begin
|
begin
|
||||||
|
if not YesToAll.WarnAlreadyAdded then exit(mrIgnore);
|
||||||
if YesToAll.Inc('FileAlreadyInPackage')>2 then exit;
|
if YesToAll.Inc('FileAlreadyInPackage')>2 then exit;
|
||||||
Msg:=Format(lisA2PFileAlreadyExistsInThePackage, [AFilename]);
|
Msg:=Format(lisA2PFileAlreadyExistsInThePackage, [AFilename]);
|
||||||
if PkgFile.Filename<>AFilename then
|
if PkgFile.Filename<>AFilename then
|
||||||
@ -199,7 +205,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
class function TPkgFileCheck.UniqueUnitOk(LazPackage: TLazPackage;
|
class function TPkgFileCheck.UniqueUnitOk(LazPackage: TLazPackage;
|
||||||
const AUnitFilename: string; YesToAll: TYesToAllList): TModalResult;
|
const AnUnitName: string; YesToAll: TYesToAllList): TModalResult;
|
||||||
// This is called only for Pascal units.
|
// This is called only for Pascal units.
|
||||||
var
|
var
|
||||||
PkgFile: TPkgFile;
|
PkgFile: TPkgFile;
|
||||||
@ -207,7 +213,7 @@ var
|
|||||||
begin
|
begin
|
||||||
Result:=mrCancel;
|
Result:=mrCancel;
|
||||||
// check if unitname already exists in package
|
// check if unitname already exists in package
|
||||||
PkgFile:=LazPackage.FindUnit(AUnitFilename,true);
|
PkgFile:=LazPackage.FindUnit(AnUnitName,true);
|
||||||
if PkgFile<>nil then
|
if PkgFile<>nil then
|
||||||
begin
|
begin
|
||||||
// a unit with this name already exists in this package => warn
|
// a unit with this name already exists in this package => warn
|
||||||
@ -215,12 +221,12 @@ begin
|
|||||||
if i=1 then
|
if i=1 then
|
||||||
begin
|
begin
|
||||||
if IDEMessageDialog(lisA2PUnitnameAlreadyExists,
|
if IDEMessageDialog(lisA2PUnitnameAlreadyExists,
|
||||||
Format(lisA2PTheUnitnameAlreadyExistsInThisPackage,[AUnitFilename]),
|
Format(lisA2PTheUnitnameAlreadyExistsInThisPackage,[AnUnitName]),
|
||||||
mtError,[mbCancel,mbIgnore]) <> mrIgnore then
|
mtError,[mbCancel,mbIgnore]) <> mrIgnore then
|
||||||
exit;
|
exit;
|
||||||
end else if i<100000 then begin
|
end else if i<100000 then begin
|
||||||
if IDEMessageDialog(lisA2PUnitnameAlreadyExists,
|
if IDEMessageDialog(lisA2PUnitnameAlreadyExists,
|
||||||
Format(lisA2PTheUnitnameAlreadyExistsInThisPackage,[AUnitFilename]),
|
Format(lisA2PTheUnitnameAlreadyExistsInThisPackage,[AnUnitName]),
|
||||||
mtError,[mbCancel,mbYesToAll]) = mrYesToAll then
|
mtError,[mbCancel,mbYesToAll]) = mrYesToAll then
|
||||||
YesToAll.Values['UnitnameExistsInPkg']:='100000'
|
YesToAll.Values['UnitnameExistsInPkg']:='100000'
|
||||||
else
|
else
|
||||||
@ -228,7 +234,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
PkgFile:=PackageGraph.FindUnit(LazPackage,AUnitFilename,true,true);
|
PkgFile:=PackageGraph.FindUnit(LazPackage,AnUnitName,true,true);
|
||||||
if (PkgFile<>nil) and (PkgFile.LazPackage<>LazPackage) then
|
if (PkgFile<>nil) and (PkgFile.LazPackage<>LazPackage) then
|
||||||
begin
|
begin
|
||||||
// there is already a unit with this name in another package => warn
|
// there is already a unit with this name in another package => warn
|
||||||
@ -237,13 +243,13 @@ begin
|
|||||||
begin
|
begin
|
||||||
if IDEMessageDialog(lisA2PUnitnameAlreadyExists,
|
if IDEMessageDialog(lisA2PUnitnameAlreadyExists,
|
||||||
Format(lisA2PTheUnitnameAlreadyExistsInThePackage,
|
Format(lisA2PTheUnitnameAlreadyExistsInThePackage,
|
||||||
[AUnitFilename, LineEnding, PkgFile.LazPackage.IDAsString]),
|
[AnUnitName, LineEnding, PkgFile.LazPackage.IDAsString]),
|
||||||
mtWarning,[mbCancel,mbIgnore]) <> mrIgnore then
|
mtWarning,[mbCancel,mbIgnore]) <> mrIgnore then
|
||||||
exit;
|
exit;
|
||||||
end else if i<100000 then begin
|
end else if i<100000 then begin
|
||||||
if IDEMessageDialog(lisA2PUnitnameAlreadyExists,
|
if IDEMessageDialog(lisA2PUnitnameAlreadyExists,
|
||||||
Format(lisA2PTheUnitnameAlreadyExistsInThePackage,
|
Format(lisA2PTheUnitnameAlreadyExistsInThePackage,
|
||||||
[AUnitFilename, LineEnding, PkgFile.LazPackage.IDAsString]),
|
[AnUnitName, LineEnding, PkgFile.LazPackage.IDAsString]),
|
||||||
mtWarning,[mbCancel,mbYesToAll]) = mrYesToAll then
|
mtWarning,[mbCancel,mbYesToAll]) = mrYesToAll then
|
||||||
YesToAll.Values['UnitnameExistsInOtherPkg']:='100000'
|
YesToAll.Values['UnitnameExistsInOtherPkg']:='100000'
|
||||||
else
|
else
|
||||||
@ -252,18 +258,18 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
// check if unitname is a componentclass
|
// check if unitname is a componentclass
|
||||||
if IDEComponentPalette.FindRegComponent(AUnitFilename)<>nil then
|
if IDEComponentPalette.FindRegComponent(AnUnitName)<>nil then
|
||||||
begin
|
begin
|
||||||
i:=YesToAll.Inc('UnitnameIsCompName');
|
i:=YesToAll.Inc('UnitnameIsCompName');
|
||||||
if i=1 then
|
if i=1 then
|
||||||
begin
|
begin
|
||||||
if IDEMessageDialog(lisA2PAmbiguousUnitName,
|
if IDEMessageDialog(lisA2PAmbiguousUnitName,
|
||||||
Format(lisA2PTheUnitNameIsTheSameAsAnRegisteredComponent,[AUnitFilename,LineEnding]),
|
Format(lisA2PTheUnitNameIsTheSameAsAnRegisteredComponent,[AnUnitName,LineEnding]),
|
||||||
mtWarning,[mbCancel,mbIgnore]) <> mrIgnore then
|
mtWarning,[mbCancel,mbIgnore]) <> mrIgnore then
|
||||||
exit;
|
exit;
|
||||||
end else if i<100000 then begin
|
end else if i<100000 then begin
|
||||||
if IDEMessageDialog(lisA2PAmbiguousUnitName,
|
if IDEMessageDialog(lisA2PAmbiguousUnitName,
|
||||||
Format(lisA2PTheUnitNameIsTheSameAsAnRegisteredComponent,[AUnitFilename,LineEnding]),
|
Format(lisA2PTheUnitNameIsTheSameAsAnRegisteredComponent,[AnUnitName,LineEnding]),
|
||||||
mtWarning,[mbCancel,mbYesToAll]) = mrYesToAll then
|
mtWarning,[mbCancel,mbYesToAll]) = mrYesToAll then
|
||||||
YesToAll.Values['UnitnameIsCompName']:='100000'
|
YesToAll.Values['UnitnameIsCompName']:='100000'
|
||||||
else
|
else
|
||||||
@ -286,12 +292,12 @@ begin
|
|||||||
Result:=mrOK;
|
Result:=mrOK;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class function TPkgFileCheck.AddingUnit(LazPackage: TLazPackage;
|
class function TPkgFileCheck.AddingFile(LazPackage: TLazPackage;
|
||||||
const AFilename: string; OnGetIDEFileInfo: TGetIDEFileStateEvent;
|
const AFilename: string; OnGetIDEFileInfo: TGetIDEFileStateEvent;
|
||||||
YesToAll: TYesToAllList): TModalResult;
|
YesToAll: TYesToAllList): TModalResult;
|
||||||
var
|
var
|
||||||
NewFileType: TPkgFileType;
|
NewFileType: TPkgFileType;
|
||||||
UnitFilename: String;
|
AnUnitName: String;
|
||||||
begin
|
begin
|
||||||
Assert(FilenameIsAbsolute(AFilename), 'TPkgFileCheck.AddingUnit: Not absolute Filename.');
|
Assert(FilenameIsAbsolute(AFilename), 'TPkgFileCheck.AddingUnit: Not absolute Filename.');
|
||||||
// file exists
|
// file exists
|
||||||
@ -304,22 +310,22 @@ begin
|
|||||||
NewFileType:=FileNameToPkgFileType(AFilename);
|
NewFileType:=FileNameToPkgFileType(AFilename);
|
||||||
if NewFileType<>pftUnit then
|
if NewFileType<>pftUnit then
|
||||||
exit(mrOK); // Further checks only for Pascal units.
|
exit(mrOK); // Further checks only for Pascal units.
|
||||||
UnitFilename:=ExtractFileNameOnly(AFilename);
|
AnUnitName:=ExtractFileNameOnly(AFilename);
|
||||||
// unitname
|
// unitname
|
||||||
Result:=UnitNameOk(AFilename, UnitFilename);
|
Result:=UnitNameOk(AFilename, AnUnitName);
|
||||||
if Result<>mrOK then exit;
|
if Result<>mrOK then exit;
|
||||||
// unit is unique
|
// unit is unique
|
||||||
Result:=UniqueUnitOk(LazPackage, UnitFilename, YesToAll);
|
Result:=UniqueUnitOk(LazPackage, AnUnitName, YesToAll);
|
||||||
if Result<>mrOK then exit;
|
if Result<>mrOK then exit;
|
||||||
Result:=mrOK; // ok
|
Result:=mrOK; // ok
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class function TPkgFileCheck.ReAddingUnit(LazPackage: TLazPackage;
|
class function TPkgFileCheck.ReAddingFile(LazPackage: TLazPackage;
|
||||||
FileTyp: TPkgFileType; const AFilename: string;
|
FileTyp: TPkgFileType; const AFilename: string;
|
||||||
OnGetIDEFileInfo: TGetIDEFileStateEvent; YesToAll: TYesToAllList
|
OnGetIDEFileInfo: TGetIDEFileStateEvent; YesToAll: TYesToAllList
|
||||||
): TModalResult;
|
): TModalResult;
|
||||||
var
|
var
|
||||||
UnitFilename: String;
|
AnUnitName: String;
|
||||||
begin
|
begin
|
||||||
Assert(FilenameIsAbsolute(AFilename), 'TPkgFileCheck.ReAddingUnit: Not absolute Filename.');
|
Assert(FilenameIsAbsolute(AFilename), 'TPkgFileCheck.ReAddingUnit: Not absolute Filename.');
|
||||||
// file exists
|
// file exists
|
||||||
@ -330,12 +336,12 @@ begin
|
|||||||
if Result<>mrOK then exit;
|
if Result<>mrOK then exit;
|
||||||
if not (FileTyp in [pftUnit, pftMainUnit, pftVirtualUnit]) then
|
if not (FileTyp in [pftUnit, pftMainUnit, pftVirtualUnit]) then
|
||||||
exit(mrOK); // Further checks only for Pascal units.
|
exit(mrOK); // Further checks only for Pascal units.
|
||||||
UnitFilename:=ExtractFileNameOnly(AFilename);
|
AnUnitName:=ExtractFileNameOnly(AFilename);
|
||||||
// unitname
|
// unitname
|
||||||
Result:=UnitNameOk(AFilename, UnitFilename);
|
Result:=UnitNameOk(AFilename, AnUnitName);
|
||||||
if Result<>mrOK then exit;
|
if Result<>mrOK then exit;
|
||||||
// unit is unique
|
// unit is unique
|
||||||
Result:=UniqueUnitOk(LazPackage, UnitFilename, YesToAll);
|
Result:=UniqueUnitOk(LazPackage, AnUnitName, YesToAll);
|
||||||
if Result<>mrOK then exit;
|
if Result<>mrOK then exit;
|
||||||
Result:=mrOK; // ok
|
Result:=mrOK; // ok
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user