ide: improve ideoptionsdlg

git-svn-id: trunk@17089 -
This commit is contained in:
paul 2008-10-22 02:10:28 +00:00
parent 1c6fd9cd8d
commit efbdbb855d

View File

@ -22,8 +22,6 @@
Abstract: Abstract:
This unit defines a dialog for the lazarus options. This unit defines a dialog for the lazarus options.
TODO: remove FEditors
} }
unit IdeOptionsDlg; unit IdeOptionsDlg;
@ -50,7 +48,6 @@ type
FOnLoadOptions: TOnLoadIDEOptions; FOnLoadOptions: TOnLoadIDEOptions;
FOnSaveOptions: TOnSaveIDEOptions; FOnSaveOptions: TOnSaveIDEOptions;
PrevEditor: TAbstractIDEOptionsEditor; PrevEditor: TAbstractIDEOptionsEditor;
FEditors: TList;
function CheckValues: boolean; function CheckValues: boolean;
procedure LoadIDEOptions(Sender: TObject; AOptions: TAbstractIDEOptions); procedure LoadIDEOptions(Sender: TObject; AOptions: TAbstractIDEOptions);
@ -61,7 +58,6 @@ type
property OnSaveIDEOptions: TOnSaveIDEOptions read FOnSaveOptions write FOnSaveOptions; property OnSaveIDEOptions: TOnSaveIDEOptions read FOnSaveOptions write FOnSaveOptions;
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure OpenEditor(AEditor: TAbstractIDEOptionsEditorClass); procedure OpenEditor(AEditor: TAbstractIDEOptionsEditorClass);
procedure ReadSettings(AOptions: TAbstractIDEOptions); procedure ReadSettings(AOptions: TAbstractIDEOptions);
procedure WriteSettings(AOptions: TAbstractIDEOptions); procedure WriteSettings(AOptions: TAbstractIDEOptions);
@ -82,7 +78,6 @@ begin
IDEDialogLayoutList.ApplyLayout(Self, Width, Height); IDEDialogLayoutList.ApplyLayout(Self, Width, Height);
Caption := lisMenuGeneralOptions; Caption := lisMenuGeneralOptions;
FEditors := TList.Create;
CreateEditors; CreateEditors;
ButtonPanel.OKButton.OnClick := @OKButtonClick; ButtonPanel.OKButton.OnClick := @OKButtonClick;
@ -93,12 +88,6 @@ begin
CategoryTree.Selected := CategoryTree.Items.GetFirstNode; CategoryTree.Selected := CategoryTree.Items.GetFirstNode;
end; end;
destructor TIDEOptionsDialog.Destroy;
begin
FEditors.Free;
inherited Destroy;
end;
procedure TIDEOptionsDialog.HelpButtonClick(Sender: TObject); procedure TIDEOptionsDialog.HelpButtonClick(Sender: TObject);
begin begin
ShowContextHelpForIDE(Self); ShowContextHelpForIDE(Self);
@ -153,32 +142,64 @@ begin
end; end;
procedure TIDEOptionsDialog.ReadSettings(AOptions: TAbstractIDEOptions); procedure TIDEOptionsDialog.ReadSettings(AOptions: TAbstractIDEOptions);
var
i: integer; procedure Traverse(Node: TTreeNode);
begin
if Node <> nil then
begin
if Node.Data <> nil then
with TAbstractIDEOptionsEditor(Node.Data) do
if SupportedOptionsClass = AOptions.ClassType then
ReadSettings(AOptions);
Traverse(Node.GetFirstChild);
Traverse(Node.GetNextSibling);
end;
end;
begin begin
for i := 0 to FEditors.Count - 1 do Traverse(CategoryTree.Items.GetFirstNode);
TAbstractIDEOptionsEditor(FEditors[i]).ReadSettings(AOptions);
end; end;
procedure TIDEOptionsDialog.WriteSettings(AOptions: TAbstractIDEOptions); procedure TIDEOptionsDialog.WriteSettings(AOptions: TAbstractIDEOptions);
var
i: integer; procedure Traverse(Node: TTreeNode);
begin
if Node <> nil then
begin
if Node.Data <> nil then
with TAbstractIDEOptionsEditor(Node.Data) do
if SupportedOptionsClass = AOptions.ClassType then
WriteSettings(AOptions);
Traverse(Node.GetFirstChild);
Traverse(Node.GetNextSibling);
end;
end;
begin begin
for i := 0 to FEditors.Count - 1 do Traverse(CategoryTree.Items.GetFirstNode);
TAbstractIDEOptionsEditor(FEditors[i]).WriteSettings(AOptions);
end; end;
function TIDEOptionsDialog.CheckValues: boolean; function TIDEOptionsDialog.CheckValues: boolean;
var
i: integer; function Traverse(Node: TTreeNode): Boolean;
begin
Result := True;
for i := 0 to FEditors.Count - 1 do
begin begin
Result := TAbstractIDEOptionsEditor(FEditors[i]).Check; if Node <> nil then
if not Result then begin
break; if Node.Data <> nil then
Result := TAbstractIDEOptionsEditor(Node.Data).Check
else
Result := True;
Result := Result and
Traverse(Node.GetFirstChild) and
Traverse(Node.GetNextSibling);
end
else
Result := True;
end; end;
begin
Result := Traverse(CategoryTree.Items.GetFirstNode);
end; end;
procedure TIDEOptionsDialog.LoadIDEOptions(Sender: TObject; AOptions: TAbstractIDEOptions); procedure TIDEOptionsDialog.LoadIDEOptions(Sender: TObject; AOptions: TAbstractIDEOptions);
@ -216,7 +237,6 @@ begin
Instance.OnLoadIDEOptions := @LoadIDEOptions; Instance.OnLoadIDEOptions := @LoadIDEOptions;
Instance.OnSaveIDEOptions := @SaveIDEOptions; Instance.OnSaveIDEOptions := @SaveIDEOptions;
Instance.Setup; Instance.Setup;
FEditors.Add(Instance);
ItemNode := CategoryTree.Items.AddChild(GroupNode, Instance.GetTitle); ItemNode := CategoryTree.Items.AddChild(GroupNode, Instance.GetTitle);
ItemNode.Data := Instance; ItemNode.Data := Instance;
@ -227,6 +247,7 @@ begin
end; end;
procedure TIDEOptionsDialog.OpenEditor(AEditor: TAbstractIDEOptionsEditorClass); procedure TIDEOptionsDialog.OpenEditor(AEditor: TAbstractIDEOptionsEditorClass);
function Traverse(ANode: TTreeNode): TTreeNode; function Traverse(ANode: TTreeNode): TTreeNode;
begin begin
Result := nil; Result := nil;
@ -240,6 +261,7 @@ procedure TIDEOptionsDialog.OpenEditor(AEditor: TAbstractIDEOptionsEditorClass);
Result := Traverse(ANode.GetNextSibling); Result := Traverse(ANode.GetNextSibling);
end; end;
end; end;
var var
Node: TTreeNode; Node: TTreeNode;
begin begin