lazarus/components/filebrowser/regidefilebrowser.pp
2024-09-25 09:31:44 +02:00

136 lines
3.6 KiB
ObjectPascal

unit RegIDEFileBrowser;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,
LazLoggerBase,
Controls, Forms,
LazIDEIntf, MenuIntf, IDECommands, IDEWindowIntf, BaseIDEIntf,
IDEOptionsIntf, IDEOptEditorIntf,
frmFileBrowser, {frmConfigFileBrowser, }ctrlfilebrowser, fraconfigfilebrowser;
procedure Register;
implementation
uses lcltype,frmfilesearcher,filebrowsertypes;
var
FileBrowserOptionsFrameID: integer = 2000;
FileBrowserCreator: TIDEWindowCreator; // set by Register procedure
procedure ShowFileBrowser(Sender: TObject);
begin
IDEWindowCreators.ShowForm(FileBrowserCreator.FormName,true);
end;
procedure ShowFileSearcher(Sender: TObject);
var
Entries : TFileEntryArray;
var
C: TFileBrowserController;
begin
Entries:=[];
With TFileSearcherForm.Create(Application) do
try
if ShowModal=mrOK then
Entries:=GetSelectedItems;
finally
Free;
end;
if Length(Entries)>0 then
begin
C := LazarusIDE.OwningComponent.FindComponent('IDEFileBrowserController') as TFileBrowserController;
if Assigned(C) then
C.OpenFiles(Entries);
end;
end;
procedure CreateFileBrowser(Sender: TObject; aFormName: string; var AForm: TCustomForm; DoDisableAutoSizing: boolean);
var
C: TFileBrowserController;
begin
// sanity check to avoid clashing with another package that has registered a window with the same name
if CompareText(aFormName,'FileBrowser')<>0 then begin
DebugLn(['ERROR: CreateFileBrowser: there is already a form with this name']);
exit;
end;
C := LazarusIDE.OwningComponent.FindComponent('IDEFileBrowserController') as TFileBrowserController;
IDEWindowCreators.CreateForm(AForm,TFileBrowserForm,true,C);
AForm.Name:=aFormName;
FileBrowserForm:=AForm as TFileBrowserForm;
C.ConfigWindow(FileBrowserForm);
FileBrowserForm.ShowFiles;
if not DoDisableAutoSizing then
AForm.EnableAutoSizing;
end;
procedure CreateController;
var
C: TFileBrowserController;
begin
C := LazarusIDE.OwningComponent.FindComponent('IDEFileBrowserController') as TFileBrowserController;
if (C = nil) then
begin
C := TFileBrowserController.Create(LazarusIDE.OwningComponent);
C.Name:='IDEFileBrowserController';
if C.GetResolvedRootDir<>'' then
C.IndexRootDir;
end;
C.ConfigFrame:=TFileBrowserOptionsFrame;
end;
procedure Register;
var
CmdCatViewMenu: TIDECommandCategory;
ViewFileBrowserCommand: TIDECommand;
ViewFileSearcherCommand: TIDECommand;
begin
// search shortcut category
CmdCatViewMenu:=IDECommandList.FindCategoryByName(CommandCategoryViewName);
// register shortcut
ViewFileBrowserCommand:=RegisterIDECommand(CmdCatViewMenu,
'ViewFileBrowser',SFileBrowserIDEMenuCaption,
CleanIDEShortCut,nil,@ShowFileBrowser);
// register shortcut
ViewFileSearcherCommand:=RegisterIDECommand(CmdCatViewMenu,
'ViewFileSearcher',SFileSearcherIDEMenuCaption,
IDEShortCut(Ord('P'), [ssctrl], VK_UNKNOWN,[]),nil,@ShowFileSearcher);
// register menu item in View menu
RegisterIDEMenuCommand(itmViewMainWindows,
ViewFileBrowserCommand.Name,
SFileBrowserIDEMenuCaption, nil, nil, ViewFileBrowserCommand);
RegisterIDEMenuCommand(itmViewMainWindows,
ViewFileSearcherCommand.Name,
SFileSearcherIDEMenuCaption, nil, nil, ViewFileSearcherCommand);
CreateController;
// register dockable Window
FileBrowserCreator:=IDEWindowCreators.Add(
'FileBrowser',
@CreateFileBrowser,nil,
'200','100','400','400'
);
// add IDE options frame
FileBrowserOptionsFrameID:=RegisterIDEOptionsEditor(GroupEnvironment,TFileBrowserOptionsFrame,
FileBrowserOptionsFrameID)^.Index;
end;
end.