implemented add file to a package dialog

git-svn-id: trunk@4095 -
This commit is contained in:
mattias 2003-04-25 14:40:49 +00:00
parent 0818bea677
commit ac2eaea0ba
7 changed files with 570 additions and 117 deletions

View File

@ -2425,7 +2425,6 @@ begin
chkDebugDBX.Checked := CompilerOpts.GenerateDebugDBX;
chkUseLineInfoUnit.Checked := CompilerOpts.UseLineInfoUnit;
chkUseHeaptrc.Checked := CompilerOpts.UseHeaptrc;
chkUseHeaptrc.Enabled:=EnabledLinkerOpts;
chkGenGProfCode.Checked := CompilerOpts.GenGProfCode;
chkSymbolsStrip.Checked := CompilerOpts.StripSymbols;
chkSymbolsStrip.Enabled:=EnabledLinkerOpts;

View File

@ -383,6 +383,7 @@ type
procedure SaveEnvironment; virtual; abstract;
procedure SetRecentSubMenu(ParentMenuItem: TMenuItem; FileList: TStringList;
OnClickEvent: TNotifyEvent); virtual;
procedure DoJumpToCodeToolBossError; virtual; abstract;
procedure SaveSourceEditorChangesToCodeCache(PageIndex: integer); virtual; abstract;
end;

View File

