IDEIntf: TAbstractIDEOptions added Restore parameter to distinguish between Ok and Cancel

git-svn-id: trunk@27681 -
This commit is contained in:
mattias 2010-10-13 14:47:27 +00:00
parent e17fee021d
commit 5223a83d19
12 changed files with 190 additions and 58 deletions

View File

@ -155,7 +155,7 @@ type
public
class function GetGroupCaption:string; override;
class function GetInstance: TAbstractIDEOptions; override;
procedure DoAfterWrite; override;
procedure DoAfterWrite(Restore: boolean); override;
public
constructor Create;
destructor Destroy; override;
@ -414,9 +414,10 @@ begin
Result := CodeExplorerOptions;
end;
procedure TCodeExplorerOptions.DoAfterWrite;
procedure TCodeExplorerOptions.DoAfterWrite(Restore: boolean);
begin
Save;
if not Restore then
Save;
end;
procedure TCodeExplorerOptions.Clear;

View File

@ -104,7 +104,7 @@ type
public
class function GetGroupCaption:string; override;
class function GetInstance: TAbstractIDEOptions; override;
procedure DoAfterWrite; override;
procedure DoAfterWrite(Restore: boolean); override;
public
constructor Create;
destructor Destroy; override;
@ -317,10 +317,11 @@ begin
Result := CodeToolsOpts;
end;
procedure TCodeToolsOptions.DoAfterWrite;
procedure TCodeToolsOptions.DoAfterWrite(Restore: boolean);
begin
inherited DoAfterWrite;
Save;
inherited DoAfterWrite(Restore);
if not Restore then
Save;
end;
procedure TCodeToolsOptions.Load;

View File

@ -91,7 +91,8 @@
- history
- refactor compiler options (default options, load, save to file)
- disabled project compiler options, used only for storage
- replaced OwnerProject with LazProject
- replaced project compiler options OwnerProject+Project with LazProject
- addded changestamp, assign, equals to compiler options
- added buildmodes to project
- moved compileroptions and macrovalues to active buildmode

View File

@ -45,7 +45,7 @@ uses
type
{ TCompilerDiffTool
A tool to create the difference between two option sets }
A tool to collect the difference between two option sets }
TCompilerDiffTool = class
private

View File

@ -1009,7 +1009,7 @@ type
public
class function GetGroupCaption:string; override;
class function GetInstance: TAbstractIDEOptions; override;
procedure DoAfterWrite; override;
procedure DoAfterWrite(Restore: boolean); override;
public
constructor Create;
constructor CreateDefaultOnly;
@ -3709,9 +3709,10 @@ begin
Result := EditorOpts;
end;
procedure TEditorOptions.DoAfterWrite;
procedure TEditorOptions.DoAfterWrite(Restore: boolean);
begin
Save;
if not Restore then
Save;
end;
function TEditorOptions.GetSynEditOptionName(SynOption: TSynEditorOption): string;

View File

@ -286,7 +286,7 @@ type
public
class function GetGroupCaption:string; override;
class function GetInstance: TAbstractIDEOptions; override;
procedure DoAfterWrite; override;
procedure DoAfterWrite(Restore: boolean); override;
public
constructor Create;
destructor Destroy; override;
@ -797,10 +797,11 @@ begin
Result := EnvironmentOptions;
end;
procedure TEnvironmentOptions.DoAfterWrite;
procedure TEnvironmentOptions.DoAfterWrite(Restore: boolean);
begin
Save(False);
inherited DoAfterWrite;
if not Restore then
Save(False);
inherited DoAfterWrite(Restore);
end;
procedure TEnvironmentOptions.SetLazarusDefaultFilename;

View File

@ -20,7 +20,7 @@
Abstract:
The frame for 'build modes' on the compiler options.
Allows to edit build modes and build macro values.
Allows to add/delete/edit build modes and build macro values.
It does not allow to define new build macros, only values.
ToDo:

View File

