implemented open package file

git-svn-id: trunk@4028 -
This commit is contained in:
mattias 2003-04-08 22:02:15 +00:00
parent d2685ce21a
commit 0dcd66ea61
6 changed files with 142 additions and 26 deletions

View File

@ -196,6 +196,7 @@ const
// components menu
ecConfigCustomComps = ecUserFirst + 900;
ecOpenInstalledPkg = ecUserFirst + 901;
ecOpenPackageFile = ecUserFirst + 902;
// help menu
ecAboutLazarus = ecUserFirst + 1000;
@ -628,6 +629,7 @@ begin
// components menu
ecConfigCustomComps : Result:= lisMenuConfigCustomComps;
ecOpenInstalledPkg : Result:= lisMenuOpenInstalledPkg;
ecOpenPackageFile : Result:= lisMenuOpenPackageFile;
// tools menu
ecExtToolSettings : Result:= srkmecExtToolSettings;
@ -1464,6 +1466,7 @@ begin
C:=Categories[AddCategory('Components',srkmCatComponentsMenu,caAll)];
Add(C,'Configure custom components',ecConfigCustomComps,VK_UNKNOWN,[],VK_UNKNOWN,[]);
Add(C,'Open installed package',ecOpenInstalledPkg,VK_UNKNOWN,[],VK_UNKNOWN,[]);
Add(C,'Open package file',ecOpenPackageFile,VK_UNKNOWN,[],VK_UNKNOWN,[]);
// tools menu
C:=Categories[AddCategory(KeyCategoryToolMenuName,srkmCatToolMenu,caAll)];

View File

@ -208,6 +208,7 @@ resourcestring
lisMenuConfigCustomComps = 'Configure custom components';
lisMenuOpenInstalledPkg = 'Open installed package';
lisMenuOpenRecentPkg = 'Open recent package';
lisMenuOpenPackageFile = 'Open package file';
lisMenuSettings = 'Configure custom tools ...';
lisMenuQuickSyntaxCheck = 'Quick syntax check';
@ -233,6 +234,7 @@ resourcestring
// file dialogs
lisOpenFile = 'Open file';
lisOpenProjectFile = 'Open Project File';
lisOpenPackageFile = 'Open Package File';
lisSaveSpace = 'Save ';
lisSelectDFMFiles = 'Select Delphi form files (*.dfm)';
lisChooseDirectory = 'Choose directory';

View File

@ -282,6 +282,7 @@ type
// components menu
itmCompsConfigCustomComps: TMenuItem;
itmPkgOpenInstalled: TMenuItem;
itmPkgOpenPackageFile: TMenuItem;
itmPkgOpenRecent: TMenuItem;
// tools menu
@ -358,6 +359,7 @@ type
Compiling: boolean): TModalResult;
function DoBackupFile(const Filename:string;
IsPartOfProject:boolean): TModalResult; virtual; abstract;
function DoDeleteAmbigiousFiles(const Filename:string): TModalResult; virtual; abstract;
procedure UpdateWindowsMenu; virtual;
procedure SaveEnvironment; virtual; abstract;
@ -1087,6 +1089,13 @@ begin
mnuComponents.Add(itmPkgOpenInstalled);
{$ENDIF}
itmPkgOpenPackageFile := TMenuItem.Create(Self);
itmPkgOpenPackageFile.Name:='itmPkgOpenPackageFile';
itmPkgOpenPackageFile.Caption := lisMenuOpenPackageFile;
{$IFDEF EnablePkgs}
mnuComponents.Add(itmPkgOpenPackageFile);
{$ENDIF}
itmPkgOpenRecent := TMenuItem.Create(Self);
itmPkgOpenRecent.Name:='itmPkgOpenRecent';
itmPkgOpenRecent.Caption := lisMenuOpenRecentPkg;
@ -1297,6 +1306,7 @@ begin
// components menu
itmCompsConfigCustomComps.ShortCut:=CommandToShortCut(ecConfigCustomComps);
itmPkgOpenInstalled.ShortCut:=CommandToShortCut(ecOpenInstalledPkg);
itmPkgOpenPackageFile.ShortCut:=CommandToShortCut(ecOpenPackageFile);
// tools menu
itmToolConfigure.ShortCut:=CommandToShortCut(ecExtToolSettings);

View File

