IDE/Toolbar: Add "headers" for groups of recent items in dropdown list of the "Open..." toolbar button

This commit is contained in:
n7800 2025-01-05 02:07:19 +05:00
parent 7f3bc4ae79
commit 5deb19a52d
2 changed files with 26 additions and 6 deletions

View File

@ -1360,6 +1360,9 @@ resourcestring
dlgMaxRecentFiles = 'Files';
dlgMaxRecentProjs = 'Projects';
dlgMaxRecentPacks = 'Packages';
dlgRecentProjects = 'Recent Projects:';
dlgRecentPackages = 'Recent Packages:';
dlgRecentFiles = 'Recent Files:';
dlgMaxRecentHint = 'Value 0 means unlimited.';
dlgLazarusDir = 'Lazarus directory (default for all projects)';
lisLazarusDirHint = 'Lazarus sources. This path is relative to primary config directory (%s).';

View File

@ -534,12 +534,31 @@ procedure TOpenFileToolButton.RefreshMenu(Sender: TObject);
AMenuItem.ImageIndex := LoadProjectIconIntoImages(AFileName, DropdownMenu.Images, FIndex);
end;
procedure AddFiles(List: TStringList; MaxCount: integer; const AOnClick: TNotifyEvent);
procedure AddHeader(const ACaption: string);
var
AMenuItem: TOpenFileMenuItem;
begin
AMenuItem := TOpenFileMenuItem.Create(DropdownMenu);
AMenuItem.Caption := ACaption;
AMenuItem.Enabled := false;
DropdownMenu.Items.Add(AMenuItem);
end;
procedure AddRecentItemsGroup(List: TStringList; MaxCount: integer; const AOnClick: TNotifyEvent; const AHeader: string);
var
i: integer;
begin
if List.Count <= 0 then
exit;
// separator
if DropdownMenu.Items.Count > 0 then
DropdownMenu.Items.AddSeparator;
// header
AddHeader(AHeader);
// value 0 means unlimited
if MaxCount <= 0 then
MaxCount := List.Count;
// files
for i := 0 to Min(MaxCount, List.Count) - 1 do
AddFile(List[i], AOnClick);
end;
@ -548,11 +567,9 @@ begin
with EnvironmentOptions do
begin
DropdownMenu.Items.Clear;
AddFiles(RecentProjectFiles, MaxRecentProjectFiles, @mnuProjectFile);
DropdownMenu.Items.AddSeparator;
AddFiles(RecentPackageFiles, MaxRecentPackageFiles, @mnuPackageFile);
DropdownMenu.Items.AddSeparator;
AddFiles(RecentOpenFiles, MaxRecentOpenFiles, @mnuOpenFile);
AddRecentItemsGroup(RecentProjectFiles, MaxRecentProjectFiles, @mnuProjectFile, dlgRecentProjects);
AddRecentItemsGroup(RecentPackageFiles, MaxRecentPackageFiles, @mnuPackageFile, dlgRecentPackages);
AddRecentItemsGroup(RecentOpenFiles, MaxRecentOpenFiles, @mnuOpenFile, dlgRecentFiles);
end;
end;