@ -38,29 +38,66 @@ unit AddFileToAPackageDlg;
interface
uses
Classes, SysUtils, Forms, Controls, Buttons, StdCtrls, LazarusIDEStrConsts,
IDEProcs, IDEOptionDefs, PackageDefs, PackageSystem;
Classes, SysUtils, Forms, Controls, Buttons, ExtCtrls, StdCtrls,
LazarusIDEStrConsts, Dialogs, AVL_Tree, FileCtrl, IDEProcs, IDEOptionDefs,
ComponentReg, PackageDefs, PackageSystem;
type
TAddFileToAPackageDlg = class(TForm)
FileGroupBox: TGroupBox;
FileNameEdit: TEdit;
UnitNameLabel: TLabel;
UnitNameEdit: TEdit;
HasRegisterProcCheckBox: TCheckBox;
FileTypeRadioGroup: TRadioGroup;
PackagesGroupBox: TGroupBox;
PackagesComboBox: TComboBox;
ShowAllCheckBox: TCheckBox;
OkButton: TButton;
CancelButton: TButton;
procedure AddFileToAPackageDlgClose(Sender: TObject;
var Action: TCloseAction);
procedure AddFileToAPackageDlgResize(Sender: TObject);
procedure FileGroupBoxResize(Sender: TObject);
procedure OkButtonClick(Sender: TObject);
procedure PackagesGroupBoxResize(Sender: TObject);
procedure ShowAllCheckBoxClick(Sender: TObject);
private
fPackages: TAVLTree;// tree of TLazPackage
function GetFileType: TPkgFileType;
function GetFilename: string;
function GetHasRegisterProc: boolean;
function GetUnitName: string;
procedure SetFileType(const AValue: TPkgFileType);
procedure SetFilename(const AValue: string);
procedure SetHasRegisterProc(const AValue: boolean);
procedure SetUnitName(const AValue: string);
procedure SetupComponents;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure UpdateAvailablePackages;
property Filename: string read GetFilename write SetFilename;
property UnitName: string read GetUnitName write SetUnitName;
property FileType: TPkgFileType read GetFileType write SetFileType;
property HasRegisterProc: boolean read GetHasRegisterProc write SetHasRegisterProc;
end;
function ShowAddFileToAPackageDlg(const Filename: string): TModalResult;
function ShowAddFileToAPackageDlg(const Filename, UnitName: string;
HasRegisterProc: boolean): TModalResult;
implementation
function ShowAddFileToAPackageDlg(const Filename: string): TModalResult;
function ShowAddFileToAPackageDlg(const Filename, UnitName: string;
HasRegisterProc: boolean): TModalResult;
var
Dialog: TAddFileToAPackageDlg;
begin
Dialog:=TAddFileToAPackageDlg.Create(Application);
Dialog.Filename:=Filename;
Dialog.UnitName:=UnitName;
Dialog.HasRegisterProc:=HasRegisterProc;
Dialog.UpdateAvailablePackages;
Result:=Dialog.ShowModal;
Dialog.Free;
end;
@ -73,26 +110,353 @@ begin
IDEDialogLayoutList.SaveLayout(Self);
end;
procedure TAddFileToAPackageDlg.SetupComponents;
procedure TAddFileToAPackageDlg.AddFileToAPackageDlgResize(Sender: TObject);
begin
with FileGroupBox do
SetBounds(10,10,Parent.ClientWidth-20,120);
with PackagesGroupBox do
SetBounds(10,FileGroupBox.Top+FileGroupBox.Height+5,Parent.ClientWidth-20,75);
with OkButton do
SetBounds(Parent.ClientWidth-200,Parent.ClientHeight-30,80,Height);
with CancelButton do
SetBounds(Parent.ClientWidth-100,Parent.ClientHeight-30,80,Height);
end;
procedure TAddFileToAPackageDlg.FileGroupBoxResize(Sender: TObject);
begin
with UnitNameLabel do
SetBounds(5,33,90,Height);
with UnitNameEdit do
SetBounds(UnitNameLabel.Left+UnitNameLabel.Width+3,30,250,Height);
with HasRegisterProcCheckBox do
SetBounds(5,60,200,Height);
with FileTypeRadioGroup do
SetBounds(0,30,Parent.ClientWidth,Parent.ClientHeight-30);
end;
procedure TAddFileToAPackageDlg.OkButtonClick(Sender: TObject);
var
PkgID: TLazPackageID;
APackage: TLazPackage;
PkgFile: TPkgFile;
begin
PkgID:=TLazPackageID.Create;
try
// check package ID
if not PkgID.StringToID(PackagesComboBox.Text) then begin
MessageDlg('Invalid Package',
'Invalid package ID: "'+PackagesComboBox.Text+'"',
mtError,[mbCancel],0);
exit;
end;
// search package
APackage:=PackageGraph.FindPackageWithID(PkgID);
if APackage=nil then begin
MessageDlg('Package not found',
'Package "'+PkgID.IDAsString+'" not found.',
mtError,[mbCancel],0);
exit;
end;
// check if package is readonly
if APackage.ReadOnly then begin
MessageDlg('Package is read only',
'The package '+APackage.IDAsString+' is read only.',
mtError,[mbCancel],0);
exit;
end;
// check if file is already in the package
PkgFile:=APackage.FindPkgFile(Filename,false,true);
if PkgFile<>nil then begin
MessageDlg('File is already in package',
'The file "'+Filename+'"'#13
+'is already in the package '+APackage.IDAsString+'.',
mtError,[mbCancel],0);
exit;
end;
// ok -> add file to package
APackage.BeginUpdate;
APackage.AddFile(Filename,UnitName,FileType,[],cpNormal);
if APackage.Editor<>nil then APackage.Editor.UpdateAll;
APackage.EndUpdate;
ModalResult:=mrOk;
finally
PkgID.Free;
end;
end;
procedure TAddFileToAPackageDlg.PackagesGroupBoxResize(Sender: TObject);
begin
with ShowAllCheckBox do
SetBounds(10,30,200,Height);
end;
procedure TAddFileToAPackageDlg.ShowAllCheckBoxClick(Sender: TObject);
begin
UpdateAvailablePackages;
end;
procedure TAddFileToAPackageDlg.SetupComponents;
var
pft: TPkgFileType;
begin
FileGroupBox:=TGroupBox.Create(Self);
with FileGroupBox do begin
Name:='FileGroupBox';
Parent:=Self;
Caption:='File';
OnResize:=@FileGroupBoxResize;
end;
FileNameEdit:=TEdit.Create(Self);
with FileNameEdit do begin
Name:='FileNameEdit';
Parent:=FileGroupBox;
Text:='';
Align:=alTop;
ReadOnly:=true;
end;
UnitNameLabel:=TLabel.Create(Self);
with UnitNameLabel do begin
Name:='UnitNameLabel';
Parent:=FileGroupBox;
Caption:='Unit Name: ';
end;
UnitNameEdit:=TEdit.Create(Self);
with UnitNameEdit do begin
Name:='UnitNameEdit';
Parent:=FileGroupBox;
Text:='';
end;
HasRegisterProcCheckBox:=TCheckBox.Create(Self);
with HasRegisterProcCheckBox do begin
Name:='HasRegisterProcCheckBox';
Parent:=FileGroupBox;
Caption:='Has Register procedure';
end;
FileTypeRadioGroup:=TRadioGroup.Create(Self);
with FileTypeRadioGroup do begin
Name:='FileTypeRadioGroup';
Parent:=FileGroupBox;
Caption:='File Type';
with Items do begin
BeginUpdate;
for pft:=Low(TPkgFileType) to High(TPkgFileType) do begin
if pft=pftUnit then continue;
Add(GetPkgFileTypeLocalizedName(pft));
end;
EndUpdate;
end;
ItemIndex:=0;
Columns:=2;
end;
PackagesGroupBox:=TGroupBox.Create(Self);
with PackagesGroupBox do begin
Name:='PackagesGroupBox';
Parent:=Self;
Caption:='Destination Package';
OnResize:=@PackagesGroupBoxResize;
end;
PackagesComboBox:=TComboBox.Create(Self);
with PackagesComboBox do begin
Name:='PackagesComboBox';
Parent:=PackagesGroupBox;
Align:=alTop;
end;
ShowAllCheckBox:=TCheckBox.Create(Self);
with ShowAllCheckBox do begin
Name:='ShowAllCheckBox';
Parent:=PackagesGroupBox;
Caption:='Show All';
Checked:=false;
OnClick:=@ShowAllCheckBoxClick;
end;
OkButton:=TButton.Create(Self);
with OkButton do begin
Name:='OkButton';
Parent:=Self;
Caption:='Ok';
OnClick:=@OkButtonClick;
end;
CancelButton:=TButton.Create(Self);
with CancelButton do begin
Name:='CancelButton';
Parent:=Self;
Caption:='Cancel';
ModalResult:=mrCancel;
end;
end;
procedure TAddFileToAPackageDlg.SetFilename(const AValue: string);
var
NewPFT: TPkgFileType;
begin
if FileNameEdit.Text=AValue then exit;
FileNameEdit.Text:=AValue;
if FilenameIsPascalUnit(AValue) then
NewPFT:=pftUnit
else if CompareFileExt(AValue,'.lfm',true)=0 then
NewPFT:=pftLFM
else if CompareFileExt(AValue,'.lrs',true)=0 then
NewPFT:=pftLRS
else if CompareFileExt(AValue,'.inc',true)=0 then
NewPFT:=pftInclude
else if FileIsText(AValue) then
NewPFT:=pftText
else
NewPFT:=pftBinary;
FileType:=NewPFT;
end;
procedure TAddFileToAPackageDlg.SetHasRegisterProc(const AValue: boolean);
begin
if HasRegisterProc=AValue then exit;
HasRegisterProcCheckBox.Checked:=AValue;
end;
procedure TAddFileToAPackageDlg.SetUnitName(const AValue: string);
begin
if UnitName=AValue then exit;
UnitNameEdit.Text:=AValue;
end;
function TAddFileToAPackageDlg.GetFilename: string;
begin
Result:=FileNameEdit.Text;
end;
function TAddFileToAPackageDlg.GetFileType: TPkgFileType;
var
i: Integer;
CurPFT: TPkgFileType;
begin
if FileTypeRadioGroup.Visible then begin
i:=0;
for CurPFT:=Low(TPkgFileType) to High(TPkgFileType) do begin
if CurPFT=pftUnit then continue;
if FileTypeRadioGroup.ItemIndex=i then begin
Result:=CurPFT;
exit;
end;
inc(i);
end;
Result:=pftText;
end else begin
Result:=pftUnit;
end;
end;
function TAddFileToAPackageDlg.GetHasRegisterProc: boolean;
begin
Result:=HasRegisterProcCheckBox.Checked;
end;
function TAddFileToAPackageDlg.GetUnitName: string;
begin
Result:=UnitNameEdit.Text;
end;
procedure TAddFileToAPackageDlg.SetFileType(const AValue: TPkgFileType);
var
ShowUnitProps: Boolean;
i: Integer;
CurPFT: TPkgFileType;
begin
if FileType=AValue then exit;
i:=0;
for CurPFT:=Low(TPkgFileType) to High(TPkgFileType) do begin
if CurPFT=pftUnit then continue;
if CurPFT=AValue then break;
inc(i);
end;
if i<FileTypeRadioGroup.Items.Count then
FileTypeRadioGroup.ItemIndex:=i
else
FileTypeRadioGroup.ItemIndex:=-1;
ShowUnitProps:=(AValue=pftUnit);
UnitNameLabel.Visible:=ShowUnitProps;
UnitNameEdit.Visible:=ShowUnitProps;
HasRegisterProcCheckBox.Visible:=ShowUnitProps;
FileTypeRadioGroup.Visible:=not ShowUnitProps;
end;
constructor TAddFileToAPackageDlg.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
Name:='AddFileToAPackageDlg';
//fPackages:=TAVLTree.Create(@CompareLazPackageID);
Caption:='Add file to a package';
fPackages:=TAVLTree.Create(@CompareLazPackageID);
Position:=poScreenCenter;
IDEDialogLayoutList.ApplyLayout(Self,500,300);
IDEDialogLayoutList.ApplyLayout(Self,320,170);
SetupComponents;
OnClose:=@AddFileToAPackageDlgClose;
OnResize:=@AddFileToAPackageDlgResize;
OnResize(Self);
end;
destructor TAddFileToAPackageDlg.Destroy;
begin
fPackages.Free;
inherited Destroy;
end;
procedure TAddFileToAPackageDlg.UpdateAvailablePackages;
var
i: Integer;
APackage: TLazPackage;
AFilename: String;
ADirectory: String;
sl: TStringList;
ANode: TAVLTreeNode;
begin
fPackages.Clear;
AFilename:=Filename;
ADirectory:=ExtractFilePath(Filename);
for i:=0 to PackageGraph.Count-1 do begin
APackage:=PackageGraph[i];
// skip readonly packages
if APackage.ReadOnly then continue;
// skip packages, that already contains the file
if APackage.FindPkgFile(AFilename,false,true)<>nil then continue;
if not ShowAllCheckBox.Checked then begin
// skip packages, where the filename is not in the package directory
// or one of its source directories
if (not FileIsInPath(AFilename,APackage.Directory))
and (APackage.SourceDirectories.GetFileReference(ADirectory)=nil) then
continue;
end;
fPackages.Add(APackage);
end;
sl:=TStringList.Create;
ANode:=fPackages.FindLowest;
while ANode<>nil do begin
sl.Add(TLazPackage(ANode.Data).IDAsString);
ANode:=fPackages.FindSuccessor(ANode);
end;
PackagesComboBox.Items.Assign(sl);
if PackagesComboBox.Items.Count>0 then
PackagesComboBox.Text:=PackagesComboBox.Items[0]
else
PackagesComboBox.Text:='';
sl.Free;
end;
end.

