mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-19 12:29:30 +02:00
Package Editor: A new button for adding files from file system easily. Issue #24337.
git-svn-id: trunk@46312 -
This commit is contained in:
parent
e187809d73
commit
3c1ac1d84c
@ -13,7 +13,7 @@ object AddToPackageDlg: TAddToPackageDlg
|
||||
OnDestroy = FormDestroy
|
||||
OnKeyDown = AddToPackageDlgKeyDown
|
||||
Position = poScreenCenter
|
||||
LCLVersion = '1.1'
|
||||
LCLVersion = '1.3'
|
||||
object PageControl1: TPageControl
|
||||
Left = 0
|
||||
Height = 282
|
||||
@ -387,20 +387,20 @@ object AddToPackageDlg: TAddToPackageDlg
|
||||
end
|
||||
object AddFilesBtnPanel: TPanel
|
||||
Left = 0
|
||||
Height = 40
|
||||
Top = 209
|
||||
Height = 39
|
||||
Top = 218
|
||||
Width = 654
|
||||
Align = alBottom
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 40
|
||||
ClientHeight = 39
|
||||
ClientWidth = 654
|
||||
TabOrder = 1
|
||||
object FilesShortenButton: TBitBtn
|
||||
Left = 250
|
||||
Height = 28
|
||||
Left = 108
|
||||
Height = 27
|
||||
Top = 6
|
||||
Width = 135
|
||||
Width = 126
|
||||
Align = alLeft
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 6
|
||||
@ -409,10 +409,10 @@ object AddToPackageDlg: TAddToPackageDlg
|
||||
TabOrder = 0
|
||||
end
|
||||
object FilesDeleteButton: TBitBtn
|
||||
Left = 391
|
||||
Height = 28
|
||||
Left = 240
|
||||
Height = 27
|
||||
Top = 6
|
||||
Width = 126
|
||||
Width = 118
|
||||
Align = alLeft
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 6
|
||||
@ -420,29 +420,17 @@ object AddToPackageDlg: TAddToPackageDlg
|
||||
OnClick = FilesDeleteButtonClick
|
||||
TabOrder = 1
|
||||
end
|
||||
object FilesBrowseButton: TBitBtn
|
||||
Left = 6
|
||||
Height = 28
|
||||
Top = 6
|
||||
Width = 130
|
||||
Align = alLeft
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 6
|
||||
Caption = 'FilesBrowseButton'
|
||||
OnClick = FilesBrowseButtonClick
|
||||
TabOrder = 2
|
||||
end
|
||||
object FilesDirButton: TBitBtn
|
||||
Left = 142
|
||||
Height = 28
|
||||
Left = 6
|
||||
Height = 27
|
||||
Top = 6
|
||||
Width = 102
|
||||
Width = 96
|
||||
Align = alLeft
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 6
|
||||
Caption = 'FilesDirButton'
|
||||
OnClick = FilesDirButtonClick
|
||||
TabOrder = 3
|
||||
TabOrder = 2
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -81,7 +81,6 @@ type
|
||||
{ TAddToPackageDlg }
|
||||
|
||||
TAddToPackageDlg = class(TForm)
|
||||
FilesBrowseButton: TBitBtn;
|
||||
FilesDirButton: TBitBtn;
|
||||
// PageControl1
|
||||
PageControl1: TPageControl;
|
||||
@ -136,7 +135,6 @@ type
|
||||
procedure ComponentUnitNameEditChange(Sender: TObject);
|
||||
procedure DependPkgNameComboBoxChange(Sender: TObject);
|
||||
procedure FilesAddButtonClick(Sender: TObject);
|
||||
procedure FilesBrowseButtonClick(Sender: TObject);
|
||||
procedure FilesDeleteButtonClick(Sender: TObject);
|
||||
procedure FilesDirButtonClick(Sender: TObject);
|
||||
procedure FilesListViewSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
|
||||
@ -679,49 +677,6 @@ begin
|
||||
ModalResult:=mrOk;
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.FilesBrowseButtonClick(Sender: TObject);
|
||||
var
|
||||
OpenDialog: TOpenDialog;
|
||||
AFilename: string;
|
||||
i: Integer;
|
||||
NewListItem: TListItem;
|
||||
NewPgkFileType: TPkgFileType;
|
||||
begin
|
||||
OpenDialog:=TOpenDialog.Create(nil);
|
||||
try
|
||||
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
||||
OpenDialog.InitialDir:=LazPackage.GetFileDialogInitialDir(OpenDialog.InitialDir);
|
||||
OpenDialog.Title:=lisOpenFile;
|
||||
OpenDialog.Options:=OpenDialog.Options
|
||||
+[ofFileMustExist,ofPathMustExist,ofAllowMultiSelect];
|
||||
OpenDialog.Filter:=dlgAllFiles+' ('+GetAllFilesMask+')|'+GetAllFilesMask
|
||||
+'|'+lisLazarusUnit+' (*.pas;*.pp)|*.pas;*.pp'
|
||||
+'|'+lisLazarusProject+' (*.lpi)|*.lpi'
|
||||
+'|'+lisLazarusForm+' (*.lfm;*.dfm)|*.lfm;*.dfm'
|
||||
+'|'+lisLazarusPackage+' (*.lpk)|*.lpk'
|
||||
+'|'+lisLazarusProjectSource+' (*.lpr)|*.lpr';
|
||||
if OpenDialog.Execute then begin
|
||||
for i:=0 to OpenDialog.Files.Count-1 do begin
|
||||
AFilename:=CleanAndExpandFilename(OpenDialog.Files[i]);
|
||||
if FileExistsUTF8(AFilename) then begin
|
||||
if FindFileInFilesList(AFilename)<0 then begin
|
||||
LazPackage.ShortenFilename(AFilename,true);
|
||||
NewListItem:=FilesListView.Items.Add;
|
||||
NewListItem.Caption:=AFilename;
|
||||
NewPgkFileType:=FileNameToPkgFileType(AFilename);
|
||||
NewListItem.SubItems.Add(GetPkgFileTypeLocalizedName(NewPgkFileType));
|
||||
NewListItem.Selected:=True;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
InputHistories.StoreFileDialogSettings(OpenDialog);
|
||||
CheckFilesButtonsOk;
|
||||
finally
|
||||
OpenDialog.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAddToPackageDlg.FilesDeleteButtonClick(Sender: TObject);
|
||||
var
|
||||
i: Integer;
|
||||
@ -1173,11 +1128,6 @@ begin
|
||||
CurColumn.Caption:=dlgEnvType;
|
||||
end;
|
||||
|
||||
with FilesBrowseButton do begin
|
||||
Caption:=lisA2PAddFiles;
|
||||
LoadGlyphFromResourceName(HInstance, 'laz_add');
|
||||
end;
|
||||
|
||||
with FilesDirButton do begin
|
||||
Caption:=lisAddFilesInDirectory;
|
||||
LoadGlyphFromResourceName(HInstance, 'pkg_files');
|
||||
|
@ -43,8 +43,8 @@ uses
|
||||
FormEditingIntf, PackageIntf, IDEHelpIntf, IDEOptionsIntf, SrcEditorIntf,
|
||||
IDEMsgIntf, IDEExternToolIntf,
|
||||
// IDE
|
||||
IDEDialogs, IDEProcs, LazarusIDEStrConsts, IDEDefs,
|
||||
CompilerOptions, ComponentReg, UnitResources, EnvironmentOpts, DialogProcs,
|
||||
IDEDialogs, IDEProcs, LazarusIDEStrConsts, IDEDefs, CompilerOptions,
|
||||
ComponentReg, UnitResources, EnvironmentOpts, DialogProcs, InputHistory,
|
||||
PackageDefs, AddToPackageDlg, PkgVirtualUnitEditor, MissingPkgFilesDlg,
|
||||
PackageSystem, CleanPkgDeps;
|
||||
|
||||
@ -192,6 +192,7 @@ type
|
||||
CompileBitBtn: TToolButton;
|
||||
UseBitBtn: TToolButton;
|
||||
AddBitBtn: TToolButton;
|
||||
AddMoreBitBtn: TToolButton;
|
||||
RemoveBitBtn: TToolButton;
|
||||
OptionsBitBtn: TToolButton;
|
||||
MoreBitBtn: TToolButton;
|
||||
@ -218,6 +219,7 @@ type
|
||||
ItemsPopupMenu: TPopupMenu;
|
||||
MorePopupMenu: TPopupMenu;
|
||||
procedure AddBitBtnClick(Sender: TObject);
|
||||
procedure AddMoreBitBtnClick(Sender: TObject);
|
||||
procedure AddToProjectClick(Sender: TObject);
|
||||
procedure AddToUsesPkgSectionCheckBoxChange(Sender: TObject);
|
||||
procedure ApplyDependencyButtonClick(Sender: TObject);
|
||||
@ -301,6 +303,7 @@ type
|
||||
FFirstNodeData: array[TPENodeType] of TPENodeData;
|
||||
fUpdateLock: integer;
|
||||
fForcedFlags: TPEFlags;
|
||||
function AddOneFile(aFilename: string; var NewUnitPaths, NewIncPaths: String): TModalResult;
|
||||
procedure FreeNodeData(Typ: TPENodeType);
|
||||
function CreateNodeData(Typ: TPENodeType; aName: string; aRemoved: boolean): TPENodeData;
|
||||
procedure SetDependencyDefaultFilename(AsPreferred: boolean);
|
||||
@ -1361,9 +1364,8 @@ var
|
||||
HasRegister: Boolean;
|
||||
NewFlags: TPkgFileFlags;
|
||||
Code: TCodeBuffer;
|
||||
NewUnitPaths: String;
|
||||
NewUnitPaths, NewIncPaths: String;
|
||||
CurDir: String;
|
||||
NewIncPaths: String;
|
||||
begin
|
||||
{$IFDEF VerbosePkgEditDrag}
|
||||
debugln(['TPackageEditorForm.FormDropFiles ',length(FileNames)]);
|
||||
@ -1373,37 +1375,9 @@ begin
|
||||
try
|
||||
NewUnitPaths:='';
|
||||
NewIncPaths:='';
|
||||
for i:=0 to high(Filenames) do begin
|
||||
NewFilename:=CleanAndExpandFilename(FileNames[i]);
|
||||
if not FileExistsUTF8(NewFilename) then continue;
|
||||
if DirPathExists(NewFilename) then continue;
|
||||
if LazPackage.FindPkgFile(NewFilename,true,false)<>nil then continue;
|
||||
NewFileType:=FileNameToPkgFileType(NewFilename);
|
||||
NewFlags:=[];
|
||||
HasRegister:=false;
|
||||
NewUnitName:='';
|
||||
if (NewFileType=pftUnit) then begin
|
||||
Code:=CodeToolBoss.LoadFile(NewFilename,true,false);
|
||||
NewUnitName:=CodeToolBoss.GetSourceName(Code,false);
|
||||
if NewUnitName='' then
|
||||
NewUnitName:=ExtractFileNameOnly(NewFilename);
|
||||
if LazPackage.FindUsedUnit(NewUnitName)=nil then
|
||||
Include(NewFlags,pffAddToPkgUsesSection);
|
||||
CodeToolBoss.HasInterfaceRegisterProc(Code,HasRegister);
|
||||
if HasRegister then
|
||||
Include(NewFlags,pffHasRegisterProc);
|
||||
end;
|
||||
{$IFDEF VerbosePkgEditDrag}
|
||||
debugln(['TPackageEditorForm.FormDropFiles Adding files: ',NewFilename,' Unit=',NewUnitName,' Type=',PkgFileTypeIdents[NewFileType],' use=',pffAddToPkgUsesSection in NewFlags,' hasregister=',pffHasRegisterProc in NewFlags]);
|
||||
{$ENDIF}
|
||||
LazPackage.AddFile(NewFilename,NewUnitName,NewFileType,NewFlags,cpNormal);
|
||||
CurDir:=ChompPathDelim(ExtractFilePath(NewFilename));
|
||||
if NewFileType=pftUnit then
|
||||
NewUnitPaths:=MergeSearchPaths(NewUnitPaths,CurDir)
|
||||
else
|
||||
NewIncPaths:=MergeSearchPaths(NewIncPaths,CurDir);
|
||||
UpdateAll(false);
|
||||
end;
|
||||
for i:=0 to high(Filenames) do
|
||||
if not (AddOneFile(FileNames[i], NewUnitPaths, NewIncPaths) in [mrOk, mrIgnore]) then break;
|
||||
//UpdateAll(false);
|
||||
// extend unit and include search path
|
||||
if not ExtendUnitSearchPath(NewUnitPaths) then exit;
|
||||
if not ExtendIncSearchPath(NewIncPaths) then exit;
|
||||
@ -1503,7 +1477,83 @@ begin
|
||||
DoUseUnitsInDirectory(false);
|
||||
end;
|
||||
|
||||
function TPackageEditorForm.AddOneFile(aFilename: string;
|
||||
var NewUnitPaths, NewIncPaths: String): TModalResult;
|
||||
var
|
||||
NewFileType: TPkgFileType;
|
||||
NewUnitName: String;
|
||||
HasRegister: Boolean;
|
||||
NewFlags: TPkgFileFlags;
|
||||
Code: TCodeBuffer;
|
||||
CurDir: String;
|
||||
begin
|
||||
Result := mrOK;
|
||||
aFilename:=CleanAndExpandFilename(aFileName);
|
||||
if not FileExistsUTF8(aFilename) then Exit(mrIgnore);
|
||||
if DirPathExists(aFilename) then Exit(mrIgnore);
|
||||
if LazPackage.FindPkgFile(aFilename,true,false)<>nil then Exit(mrIgnore);
|
||||
NewFileType:=FileNameToPkgFileType(aFilename);
|
||||
NewFlags:=[];
|
||||
HasRegister:=false;
|
||||
NewUnitName:='';
|
||||
if (NewFileType=pftUnit) then begin
|
||||
Code:=CodeToolBoss.LoadFile(aFilename,true,false);
|
||||
NewUnitName:=CodeToolBoss.GetSourceName(Code,false);
|
||||
if NewUnitName='' then
|
||||
NewUnitName:=ExtractFileNameOnly(aFilename);
|
||||
if LazPackage.FindUsedUnit(NewUnitName)=nil then
|
||||
Include(NewFlags,pffAddToPkgUsesSection);
|
||||
CodeToolBoss.HasInterfaceRegisterProc(Code,HasRegister);
|
||||
if HasRegister then
|
||||
Include(NewFlags,pffHasRegisterProc);
|
||||
end;
|
||||
{$IFDEF VerbosePkgEditDrag}
|
||||
debugln(['TPackageEditorForm.FormDropFiles Adding files: ',aFilename,' Unit=',NewUnitName,' Type=',PkgFileTypeIdents[NewFileType],' use=',pffAddToPkgUsesSection in NewFlags,' hasregister=',pffHasRegisterProc in NewFlags]);
|
||||
{$ENDIF}
|
||||
LazPackage.AddFile(aFilename,NewUnitName,NewFileType,NewFlags,cpNormal);
|
||||
CurDir:=ChompPathDelim(ExtractFilePath(aFilename));
|
||||
if NewFileType=pftUnit then
|
||||
NewUnitPaths:=MergeSearchPaths(NewUnitPaths,CurDir)
|
||||
else
|
||||
NewIncPaths:=MergeSearchPaths(NewIncPaths,CurDir);
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.AddBitBtnClick(Sender: TObject);
|
||||
var
|
||||
OpenDialog: TOpenDialog;
|
||||
i: Integer;
|
||||
NewUnitPaths, NewIncPaths: String;
|
||||
begin
|
||||
OpenDialog:=TOpenDialog.Create(nil);
|
||||
try
|
||||
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
||||
OpenDialog.InitialDir:=LazPackage.GetFileDialogInitialDir(OpenDialog.InitialDir);
|
||||
OpenDialog.Title:=lisOpenFile;
|
||||
OpenDialog.Options:=OpenDialog.Options
|
||||
+[ofFileMustExist,ofPathMustExist,ofAllowMultiSelect];
|
||||
OpenDialog.Filter:=dlgAllFiles+' ('+GetAllFilesMask+')|'+GetAllFilesMask
|
||||
+'|'+lisLazarusUnit+' (*.pas;*.pp)|*.pas;*.pp'
|
||||
+'|'+lisLazarusProject+' (*.lpi)|*.lpi'
|
||||
+'|'+lisLazarusForm+' (*.lfm;*.dfm)|*.lfm;*.dfm'
|
||||
+'|'+lisLazarusPackage+' (*.lpk)|*.lpk'
|
||||
+'|'+lisLazarusProjectSource+' (*.lpr)|*.lpr';
|
||||
if OpenDialog.Execute then begin
|
||||
NewUnitPaths:='';
|
||||
NewIncPaths:='';
|
||||
for i:=0 to OpenDialog.Files.Count-1 do
|
||||
if not (AddOneFile(OpenDialog.Files[i], NewUnitPaths, NewIncPaths) in [mrOk, mrIgnore]) then break;
|
||||
InputHistories.StoreFileDialogSettings(OpenDialog);
|
||||
//UpdateAll(false);
|
||||
// extend unit and include search path
|
||||
if not ExtendUnitSearchPath(NewUnitPaths) then exit;
|
||||
if not ExtendIncSearchPath(NewIncPaths) then exit;
|
||||
end;
|
||||
finally
|
||||
OpenDialog.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.AddMoreBitBtnClick(Sender: TObject);
|
||||
begin
|
||||
if LazPackage=nil then exit;
|
||||
BeginUpdate;
|
||||
@ -1825,7 +1875,8 @@ begin
|
||||
CompileBitBtn := CreateToolButton('CompileBitBtn', lisCompile, lisPckEditCompilePackage, 'pkg_compile', @CompileBitBtnClick);
|
||||
UseBitBtn := CreateToolButton('UseBitBtn', lisPckEditInstall, lisPckEditInstallPackageInTheIDE, 'pkg_install', nil);
|
||||
CreateDivider;
|
||||
AddBitBtn := CreateToolButton('AddBitBtn', lisAdd, lisPckEditAddOtherItems, 'laz_add', @AddBitBtnClick);
|
||||
AddBitBtn := CreateToolButton('AddBitBtn', lisAdd, lisPckEditAddFiles, 'laz_add', @AddBitBtnClick);
|
||||
AddMoreBitBtn := CreateToolButton('AddMoreBitBtn', lisDlgAdd, lisPckEditAddOtherItems, 'laz_addmore', @AddMoreBitBtnClick);
|
||||
RemoveBitBtn := CreateToolButton('RemoveBitBtn', lisRemove, lisPckEditRemoveSelectedItem, 'laz_delete', @RemoveBitBtnClick);
|
||||
CreateDivider;
|
||||
OptionsBitBtn := CreateToolButton('OptionsBitBtn', dlgFROpts, lisPckEditEditGeneralOptions, 'pkg_properties', @OptionsBitBtnClick);
|
||||
|
Loading…
Reference in New Issue
Block a user