mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-13 10:09:25 +02:00
implemented open package file
git-svn-id: trunk@4028 -
This commit is contained in:
parent
d2685ce21a
commit
0dcd66ea61
@ -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)];
|
||||
|
@ -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';
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user