View File

@ -229,46 +229,52 @@ begin
end;
// check file extension
if not FilenameIsPascalUnit(AFilename) then begin
MessageDlg('File not unit',
'Pascal units must have the extension .pp or .pas',
mtWarning,[mbCancel],0);
exit;
end;
// check unitname
AnUnitName:=ExtractFileNameOnly(AFilename);
if not IsValidIdent(AnUnitName) then begin
MessageDlg('File not unit',
+'"'+AnUnitName+'" is not a valid unit name.',
mtWarning,[mbCancel],0);
exit;
end;
// check if unitname already exists in package
PkgFile:=PackageGraph.FindUnit(LazPackage,AnUnitName,true,true);
if PkgFile<>nil then begin
if PkgFile.LazPackage=LazPackage then begin
MessageDlg('Unitname already exists',
'The unitname "'+AnUnitName+'" already exists in this package.',
mtError,[mbCancel],0);
if AddFileType in [d2ptUnit,d2ptNewComponent] then begin
if not FilenameIsPascalUnit(AFilename) then begin
MessageDlg('File not unit',
'Pascal units must have the extension .pp or .pas',
mtWarning,[mbCancel],0);
exit;
end else begin
if MessageDlg('Unitname already exists',
'The unitname "'+AnUnitName+'" already exists in the package:'#13
+PkgFile.LazPackage.IDAsString,
mtWarning,[mbCancel,mbIgnore],0)<>mrIgnore then exit;
end;
end;
// check if unitname is a componentclass
if IDEComponentPalette.FindComponent(AnUnitName)<>nil then begin
if MessageDlg('Ambigious Unit Name',
'The unit name "'+AnUnitName+'" is the same as an registered component.'#13
+'Using this can cause strange error messages.',
mtWarning,[mbCancel,mbIgnore],0)<>mrIgnore
then
// check unitname
if AddFileType in [d2ptUnit,d2ptNewComponent] then begin
AnUnitName:=ExtractFileNameOnly(AFilename);
if not IsValidIdent(AnUnitName) then begin
MessageDlg('File not unit',
+'"'+AnUnitName+'" is not a valid unit name.',
mtWarning,[mbCancel],0);
exit;
end;
// check if unitname already exists in package
PkgFile:=PackageGraph.FindUnit(LazPackage,AnUnitName,true,true);
if PkgFile<>nil then begin
if PkgFile.LazPackage=LazPackage then begin
MessageDlg('Unitname already exists',
'The unitname "'+AnUnitName+'" already exists in this package.',
mtError,[mbCancel],0);
exit;
end else begin
if MessageDlg('Unitname already exists',
'The unitname "'+AnUnitName+'" already exists in the package:'#13
+PkgFile.LazPackage.IDAsString,
mtWarning,[mbCancel,mbIgnore],0)<>mrIgnore then exit;
end;
end;
// check if unitname is a componentclass
if IDEComponentPalette.FindComponent(AnUnitName)<>nil then begin
if MessageDlg('Ambigious Unit Name',
'The unit name "'+AnUnitName+'" is the same as an registered component.'#13
+'Using this can cause strange error messages.',
mtWarning,[mbCancel,mbIgnore],0)<>mrIgnore
then
exit;
end;
end else begin
AnUnitName:='';
end;
// check if file already exists in package
@ -281,10 +287,10 @@ begin
exit;
end;
// check if file is part of project or marked readonly
// check if file is part of project
if Assigned(OnGetIDEFileInfo) then begin
IDEFileFlags:=[];
OnGetIDEFileInfo(nil,AFilename,[ifsPartOfProject,ifsReadOnly],
OnGetIDEFileInfo(nil,AFilename,[ifsPartOfProject{,ifsReadOnly}],
IDEFileFlags);
if (ifsPartOfProject in IDEFileFlags) then begin
MessageDlg('File is used',
@ -293,12 +299,12 @@ begin
mtError,[mbCancel],0);
exit;
end;
if (ifsReadOnly in IDEFileFlags) then begin
{if (ifsReadOnly in IDEFileFlags) then begin
MessageDlg('File is readonly',
'The file "'+AFilename+'" is marked as readonly.',
mtError,[mbCancel],0);
exit;
end;
end;}
end;
// ok

View File

@ -590,8 +590,7 @@ type
property RemovedFiles[Index: integer]: TPkgFile read GetRemovedFiles;
property SourceDirectories: TFileReferenceList read FSourceDirectories;
property StateFileDate: longint read FStateFileDate write FStateFileDate;
property UsageOptions: TPkgAdditionalCompilerOptions
read FUsageOptions;
property UsageOptions: TPkgAdditionalCompilerOptions read FUsageOptions;
end;
PLazPackage = ^TLazPackage;

View File

@ -106,6 +106,7 @@ type
procedure AddBitBtnClick(Sender: TObject);
procedure ApplyDependencyButtonClick(Sender: TObject);
procedure CallRegisterProcCheckBoxClick(Sender: TObject);
procedure ChangeFileTypeMenuItemClick(Sender: TObject);
procedure CompileAllClick(Sender: TObject);
procedure CompileBitBtnClick(Sender: TObject);
procedure CompilerOptionsBitBtnClick(Sender: TObject);
@ -121,12 +122,11 @@ type
procedure OpenFileMenuItemClick(Sender: TObject);
procedure OptionsBitBtnClick(Sender: TObject);
procedure PackageEditorFormClose(Sender: TObject; var Action: TCloseAction);
procedure PackageEditorFormCloseQuery(Sender: TObject; var CanClose: boolean
);
procedure PackageEditorFormCloseQuery(Sender: TObject; var CanClose: boolean);
procedure PackageEditorFormResize(Sender: TObject);
procedure ReAddMenuItemClick(Sender: TObject);
procedure RegisteredListBoxDrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
ARect: TRect; State: TOwnerDrawState);
procedure RemoveBitBtnClick(Sender: TObject);
procedure SaveBitBtnClick(Sender: TObject);
procedure SaveAsClick(Sender: TObject);
@ -316,8 +316,13 @@ begin
if Removed then begin
// re-add file
AFilename:=PkgFile.Filename;
if not CheckAddingUnitFilename(LazPackage,d2ptUnit,
PackageEditors.OnGetIDEFileInfo,AFilename) then exit;
if PkgFile.FIleType=pftUnit then begin
if not CheckAddingUnitFilename(LazPackage,d2ptUnit,
PackageEditors.OnGetIDEFileInfo,AFilename) then exit;
end else begin
if not CheckAddingUnitFilename(LazPackage,d2ptFile,
PackageEditors.OnGetIDEFileInfo,AFilename) then exit;
end;
PkgFile.Filename:=AFilename;
LazPackage.UnremovePkgFile(PkgFile);
UpdateAll;
@ -335,60 +340,83 @@ end;
procedure TPackageEditorForm.FilesPopupMenuPopup(Sender: TObject);
var
CurNode: TTreeNode;
ItemCnt: Integer;
CurDependency: TPkgDependency;
Removed: boolean;
procedure AddPopupMenuItem(const ACaption: string; AnEvent: TNotifyEvent;
EnabledFlag: boolean);
var
CurMenuItem: TMenuItem;
CurFile: TPkgFile;
function AddPopupMenuItem(const ACaption: string; AnEvent: TNotifyEvent;
EnabledFlag: boolean): TMenuItem;
begin
if FilesPopupMenu.Items.Count<=ItemCnt then begin
CurMenuItem:=TMenuItem.Create(Self);
FilesPopupMenu.Items.Add(CurMenuItem);
end else
CurMenuItem:=FilesPopupMenu.Items[ItemCnt];
CurMenuItem.Caption:=ACaption;
CurMenuItem.OnClick:=AnEvent;
CurMenuItem.Enabled:=EnabledFlag;
Result:=TMenuItem.Create(Self);
FilesPopupMenu.Items.Add(Result);
end else begin
Result:=FilesPopupMenu.Items[ItemCnt];
while Result.Count>0 do Result.Delete(Result.Count-1);
end;
Result.Caption:=ACaption;
Result.OnClick:=AnEvent;
Result.Enabled:=EnabledFlag;
inc(ItemCnt);
end;
procedure AddFileTypeMenuItem;
var
FileTypeMenuItem: TMenuItem;
CurPFT: TPkgFileType;
NewMenuItem: TMenuItem;
begin
FileTypeMenuItem:=AddPopupMenuItem('File Type',nil,true);
for CurPFT:=Low(TPkgFileType) to High(TPkgFileType) do begin
NewMenuItem:=TMenuItem.Create(Self);
NewMenuItem.Caption:=GetPkgFileTypeLocalizedName(CurPFT);
NewMenuItem.OnClick:=@ChangeFileTypeMenuItemClick;
NewMenuItem.Enabled:=(CurPFT<>pftUnit)
or FilenameIsPascalUnit(CurFile.Filename);
FileTypeMenuItem.Add(NewMenuItem);
end;
end;
begin
CurNode:=FilesTreeView.Selected;
ItemCnt:=0;
CurDependency:=GetCurrentDependency(Removed);
if CurNode<>nil then begin
if CurNode.Parent<>nil then begin
if CurNode.Parent=FilesNode then begin
AddPopupMenuItem('Open file',@OpenFileMenuItemClick,true);
AddPopupMenuItem('Remove file',@RemoveBitBtnClick,
RemoveBitBtn.Enabled);
end else if (CurDependency<>nil) and (not Removed) then begin
AddPopupMenuItem('Open package',@OpenFileMenuItemClick,true);
AddPopupMenuItem('Remove dependency',@RemoveBitBtnClick,
RemoveBitBtn.Enabled);
AddPopupMenuItem('Move dependency up',@MoveDependencyUpClick,
(CurDependency.PrevRequiresDependency<>nil)
and (not LazPackage.ReadOnly));
AddPopupMenuItem('Move dependency down',@MoveDependencyDownClick,
(CurDependency.NextRequiresDependency<>nil)
and (not LazPackage.ReadOnly));
end else if (CurNode.Parent=RemovedFilesNode) then begin
AddPopupMenuItem('Open file',@OpenFileMenuItemClick,true);
AddPopupMenuItem('Add file',@ReAddMenuItemClick,
AddBitBtn.Enabled);
end else if (CurNode.Parent=RemovedRequiredNode) then begin
AddPopupMenuItem('Open package',@OpenFileMenuItemClick,true);
AddPopupMenuItem('Re-Add dependency',@ReAddMenuItemClick,
AddBitBtn.Enabled);
end;
end;
end else begin
if CurDependency=nil then
CurFile:=GetCurrentFile(Removed)
else
CurFile:=nil;
if CurFile<>nil then begin
if not Removed then begin
AddPopupMenuItem('Open file',@OpenFileMenuItemClick,true);
AddPopupMenuItem('Remove file',@RemoveBitBtnClick,
RemoveBitBtn.Enabled);
AddFileTypeMenuItem;
end else begin
AddPopupMenuItem('Open file',@OpenFileMenuItemClick,true);
AddPopupMenuItem('Re-Add file',@ReAddMenuItemClick,
AddBitBtn.Enabled);
end;
end;
if CurDependency<>nil then begin
if (not Removed) then begin
AddPopupMenuItem('Open package',@OpenFileMenuItemClick,true);
AddPopupMenuItem('Remove dependency',@RemoveBitBtnClick,
RemoveBitBtn.Enabled);
AddPopupMenuItem('Move dependency up',@MoveDependencyUpClick,
(CurDependency.PrevRequiresDependency<>nil)
and (not LazPackage.ReadOnly));
AddPopupMenuItem('Move dependency down',@MoveDependencyDownClick,
(CurDependency.NextRequiresDependency<>nil)
and (not LazPackage.ReadOnly));
end else begin
AddPopupMenuItem('Open package',@OpenFileMenuItemClick,true);
AddPopupMenuItem('Re-Add dependency',@ReAddMenuItemClick,
AddBitBtn.Enabled);
end;
end;
if ItemCnt>0 then
AddPopupMenuItem('-',nil,true);
@ -803,6 +831,30 @@ begin
end;
end;
procedure TPackageEditorForm.ChangeFileTypeMenuItemClick(Sender: TObject);
var
i: Integer;
CurItem: TMenuItem;
CurPFT: TPkgFileType;
Removed: boolean;
CurFile: TPkgFile;
begin
CurItem:=TMenuItem(Sender);
i:=CurItem.Parent.IndexOf(CurItem);
if i<0 then exit;
CurFile:=GetCurrentFile(Removed);
if CurFile=nil then exit;
for CurPFT:=Low(TPkgFileType) to High(TPkgFileType) do begin
if CurItem.Caption=GetPkgFileTypeLocalizedName(CurPFT) then begin
if (not FilenameIsPascalUnit(CurFIle.Filename))
and (CurPFT=pftUnit) then exit;
CurFile.FileType:=CurPFT;
UpdateAll;
exit;
end;
end;
end;
procedure TPackageEditorForm.CompileAllClick(Sender: TObject);
begin
DoCompile(true);
@ -1155,7 +1207,6 @@ begin
CurFile:=LazPackage.Files[i];
CurNode.Text:=CurFile.GetShortFilename;
SetImageIndex(CurNode,CurFile);
writeln('AAA1 ',CurNode.Text,' ',CurNode.ImageIndex,' ',ImageIndexBinary,' ',CurFile.FileType=pftBinary);
CurNode:=CurNode.GetNextSibling;
end;
while CurNode<>nil do begin
@ -1170,7 +1221,7 @@ writeln('AAA1 ',CurNode.Text,' ',CurNode.ImageIndex,' ',ImageIndexBinary,' ',Cur
if RemovedFilesNode=nil then begin
RemovedFilesNode:=
FilesTreeView.Items.Add(RequiredPackagesNode,
'Removed Files (are not saved)');
'Removed Files (these entries are not saved to the lpk file)');
RemovedFilesNode.ImageIndex:=ImageIndexRemovedFiles;
RemovedFilesNode.SelectedIndex:=RemovedFilesNode.ImageIndex;
end;
@ -1233,7 +1284,8 @@ begin
if CurDependency<>nil then begin
if RemovedRequiredNode=nil then begin
RemovedRequiredNode:=
FilesTreeView.Items.Add(nil,'Removed required packages (are not saved)');
FilesTreeView.Items.Add(nil,
'Removed required packages (these entries are not saved to the lpk file)');
RemovedRequiredNode.ImageIndex:=ImageIndexRemovedRequired;
RemovedRequiredNode.SelectedIndex:=RemovedRequiredNode.ImageIndex;
end;
@ -1293,7 +1345,8 @@ begin
FilePropsGroupBox.Enabled:=true;
FilePropsGroupBox.Caption:='File Properties';
// set Register Unit checkbox
CallRegisterProcCheckBox.Enabled:=not LazPackage.ReadOnly;
CallRegisterProcCheckBox.Enabled:=(not LazPackage.ReadOnly)
and (CurFile.FileType=pftUnit);
CallRegisterProcCheckBox.Checked:=pffHasRegisterProc in CurFile.Flags;
// fetch all registered plugins
CurListIndex:=0;