@ -54,7 +54,7 @@ type
public
class function GetGroupCaption:string; override;
class function GetInstance: TAbstractIDEOptions; override;
procedure DoAfterWrite; override;
procedure DoAfterWrite(Restore: boolean); override;
public
constructor Create;
procedure Clear;
@ -110,9 +110,10 @@ begin
Result := HelpOpts;
end;
procedure THelpOptions.DoAfterWrite;
procedure THelpOptions.DoAfterWrite(Restore: boolean);
begin
Save;
if not Restore then
Save;
end;
procedure THelpOptions.Clear;

View File

@ -85,7 +85,7 @@ type
function FindEditorClass(GroupIndex, AIndex: integer): TAbstractIDEOptionsEditorClass; override;
procedure TraverseSettings(AOptions: TAbstractIDEOptions; anAction: TIDEOptsDlgAction);
procedure ReadAll;
procedure WriteAll;
procedure WriteAll(Restore: boolean);
property OptionsFilter: TAbstractIDEOptionsClass read FOptionsFilter write FOptionsFilter;
property OnLoadIDEOptions: TOnLoadIDEOptions read FOnLoadOptions write FOnLoadOptions;
@ -277,7 +277,7 @@ begin
InstanceList.Free;
end;
procedure TIDEOptionsDialog.WriteAll;
procedure TIDEOptionsDialog.WriteAll(Restore: boolean);
var
i: integer;
Rec: PIDEOptionsGroupRec;
@ -295,9 +295,12 @@ begin
Instance := Rec^.GroupClass.GetInstance;
if Instance <> nil then
begin
Instance.DoBeforeWrite;
TraverseSettings(Instance,iodaWrite);
Instance.DoAfterWrite;
Instance.DoBeforeWrite(Restore);
if Restore then
TraverseSettings(Instance,iodaWrite)
else
TraverseSettings(Instance,iodaRestore);
Instance.DoAfterWrite(Restore);
end;
end;
end;

View File

