Package Editor: A new button for adding files from file system easily. Issue #24337.

git-svn-id: trunk@46312 -
This commit is contained in:
juha 2014-09-24 17:01:58 +00:00
parent e187809d73
commit 3c1ac1d84c
3 changed files with 101 additions and 112 deletions

View File

@ -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

View File

@ -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');

View File

@ -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);