View File

@ -104,6 +104,9 @@ type
function MacroFunctionPkgSrcPath(Data: Pointer): boolean;
function MacroFunctionPkgUnitPath(Data: Pointer): boolean;
function MacroFunctionPkgIncPath(Data: Pointer): boolean;
function DoGetUnitRegisterInfo(const AFilename: string;
var TheUnitName: string; var HasRegisterProc: boolean;
IgnoreErrors: boolean): TModalResult;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
@ -272,22 +275,8 @@ end;
procedure TPkgManager.OnPackageEditorGetUnitRegisterInfo(Sender: TObject;
const AFilename: string; var TheUnitName: string; var HasRegisterProc: boolean
);
var
ExpFilename: String;
CodeBuffer: TCodeBuffer;
begin
ExpFilename:=CleanAndExpandFilename(AFilename);
// create default values
TheUnitName:='';
HasRegisterProc:=false;
MainIDE.SaveSourceEditorChangesToCodeCache(-1);
CodeBuffer:=CodeToolBoss.LoadFile(ExpFilename,true,false);
if CodeBuffer<>nil then begin
TheUnitName:=CodeToolBoss.GetSourceName(CodeBuffer,false);
CodeToolBoss.HasInterfaceRegisterProc(CodeBuffer,HasRegisterProc);
end;
if TheUnitName='' then
TheUnitName:=ExtractFileNameOnly(ExpFilename);
DoGetUnitRegisterInfo(AFilename,TheUnitName,HasRegisterProc,true);
end;
function TPkgManager.OnPackageEditorOpenPackage(Sender: TObject;
@ -937,6 +926,39 @@ begin
PkgID.Free;
end;
function TPkgManager.DoGetUnitRegisterInfo(const AFilename: string;
var TheUnitName: string; var HasRegisterProc: boolean; IgnoreErrors: boolean
): TModalResult;
function ErrorsHandled: boolean;
begin
if (CodeToolBoss.ErrorMessage='') or IgnoreErrors then exit;
MainIDE.DoJumpToCodeToolBossError;
Result:=false;
end;
var
ExpFilename: String;
CodeBuffer: TCodeBuffer;
begin
Result:=mrCancel;
ExpFilename:=CleanAndExpandFilename(AFilename);
// create default values
TheUnitName:='';
HasRegisterProc:=false;
MainIDE.SaveSourceEditorChangesToCodeCache(-1);
CodeBuffer:=CodeToolBoss.LoadFile(ExpFilename,true,false);
if CodeBuffer<>nil then begin
TheUnitName:=CodeToolBoss.GetSourceName(CodeBuffer,false);
if not ErrorsHandled then exit;
CodeToolBoss.HasInterfaceRegisterProc(CodeBuffer,HasRegisterProc);
if not ErrorsHandled then exit;
end;
if TheUnitName='' then
TheUnitName:=ExtractFileNameOnly(ExpFilename);
Result:=mrOk;
end;
constructor TPkgManager.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
@ -1467,7 +1489,7 @@ var
begin
Result:=mrCancel;
writeln('TPkgManager.DoCompilePackage A ',APackage.IDAsString,' Flags=',PkgCompileFlagsToString(Flags));
writeln('TPkgManager.DoCompilePackage A ',APackage.IDAsString,' Flags=',PkgCompileFlagsToString(Flags));
if APackage.AutoCreated then exit;
@ -1733,6 +1755,8 @@ var
ActiveUnitInfo: TUnitInfo;
PkgFile: TPkgFile;
Filename: String;
TheUnitName: String;
HasRegisterProc: Boolean;
begin
MainIDE.GetCurrentUnit(ActiveSourceEditor,ActiveUnitInfo);
if ActiveSourceEditor=nil then exit;
@ -1761,12 +1785,19 @@ begin
if PkgFile<>nil then begin
Result:=MessageDlg('File is already in package',
'The file "'+Filename+'"'#13
+'is already in the package '+PkgFile.LazPackage.IDAsString+'.'#13,
+'is already in the package '+PkgFile.LazPackage.IDAsString+'.',
mtWarning,[mbIgnore,mbCancel,mbAbort],0);
if Result<>mrIgnore then exit;
end;
Result:=ShowAddFileToAPackageDlg(Filename);
TheUnitName:='';
HasRegisterProc:=false;
if FilenameIsPascalUnit(Filename) then begin
Result:=DoGetUnitRegisterInfo(Filename,TheUnitName,HasRegisterProc,false);
if Result<>mrOk then exit;
end;
Result:=ShowAddFileToAPackageDlg(Filename,TheUnitName,HasRegisterProc);
end;
function TPkgManager.OnProjectInspectorOpen(Sender: TObject): boolean;