@ -366,16 +366,16 @@ type
AOptionsFilter: TAbstractIDEOptionsClass = nil); override;
procedure DoEnvironmentOptionsBeforeRead(Sender: TObject);
procedure DoEnvironmentOptionsBeforeWrite(Sender: TObject);
procedure DoEnvironmentOptionsAfterWrite(Sender: TObject);
procedure DoEnvironmentOptionsBeforeWrite(Sender: TObject; Restore: boolean);
procedure DoEnvironmentOptionsAfterWrite(Sender: TObject; Restore: boolean);
procedure DoEditorOptionsBeforeRead(Sender: TObject);
procedure DoEditorOptionsAfterWrite(Sender: TObject);
procedure DoCodetoolsOptionsAfterWrite(Sender: TObject);
procedure DoCodeExplorerOptionsAfterWrite(Sender: TObject);
procedure DoEditorOptionsAfterWrite(Sender: TObject; Restore: boolean);
procedure DoCodetoolsOptionsAfterWrite(Sender: TObject; Restore: boolean);
procedure DoCodeExplorerOptionsAfterWrite(Sender: TObject; Restore: boolean);
procedure DoProjectOptionsBeforeRead(Sender: TObject);
procedure DoProjectOptionsAfterWrite(Sender: TObject);
procedure DoCompilerOptionsBeforeWrite(Sender: TObject);
procedure DoCompilerOptionsAfterWrite(Sender: TObject);
procedure DoProjectOptionsAfterWrite(Sender: TObject; Restore: boolean);
procedure DoCompilerOptionsBeforeWrite(Sender: TObject; Restore: boolean);
procedure DoCompilerOptionsAfterWrite(Sender: TObject; Restore: boolean);
// SourceNotebook events
procedure OnSrcNoteBookActivated(Sender: TObject);
@ -4294,7 +4294,7 @@ begin
ReadAll;
end;
if IDEOptionsDialog.ShowModal = mrOk then begin
IDEOptionsDialog.WriteAll;
IDEOptionsDialog.WriteAll(false);
MainBuildBoss.SetBuildTarget(Project1.CompilerOptions.TargetOS,
Project1.CompilerOptions.TargetCPU,Project1.CompilerOptions.LCLWidgetType);
UpdateHighlighters(True);
@ -4303,6 +4303,8 @@ begin
Application.TaskBarBehavior := tbSingleButton
else
Application.TaskBarBehavior := tbDefault;
end else begin
IDEOptionsDialog.WriteAll(true);
end;
finally
IDEOptionsDialog.Free;
@ -4315,13 +4317,16 @@ begin
SaveDesktopSettings(EnvironmentOptions);
end;
procedure TMainIDE.DoEnvironmentOptionsBeforeWrite(Sender: TObject);
procedure TMainIDE.DoEnvironmentOptionsBeforeWrite(Sender: TObject;
Restore: boolean);
begin
if Restore then exit;
OldCompilerFilename:=EnvironmentOptions.CompilerFilename;
OldLanguage:=EnvironmentOptions.LanguageID;
end;
procedure TMainIDE.DoEnvironmentOptionsAfterWrite(Sender: TObject);
procedure TMainIDE.DoEnvironmentOptionsAfterWrite(Sender: TObject;
Restore: boolean);
var
MacroValueChanged,
FPCSrcDirChanged, FPCCompilerChanged,
@ -4373,6 +4378,7 @@ var
end;
begin
if Restore then exit;
// invalidate cached substituted macros
IncreaseCompilerParseStamp;
CompileProgress.SetEnabled(EnvironmentOptions.ShowCompileDialog);
@ -4416,21 +4422,25 @@ begin
Project1.UpdateAllCustomHighlighter;
end;
procedure TMainIDE.DoEditorOptionsAfterWrite(Sender: TObject);
procedure TMainIDE.DoEditorOptionsAfterWrite(Sender: TObject; Restore: boolean);
begin
if Restore then exit;
Project1.UpdateAllSyntaxHighlighter;
UpdateHighlighters(True);
SourceEditorManager.ReloadEditorOptions;
ReloadMenuShortCuts;
end;
procedure TMainIDE.DoCodetoolsOptionsAfterWrite(Sender: TObject);
procedure TMainIDE.DoCodetoolsOptionsAfterWrite(Sender: TObject; Restore: boolean);
begin
if Restore then exit;
CodeToolsOpts.AssignTo(CodeToolBoss);
end;
procedure TMainIDE.DoCodeExplorerOptionsAfterWrite(Sender: TObject);
procedure TMainIDE.DoCodeExplorerOptionsAfterWrite(Sender: TObject;
Restore: boolean);
begin
if Restore then exit;
if CodeExplorerView<>nil then
CodeExplorerView.Refresh(true);
end;
@ -4448,7 +4458,8 @@ begin
end;
end;
procedure TMainIDE.DoProjectOptionsAfterWrite(Sender: TObject);
procedure TMainIDE.DoProjectOptionsAfterWrite(Sender: TObject; Restore: boolean
);
var
Project: TProject absolute Sender;
@ -4534,6 +4545,7 @@ var
end;
begin
if Restore then exit;
SetTitle;
SetAutoCreateForms;
// extend include path
@ -4547,17 +4559,21 @@ begin
Project.DefineTemplates.AllChanged;
end;
procedure TMainIDE.DoCompilerOptionsBeforeWrite(Sender: TObject);
procedure TMainIDE.DoCompilerOptionsBeforeWrite(Sender: TObject;
Restore: boolean);
begin
if Restore then exit;
OldCompOpts := TBaseCompilerOptionsClass(Sender.ClassType).Create(nil);
OldCompOpts.Assign(TBaseCompilerOptions(Sender));
end;
procedure TMainIDE.DoCompilerOptionsAfterWrite(Sender: TObject);
procedure TMainIDE.DoCompilerOptionsAfterWrite(Sender: TObject; Restore: boolean
);
var
ProjCompOpts: TProjectCompilerOptions;
aFilename: String;
begin
if Restore then exit;
if not OldCompOpts.IsEqual(TBaseCompilerOptions(Sender)) then
begin
TBaseCompilerOptions(Sender).Modified := True;

View File

@ -22,6 +22,13 @@
Abstract:
Defines the standard message Quick Fix menu items.
ToDo:
- There is no method in an ancestor class to be overriden:
1. option: if the ancestor has a function with the same name: update the parameter list
2. option: remove the method
3. option: add a virtual method to the ancestor
}
unit MsgQuickFixes;

