implemented open package

git-svn-id: trunk@4027 -
This commit is contained in:
mattias 2003-04-08 20:14:27 +00:00
parent 1f9e1181b0
commit d2685ce21a
9 changed files with 367 additions and 127 deletions

View File

@ -1976,7 +1976,7 @@ begin
try
XMLConfig:=GetXMLCfg;
XMLConfig.SetValue('ObjectInspectorOptions/Bounds/Valid',FSaveBounds);
XMLConfig.SetDeleteValue('ObjectInspectorOptions/Bounds/Valid',FSaveBounds,true);
if FSaveBounds then begin
XMLConfig.SetValue('ObjectInspectorOptions/Bounds/Left',FLeft);
XMLConfig.SetValue('ObjectInspectorOptions/Bounds/Top',FTop);
@ -1989,12 +1989,12 @@ begin
XMLConfig.SetValue(
'ObjectInspectorOptions/Bounds/EventGridSplitterX'
,FEventGridSplitterX);
XMLConfig.SetValue(
'ObjectInspectorOptions/Bounds/DefaultItemHeight',FDefaultItemHeight);
XMLConfig.SetDeleteValue(
'ObjectInspectorOptions/Bounds/DefaultItemHeight',FDefaultItemHeight,20);
XMLConfig.SetValue('ObjectInspectorOptions/GridBackgroundColor'
,FGridBackgroundColor);
XMLConfig.SetValue('ObjectInspectorOptions/ShowHints',FShowHints);
XMLConfig.SetDeleteValue('ObjectInspectorOptions/GridBackgroundColor'
,FGridBackgroundColor,clBackground);
XMLConfig.SetDeleteValue('ObjectInspectorOptions/ShowHints',FShowHints,true);
if XMLConfig<>CustomXMLCfg then XMLConfig.Flush;
except

View File

