mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-05 10:57:55 +02:00
202 lines
5.2 KiB
ObjectPascal
202 lines
5.2 KiB
ObjectPascal
unit ExWinSettings;
|
|
{
|
|
**********************************************************************
|
|
This file is part of a Lazarus Package, Examples Window.
|
|
|
|
See the file COPYING.modifiedLGPL.txt, included in this distribution,
|
|
for details about the license.
|
|
**********************************************************************
|
|
|
|
This unit makes a frame that is poked into Lazarus's Options Tree. At present
|
|
all it gets back is the user's preference as to where the Example Projects
|
|
working space is. Easily extended. David Bannon, Feb 2022
|
|
|
|
}
|
|
|
|
|
|
|
|
{$mode ObjFPC}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils,
|
|
// LazUtils
|
|
LazConfigStorage, LazFileUtils, LazLoggerBase,
|
|
// LCL
|
|
Controls, StdCtrls, EditBtn, Dialogs,
|
|
// BuildIntf
|
|
IDEOptionsIntf, baseIDEIntf,
|
|
// IdeIntf
|
|
LazIDEIntf, IDEOptEditorIntf,
|
|
//
|
|
UConst;
|
|
|
|
|
|
{ TExWinSettings }
|
|
|
|
// -------- The Options Group ID, and, perhaps, a place in the Tree View -------
|
|
|
|
type
|
|
TExWinSettings = class(TAbstractIDEEnvironmentOptions) // needed by options group.
|
|
|
|
private
|
|
|
|
public
|
|
constructor Create(const {%H-}pbReadRegFile: boolean);
|
|
destructor Destroy; override;
|
|
class function GetGroupCaption: String; override;
|
|
class function GetInstance: TAbstractIDEOptions; override;
|
|
procedure DoAfterWrite({%H-}Restore: boolean); override;
|
|
end;
|
|
|
|
|
|
// ------ This is the Frame displayed when user clicks the Tree View note ------
|
|
type
|
|
{ TExWinSettingsFrame }
|
|
TExWinSettingsFrame = class(TAbstractIDEOptionsEditor)
|
|
ButtonDefault: TButton;
|
|
DirectoryEdit1: TDirectoryEdit;
|
|
Label1: TLabel;
|
|
procedure ButtonDefaultClick(Sender: TObject);
|
|
|
|
private
|
|
DefaultExamplesHome : string;
|
|
|
|
public
|
|
constructor Create(TheOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
function GetTitle: String; override;
|
|
procedure ReadSettings({%H-}AOptions: TAbstractIDEOptions); override;
|
|
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
|
|
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
|
|
procedure WriteSettings({%H-}AOptions: TAbstractIDEOptions); override;
|
|
procedure RestoreSettings({%H-}AOptions: TAbstractIDEOptions); override;
|
|
end;
|
|
|
|
|
|
var
|
|
ExWindowOptionsGroup : integer;
|
|
ExWinOptionsFrameID : integer;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
{ TExWinSettings }
|
|
|
|
constructor TExWinSettings.Create(const pbReadRegFile: boolean);
|
|
begin
|
|
// inherited Create;
|
|
end;
|
|
|
|
destructor TExWinSettings.Destroy;
|
|
begin
|
|
inherited Destroy;
|
|
end;
|
|
|
|
class function TExWinSettings.GetGroupCaption: String;
|
|
begin
|
|
Result := rsExampleProjects;
|
|
end;
|
|
|
|
class function TExWinSettings.GetInstance: TAbstractIDEOptions;
|
|
begin
|
|
//result := TAbstractIDEOptions(self); // Nope, it does not like that !
|
|
result := nil;
|
|
end;
|
|
|
|
procedure TExWinSettings.DoAfterWrite(Restore: boolean);
|
|
begin
|
|
inherited DoAfterWrite(Restore);
|
|
end;
|
|
|
|
{ TExWinSettingsFrame }
|
|
|
|
|
|
procedure TExWinSettingsFrame.ButtonDefaultClick(Sender: TObject);
|
|
begin
|
|
DirectoryEdit1.Text := DefaultExamplesHome;
|
|
end;
|
|
|
|
constructor TExWinSettingsFrame.Create(TheOwner: TComponent);
|
|
begin
|
|
inherited Create(TheOwner);
|
|
DefaultExamplesHome := AppendPathDelim(LazarusIDE.GetPrimaryConfigPath)
|
|
+ AppendPathDelim(cExamplesDir);
|
|
end;
|
|
|
|
destructor TExWinSettingsFrame.Destroy;
|
|
begin
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TExWinSettingsFrame.GetTitle: String;
|
|
begin
|
|
Result := rsGeneral;
|
|
end;
|
|
|
|
procedure TExWinSettingsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
var
|
|
Config: TConfigStorage;
|
|
begin
|
|
try
|
|
Config := GetIDEConfigStorage(cConfigFileName, true);
|
|
try
|
|
DirectoryEdit1.Text := Config.GetValue('Examples/Directory', DefaultExamplesHome);
|
|
|
|
finally
|
|
Config.Free;
|
|
end;
|
|
except
|
|
on E: Exception do begin
|
|
DebugLn('TExWinSettingsFrame.ReadSettings Loading ' + cConfigFileName + ' failed: ' + E.Message);
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
|
|
// Maybe the initial settings before we have a config file ? Labels and Captions.
|
|
procedure TExWinSettingsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
begin
|
|
Label1.Caption := rsDirWhereExamplesGo;
|
|
ButtonDefault.Caption := rsDefault;
|
|
end;
|
|
|
|
class function TExWinSettingsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result := nil;
|
|
end;
|
|
|
|
// Gets called whenever user opens Options tree.
|
|
procedure TExWinSettingsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
var
|
|
Config: TConfigStorage;
|
|
begin
|
|
try
|
|
Config := GetIDEConfigStorage(cConfigFileName,false);
|
|
try
|
|
Config.SetDeleteValue('Examples/Directory',DirectoryEdit1.Text, DefaultExamplesHome);
|
|
finally
|
|
Config.Free;
|
|
end;
|
|
except
|
|
on E: Exception do begin
|
|
DebugLn('TExWinSettingsFrame.ReadSettings Saving ' + cConfigFileName + ' failed: ' + E.Message);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TExWinSettingsFrame.RestoreSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
inherited RestoreSettings(AOptions);
|
|
end;
|
|
|
|
|
|
initialization
|
|
ExWindowOptionsGroup := GetFreeIDEOptionsGroupIndex(GroupEditor);
|
|
RegisterIDEOptionsGroup(ExWindowOptionsGroup, TExWinSettings, False); // F cos I get Index from above line. I think.
|
|
|
|
|
|
end.
|