View File

@ -25,7 +25,7 @@ unit IDEOptionsIntf;
interface
uses
Classes, SysUtils, Controls, Buttons, Forms;
Classes, SysUtils, LCLProc, Controls, Buttons, Forms;
const
NoParent = -1;
@ -36,27 +36,50 @@ type
// types
TIDEOptionsHandler = (
iohBeforeRead,
iohAfterRead,
iohBeforeWrite,
iohAfterWrite
);
TIDEOptionsHandlers = set of TIDEOptionsHandler;
TIDEOptionsWriteEvent = procedure(Sender: TObject; Restore: boolean) of object;
{ TAbstractIDEOptions }
TAbstractIDEOptions = class(TPersistent)
private
fHandlers: array[TIDEOptionsHandler] of TMethodList;
FOnAfterRead: TNotifyEvent;
FOnAfterWrite: TNotifyEvent;
FOnAfterWrite: TIDEOptionsWriteEvent;
FOnBeforeRead: TNotifyEvent;
FOnBeforeWrite: TNotifyEvent;
FOnBeforeWrite: TIDEOptionsWriteEvent;
public
constructor Create;
destructor Destroy; override;
class function GetGroupCaption: string; virtual; abstract;
class function GetInstance: TAbstractIDEOptions; virtual; abstract;
procedure DoBeforeRead; virtual;
procedure DoAfterRead; virtual;
procedure DoBeforeWrite; virtual;
procedure DoAfterWrite; virtual;
procedure DoBeforeWrite(Restore: boolean); virtual;
procedure DoAfterWrite(Restore: boolean); virtual;
procedure AddHandlerBeforeRead(const Handler: TNotifyEvent; const AsFirst: boolean = true); // AsFirst means: first to call
procedure RemoveHandlerBeforeRead(const Handler: TNotifyEvent);
procedure AddHandlerAfterRead(const Handler: TNotifyEvent; const AsFirst: boolean = true); // AsFirst means: first to call
procedure RemoveHandlerAfterRead(const Handler: TNotifyEvent);
procedure AddHandlerBeforeWrite(const Handler: TIDEOptionsWriteEvent; const AsFirst: boolean = true); // AsFirst means: first to call
procedure RemoveHandlerBeforeWrite(const Handler: TIDEOptionsWriteEvent);
procedure AddHandlerAfterWrite(const Handler: TIDEOptionsWriteEvent; const AsFirst: boolean = true); // AsFirst means: first to call
procedure RemoveHandlerAfterWrite(const Handler: TIDEOptionsWriteEvent);
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;
property OnBeforeWrite: TIDEOptionsWriteEvent read FOnBeforeWrite write FOnBeforeWrite;
property OnAfterWrite: TIDEOptionsWriteEvent read FOnAfterWrite write FOnAfterWrite;
end;
TAbstractIDEOptionsClass = class of TAbstractIDEOptions;
@ -139,7 +162,7 @@ type
procedure Notify(Ptr: Pointer; Action: TListNotification); override;
public
procedure Resort;
procedure DoAfterWrite;
procedure DoAfterWrite(Restore: boolean);
function GetByIndex(AIndex: Integer): PIDEOptionsGroupRec;
function GetByGroupClass(AGroupClass: TAbstractIDEOptionsClass): PIDEOptionsGroupRec;
function Add(AGroupIndex: Integer; AGroupClass: TAbstractIDEOptionsClass): PIDEOptionsGroupRec; reintroduce;
@ -470,7 +493,7 @@ begin
Items[i]^.Items.Resort;
end;
procedure TIDEOptionsGroupList.DoAfterWrite;
procedure TIDEOptionsGroupList.DoAfterWrite(Restore: boolean);
var
i: integer;
Rec: PIDEOptionsGroupRec;
@ -485,7 +508,7 @@ begin
begin
Instance := Rec^.GroupClass.GetInstance;
if Instance <> nil then
Instance.DoAfterWrite;
Instance.DoAfterWrite(Restore);
end;
end;
end;
@ -510,28 +533,105 @@ end;
{ TAbstractIDEOptions }
constructor TAbstractIDEOptions.Create;
var
h: TIDEOptionsHandler;
begin
for h:=low(TIDEOptionsHandler) to high(TIDEOptionsHandler) do
fHandlers[h]:=TMethodList.Create;
end;
destructor TAbstractIDEOptions.Destroy;
var
h: TIDEOptionsHandler;
begin
for h:=low(TIDEOptionsHandler) to high(TIDEOptionsHandler) do
FreeAndNil(fHandlers[h]);
inherited Destroy;
end;
procedure TAbstractIDEOptions.DoBeforeRead;
begin
if Assigned(FOnBeforeRead) then
OnBeforeRead(Self);
FOnBeforeRead(Self);
fHandlers[iohBeforeRead].CallNotifyEvents(Self);
end;
procedure TAbstractIDEOptions.DoAfterRead;
begin
if Assigned(FOnAfterRead) then
OnAfterRead(Self);
FOnAfterRead(Self);
fHandlers[iohAfterRead].CallNotifyEvents(Self);
end;
procedure TAbstractIDEOptions.DoBeforeWrite;
procedure TAbstractIDEOptions.DoBeforeWrite(Restore: boolean);
var
i: LongInt;
begin
if Assigned(FOnBeforeWrite) then
OnBeforeWrite(Self);
FOnBeforeWrite(Self,Restore);
i:=fHandlers[iohBeforeWrite].Count;
while fHandlers[iohBeforeWrite].NextDownIndex(i) do
TIDEOptionsWriteEvent(fHandlers[iohBeforeWrite][i])(Self,Restore);
end;
procedure TAbstractIDEOptions.DoAfterWrite;
procedure TAbstractIDEOptions.DoAfterWrite(Restore: boolean);
var
i: LongInt;
begin
if Assigned(FOnAfterWrite) then
OnAfterWrite(Self);
FOnAfterWrite(Self,Restore);
i:=fHandlers[iohBeforeWrite].Count;
while fHandlers[iohBeforeWrite].NextDownIndex(i) do
TIDEOptionsWriteEvent(fHandlers[iohBeforeWrite][i])(Self,Restore);
end;
procedure TAbstractIDEOptions.AddHandlerBeforeRead(const Handler: TNotifyEvent;
const AsFirst: boolean);
begin
fHandlers[iohBeforeRead].Add(TMethod(Handler),AsFirst);
end;
procedure TAbstractIDEOptions.RemoveHandlerBeforeRead(
const Handler: TNotifyEvent);
begin
fHandlers[iohBeforeRead].Remove(TMethod(Handler));
end;
procedure TAbstractIDEOptions.AddHandlerAfterRead(const Handler: TNotifyEvent;
const AsFirst: boolean);
begin
fHandlers[iohAfterRead].Add(TMethod(Handler),AsFirst);
end;
procedure TAbstractIDEOptions.RemoveHandlerAfterRead(const Handler: TNotifyEvent
);
begin
fHandlers[iohAfterRead].Remove(TMethod(Handler));
end;
procedure TAbstractIDEOptions.AddHandlerBeforeWrite(
const Handler: TIDEOptionsWriteEvent; const AsFirst: boolean);
begin
fHandlers[iohBeforeWrite].Add(TMethod(Handler),AsFirst);
end;
procedure TAbstractIDEOptions.RemoveHandlerBeforeWrite(
const Handler: TIDEOptionsWriteEvent);
begin
fHandlers[iohBeforeWrite].Remove(TMethod(Handler));
end;
procedure TAbstractIDEOptions.AddHandlerAfterWrite(
const Handler: TIDEOptionsWriteEvent; const AsFirst: boolean);
begin
fHandlers[iohAfterWrite].Add(TMethod(Handler),AsFirst);
end;
procedure TAbstractIDEOptions.RemoveHandlerAfterWrite(
const Handler: TIDEOptionsWriteEvent);
begin
fHandlers[iohAfterWrite].Remove(TMethod(Handler));
end;
initialization