@ -191,6 +191,8 @@ type
FMaxRecentOpenFiles: integer;
FRecentProjectFiles: TStringList;
FMaxRecentProjectFiles: integer;
FRecentPackageFiles: TStringList;
FMaxRecentPackageFiles: integer;
FOpenLastProjectAtStart: boolean;
// backup
@ -326,6 +328,10 @@ type
write FMaxRecentProjectFiles;
procedure AddToRecentProjectFiles(const AFilename: string);
procedure RemoveFromRecentProjectFiles(const AFilename: string);
property RecentPackageFiles: TStringList read FRecentPackageFiles
write FRecentPackageFiles;
property MaxRecentPackageFiles: integer read FMaxRecentPackageFiles
write FMaxRecentPackageFiles;
property LastSavedProjectFile: string read FLastSavedProjectFile
write FLastSavedProjectFile;
property OpenLastProjectAtStart: boolean read FOpenLastProjectAtStart
@ -679,6 +685,8 @@ begin
FMaxRecentOpenFiles:=10;
FRecentProjectFiles:=TStringList.Create;
FMaxRecentProjectFiles:=5;
FRecentPackageFiles:=TStringList.Create;
FMaxRecentPackageFiles:=10;
FOpenLastProjectAtStart:=true;
// backup
@ -708,6 +716,7 @@ begin
fExternalTools.Free;
FRecentOpenFiles.Free;
FRecentProjectFiles.Free;
FRecentPackageFiles.Free;
FObjectInspectorOptions.Free;
FLazarusDirsHistory.Free;
FCompilerFileHistory.Free;
@ -815,16 +824,15 @@ begin
// auto save
FAutoSaveEditorFiles:=XMLConfig.GetValue(
'EnvironmentOptions/AutoSave/EditorFiles',FAutoSaveEditorFiles);
'EnvironmentOptions/AutoSave/EditorFiles',true);
FAutoSaveProject:=XMLConfig.GetValue(
'EnvironmentOptions/AutoSave/Project',FAutoSaveProject);
'EnvironmentOptions/AutoSave/Project',true);
FAutoSaveIntervalInSecs:=XMLConfig.GetValue(
'EnvironmentOptions/AutoSave/IntervalInSecs',FAutoSaveIntervalInSecs);
'EnvironmentOptions/AutoSave/IntervalInSecs',600);
FLastSavedProjectFile:=XMLConfig.GetValue(
'EnvironmentOptions/AutoSave/LastSavedProjectFile',FLastSavedProjectFile);
'EnvironmentOptions/AutoSave/LastSavedProjectFile','');
FOpenLastProjectAtStart:=XMLConfig.GetValue(
'EnvironmentOptions/AutoSave/OpenLastProjectAtStart',
FOpenLastProjectAtStart);
'EnvironmentOptions/AutoSave/OpenLastProjectAtStart',true);
// windows
FIDEWindowLayoutList.LoadFromXMLConfig(XMLConfig,
@ -832,24 +840,23 @@ begin
FIDEDialogLayoutList.LoadFromXMLConfig(XMLConfig,
'EnvironmentOptions/Desktop/Dialogs');
FMinimizeAllOnMinimizeMain:=XMLConfig.GetValue(
'EnvironmentOptions/Desktop/MinimizeAllOnMinimizeMain/Value',
FMinimizeAllOnMinimizeMain);
'EnvironmentOptions/Desktop/MinimizeAllOnMinimizeMain/Value',true);
// form editor
FShowGrid:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/ShowGrid',FShowGrid);
'EnvironmentOptions/FormEditor/ShowGrid',true);
FGridColor:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/GridColor',FGridColor);
FSnapToGrid:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/SnapToGrid',FSnapToGrid);
'EnvironmentOptions/FormEditor/SnapToGrid',true);
FGridSizeX:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/GridSizeX',FGridSizeX);
'EnvironmentOptions/FormEditor/GridSizeX',8);
FGridSizeY:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/GridSizeY',FGridSizeY);
'EnvironmentOptions/FormEditor/GridSizeY',8);
FShowGuideLines:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/ShowGuideLines',FShowGuideLines);
'EnvironmentOptions/FormEditor/ShowGuideLines',true);
FSnapToGuideLines:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/SnapToGuideLines',FSnapToGuideLines);
'EnvironmentOptions/FormEditor/SnapToGuideLines',true);
FGuideLineColorLeftTop:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/GuideLineColorLeftTop',
FGuideLineColorLeftTop);
@ -857,11 +864,11 @@ begin
'EnvironmentOptions/FormEditor/GuideLineColorRightBottom',
FGuideLineColorRightBottom);
FShowComponentCaptions:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/ShowComponentCaptions',FShowComponentCaptions);
'EnvironmentOptions/FormEditor/ShowComponentCaptions',true);
FShowEditorHints:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/ShowEditorHints',FShowEditorHints);
'EnvironmentOptions/FormEditor/ShowEditorHints',true);
FAutoCreateFormsOnOpen:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/AutoCreateFormsOnOpen',FAutoCreateFormsOnOpen);
'EnvironmentOptions/FormEditor/AutoCreateFormsOnOpen',true);
FGrabberColor:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/GrabberColor/Value',FGrabberColor);
FMarkerColor:=XMLConfig.GetValue(
@ -874,7 +881,7 @@ begin
FRubberbandCreationColor);
FRubberbandSelectsGrandChilds:=XMLConfig.GetValue(
'EnvironmentOptions/FormEditor/Rubberband/SelectsGrandChilds/Value',
FRubberbandSelectsGrandChilds);
false);
if not OnlyDesktop then begin
// files
@ -937,11 +944,9 @@ begin
// hints
FShowHintsForComponentPalette:=XMLConfig.GetValue(
'EnvironmentOptions/ShowHintsForComponentPalette/Value',
FShowHintsForComponentPalette);
'EnvironmentOptions/ShowHintsForComponentPalette/Value',true);
FShowHintsForMainSpeedButtons:=XMLConfig.GetValue(
'EnvironmentOptions/ShowHintsForMainSpeedButtons/Value',
FShowHintsForMainSpeedButtons);
'EnvironmentOptions/ShowHintsForMainSpeedButtons/Value',true);
// recent files and directories
FMaxRecentOpenFiles:=XMLConfig.GetValue(
@ -952,6 +957,10 @@ begin
'EnvironmentOptions/Recent/ProjectFiles/Max',FMaxRecentProjectFiles);
LoadRecentList(XMLConfig,FRecentProjectFiles,
'EnvironmentOptions/Recent/ProjectFiles/');
FMaxRecentPackageFiles:=XMLConfig.GetValue(
'EnvironmentOptions/Recent/PackageFiles/Max',FMaxRecentOpenFiles);
LoadRecentList(XMLConfig,FRecentPackageFiles,
'EnvironmentOptions/Recent/PackageFiles/');
// external tools
fExternalTools.Load(XMLConfig,'EnvironmentOptions/ExternalTools/');
@ -994,10 +1003,10 @@ var XMLConfig: TXMLConfig;
else
i:=5; // bakUserDefinedAddExt;
end;
XMLConfig.SetValue(Path+'Type',i);
XMLConfig.SetValue(Path+'AdditionalExtension',AdditionalExtension);
XMLConfig.SetValue(Path+'MaxCounter',MaxCounter);
XMLConfig.SetValue(Path+'SubDirectory',SubDirectory);
XMLConfig.SetDeleteValue(Path+'Type',i,5);
XMLConfig.SetDeleteValue(Path+'AdditionalExtension',AdditionalExtension,'.bak');
XMLConfig.SetDeleteValue(Path+'MaxCounter',MaxCounter,10);
XMLConfig.SetDeleteValue(Path+'SubDirectory',SubDirectory,'backup');
end;
end;
@ -1008,7 +1017,7 @@ var XMLConfig: TXMLConfig;
dtNone: i:=0;
dtGnuDebugger: i:=1;
end;
XMLConfig.SetValue(Path+'DebuggerType/Value',i);
XMLConfig.SetDeleteValue(Path+'DebuggerType/Value',i,1);
end;
@ -1018,79 +1027,81 @@ begin
XMLConfig.SetValue('EnvironmentOptions/Version/Value',EnvOptsVersion);
// language
XMLConfig.SetValue('EnvironmentOptions/Language/ID'
,LazarusLanguageIDs[fLanguage]);
XMLConfig.SetDeleteValue('EnvironmentOptions/Language/ID'
,LazarusLanguageIDs[fLanguage],LazarusLanguageIDs[llAutomatic]);
// auto save
XMLConfig.SetValue('EnvironmentOptions/AutoSave/EditorFiles'
,FAutoSaveEditorFiles);
XMLConfig.SetValue('EnvironmentOptions/AutoSave/Project',FAutoSaveProject);
XMLConfig.SetValue('EnvironmentOptions/AutoSave/IntervalInSecs'
,FAutoSaveIntervalInSecs);
XMLConfig.SetValue('EnvironmentOptions/AutoSave/LastSavedProjectFile'
,FLastSavedProjectFile);
XMLConfig.SetValue(
XMLConfig.SetDeleteValue('EnvironmentOptions/AutoSave/EditorFiles'
,FAutoSaveEditorFiles,true);
XMLConfig.SetDeleteValue('EnvironmentOptions/AutoSave/Project',
FAutoSaveProject,true);
XMLConfig.SetDeleteValue('EnvironmentOptions/AutoSave/IntervalInSecs'
,FAutoSaveIntervalInSecs,600);
XMLConfig.SetDeleteValue('EnvironmentOptions/AutoSave/LastSavedProjectFile'
,FLastSavedProjectFile,'');
XMLConfig.SetDeleteValue(
'EnvironmentOptions/AutoSave/OpenLastProjectAtStart',
FOpenLastProjectAtStart);
FOpenLastProjectAtStart,true);
// windows
FIDEWindowLayoutList.SaveToXMLConfig(XMLConfig,
'EnvironmentOptions/Desktop/');
FIDEDialogLayoutList.SaveToXMLConfig(XMLConfig,
'EnvironmentOptions/Desktop/Dialogs');
XMLConfig.SetValue(
XMLConfig.SetDeleteValue(
'EnvironmentOptions/Desktop/MinimizeAllOnMinimizeMain/Value',
FMinimizeAllOnMinimizeMain);
FMinimizeAllOnMinimizeMain,true);
// form editor
XMLConfig.SetValue(
'EnvironmentOptions/FormEditor/ShowGrid',FShowGrid);
XMLConfig.SetValue(
'EnvironmentOptions/FormEditor/GridColor',FGridColor);
XMLConfig.SetValue(
'EnvironmentOptions/FormEditor/SnapToGrid',FSnapToGrid);
XMLConfig.SetValue(
'EnvironmentOptions/FormEditor/GridSizeX',FGridSizeX);
XMLConfig.SetValue(
'EnvironmentOptions/FormEditor/GridSizeY',FGridSizeY);
XMLConfig.SetValue(
'EnvironmentOptions/FormEditor/ShowGuideLines',FShowGuideLines);
XMLConfig.SetValue(
'EnvironmentOptions/FormEditor/SnapToGuideLines',FSnapToGuideLines);
XMLConfig.SetValue(
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/ShowGrid',FShowGrid,true);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/GridColor',FGridColor,clBlack);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/SnapToGrid',FSnapToGrid,true);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/GridSizeX',FGridSizeX,8);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/GridSizeY',FGridSizeY,8);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/ShowGuideLines',FShowGuideLines,true);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/SnapToGuideLines',FSnapToGuideLines,true);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/GuideLineColorLeftTop',
FGuideLineColorLeftTop);
XMLConfig.SetValue(
FGuideLineColorLeftTop,clGreen);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/GuideLineColorRightBottom',
FGuideLineColorRightBottom);
XMLConfig.SetValue('EnvironmentOptions/FormEditor/ShowComponentCaptions',
FShowComponentCaptions);
XMLConfig.SetValue(
'EnvironmentOptions/FormEditor/ShowEditorHints',FShowEditorHints);
XMLConfig.SetValue(
'EnvironmentOptions/FormEditor/AutoCreateFormsOnOpen',FAutoCreateFormsOnOpen);
XMLConfig.SetValue(
'EnvironmentOptions/FormEditor/GrabberColor/Value',FGrabberColor);
XMLConfig.SetValue(
'EnvironmentOptions/FormEditor/MarkerColor/Value',FMarkerColor);
XMLConfig.SetValue(
FGuideLineColorRightBottom,clBlue);
XMLConfig.SetDeleteValue('EnvironmentOptions/FormEditor/ShowComponentCaptions',
FShowComponentCaptions,true);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/ShowEditorHints',FShowEditorHints,true);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/AutoCreateFormsOnOpen',
FAutoCreateFormsOnOpen,true);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/GrabberColor/Value',FGrabberColor,clBlack);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/MarkerColor/Value',FMarkerColor,clDkGray);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/Rubberband/SelectionColor/Value',
FRubberbandSelectionColor);
XMLConfig.SetValue(
FRubberbandSelectionColor,clBlack);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/Rubberband/CreationColor/Value',
FRubberbandCreationColor);
XMLConfig.SetValue(
FRubberbandCreationColor,clRed);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/FormEditor/Rubberband/SelectsGrandChilds/Value',
FRubberbandSelectsGrandChilds);
FRubberbandSelectsGrandChilds,false);
if not OnlyDesktop then begin
// files
XMLConfig.SetValue(
'EnvironmentOptions/LazarusDirectory/Value',FLazarusDirectory);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/LazarusDirectory/Value',FLazarusDirectory,'');
SaveRecentList(XMLConfig,FLazarusDirsHistory,
'EnvironmentOptions/LazarusDirectory/History/');
XMLConfig.SetValue(
'EnvironmentOptions/CompilerFilename/Value',FCompilerFilename);
XMLConfig.SetDeleteValue(
'EnvironmentOptions/CompilerFilename/Value',FCompilerFilename,'');
SaveRecentList(XMLConfig,FCompilerFileHistory,
'EnvironmentOptions/CompilerFilename/History/');
XMLConfig.SetValue(
@ -1115,10 +1126,10 @@ begin
end;
// hints
XMLConfig.SetValue('EnvironmentOptions/ShowHintsForComponentPalette/Value',
FShowHintsForComponentPalette);
XMLConfig.SetValue('EnvironmentOptions/ShowHintsForMainSpeedButtons/Value',
FShowHintsForMainSpeedButtons);
XMLConfig.SetDeleteValue('EnvironmentOptions/ShowHintsForComponentPalette/Value',
FShowHintsForComponentPalette,true);
XMLConfig.SetDeleteValue('EnvironmentOptions/ShowHintsForMainSpeedButtons/Value',
FShowHintsForMainSpeedButtons,true);
// recent files and directories
XMLConfig.SetValue(
@ -1129,19 +1140,24 @@ begin
'EnvironmentOptions/Recent/ProjectFiles/Max',FMaxRecentProjectFiles);
SaveRecentList(XMLConfig,FRecentProjectFiles,
'EnvironmentOptions/Recent/ProjectFiles/');
XMLConfig.SetValue(
'EnvironmentOptions/Recent/PackageFiles/Max',FMaxRecentPackageFiles);
SaveRecentList(XMLConfig,FRecentPackageFiles,
'EnvironmentOptions/Recent/PackageFiles/');
// external tools
fExternalTools.Save(XMLConfig,'EnvironmentOptions/ExternalTools/');
// naming
XMLConfig.SetValue('EnvironmentOptions/Naming/PascalFileExtension',
PascalExtension[fPascalFileExtension]);
XMLConfig.SetValue('EnvironmentOptions/PascalFileAutoLowerCase/Value',
fPascalFileAutoLowerCase);
XMLConfig.SetValue('EnvironmentOptions/PascalFileAskLowerCase/Value',
fPascalFileAskLowerCase);
XMLConfig.SetValue('EnvironmentOptions/AutoDeleteAmbigiousSources/Value',
AmbigiousFileActionNames[fAmbigiousFileAction]);
XMLConfig.SetDeleteValue('EnvironmentOptions/Naming/PascalFileExtension',
PascalExtension[fPascalFileExtension],'.pas');
XMLConfig.SetDeleteValue('EnvironmentOptions/PascalFileAutoLowerCase/Value',
fPascalFileAutoLowerCase,false);
XMLConfig.SetDeleteValue('EnvironmentOptions/PascalFileAskLowerCase/Value',
fPascalFileAskLowerCase,true);
XMLConfig.SetDeleteValue('EnvironmentOptions/AutoDeleteAmbigiousSources/Value',
AmbigiousFileActionNames[fAmbigiousFileAction],
AmbigiousFileActionNames[afaAsk]);
// object inspector
FObjectInspectorOptions.SaveBounds:=false;
@ -1150,8 +1166,10 @@ begin
XMLConfig.Flush;
FileUpdated;
except
// ToDo
writeln('[TEnvironmentOptions.Save] error writing "',Filename,'"');
on E: Exception do begin
// ToDo
writeln('[TEnvironmentOptions.Save] error writing "',Filename,'": ',E.Message);
end;
end;
end;

View File

@ -416,20 +416,21 @@ begin
if P='' then exit;
P:=Path+P+'/';
// placement
XMLConfig.SetValue(P+'WindowPlacement/Value',
IDEWindowPlacementNames[fWindowPlacement]);
XMLConfig.SetDeleteValue(P+'WindowPlacement/Value',
IDEWindowPlacementNames[fWindowPlacement],
IDEWindowPlacementNames[iwpRestoreWindowSize]);
// custom position
XMLConfig.SetValue(P+'CustomPosition/Left',fLeft);
XMLConfig.SetValue(P+'CustomPosition/Top',fTop);
XMLConfig.SetValue(P+'CustomPosition/Width',fWidth);
XMLConfig.SetValue(P+'CustomPosition/Height',fHeight);
XMLConfig.SetDeleteValue(P+'CustomPosition/Left',fLeft,0);
XMLConfig.SetDeleteValue(P+'CustomPosition/Top',fTop,0);
XMLConfig.SetDeleteValue(P+'CustomPosition/Width',fWidth,0);
XMLConfig.SetDeleteValue(P+'CustomPosition/Height',fHeight,0);
// state
XMLConfig.SetValue(P+'WindowState/Value',IDEWindowStateNames[fWindowState]);
// docking
XMLConfig.SetValue(P+'Docking/Parent',fDockParent);
XMLConfig.SetValue(P+'Docking/ChildCount',fDockChilds.Count);
XMLConfig.SetDeleteValue(P+'Docking/Parent',fDockParent,'');
XMLConfig.SetDeleteValue(P+'Docking/ChildCount',fDockChilds.Count,0);
for i:=0 to fDockChilds.Count-1 do begin
XMLConfig.SetValue(P+'Docking/Child'+IntToStr(i),fDockChilds[i]);
XMLConfig.SetDeleteValue(P+'Docking/Child'+IntToStr(i),fDockChilds[i],'');
end;
XMLConfig.SetValue(P+'DockMode/Value',IDEWindowDockModeNames[fDockMode]);
end;
@ -1109,7 +1110,7 @@ procedure TIDEDialogLayoutList.SaveToXMLConfig(XMLConfig: TXMLConfig;
const Path: string);
var i: integer;
begin
XMLConfig.SetValue(Path+'/Count',Count);
XMLConfig.SetDeleteValue(Path+'/Count',Count,0);
for i:=0 to Count-1 do
Items[i].SaveToXMLConfig(XMLConfig,Path+'/Dialog'+IntToStr(i+1));
end;

View File

@ -207,6 +207,7 @@ resourcestring
lisMenuConfigCustomComps = 'Configure custom components';
lisMenuOpenInstalledPkg = 'Open installed package';
lisMenuOpenRecentPkg = 'Open recent package';
lisMenuSettings = 'Configure custom tools ...';
lisMenuQuickSyntaxCheck = 'Quick syntax check';

View File

@ -281,7 +281,8 @@ type
// components menu
itmCompsConfigCustomComps: TMenuItem;
itmOpenInstalledPkg: TMenuItem;
itmPkgOpenInstalled: TMenuItem;
itmPkgOpenRecent: TMenuItem;
// tools menu
itmToolConfigure: TMenuItem;
@ -355,8 +356,13 @@ type
function DoCheckFilesOnDisk: TModalResult; virtual; abstract;
function DoCheckAmbigiousSources(const AFilename: string;
Compiling: boolean): TModalResult;
function DoBackupFile(const Filename:string;
IsPartOfProject:boolean): TModalResult; virtual; abstract;
procedure UpdateWindowsMenu; virtual;
procedure SaveEnvironment; virtual; abstract;
procedure SetRecentSubMenu(ParentMenuItem: TMenuItem; FileList: TStringList;
OnClickEvent: TNotifyEvent); virtual;
procedure SaveSourceEditorChangesToCodeCache(PageIndex: integer); virtual; abstract;
end;
@ -1074,11 +1080,18 @@ begin
mnuComponents.Add(CreateMenuSeparator);
{$ENDIF}
itmOpenInstalledPkg := TMenuItem.Create(Self);
itmOpenInstalledPkg.Name:='itmOpenInstalledPkg';
itmOpenInstalledPkg.Caption := lisMenuOpenInstalledPkg;
itmPkgOpenInstalled := TMenuItem.Create(Self);
itmPkgOpenInstalled.Name:='itmPkgOpenInstalled';
itmPkgOpenInstalled.Caption := lisMenuOpenInstalledPkg;
{$IFDEF EnablePkgs}
mnuComponents.Add(itmOpenInstalledPkg);
mnuComponents.Add(itmPkgOpenInstalled);
{$ENDIF}
itmPkgOpenRecent := TMenuItem.Create(Self);
itmPkgOpenRecent.Name:='itmPkgOpenRecent';
itmPkgOpenRecent.Caption := lisMenuOpenRecentPkg;
{$IFDEF EnablePkgs}
mnuComponents.Add(itmPkgOpenRecent);
{$ENDIF}
end;
@ -1261,7 +1274,6 @@ begin
itmProjectNew.ShortCut:=CommandToShortCut(ecNewProject);
itmProjectNewFromFile.ShortCut:=CommandToShortCut(ecNewProjectFromFile);
itmProjectOpen.ShortCut:=CommandToShortCut(ecOpenProject);
//itmProjectRecentOpen.ShortCut:=CommandToShortCut(ec);
itmProjectSave.ShortCut:=CommandToShortCut(ecSaveProject);
itmProjectSaveAs.ShortCut:=CommandToShortCut(ecSaveProjectAs);
itmProjectPublish.ShortCut:=CommandToShortCut(ecPublishProject);
@ -1284,7 +1296,7 @@ begin
// components menu
itmCompsConfigCustomComps.ShortCut:=CommandToShortCut(ecConfigCustomComps);
itmOpenInstalledPkg.ShortCut:=CommandToShortCut(ecOpenInstalledPkg);
itmPkgOpenInstalled.ShortCut:=CommandToShortCut(ecOpenInstalledPkg);
// tools menu
itmToolConfigure.ShortCut:=CommandToShortCut(ecExtToolSettings);
@ -1460,6 +1472,29 @@ begin
WindowsList.Free;
end;
procedure TMainIDEBar.SetRecentSubMenu(ParentMenuItem: TMenuItem;
FileList: TStringList; OnClickEvent: TNotifyEvent);
var i: integer;
AMenuItem: TMenuItem;
begin
// create enough menuitems
while ParentMenuItem.Count<FileList.Count do begin
AMenuItem:=TMenuItem.Create(Self);
AMenuItem.Name:=
ParentMenuItem.Name+'Recent'+IntToStr(ParentMenuItem.Count);
ParentMenuItem.Add(AMenuItem);
end;
// delete unused menuitems
while ParentMenuItem.Count>FileList.Count do
ParentMenuItem.Items[ParentMenuItem.Count-1].Free;
// set captions and event
for i:=0 to FileList.Count-1 do begin
AMenuItem:=ParentMenuItem.Items[i];
AMenuItem.Caption := FileList[i];
AMenuItem.OnClick := OnClickEvent;
end;
end;
end.

View File

@ -51,21 +51,29 @@ type
psfSaveAs
);
TPkgSaveFlags = set of TPkgSaveFlag;
TPkgOpenFlag = (
pofAddToRecent
);
TPkgOpenFlags = set of TPkgOpenFlag;
TBasePkgManager = class(TComponent)
public
procedure ConnectMainBarEvents; virtual; abstract;
procedure ConnectSourceNotebookEvents; virtual; abstract;
procedure SetupMainBarShortCuts; virtual; abstract;
procedure SetRecentPackagesMenu; virtual; abstract;
procedure LoadInstalledPackages; virtual; abstract;
function ShowConfigureCustomComponents: TModalResult; virtual; abstract;
function DoNewPackage: TModalResult; virtual; abstract;
function DoShowOpenInstalledPckDlg: TModalResult; virtual; abstract;
function DoOpenPackage(APackage: TLazPackage): TModalResult; virtual; abstract;
function DoOpenPackageFile(AFilename: string;
Flags: TPkgOpenFlags): TModalResult; virtual; abstract;
function DoSavePackage(APackage: TLazPackage;
Flags: TPkgSaveFlags): TModalResult; virtual; abstract;
Flags: TPkgSaveFlags): TModalResult; virtual; abstract;
end;
var

