IDE, fixes lazarus freeze after closing fields editor (issue #8925), also improved fields editor so it keeps dataset opened while adding/removing fields

git-svn-id: trunk@11751 -
This commit is contained in:
jesus 2007-08-06 19:24:46 +00:00
parent 8025a708bc
commit a799777f36
2 changed files with 36 additions and 12 deletions

View File

@ -146,11 +146,11 @@ end;
procedure TDSFieldsEditorFrm.DeleteFieldsActnExecute(Sender: TObject);
var i: integer;
sActive: boolean;
PreActive: boolean;
bModified: boolean;
fld: TField;
begin
sActive := LinkDataSet.Active;
PreActive := LinkDataSet.Active;
LinkDataSet.Active := False;
bModified := False;
for i := FieldsListBox.Items.Count - 1 downto 0 do
@ -161,8 +161,10 @@ begin
fld.Free;
bModified := True;
end;
if bModified then fDesigner.Modified;
if LinkDataset.Fields.Count > 0 then LinkDataSet.Active := sActive;
if bModified then
fDesigner.Modified;
if PreActive then
LinkDataSet.Active := True;
SelectionChanged;
end;
@ -181,7 +183,6 @@ begin
end;
if Assigned(GlobalDesignHook) then
GlobalDesignHook.RemoveAllHandlersForObject(Self);
inherited Destroy;
end;
procedure TDSFieldsEditorFrm.FieldsListBoxKeyDown(Sender: TObject; var Key: Word;
@ -221,8 +222,11 @@ end;
procedure TDSFieldsEditorFrm.RefreshFieldsListBox(SelectAllNew: boolean);
var i, j: integer;
fld: TField;
PreActive: boolean;
begin
if LinkDataset.Active And LinkDataset.DefaultFields then LinkDataset.Close;
PreActive := LinkDataSet.Active;
if PreActive And LinkDataset.DefaultFields then
LinkDataset.Close;
//Deselect & refresh all existing
DoSelected(False);
//Add new fields
@ -233,6 +237,8 @@ begin
FieldsListBox.Selected[j] := SelectAllNew;
end;
end;
if PreActive and not LinkDataset.Active then
LinkDataset.Active:=true;
end;
procedure TDSFieldsEditorFrm.NewActnExecute(Sender: TObject);
@ -437,6 +443,7 @@ end;
procedure TFieldsComponentEditor.EditorWindowClose;
begin
fWindowClosed := True;
FFieldsEditorForm:=nil;
end;

View File

@ -69,7 +69,9 @@ procedure TFieldsListFrm.BitBtnOkClick(Sender: TObject);
var i: integer;
NewField: TField;
fModified: boolean;
PreActive: boolean;
begin
PreActive := LinkDataset.Active;
LinkDataSet.Active := False;
fModified := False;
for i := 0 to ListBox1.Items.Count - 1 do begin
@ -81,6 +83,8 @@ begin
end;
end;
if fModified then FDesigner.Modified;
if PreActive then
LinkDataset.Active:=True;
end;
procedure TFieldsListFrm.RefreshFieldsList;
@ -107,18 +111,31 @@ procedure TFieldsListFrm.RefreshFieldsList;
end;
end;
var i: integer;
var
i: integer;
PreActive: boolean;
begin
i := 0;
ListBox1.Clear;
BitBtnOk.Enabled := False;
if Not Assigned(LinkDataset) then Exit;
with LinkDataset do begin
Active := False;
FieldDefs.Update;
end;
if not Assigned(LinkDataset) then Exit;
// refresh fielddefs
LinkDataset.FieldDefs.Update;
PreActive:=LinkDataset.Active;
LinkDataset.Active := False;
i := FillList;
BitBtnOk.Enabled := i > 0;
if PreActive then
LinkDataset.Active:=True;
{
PreActive:=LinkDataset.Active;
LinkDataset.Active := False;
LinkDataset.FieldDefs.Update;
i := FillList;
BitBtnOk.Enabled := i > 0;
if PreActive then
LinkDataset.Active:=True;
}
end;
constructor TFieldsListFrm.Create(AOwner: TComponent; ADataset: TDataset;