fix, exceptions in the options editor

This commit is contained in:
Basile Burg 2015-09-14 04:22:41 +02:00
parent fd552ba69b
commit fd5e3219c3
1 changed files with 14 additions and 0 deletions

View File

@ -44,6 +44,7 @@ type
protected protected
procedure UpdateShowing; override; procedure UpdateShowing; override;
private private
fUpdatingCat: boolean;
fCatChanged: boolean; fCatChanged: boolean;
fEdOptsSubj: TCEEditableOptionsSubject; fEdOptsSubj: TCEEditableOptionsSubject;
procedure updateCategories; procedure updateCategories;
@ -103,8 +104,13 @@ var
i: Integer; i: Integer;
dt: PCategoryData; dt: PCategoryData;
ed: ICEEditableOptions; ed: ICEEditableOptions;
sel: string = '';
begin begin
if selCat.Selected <> nil then
sel := selCat.Selected.Text;
fUpdatingCat := true;
inspector.TIObject := nil; inspector.TIObject := nil;
selCat.BeginUpdate;
selCat.Items.Clear; selCat.Items.Clear;
for i:= 0 to fEdOptsSubj.observersCount-1 do for i:= 0 to fEdOptsSubj.observersCount-1 do
begin begin
@ -116,6 +122,11 @@ begin
dt^.observer := ed; dt^.observer := ed;
end; end;
selCat.Items.SortTopLevelNodes(@sortCategories); selCat.Items.SortTopLevelNodes(@sortCategories);
for i := 0 to selCat.Items.Count-1 do
if SelCat.Items.Item[i].Text = sel then
SelCat.Selected := SelCat.Items.Item[i];
selCat.EndUpdate;
fUpdatingCat := false;
end; end;
function TCEOptionEditorWidget.sortCategories(Cat1, Cat2: TTreeNode): integer; function TCEOptionEditorWidget.sortCategories(Cat1, Cat2: TTreeNode): integer;
@ -134,6 +145,8 @@ var
dt: PCategoryData; dt: PCategoryData;
begin begin
result := true; result := true;
if fUpdatingCat then exit;
if csDestroying in ComponentState then exit;
if selCat.Selected = nil then exit; if selCat.Selected = nil then exit;
if selCat.Selected.Data = nil then exit; if selCat.Selected.Data = nil then exit;
// accept/cancel is relative to a single category // accept/cancel is relative to a single category
@ -152,6 +165,7 @@ begin
begin begin
dt := PCategoryData(selCat.Selected.Data); dt := PCategoryData(selCat.Selected.Data);
if dt^.container = nil then exit; if dt^.container = nil then exit;
if dt^.observer = nil then exit;
if dt^.observer.optionedOptionsModified() then if dt^.observer.optionedOptionsModified() then
begin begin
result := dlgOkCancel(msg_mod) = mrOk; result := dlgOkCancel(msg_mod) = mrOk;