View File

@ -316,6 +316,7 @@ type
procedure CheckInnerDependencies;
procedure ShortenFilename(var ExpandedFilename: string);
procedure LongenFilename(var AFilename: string);
function GetResolvedFilename: string;
procedure IterateComponentClasses(Event: TIterateComponentClassesEvent;
WithUsedPackages: boolean);
procedure ConsistencyCheck;
@ -1298,6 +1299,12 @@ begin
AFilename:=TrimFilename(Directory+AFilename);
end;
function TLazPackage.GetResolvedFilename: string;
begin
Result:=ReadAllLinks(FFilename,false);
if Result='' then Result:=FFilename;
end;
procedure TLazPackage.IterateComponentClasses(
Event: TIterateComponentClassesEvent;
WithUsedPackages: boolean);

View File

@ -104,6 +104,8 @@ type
function FindUnitInAllPackages(const TheUnitName: string): TPkgFile;
function FindFileInAllPackages(const TheFilename: string;
ResolveLinks: boolean): TPkgFile;
function FindPackageWithFilename(const TheFilename: string;
ResolveLinks: boolean): TLazPackage;
function CreateUniqueUnitName(const Prefix: string): string;
function PackageNameExists(const PkgName: string;
IgnorePackage: TLazPackage): boolean;
@ -348,6 +350,33 @@ begin
Result:=nil;
end;
function TLazPackageGraph.FindPackageWithFilename(const TheFilename: string;
ResolveLinks: boolean): TLazPackage;
var
Cnt: Integer;
i: Integer;
AFilename: string;
begin
Cnt:=Count;
AFilename:=TheFilename;
if ResolveLinks then begin
AFilename:=ReadAllLinks(TheFilename,false);
if AFilename='' then AFilename:=TheFilename;
end;
for i:=0 to Cnt-1 do begin
Result:=Packages[i];
if Result.IsVirtual then continue;
if ResolveLinks then begin
if CompareFilenames(TheFilename,Result.GetResolvedFilename)=0 then
exit;
end else begin
if CompareFilenames(TheFilename,Result.Filename)=0 then
exit;
end;
end;
Result:=nil;
end;
function TLazPackageGraph.CreateUniqueUnitName(const Prefix: string): string;
var
i: Integer;