@ -719,8 +719,8 @@ begin
XMLConfig.SetDeleteValue(Path+'PackageName/Value',PackageName,'');
MaxVersion.SaveToXMLConfig(XMLConfig,Path+'MaxVersion/');
MinVersion.SaveToXMLConfig(XMLConfig,Path+'MinVersion/');
XMLConfig.SetDeleteValue(Path+'MaxVersion/Value',pdfMaxVersion in FFlags,false);
XMLConfig.SetDeleteValue(Path+'MinVersion/Value',pdfMinVersion in FFlags,false);
XMLConfig.SetDeleteValue(Path+'MaxVersion/Valid',pdfMaxVersion in FFlags,false);
XMLConfig.SetDeleteValue(Path+'MinVersion/Valid',pdfMinVersion in FFlags,false);
end;
function TPkgDependency.MakeSense: boolean;
@ -1155,7 +1155,7 @@ var
NewCount:=XMLConfig.GetValue(ThePath+'Count',0);
for i:=0 to NewCount-1 do begin
PkgDependency:=TPkgDependency.Create;
PkgDependency.LoadFromXMLConfig(XMLConfig,ThePath+'Item'+IntToStr(i)+'/',
PkgDependency.LoadFromXMLConfig(XMLConfig,ThePath+'Item'+IntToStr(i+1)+'/',
FileVersion);
List.Add(PkgDependency);
end;
@ -1219,10 +1219,10 @@ procedure TLazPackage.SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string
i: Integer;
PkgDependency: TPkgDependency;
begin
XMLConfig.SetDeleteValue(Path+'Count',List.Count,0);
XMLConfig.SetDeleteValue(ThePath+'Count',List.Count,0);
for i:=0 to List.Count-1 do begin
PkgDependency:=TPkgDependency(List[i]);
PkgDependency.SaveToXMLConfig(XMLConfig,ThePath+'Item'+IntToStr(i)+'/');
PkgDependency.SaveToXMLConfig(XMLConfig,ThePath+'Item'+IntToStr(i+1)+'/');
end;
end;

View File

@ -39,8 +39,9 @@ interface
uses
Classes, SysUtils, Forms, Controls, StdCtrls, ExtCtrls, ComCtrls, Buttons,
LResources, Graphics, LCLType, Menus, LazarusIDEStrConsts, IDEOptionDefs,
IDEDefs, ComponentReg, PackageDefs, AddToPackageDlg, PackageSystem;
LResources, Graphics, LCLType, Menus, Dialogs, LazarusIDEStrConsts,
IDEOptionDefs, IDEDefs, ComponentReg, PackageDefs, AddToPackageDlg,
PackageSystem;
type
TOnOpenFile =
@ -51,6 +52,7 @@ type
function(Sender: TObject;
const Params: TAddToPkgResult): TModalResult of object;
{ TPackageEditorForm }
TPackageEditorForm = class(TBasePackageEditor)
@ -76,6 +78,7 @@ type
procedure PackageEditorFormResize(Sender: TObject);
procedure RegisteredListBoxDrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
procedure RemoveBitBtnClick(Sender: TObject);
procedure SaveBitBtnClick(Sender: TObject);
private
FLazPackage: TLazPackage;
@ -228,6 +231,7 @@ end;
procedure TPackageEditorForm.FilesTreeViewSelectionChanged(Sender: TObject);
begin
UpdateSelectedFile;
UpdateButtons;
end;
procedure TPackageEditorForm.OpenFileMenuItemClick(Sender: TObject);
@ -292,6 +296,36 @@ begin
end;
end;
procedure TPackageEditorForm.RemoveBitBtnClick(Sender: TObject);
var
ANode: TTreeNode;
NodeIndex: Integer;
CurFile: TPkgFile;
begin
ANode:=FilesTreeView.Selected;
if (ANode=nil) or LazPackage.ReadOnly then begin
UpdateButtons;
exit;
end;
NodeIndex:=ANode.Index;
if ANode.Parent=FilesNode then begin
// get current package file
CurFile:=LazPackage.Files[NodeIndex];
if CurFile=nil then exit;
if MessageDlg('Remove file?',
'Remove file "'+CurFile.Filename+'"'#13
+'from package "'+LazPackage.IDAsString+'"?',
mtConfirmation,[mbYes,mbNo],0)=mrNo
then
exit;
// ToDo
end else if ANode.Parent=RequiredPackagesNode then begin
end;
end;
procedure TPackageEditorForm.SaveBitBtnClick(Sender: TObject);
begin
DoSave;
@ -352,6 +386,9 @@ begin
end;
end;
UpdateSelectedFile;
UpdateStatusBar;
end;
procedure TPackageEditorForm.SetLazPackage(const AValue: TLazPackage);
@ -435,6 +472,7 @@ begin
Name:='RemoveBitBtn';
Parent:=Self;
Caption:='Remove';
OnClick:=@RemoveBitBtnClick;
end;
InstallBitBtn:=TBitBtn.Create(Self);
@ -657,6 +695,8 @@ begin
end;
if LazPackage.ReadOnly then
StatusText:='Read Only: '+StatusText;
if LazPackage.Modified then
StatusText:='Modified: '+StatusText;
StatusBar.SimpleText:=StatusText;
end;
@ -664,6 +704,8 @@ procedure TPackageEditorForm.DoSave;
begin
PackageEditors.SavePackage(LazPackage);
UpdateButtons;
UpdateTitle;
UpdateStatusBar;
end;
constructor TPackageEditorForm.Create(TheOwner: TComponent);

View File

@ -45,7 +45,7 @@ uses
MemCheck,
{$ENDIF}
Classes, SysUtils, LCLProc, Forms, Controls, FileCtrl, Dialogs, Menus,
CodeToolManager, CodeCache, Laz_XMLCfg,
CodeToolManager, CodeCache, Laz_XMLCfg, LazarusIDEStrConsts,
KeyMapping, EnvironmentOpts, IDEProcs, ProjectDefs, InputHistory,
IDEDefs, UComponentManMain, PackageEditor, AddToPackageDlg, PackageDefs,
PackageLinks, PackageSystem, ComponentReg, OpenInstalledPkgDlg,
@ -53,6 +53,7 @@ uses
type
TPkgManager = class(TBasePkgManager)
procedure MainIDEitmPkgOpenPackageFileClick(Sender: TObject);
function OnPackageEditorCreateFile(Sender: TObject;
const Params: TAddToPkgResult): TModalResult;
procedure OnPackageEditorGetUnitRegisterInfo(Sender: TObject;
@ -93,6 +94,34 @@ implementation
{ TPkgManager }
procedure TPkgManager.MainIDEitmPkgOpenPackageFileClick(Sender: TObject);
var
OpenDialog: TOpenDialog;
AFilename: string;
I: Integer;
OpenFlags: TPkgOpenFlags;
begin
OpenDialog:=TOpenDialog.Create(Application);
try
InputHistories.ApplyFileDialogSettings(OpenDialog);
OpenDialog.Title:=lisOpenPackageFile;
OpenDialog.Options:=OpenDialog.Options+[ofAllowMultiSelect];
if OpenDialog.Execute and (OpenDialog.Files.Count>0) then begin
OpenFlags:=[pofAddToRecent];
For I := 0 to OpenDialog.Files.Count-1 do
Begin
AFilename:=CleanAndExpandFilename(OpenDialog.Files.Strings[i]);
if DoOpenPackageFile(AFilename,OpenFlags)=mrAbort then begin
break;
end;
end;
end;
InputHistories.StoreFileDialogSettings(OpenDialog);
finally
OpenDialog.Free;
end;
end;
function TPkgManager.OnPackageEditorCreateFile(Sender: TObject;
const Params: TAddToPkgResult): TModalResult;
var
@ -219,6 +248,7 @@ var
NewPkgName: String;
ConflictPkg: TLazPackage;
PkgFile: TPkgFile;
LowerFilename: String;
begin
OldPkgFilename:=APackage.Filename;
@ -267,19 +297,29 @@ begin
end;
// apply naming conventions
if EnvironmentOptions.PascalFileAutoLowerCase then
NewFileName:=ExtractFilePath(NewFilename)
+lowercase(ExtractFileName(NewFilename));
if lowercase(NewPkgName)<>NewPkgName then begin
LowerFilename:=ExtractFilePath(NewFilename)
+lowercase(ExtractFileName(NewFilename));
if EnvironmentOptions.PascalFileAskLowerCase then begin
if MessageDlg('Rename File lowercase?',
'Should the file renamed lowercase to'#13
+'"'+LowerFilename+'"?',
mtConfirmation,[mbYes,mbNo],0)=mrYes
then
NewFileName:=LowerFilename;
end else begin
if EnvironmentOptions.PascalFileAutoLowerCase then
NewFileName:=LowerFilename;
end;
end;
// check package name conflicts
// check package name conflict
ConflictPkg:=PackageGraph.FindAPackageWithName(NewPkgName,APackage);
if ConflictPkg<>nil then begin
Result:=MessageDlg('Package name already exists',
'The package name "'+NewPkgName+'" already exists.'#13
'There is already another package with the name "'+NewPkgName+'".'#13
+'Conflict package: "'+ConflictPkg.IDAsString+'"'#13
+'File: "'+ConflictPkg.Filename+'"'#13
+#13
+'It is strongly recommended to choose another name.',
+'File: "'+ConflictPkg.Filename+'"',
mtInformation,[mbRetry,mbAbort,mbIgnore],0);
if Result=mrAbort then exit;
if Result<>mrIgnore then continue; // try again
@ -326,13 +366,15 @@ begin
APackage.Filename:=NewFilename;
// rename package
if AnsiCompareText(NewPkgName,APackage.Name)=0 then begin
// just change in case
APackage.Name:=NewPkgName;
end else begin
// name change -> update package graph
APackage.Name:=NewPkgName;
// ToDo: update package graph
if NewPkgName<>APackage.Name then begin
if AnsiCompareText(NewPkgName,APackage.Name)=0 then begin
// just change the case
APackage.Name:=NewPkgName;
end else begin
// name change -> update package graph
APackage.Name:=NewPkgName;
// ToDo: update package graph
end;
end;
// clean up old package file to reduce ambigiousities
@ -389,7 +431,10 @@ begin
with MainIDE do begin
itmCompsConfigCustomComps.OnClick :=@mnuConfigCustomCompsClicked;
itmPkgOpenInstalled.OnClick :=@mnuOpenInstalledPckClicked;
itmPkgOpenPackageFile.OnClick:=@MainIDEitmPkgOpenPackageFileClick;
end;
SetRecentPackagesMenu;
end;
procedure TPkgManager.ConnectSourceNotebookEvents;
@ -404,7 +449,6 @@ end;
procedure TPkgManager.SetRecentPackagesMenu;
begin
writeln('TPkgManager.SetRecentPackagesMenu ',EnvironmentOptions.RecentPackageFiles.Count);
MainIDE.SetRecentSubMenu(MainIDE.itmPkgOpenRecent,
EnvironmentOptions.RecentPackageFiles,@mnuOpenRecentPackageClicked);
end;
@ -433,7 +477,7 @@ var
ConflictPkg: TLazPackage;
begin
// check Package Name
if not IsValidIdent(APackage.Name) then begin
if (APackage.Name='') or (not IsValidIdent(APackage.Name)) then begin
Result:=MessageDlg('Invalid Package Name',
'The package name "'+APackage.Name+'" of'#13
+'the file "'+APackage.Filename+'" is invalid.',
@ -509,13 +553,22 @@ begin
APackage:=PackageGraph.FindPackageWithFilename(AFilename,true);
if APackage=nil then begin
// package not yet loaded
if not FileExists(AFilename) then begin
MessageDlg('File not found',
'File "'+AFilename+'" not found.',
mtError,[mbCancel],0);
RemoveFromRecentList(AFilename,EnvironmentOptions.RecentPackageFiles);
SetRecentPackagesMenu;
Result:=mrCancel;
exit;
end;
// create a new package
Result:=mrCancel;
APackage:=TLazPackage.Create;
try
// load the package file
APackage.Filename:=AFilename;
try
XMLConfig:=TXMLConfig.Create(AFilename);
try
@ -531,6 +584,8 @@ begin
exit;
end;
end;
APackage.Filename:=AFilename;
APackage.Modified:=false;
Result:=AddPackageToGraph(APackage);
finally
@ -569,9 +624,13 @@ begin
if Result<>mrOk then exit;
end;
// backup old file
Result:=MainIDE.DoBackupFile(APackage.Filename,false);
if Result=mrAbort then exit;
Result:=MainIDE.DoDeleteAmbigiousFiles(APackage.Filename);
if Result=mrAbort then exit;
// save
try
XMLConfig:=TXMLConfig.Create(APackage.Filename);