mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-10 03:16:10 +02:00
ideintf, ide, components: IDE options:
- introduce 2 new abstract options classes: TAbstractIDEEnvironmentOptions and TAbstractIDEProjectOptions - derive all current options classes from TAbstractIDEEnvironmentOptions - fix broken previously education options - move away actions triggered by reading / saving of predefined IDE options (like TEnvironmentOption, TIDEOptions, ...) from DoOpenIDEOptions to new read/write event handlers - allow filtering of options showed in IDE options dialog by some options class - use options filtering when show Object Inspect, Editor, CodeExplorer option git-svn-id: trunk@23252 -
This commit is contained in:
parent
52d15f47b8
commit
6c7c0ee0ad
@ -116,7 +116,7 @@ type
|
||||
property ChangeStep: integer read FChangeStep write SetChangeStep;
|
||||
end;
|
||||
|
||||
TEduOptions = class(TAbstractIDEOptions)
|
||||
TEduOptions = class(TAbstractIDEEnvironmentOptions)
|
||||
private
|
||||
FEnabled: boolean;
|
||||
FFilename: string;
|
||||
@ -129,6 +129,7 @@ type
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
class function GetGroupCaption: string; override;
|
||||
class function GetInstance: TAbstractIDEOptions;
|
||||
property Root: TEduOptionsNode read FRoot;
|
||||
function Load(Config: TConfigStorage): TModalResult; virtual;
|
||||
function Save(Config: TConfigStorage): TModalResult; virtual;
|
||||
@ -321,6 +322,12 @@ begin
|
||||
Result:=EduRSEducation;
|
||||
end;
|
||||
|
||||
class function TEduOptions.GetInstance: TAbstractIDEOptions;
|
||||
begin
|
||||
Result := EducationOptions;
|
||||
end;
|
||||
|
||||
|
||||
function TEduOptions.Load(Config: TConfigStorage): TModalResult;
|
||||
begin
|
||||
FEnabled:=Config.GetValue('Enabled',false);
|
||||
|
@ -46,7 +46,7 @@ type
|
||||
|
||||
{ TFormatSettings }
|
||||
|
||||
TFormatSettings = class(TAbstractIDEOptions)
|
||||
TFormatSettings = class(TAbstractIDEEnvironmentOptions)
|
||||
private
|
||||
fcObfuscate: TSetObfuscate;
|
||||
fcClarify: TSetClarify;
|
||||
|
@ -57,7 +57,7 @@ type
|
||||
|
||||
{ TDebuggerOptions }
|
||||
|
||||
TDebuggerOptions = class(TAbstractIDEOptions)
|
||||
TDebuggerOptions = class(TAbstractIDEEnvironmentOptions)
|
||||
public
|
||||
class function GetGroupCaption:string; override;
|
||||
class function GetInstance: TAbstractIDEOptions; override;
|
||||
|
@ -128,7 +128,7 @@ const
|
||||
|
||||
type
|
||||
|
||||
TCodeExplorerOptions = class(TAbstractIDEOptions)
|
||||
TCodeExplorerOptions = class(TAbstractIDEEnvironmentOptions)
|
||||
private
|
||||
FCategories: TCodeExplorerCategories;
|
||||
FChangeStep: integer;
|
||||
|
@ -47,7 +47,7 @@ type
|
||||
|
||||
{ TCodeToolsOptions }
|
||||
|
||||
TCodeToolsOptions = class(TAbstractIDEOptions)
|
||||
TCodeToolsOptions = class(TAbstractIDEEnvironmentOptions)
|
||||
private
|
||||
FClassHeaderComments: boolean;
|
||||
FClassImplementationComments: boolean;
|
||||
|
@ -844,7 +844,7 @@ type
|
||||
|
||||
{ TEditorOptions - Editor Options object used to hold the editor options }
|
||||
|
||||
TEditorOptions = class(TAbstractIDEOptions)
|
||||
TEditorOptions = class(TAbstractIDEEnvironmentOptions)
|
||||
private
|
||||
xmlconfig: TRttiXMLConfig;
|
||||
|
||||
|
@ -137,13 +137,14 @@ const
|
||||
type
|
||||
{ TEnvironmentOptions - class for storing environment options }
|
||||
|
||||
TEnvironmentOptions = class(TAbstractIDEOptions)
|
||||
TEnvironmentOptions = class(TAbstractIDEEnvironmentOptions)
|
||||
private
|
||||
FFilename: string;
|
||||
FFileAge: longint;
|
||||
FFileHasChangedOnDisk: boolean;
|
||||
FIDESpeedButtonsVisible: boolean;
|
||||
FIDETitleStartsWithProject: boolean;
|
||||
FOnChange: TNotifyEvent;
|
||||
FShowButtonGlyphs: TApplicationShowGlyphs;
|
||||
FShowMenuGlyphs: TApplicationShowGlyphs;
|
||||
FXMLCfg: TXMLConfig;
|
||||
@ -771,6 +772,7 @@ end;
|
||||
procedure TEnvironmentOptions.DoAfterWrite;
|
||||
begin
|
||||
Save(False);
|
||||
inherited DoAfterWrite;
|
||||
end;
|
||||
|
||||
procedure TEnvironmentOptions.SetLazarusDefaultFilename;
|
||||
|
@ -43,7 +43,7 @@ uses
|
||||
type
|
||||
{ THelpOptions }
|
||||
|
||||
THelpOptions = class(TAbstractIDEOptions)
|
||||
THelpOptions = class(TAbstractIDEEnvironmentOptions)
|
||||
private
|
||||
FFilename: string;
|
||||
FFPCDocsHTMLDirectory: string;
|
||||
|
@ -50,25 +50,32 @@ type
|
||||
private
|
||||
FOnLoadOptions: TOnLoadIDEOptions;
|
||||
FOnSaveOptions: TOnSaveIDEOptions;
|
||||
FOptionsFilter: TAbstractIDEOptionsClass;
|
||||
PrevEditor: TAbstractIDEOptionsEditor;
|
||||
FEditorToOpen: TAbstractIDEOptionsEditorClass;
|
||||
FEditorsCreated: Boolean;
|
||||
|
||||
function CheckValues: boolean;
|
||||
procedure DoOpenEditor;
|
||||
procedure LoadIDEOptions(Sender: TObject; AOptions: TAbstractIDEOptions);
|
||||
procedure SaveIDEOptions(Sender: TObject; AOptions: TAbstractIDEOptions);
|
||||
procedure CreateEditors;
|
||||
function SearchEditorNode(AEditor: TAbstractIDEOptionsEditorClass): TTreeNode;
|
||||
published
|
||||
property OnLoadIDEOptions: TOnLoadIDEOptions read FOnLoadOptions write FOnLoadOptions;
|
||||
property OnSaveIDEOptions: TOnSaveIDEOptions read FOnSaveOptions write FOnSaveOptions;
|
||||
function PassesFilter(ARec: PIDEOptionsGroupRec): Boolean;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
function ShowModal: Integer; override;
|
||||
|
||||
procedure OpenEditor(AEditor: TAbstractIDEOptionsEditorClass); override;
|
||||
function FindEditor(AEditor: TAbstractIDEOptionsEditorClass): TAbstractIDEOptionsEditor; override;
|
||||
procedure ReadSettings(AOptions: TAbstractIDEOptions);
|
||||
procedure WriteSettings(AOptions: TAbstractIDEOptions);
|
||||
|
||||
procedure ReadAll;
|
||||
procedure WriteAll;
|
||||
|
||||
property OptionsFilter: TAbstractIDEOptionsClass read FOptionsFilter write FOptionsFilter;
|
||||
property OnLoadIDEOptions: TOnLoadIDEOptions read FOnLoadOptions write FOnLoadOptions;
|
||||
property OnSaveIDEOptions: TOnSaveIDEOptions read FOnSaveOptions write FOnSaveOptions;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -82,18 +89,14 @@ constructor TIDEOptionsDialog.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
PrevEditor := nil;
|
||||
FEditorToOpen := nil;
|
||||
FEditorsCreated := False;
|
||||
|
||||
IDEDialogLayoutList.ApplyLayout(Self, Width, Height);
|
||||
Caption := dlgIDEOptions;
|
||||
|
||||
CreateEditors;
|
||||
|
||||
ButtonPanel.OKButton.OnClick := @OKButtonClick;
|
||||
ButtonPanel.CancelButton.OnClick := @CancelButtonClick;
|
||||
ButtonPanel.HelpButton.OnClick := @HelpButtonClick;
|
||||
|
||||
if CategoryTree.Items.Count > 0 then
|
||||
CategoryTree.Selected := CategoryTree.Items.GetFirstNode;
|
||||
end;
|
||||
|
||||
procedure TIDEOptionsDialog.HelpButtonClick(Sender: TObject);
|
||||
@ -187,6 +190,7 @@ var
|
||||
end;
|
||||
|
||||
begin
|
||||
CreateEditors;
|
||||
if AOptions <> nil then
|
||||
ClassTypeForCompare := AOptions.ClassType
|
||||
else
|
||||
@ -230,13 +234,19 @@ begin
|
||||
for i := 0 to IDEEditorGroups.Count - 1 do
|
||||
begin
|
||||
Rec := IDEEditorGroups[i];
|
||||
if not PassesFilter(Rec) then
|
||||
Continue;
|
||||
if Rec^.Items <> nil then
|
||||
begin
|
||||
if Rec^.GroupClass <> nil then
|
||||
begin
|
||||
Instance := Rec^.GroupClass.GetInstance;
|
||||
if Instance <> nil then
|
||||
begin
|
||||
Instance.DoBeforeRead;
|
||||
ReadSettings(Instance);
|
||||
Instance.DoAfterRead;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -253,13 +263,19 @@ begin
|
||||
for i := 0 to IDEEditorGroups.Count - 1 do
|
||||
begin
|
||||
Rec := IDEEditorGroups[i];
|
||||
if not PassesFilter(Rec) then
|
||||
Continue;
|
||||
if Rec^.Items <> nil then
|
||||
begin
|
||||
if Rec^.GroupClass <> nil then
|
||||
begin
|
||||
Instance := Rec^.GroupClass.GetInstance;
|
||||
if Instance <> nil then
|
||||
begin
|
||||
Instance.DoBeforeWrite;
|
||||
WriteSettings(Instance);
|
||||
Instance.DoAfterWrite;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -331,17 +347,22 @@ var
|
||||
Rec: PIDEOptionsGroupRec;
|
||||
ACaption: string;
|
||||
begin
|
||||
if FEditorsCreated then
|
||||
Exit;
|
||||
FEditorsCreated := True;
|
||||
IDEEditorGroups.Resort;
|
||||
|
||||
for i := 0 to IDEEditorGroups.Count - 1 do
|
||||
begin
|
||||
Rec := IDEEditorGroups[i];
|
||||
if not PassesFilter(Rec) then
|
||||
Continue;
|
||||
if Rec^.Items <> nil then
|
||||
begin
|
||||
if Rec^.GroupClass<>nil then
|
||||
ACaption := Rec^.GroupClass.GetGroupCaption
|
||||
else
|
||||
ACaption := format('g<%d>',[i]);
|
||||
ACaption := format('Group<%d>',[i]);
|
||||
GroupNode := CategoryTree.Items.AddChild(nil, ACaption);
|
||||
for j := 0 to Rec^.Items.Count - 1 do
|
||||
begin
|
||||
@ -392,15 +413,41 @@ begin
|
||||
Result := Traverse(CategoryTree.Items.GetFirstNode);
|
||||
end;
|
||||
|
||||
procedure TIDEOptionsDialog.OpenEditor(AEditor: TAbstractIDEOptionsEditorClass);
|
||||
function TIDEOptionsDialog.PassesFilter(ARec: PIDEOptionsGroupRec): Boolean;
|
||||
begin
|
||||
if (ARec^.GroupClass = nil) and (OptionsFilter <> nil) then
|
||||
Exit(False);
|
||||
if (ARec^.GroupClass <> nil) and not ARec^.GroupClass.InheritsFrom(OptionsFilter) then
|
||||
Exit(False);
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
procedure TIDEOptionsDialog.DoOpenEditor;
|
||||
var
|
||||
Node: TTreeNode;
|
||||
begin
|
||||
Node := SearchEditorNode(AEditor);
|
||||
if FEditorToOpen = nil then
|
||||
Node := CategoryTree.Items.GetFirstNode
|
||||
else
|
||||
Node := SearchEditorNode(FEditorToOpen);
|
||||
if Node <> nil then
|
||||
CategoryTree.Selected := Node;
|
||||
end;
|
||||
|
||||
function TIDEOptionsDialog.ShowModal: Integer;
|
||||
begin
|
||||
CreateEditors;
|
||||
DoOpenEditor;
|
||||
Result := inherited ShowModal;
|
||||
end;
|
||||
|
||||
procedure TIDEOptionsDialog.OpenEditor(AEditor: TAbstractIDEOptionsEditorClass);
|
||||
begin
|
||||
FEditorToOpen := AEditor;
|
||||
if Visible then
|
||||
DoOpenEditor;
|
||||
end;
|
||||
|
||||
function TIDEOptionsDialog.FindEditor(AEditor: TAbstractIDEOptionsEditorClass): TAbstractIDEOptionsEditor;
|
||||
var
|
||||
Node: TTreeNode;
|
||||
|
199
ide/main.pp
199
ide/main.pp
@ -347,7 +347,16 @@ type
|
||||
// Environment options dialog events
|
||||
procedure OnLoadIDEOptions(Sender: TObject; AOptions: TAbstractIDEOptions);
|
||||
procedure OnSaveIDEOptions(Sender: TObject; AOptions: TAbstractIDEOptions);
|
||||
procedure DoOpenIDEOptions(AEditor: TAbstractIDEOptionsEditorClass); override;
|
||||
procedure DoOpenIDEOptions(AEditor: TAbstractIDEOptionsEditorClass;
|
||||
AOptionsFilter: TAbstractIDEOptionsClass = nil); override;
|
||||
|
||||
procedure DoEnvironmentOptionsBeforeRead(Sender: TObject);
|
||||
procedure DoEnvironmentOptionsBeforeWrite(Sender: TObject);
|
||||
procedure DoEnvironmentOptionsAfterWrite(Sender: TObject);
|
||||
procedure DoEditorOptionsBeforeRead(Sender: TObject);
|
||||
procedure DoEditorOptionsAfterWrite(Sender: TObject);
|
||||
procedure DoCodetoolsOptionsAfterWrite(Sender: TObject);
|
||||
procedure DoCodeExplorerOptionsAfterWrite(Sender: TObject);
|
||||
|
||||
// SourceNotebook events
|
||||
procedure OnSrcNoteBookActivated(Sender: TObject);
|
||||
@ -558,6 +567,7 @@ type
|
||||
FOIHelpProvider: TAbstractIDEHTMLProvider;
|
||||
FWaitForClose: Boolean;
|
||||
FFixingGlobalComponentLock: integer;
|
||||
OldCompilerFilename, OldLanguage: String;
|
||||
|
||||
procedure RenameInheritedMethods(AnUnitInfo: TUnitInfo; List: TStrings);
|
||||
function OIHelpProvider: TAbstractIDEHTMLProvider;
|
||||
@ -1120,6 +1130,9 @@ begin
|
||||
EnvironmentOptions := TEnvironmentOptions.Create;
|
||||
with EnvironmentOptions do
|
||||
begin
|
||||
OnBeforeRead := @DoEnvironmentOptionsBeforeRead;
|
||||
OnBeforeWrite := @DoEnvironmentOptionsBeforeWrite;
|
||||
OnAfterWrite := @DoEnvironmentOptionsAfterWrite;
|
||||
SetLazarusDefaultFilename;
|
||||
Load(false);
|
||||
if Application.HasOption('language') then
|
||||
@ -1140,6 +1153,8 @@ begin
|
||||
UpdateDefaultPascalFileExtensions;
|
||||
|
||||
EditorOpts := TEditorOptions.Create;
|
||||
EditorOpts.OnBeforeRead := @DoEditorOptionsBeforeRead;
|
||||
EditorOpts.OnAfterWrite := @DoEditorOptionsAfterWrite;
|
||||
SetupIDECommands;
|
||||
SetupIDEMsgQuickFixItems;
|
||||
EditorOpts.Load;
|
||||
@ -1152,11 +1167,13 @@ begin
|
||||
CodeToolsOpts := TCodeToolsOptions.Create;
|
||||
with CodeToolsOpts do
|
||||
begin
|
||||
OnAfterWrite := @DoCodetoolsOptionsAfterWrite;
|
||||
SetLazarusDefaultFilename;
|
||||
Load;
|
||||
end;
|
||||
|
||||
CodeExplorerOptions := TCodeExplorerOptions.Create;
|
||||
CodeExplorerOptions.OnAfterWrite := @DoCodeExplorerOptionsAfterWrite;
|
||||
CodeExplorerOptions.Load;
|
||||
|
||||
MainBuildBoss.SetupInputHistories;
|
||||
@ -4154,14 +4171,52 @@ begin
|
||||
SaveDesktopSettings(AOptions as TEnvironmentOptions);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoOpenIDEOptions(AEditor: TAbstractIDEOptionsEditorClass);
|
||||
procedure TMainIDE.DoOpenIDEOptions(AEditor: TAbstractIDEOptionsEditorClass;
|
||||
AOptionsFilter: TAbstractIDEOptionsClass = nil);
|
||||
var
|
||||
IDEOptionsDialog: TIDEOptionsDialog;
|
||||
begin
|
||||
IDEOptionsDialog := TIDEOptionsDialog.Create(nil);
|
||||
|
||||
try
|
||||
if AOptionsFilter = nil then
|
||||
if AEditor <> nil then
|
||||
AOptionsFilter := AEditor.SupportedOptionsClass
|
||||
else
|
||||
AOptionsFilter := TAbstractIDEEnvironmentOptions;
|
||||
IDEOptionsDialog.OptionsFilter := AOptionsFilter;
|
||||
IDEOptionsDialog.OpenEditor(AEditor);
|
||||
|
||||
with IDEOptionsDialog do
|
||||
begin
|
||||
OnLoadIDEOptions:=@Self.OnLoadIDEOptions;
|
||||
OnSaveIDEOptions:=@Self.OnSaveIDEOptions;
|
||||
ReadAll;
|
||||
end;
|
||||
if IDEOptionsDialog.ShowModal = mrOk then
|
||||
IDEOptionsDialog.WriteAll;
|
||||
finally
|
||||
IDEOptionsDialog.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoEnvironmentOptionsBeforeRead(Sender: TObject);
|
||||
begin
|
||||
// update EnvironmentOptions (save current window positions)
|
||||
SaveDesktopSettings(EnvironmentOptions);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoEnvironmentOptionsBeforeWrite(Sender: TObject);
|
||||
begin
|
||||
OldCompilerFilename:=EnvironmentOptions.CompilerFilename;
|
||||
OldLanguage:=EnvironmentOptions.LanguageID;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoEnvironmentOptionsAfterWrite(Sender: TObject);
|
||||
var
|
||||
MacroValueChanged,
|
||||
FPCSrcDirChanged, FPCCompilerChanged,
|
||||
LazarusSrcDirChanged: boolean;
|
||||
OldCompilerFilename: string;
|
||||
OldLanguage: String;
|
||||
|
||||
procedure ChangeMacroValue(const MacroName, NewValue: string);
|
||||
begin
|
||||
@ -4208,87 +4263,65 @@ var
|
||||
EnvironmentOptions.ObjectInspectorOptions.AssignTo(ObjectInspector1);
|
||||
end;
|
||||
|
||||
procedure UpdateEditorOptions;
|
||||
begin
|
||||
Project1.UpdateAllSyntaxHighlighter;
|
||||
SourceNotebook.ReloadEditorOptions;
|
||||
ReloadMenuShortCuts;
|
||||
end;
|
||||
|
||||
begin
|
||||
IDEOptionsDialog := TIDEOptionsDialog.Create(nil);
|
||||
|
||||
try
|
||||
IDEOptionsDialog.OpenEditor(AEditor);
|
||||
// update EnvironmentOptions (save current window positions)
|
||||
SaveDesktopSettings(EnvironmentOptions);
|
||||
// update editor options?
|
||||
Project1.UpdateAllCustomHighlighter;
|
||||
|
||||
with IDEOptionsDialog do
|
||||
begin
|
||||
OnLoadIDEOptions:=@Self.OnLoadIDEOptions;
|
||||
OnSaveIDEOptions:=@Self.OnSaveIDEOptions;
|
||||
ReadAll;
|
||||
end;
|
||||
if IDEOptionsDialog.ShowModal = mrOk then
|
||||
begin
|
||||
// invalidate cached substituted macros
|
||||
IncreaseCompilerParseStamp;
|
||||
|
||||
// load settings from IDEOptionsDialog to EnvironmentOptions
|
||||
OldCompilerFilename:=EnvironmentOptions.CompilerFilename;
|
||||
OldLanguage:=EnvironmentOptions.LanguageID;
|
||||
IDEOptionsDialog.WriteAll;
|
||||
CompileProgress.SetEnabled(EnvironmentOptions.ShowCompileDialog);
|
||||
|
||||
UpdateDefaultPascalFileExtensions;
|
||||
|
||||
if OldLanguage<>EnvironmentOptions.LanguageID then
|
||||
begin
|
||||
TranslateResourceStrings(EnvironmentOptions.LazarusDirectory,
|
||||
EnvironmentOptions.LanguageID);
|
||||
PkgBoss.TranslateResourceStrings;
|
||||
end;
|
||||
|
||||
// set global variables
|
||||
UpdateEnglishErrorMsgFilename;
|
||||
MacroValueChanged:=false;
|
||||
FPCSrcDirChanged:=false;
|
||||
FPCCompilerChanged:=OldCompilerFilename<>EnvironmentOptions.CompilerFilename;
|
||||
LazarusSrcDirChanged:=false;
|
||||
ChangeMacroValue('LazarusDir',EnvironmentOptions.LazarusDirectory);
|
||||
ChangeMacroValue('FPCSrcDir',EnvironmentOptions.FPCSourceDirectory);
|
||||
|
||||
if MacroValueChanged then CodeToolBoss.DefineTree.ClearCache;
|
||||
if FPCCompilerChanged or FPCSrcDirChanged then
|
||||
MainBuildBoss.RescanCompilerDefines(true, false);
|
||||
|
||||
UpdateEditorOptions;
|
||||
|
||||
CodeToolsOpts.AssignTo(CodeToolBoss);
|
||||
// save to disk
|
||||
IDEEditorGroups.DoAfterWrite;
|
||||
|
||||
// update environment
|
||||
UpdateDesigners;
|
||||
UpdateObjectInspector;
|
||||
SetupHints;
|
||||
Application.ShowButtonGlyphs := EnvironmentOptions.ShowButtonGlyphs;
|
||||
Application.ShowMenuGlyphs := EnvironmentOptions.ShowMenuGlyphs;
|
||||
|
||||
// reload lazarus packages
|
||||
if LazarusSrcDirChanged then
|
||||
PkgBoss.LazarusSrcDirChanged;
|
||||
|
||||
UpdateCaption;
|
||||
|
||||
if CodeExplorerView<>nil then
|
||||
CodeExplorerView.Refresh(true);
|
||||
end;
|
||||
finally
|
||||
IDEOptionsDialog.Free;
|
||||
// invalidate cached substituted macros
|
||||
IncreaseCompilerParseStamp;
|
||||
CompileProgress.SetEnabled(EnvironmentOptions.ShowCompileDialog);
|
||||
UpdateDefaultPascalFileExtensions;
|
||||
if OldLanguage <> EnvironmentOptions.LanguageID then
|
||||
begin
|
||||
TranslateResourceStrings(EnvironmentOptions.LazarusDirectory,
|
||||
EnvironmentOptions.LanguageID);
|
||||
PkgBoss.TranslateResourceStrings;
|
||||
end;
|
||||
// set global variables
|
||||
UpdateEnglishErrorMsgFilename;
|
||||
MacroValueChanged:=false;
|
||||
FPCSrcDirChanged:=false;
|
||||
FPCCompilerChanged:=OldCompilerFilename<>EnvironmentOptions.CompilerFilename;
|
||||
LazarusSrcDirChanged:=false;
|
||||
ChangeMacroValue('LazarusDir',EnvironmentOptions.LazarusDirectory);
|
||||
ChangeMacroValue('FPCSrcDir',EnvironmentOptions.FPCSourceDirectory);
|
||||
|
||||
if MacroValueChanged then CodeToolBoss.DefineTree.ClearCache;
|
||||
if FPCCompilerChanged or FPCSrcDirChanged then
|
||||
MainBuildBoss.RescanCompilerDefines(true, false);
|
||||
|
||||
// update environment
|
||||
UpdateDesigners;
|
||||
UpdateObjectInspector;
|
||||
SetupHints;
|
||||
Application.ShowButtonGlyphs := EnvironmentOptions.ShowButtonGlyphs;
|
||||
Application.ShowMenuGlyphs := EnvironmentOptions.ShowMenuGlyphs;
|
||||
|
||||
// reload lazarus packages
|
||||
if LazarusSrcDirChanged then
|
||||
PkgBoss.LazarusSrcDirChanged;
|
||||
UpdateCaption;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoEditorOptionsBeforeRead(Sender: TObject);
|
||||
begin
|
||||
// update editor options?
|
||||
Project1.UpdateAllCustomHighlighter;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoEditorOptionsAfterWrite(Sender: TObject);
|
||||
begin
|
||||
Project1.UpdateAllSyntaxHighlighter;
|
||||
SourceNotebook.ReloadEditorOptions;
|
||||
ReloadMenuShortCuts;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoCodetoolsOptionsAfterWrite(Sender: TObject);
|
||||
begin
|
||||
CodeToolsOpts.AssignTo(CodeToolBoss);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoCodeExplorerOptionsAfterWrite(Sender: TObject);
|
||||
begin
|
||||
if CodeExplorerView<>nil then
|
||||
CodeExplorerView.Refresh(true);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEnvEditorOptionsClicked(Sender: TObject);
|
||||
|
@ -39,13 +39,30 @@ type
|
||||
{ TAbstractIDEOptions }
|
||||
|
||||
TAbstractIDEOptions = class(TPersistent)
|
||||
private
|
||||
FOnAfterRead: TNotifyEvent;
|
||||
FOnAfterWrite: TNotifyEvent;
|
||||
FOnBeforeRead: TNotifyEvent;
|
||||
FOnBeforeWrite: TNotifyEvent;
|
||||
public
|
||||
class function GetGroupCaption:string; virtual; abstract;
|
||||
class function GetInstance: TAbstractIDEOptions; virtual; abstract;
|
||||
|
||||
procedure DoBeforeRead; virtual;
|
||||
procedure DoAfterRead; virtual;
|
||||
procedure DoBeforeWrite; virtual;
|
||||
procedure DoAfterWrite; virtual;
|
||||
|
||||
property OnBeforeRead: TNotifyEvent read FOnBeforeRead write FOnBeforeRead;
|
||||
property OnAfterRead: TNotifyEvent read FOnAfterRead write FOnAfterRead;
|
||||
property OnBeforeWrite: TNotifyEvent read FOnBeforeWrite write FOnBeforeWrite;
|
||||
property OnAfterWrite: TNotifyEvent read FOnAfterWrite write FOnAfterWrite;
|
||||
end;
|
||||
TAbstractIDEOptionsClass = class of TAbstractIDEOptions;
|
||||
|
||||
TAbstractIDEEnvironmentOptions = class(TAbstractIDEOptions);
|
||||
TAbstractIDEProjectOptions = class(TAbstractIDEOptions);
|
||||
|
||||
TOnLoadIDEOptions = procedure(Sender: TObject; AOptions: TAbstractIDEOptions) of object;
|
||||
TOnSaveIDEOptions = procedure(Sender: TObject; AOptions: TAbstractIDEOptions) of object;
|
||||
|
||||
@ -417,9 +434,28 @@ end;
|
||||
|
||||
{ TAbstractIDEOptions }
|
||||
|
||||
procedure TAbstractIDEOptions.DoBeforeRead;
|
||||
begin
|
||||
if Assigned(FOnBeforeRead) then
|
||||
OnBeforeRead(Self);
|
||||
end;
|
||||
|
||||
procedure TAbstractIDEOptions.DoAfterRead;
|
||||
begin
|
||||
if Assigned(FOnAfterRead) then
|
||||
OnAfterRead(Self);
|
||||
end;
|
||||
|
||||
procedure TAbstractIDEOptions.DoBeforeWrite;
|
||||
begin
|
||||
if Assigned(FOnBeforeWrite) then
|
||||
OnBeforeWrite(Self);
|
||||
end;
|
||||
|
||||
procedure TAbstractIDEOptions.DoAfterWrite;
|
||||
begin
|
||||
// nothing
|
||||
if Assigned(FOnAfterWrite) then
|
||||
OnAfterWrite(Self);
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
@ -215,7 +215,8 @@ type
|
||||
function GetPrimaryConfigPath: String; virtual; abstract;
|
||||
function GetSecondaryConfigPath: String; virtual; abstract;
|
||||
procedure CopySecondaryConfigFile(const AFilename: String); virtual; abstract;
|
||||
procedure DoOpenIDEOptions(AEditor: TAbstractIDEOptionsEditorClass); virtual; abstract;
|
||||
procedure DoOpenIDEOptions(AEditor: TAbstractIDEOptionsEditorClass;
|
||||
AOptionsFilter: TAbstractIDEOptionsClass = nil); virtual; abstract;
|
||||
|
||||
// filenames, paths
|
||||
function CreateNewUniqueFilename(const Prefix, Ext: string;
|
||||
|
Loading…
Reference in New Issue
Block a user