View File

@ -44,7 +44,7 @@ uses
{$IFDEF IDE_MEM_CHECK}
MemCheck,
{$ENDIF}
Classes, SysUtils, LCLProc, Forms, Controls, FileCtrl, Dialogs,
Classes, SysUtils, LCLProc, Forms, Controls, FileCtrl, Dialogs, Menus,
CodeToolManager, CodeCache, Laz_XMLCfg,
KeyMapping, EnvironmentOpts, IDEProcs, ProjectDefs, InputHistory,
IDEDefs, UComponentManMain, PackageEditor, AddToPackageDlg, PackageDefs,
@ -63,6 +63,7 @@ type
procedure OnPackageEditorSavePackage(Sender: TObject);
procedure mnuConfigCustomCompsClicked(Sender: TObject);
procedure mnuOpenInstalledPckClicked(Sender: TObject);
procedure mnuOpenRecentPackageClicked(Sender: TObject);
private
function DoShowSavePackageAsDialog(APackage: TLazPackage): TModalResult;
public
@ -72,13 +73,18 @@ type
procedure ConnectMainBarEvents; override;
procedure ConnectSourceNotebookEvents; override;
procedure SetupMainBarShortCuts; override;
procedure SetRecentPackagesMenu; override;
procedure AddFileToRecentPackages(const Filename: string);
procedure LoadInstalledPackages; override;
function AddPackageToGraph(APackage: TLazPackage): TModalResult;
function ShowConfigureCustomComponents: TModalResult; override;
function DoNewPackage: TModalResult; override;
function DoShowOpenInstalledPckDlg: TModalResult; override;
function DoOpenPackage(APackage: TLazPackage): TModalResult; override;
function DoOpenPackageFile(AFilename: string;
Flags: TPkgOpenFlags): TModalResult; override;
function DoSavePackage(APackage: TLazPackage;
Flags: TPkgSaveFlags): TModalResult; override;
end;
@ -180,6 +186,30 @@ begin
DoShowOpenInstalledPckDlg;
end;
procedure TPkgManager.mnuOpenRecentPackageClicked(Sender: TObject);
procedure UpdateEnvironment;
begin
SetRecentPackagesMenu;
MainIDE.SaveEnvironment;
end;
var
AFilename: string;
begin
AFileName:=ExpandFilename(TMenuItem(Sender).Caption);
if DoOpenPackageFile(AFilename,[pofAddToRecent])=mrOk then begin
UpdateEnvironment;
end else begin
// open failed
if not FileExists(AFilename) then begin
// file does not exist -> delete it from recent file list
RemoveFromRecentList(AFilename,EnvironmentOptions.RecentPackageFiles);
UpdateEnvironment;
end;
end;
end;
function TPkgManager.DoShowSavePackageAsDialog(
APackage: TLazPackage): TModalResult;
var
@ -272,11 +302,20 @@ begin
'The file name "'+NewFilename+'" is used by'#13
+'the package "'+PkgFile.LazPackage.IDAsString+'"'#13
+'in file "'+PkgFile.LazPackage.Filename+'".',
mtInformation,[mbRetry,mbAbort],0);
mtWarning,[mbRetry,mbAbort],0);
if Result=mrAbort then exit;
continue; // try again
end;
// check existing file
if (CompareFilenames(NewFileName,OldPkgFilename)<>0)
and FileExists(NewFileName) then begin
Result:=MessageDlg('Replace File',
'Replace existing file "'+NewFilename+'"?',
mtConfirmation,[mbOk,mbCancel],0);
if Result<>mrOk then exit;
end;
until Result<>mrRetry;
finally
InputHistories.StoreFileDialogSettings(SaveDialog);
@ -303,7 +342,10 @@ begin
'Delete old package file "'+OldPkgFilename+'"?',
mtConfirmation,[mbOk,mbCancel],0)=mrOk
then begin
if not DeleteFile(OldPkgFilename) then begin
if DeleteFile(OldPkgFilename) then begin
RemoveFromRecentList(OldPkgFilename,
EnvironmentOptions.RecentPackageFiles);
end else begin
MessageDlg('Delete failed',
'Deleting of file "'+OldPkgFilename+'"'
+' failed.',mtError,[mbOk],0);
@ -346,7 +388,7 @@ procedure TPkgManager.ConnectMainBarEvents;
begin
with MainIDE do begin
itmCompsConfigCustomComps.OnClick :=@mnuConfigCustomCompsClicked;
itmOpenInstalledPkg.OnClick :=@mnuOpenInstalledPckClicked;
itmPkgOpenInstalled.OnClick :=@mnuOpenInstalledPckClicked;
end;
end;
@ -360,6 +402,21 @@ begin
end;
procedure TPkgManager.SetRecentPackagesMenu;
begin
writeln('TPkgManager.SetRecentPackagesMenu ',EnvironmentOptions.RecentPackageFiles.Count);
MainIDE.SetRecentSubMenu(MainIDE.itmPkgOpenRecent,
EnvironmentOptions.RecentPackageFiles,@mnuOpenRecentPackageClicked);
end;
procedure TPkgManager.AddFileToRecentPackages(const Filename: string);
begin
AddToRecentList(Filename,EnvironmentOptions.RecentPackageFiles,
EnvironmentOptions.MaxRecentPackageFiles);
SetRecentPackagesMenu;
MainIDE.SaveEnvironment;
end;
procedure TPkgManager.LoadInstalledPackages;
begin
// base packages
@ -370,6 +427,36 @@ begin
// ToDo
end;
function TPkgManager.AddPackageToGraph(APackage: TLazPackage
): TModalResult;
var
ConflictPkg: TLazPackage;
begin
// check Package Name
if not IsValidIdent(APackage.Name) then begin
Result:=MessageDlg('Invalid Package Name',
'The package name "'+APackage.Name+'" of'#13
+'the file "'+APackage.Filename+'" is invalid.',
mtError,[mbCancel,mbAbort],0);
exit;
end;
// check if Package with same name is already loaded
ConflictPkg:=PackageGraph.FindAPackageWithName(APackage.Name,nil);
if ConflictPkg<>nil then begin
Result:=MessageDlg('Package Name already loaded',
'There is already a package with the name "'+APackage.Name+'" loaded'#13
+'from file "'+ConflictPkg.Filename+'".',
mtError,[mbCancel,mbAbort],0);
exit;
end;
// add to graph
PackageGraph.AddPackage(APackage);
Result:=mrOk;
end;
function TPkgManager.ShowConfigureCustomComponents: TModalResult;
begin
Result:=ShowConfigureCustomComponentDlg(EnvironmentOptions.LazarusDirectory);
@ -410,6 +497,50 @@ begin
Result:=mrOk;
end;
function TPkgManager.DoOpenPackageFile(AFilename: string; Flags: TPkgOpenFlags
): TModalResult;
var
APackage: TLazPackage;
XMLConfig: TXMLConfig;
begin
AFilename:=CleanAndExpandFilename(AFilename);
// check if package is already loaded
APackage:=PackageGraph.FindPackageWithFilename(AFilename,true);
if APackage=nil then begin
// package not yet loaded
// create a new package
Result:=mrCancel;
APackage:=TLazPackage.Create;
try
// load the package file
APackage.Filename:=AFilename;
try
XMLConfig:=TXMLConfig.Create(AFilename);
try
APackage.LoadFromXMLConfig(XMLConfig,'Package/');
finally
XMLConfig.Free;
end;
except
on E: Exception do begin
Result:=MessageDlg('Error Reading Package',
'Unable to read package file "'+APackage.Filename+'".',
mtError,[mbAbort,mbCancel],0);
exit;
end;
end;
Result:=AddPackageToGraph(APackage);
finally
if Result<>mrOk then APackage.Free;
end;
end;
Result:=DoOpenPackage(APackage);
end;
function TPkgManager.DoSavePackage(APackage: TLazPackage;
Flags: TPkgSaveFlags): TModalResult;
var
@ -438,13 +569,18 @@ begin
if Result<>mrOk then exit;
end;
Result:=MainIDE.DoBackupFile(APackage.Filename,false);
if Result=mrAbort then exit;
// save
Result:=mrCancel;
try
XMLConfig:=TXMLConfig.Create(APackage.Filename);
APackage.SaveToXMLConfig(XMLConfig,'Package/');
XMLConfig.Flush;
XMLConfig.Free;
try
APackage.SaveToXMLConfig(XMLConfig,'Package/');
XMLConfig.Flush;
finally
XMLConfig.Free;
end;
except
on E: Exception do begin
Result:=MessageDlg('Error Writing Package',
@ -457,6 +593,11 @@ begin
// success
APackage.Modified:=false;
// add to recent
if (psfSaveAs in Flags) then begin
AddFileToRecentPackages(APackage.Filename);
end;
Result:=mrOk;
end;