mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
Refactor grid editors unit: Implement a base class with all stuff which was implemented redundant previously and let all other editors descend from this class. Saves ~300 lines of code and makes implementing new editors easier.
Additionally this implements tabbing through edited fields for all grid editors. And it fixes issue #1266, issue #1267, issue #1253, issue #1178, issue #1155, issue #825 and issue #566 .
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@ -8008,37 +8008,44 @@ end;
|
|||||||
procedure TMainForm.DataGridCreateEditor(Sender: TBaseVirtualTree; Node:
|
procedure TMainForm.DataGridCreateEditor(Sender: TBaseVirtualTree; Node:
|
||||||
PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
||||||
var
|
var
|
||||||
MemoEditor: TMemoEditorLink;
|
VT: TVirtualStringTree;
|
||||||
|
HexEditor: THexEditorLink;
|
||||||
DateTimeEditor: TDateTimeEditorLink;
|
DateTimeEditor: TDateTimeEditorLink;
|
||||||
EnumEditor: TEnumEditorLink;
|
EnumEditor: TEnumEditorLink;
|
||||||
SetEditor: TSetEditorLink;
|
SetEditor: TSetEditorLink;
|
||||||
InplaceEditor: TInplaceEditorLink;
|
InplaceEditor: TInplaceEditorLink;
|
||||||
TypeCat: TDatatypeCategoryIndex;
|
TypeCat: TDatatypeCategoryIndex;
|
||||||
begin
|
begin
|
||||||
|
VT := Sender as TVirtualStringTree;
|
||||||
TypeCat := FDataGridResult.Columns[Column].DatatypeCat;
|
TypeCat := FDataGridResult.Columns[Column].DatatypeCat;
|
||||||
if TypeCat = dtcText then begin
|
if TypeCat = dtcText then begin
|
||||||
InplaceEditor := TInplaceEditorLink.Create(Sender as TVirtualStringTree);
|
InplaceEditor := TInplaceEditorLink.Create(VT);
|
||||||
|
InplaceEditor.DataType := FDataGridResult.Columns[Column].Datatype;
|
||||||
InplaceEditor.MaxLength := FDataGridResult.Columns[Column].MaxLength;
|
InplaceEditor.MaxLength := FDataGridResult.Columns[Column].MaxLength;
|
||||||
InplaceEditor.ButtonVisible := true;
|
InplaceEditor.ButtonVisible := True;
|
||||||
EditLink := InplaceEditor;
|
EditLink := InplaceEditor;
|
||||||
end else if (TypeCat = dtcBinary) and prefEnableBinaryEditor then begin
|
end else if (TypeCat = dtcBinary) and prefEnableBinaryEditor then begin
|
||||||
MemoEditor := TMemoEditorLink.Create;
|
HexEditor := THexEditorLink.Create(VT);
|
||||||
MemoEditor.MaxLength := FDataGridResult.Columns[Column].MaxLength;
|
HexEditor.DataType := FDataGridResult.Columns[Column].Datatype;
|
||||||
EditLink := MemoEditor;
|
HexEditor.MaxLength := FDataGridResult.Columns[Column].MaxLength;
|
||||||
|
EditLink := HexEditor;
|
||||||
end else if (TypeCat = dtcTemporal) and prefEnableDatetimeEditor then begin
|
end else if (TypeCat = dtcTemporal) and prefEnableDatetimeEditor then begin
|
||||||
DateTimeEditor := TDateTimeEditorLink.Create(Sender as TVirtualStringTree);
|
DateTimeEditor := TDateTimeEditorLink.Create(VT);
|
||||||
DateTimeEditor.DataType := FDataGridResult.Columns[Column].Datatype;
|
DateTimeEditor.DataType := FDataGridResult.Columns[Column].Datatype;
|
||||||
EditLink := DateTimeEditor;
|
EditLink := DateTimeEditor;
|
||||||
end else if (TypeCat = dtcIntegerNamed) and prefEnableEnumEditor then begin
|
end else if (TypeCat = dtcIntegerNamed) and prefEnableEnumEditor then begin
|
||||||
EnumEditor := TEnumEditorLink.Create;
|
EnumEditor := TEnumEditorLink.Create(VT);
|
||||||
|
EnumEditor.DataType := FDataGridResult.Columns[Column].Datatype;
|
||||||
EnumEditor.ValueList := FDataGridResult.Columns[Column].ValueList;
|
EnumEditor.ValueList := FDataGridResult.Columns[Column].ValueList;
|
||||||
EditLink := EnumEditor;
|
EditLink := EnumEditor;
|
||||||
end else if (TypeCat = dtcSetNamed) and prefEnableSetEditor then begin
|
end else if (TypeCat = dtcSetNamed) and prefEnableSetEditor then begin
|
||||||
SetEditor := TSetEditorLink.Create;
|
SetEditor := TSetEditorLink.Create(VT);
|
||||||
|
SetEditor.DataType := FDataGridResult.Columns[Column].Datatype;
|
||||||
SetEditor.ValueList := FDataGridResult.Columns[Column].ValueList;
|
SetEditor.ValueList := FDataGridResult.Columns[Column].ValueList;
|
||||||
EditLink := SetEditor;
|
EditLink := SetEditor;
|
||||||
end else begin
|
end else begin
|
||||||
InplaceEditor := TInplaceEditorLink.Create(Sender as TVirtualStringTree);
|
InplaceEditor := TInplaceEditorLink.Create(VT);
|
||||||
|
InplaceEditor.DataType := FDataGridResult.Columns[Column].Datatype;
|
||||||
InplaceEditor.ButtonVisible := False;
|
InplaceEditor.ButtonVisible := False;
|
||||||
EditLink := InplaceEditor;
|
EditLink := InplaceEditor;
|
||||||
end;
|
end;
|
||||||
|
@ -327,20 +327,22 @@ end;
|
|||||||
procedure TfrmRoutineEditor.listParametersCreateEditor(Sender: TBaseVirtualTree;
|
procedure TfrmRoutineEditor.listParametersCreateEditor(Sender: TBaseVirtualTree;
|
||||||
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
||||||
var
|
var
|
||||||
|
VT: TVirtualStringTree;
|
||||||
EnumEditor: TEnumEditorLink;
|
EnumEditor: TEnumEditorLink;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
|
VT := Sender as TVirtualStringTree;
|
||||||
if Column = 1 then
|
if Column = 1 then
|
||||||
EditLink := TStringEditLink.Create
|
EditLink := TStringEditLink.Create
|
||||||
else if Column = 2 then begin
|
else if Column = 2 then begin
|
||||||
EnumEditor := TEnumEditorLink.Create;
|
EnumEditor := TEnumEditorLink.Create(VT);
|
||||||
EnumEditor.AllowCustomText := True;
|
EnumEditor.AllowCustomText := True;
|
||||||
EnumEditor.ValueList := TWideStringList.Create;
|
EnumEditor.ValueList := TWideStringList.Create;
|
||||||
for i:=Low(Datatypes) to High(Datatypes) do
|
for i:=Low(Datatypes) to High(Datatypes) do
|
||||||
EnumEditor.ValueList.Add(Datatypes[i].Name);
|
EnumEditor.ValueList.Add(Datatypes[i].Name);
|
||||||
EditLink := EnumEditor;
|
EditLink := EnumEditor;
|
||||||
end else if Column = 3 then begin
|
end else if Column = 3 then begin
|
||||||
EnumEditor := TEnumEditorLink.Create;
|
EnumEditor := TEnumEditorLink.Create(VT);
|
||||||
EnumEditor.ValueList := TWideStringList.Create;
|
EnumEditor.ValueList := TWideStringList.Create;
|
||||||
EnumEditor.ValueList.Add('IN');
|
EnumEditor.ValueList.Add('IN');
|
||||||
EnumEditor.ValueList.Add('OUT');
|
EnumEditor.ValueList.Add('OUT');
|
||||||
|
@ -1136,26 +1136,28 @@ end;
|
|||||||
procedure TfrmTableEditor.listColumnsCreateEditor(Sender: TBaseVirtualTree;
|
procedure TfrmTableEditor.listColumnsCreateEditor(Sender: TBaseVirtualTree;
|
||||||
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
||||||
var
|
var
|
||||||
|
VT: TVirtualStringTree;
|
||||||
EnumEditor: TEnumEditorLink;
|
EnumEditor: TEnumEditorLink;
|
||||||
DefaultEditor: TColumnDefaultEditorLink;
|
DefaultEditor: TColumnDefaultEditorLink;
|
||||||
DatatypeEditor: TDatatypeEditorLink;
|
DatatypeEditor: TDatatypeEditorLink;
|
||||||
Props: TWideStringlist;
|
Props: TWideStringlist;
|
||||||
begin
|
begin
|
||||||
// Start cell editor
|
// Start cell editor
|
||||||
|
VT := Sender as TVirtualStringTree;
|
||||||
case Column of
|
case Column of
|
||||||
2: begin // Datatype pulldown
|
2: begin // Datatype pulldown
|
||||||
DatatypeEditor := TDatatypeEditorLink.Create(Sender as TVirtualStringTree);
|
DatatypeEditor := TDatatypeEditorLink.Create(VT);
|
||||||
DatatypeEditor.Datatype := dtDateTime;
|
DatatypeEditor.Datatype := dtDateTime;
|
||||||
EditLink := DataTypeEditor;
|
EditLink := DataTypeEditor;
|
||||||
end;
|
end;
|
||||||
8: begin // Collation pulldown
|
8: begin // Collation pulldown
|
||||||
EnumEditor := TEnumEditorLink.Create;
|
EnumEditor := TEnumEditorLink.Create(VT);
|
||||||
EnumEditor.ValueList := TWideStringList.Create;
|
EnumEditor.ValueList := TWideStringList.Create;
|
||||||
Mainform.GetCollations(EnumEditor.ValueList);
|
Mainform.GetCollations(EnumEditor.ValueList);
|
||||||
EditLink := EnumEditor;
|
EditLink := EnumEditor;
|
||||||
end;
|
end;
|
||||||
6: begin
|
6: begin
|
||||||
DefaultEditor := TColumnDefaultEditorLink.Create;
|
DefaultEditor := TColumnDefaultEditorLink.Create(VT);
|
||||||
Props := TWideStringlist(Columns.Objects[Node.Index]);
|
Props := TWideStringlist(Columns.Objects[Node.Index]);
|
||||||
DefaultEditor.DefaultText := Props[Column-2];
|
DefaultEditor.DefaultText := Props[Column-2];
|
||||||
DefaultEditor.DefaultType := GetColumnDefaultType(DefaultEditor.DefaultText);
|
DefaultEditor.DefaultType := GetColumnDefaultType(DefaultEditor.DefaultText);
|
||||||
@ -1486,20 +1488,22 @@ end;
|
|||||||
procedure TfrmTableEditor.treeIndexesCreateEditor(Sender: TBaseVirtualTree;
|
procedure TfrmTableEditor.treeIndexesCreateEditor(Sender: TBaseVirtualTree;
|
||||||
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
||||||
var
|
var
|
||||||
|
VT: TVirtualStringTree;
|
||||||
EnumEditor: TEnumEditorLink;
|
EnumEditor: TEnumEditorLink;
|
||||||
Level: Cardinal;
|
Level: Cardinal;
|
||||||
begin
|
begin
|
||||||
// Start cell editor
|
// Start cell editor
|
||||||
|
VT := Sender as TVirtualStringTree;
|
||||||
Level := (Sender as TVirtualStringtree).GetNodeLevel(Node);
|
Level := (Sender as TVirtualStringtree).GetNodeLevel(Node);
|
||||||
if (Level = 0) and (Column = 1) then begin
|
if (Level = 0) and (Column = 1) then begin
|
||||||
// Index type pulldown
|
// Index type pulldown
|
||||||
EnumEditor := TEnumEditorLink.Create;
|
EnumEditor := TEnumEditorLink.Create(VT);
|
||||||
EnumEditor.ValueList := TWideStringList.Create;
|
EnumEditor.ValueList := TWideStringList.Create;
|
||||||
EnumEditor.ValueList.CommaText := PKEY +','+ KEY +','+ UKEY +','+ FKEY +','+ SKEY;
|
EnumEditor.ValueList.CommaText := PKEY +','+ KEY +','+ UKEY +','+ FKEY +','+ SKEY;
|
||||||
EditLink := EnumEditor;
|
EditLink := EnumEditor;
|
||||||
end else if (Level = 1) and (Column = 0) then begin
|
end else if (Level = 1) and (Column = 0) then begin
|
||||||
// Column names pulldown
|
// Column names pulldown
|
||||||
EnumEditor := TEnumEditorLink.Create;
|
EnumEditor := TEnumEditorLink.Create(VT);
|
||||||
EnumEditor.ValueList := Columns;
|
EnumEditor.ValueList := Columns;
|
||||||
EnumEditor.AllowCustomText := True; // Allows adding a subpart in index parts: "TextCol(20)"
|
EnumEditor.AllowCustomText := True; // Allows adding a subpart in index parts: "TextCol(20)"
|
||||||
EditLink := EnumEditor;
|
EditLink := EnumEditor;
|
||||||
|
Reference in New Issue
Block a user