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:
|
||||
PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
||||
var
|
||||
MemoEditor: TMemoEditorLink;
|
||||
VT: TVirtualStringTree;
|
||||
HexEditor: THexEditorLink;
|
||||
DateTimeEditor: TDateTimeEditorLink;
|
||||
EnumEditor: TEnumEditorLink;
|
||||
SetEditor: TSetEditorLink;
|
||||
InplaceEditor: TInplaceEditorLink;
|
||||
TypeCat: TDatatypeCategoryIndex;
|
||||
begin
|
||||
VT := Sender as TVirtualStringTree;
|
||||
TypeCat := FDataGridResult.Columns[Column].DatatypeCat;
|
||||
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.ButtonVisible := true;
|
||||
InplaceEditor.ButtonVisible := True;
|
||||
EditLink := InplaceEditor;
|
||||
end else if (TypeCat = dtcBinary) and prefEnableBinaryEditor then begin
|
||||
MemoEditor := TMemoEditorLink.Create;
|
||||
MemoEditor.MaxLength := FDataGridResult.Columns[Column].MaxLength;
|
||||
EditLink := MemoEditor;
|
||||
HexEditor := THexEditorLink.Create(VT);
|
||||
HexEditor.DataType := FDataGridResult.Columns[Column].Datatype;
|
||||
HexEditor.MaxLength := FDataGridResult.Columns[Column].MaxLength;
|
||||
EditLink := HexEditor;
|
||||
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;
|
||||
EditLink := DateTimeEditor;
|
||||
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;
|
||||
EditLink := EnumEditor;
|
||||
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;
|
||||
EditLink := SetEditor;
|
||||
end else begin
|
||||
InplaceEditor := TInplaceEditorLink.Create(Sender as TVirtualStringTree);
|
||||
InplaceEditor := TInplaceEditorLink.Create(VT);
|
||||
InplaceEditor.DataType := FDataGridResult.Columns[Column].Datatype;
|
||||
InplaceEditor.ButtonVisible := False;
|
||||
EditLink := InplaceEditor;
|
||||
end;
|
||||
|
@ -327,20 +327,22 @@ end;
|
||||
procedure TfrmRoutineEditor.listParametersCreateEditor(Sender: TBaseVirtualTree;
|
||||
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
||||
var
|
||||
VT: TVirtualStringTree;
|
||||
EnumEditor: TEnumEditorLink;
|
||||
i: Integer;
|
||||
begin
|
||||
VT := Sender as TVirtualStringTree;
|
||||
if Column = 1 then
|
||||
EditLink := TStringEditLink.Create
|
||||
else if Column = 2 then begin
|
||||
EnumEditor := TEnumEditorLink.Create;
|
||||
EnumEditor := TEnumEditorLink.Create(VT);
|
||||
EnumEditor.AllowCustomText := True;
|
||||
EnumEditor.ValueList := TWideStringList.Create;
|
||||
for i:=Low(Datatypes) to High(Datatypes) do
|
||||
EnumEditor.ValueList.Add(Datatypes[i].Name);
|
||||
EditLink := EnumEditor;
|
||||
end else if Column = 3 then begin
|
||||
EnumEditor := TEnumEditorLink.Create;
|
||||
EnumEditor := TEnumEditorLink.Create(VT);
|
||||
EnumEditor.ValueList := TWideStringList.Create;
|
||||
EnumEditor.ValueList.Add('IN');
|
||||
EnumEditor.ValueList.Add('OUT');
|
||||
|
@ -1136,26 +1136,28 @@ end;
|
||||
procedure TfrmTableEditor.listColumnsCreateEditor(Sender: TBaseVirtualTree;
|
||||
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
||||
var
|
||||
VT: TVirtualStringTree;
|
||||
EnumEditor: TEnumEditorLink;
|
||||
DefaultEditor: TColumnDefaultEditorLink;
|
||||
DatatypeEditor: TDatatypeEditorLink;
|
||||
Props: TWideStringlist;
|
||||
begin
|
||||
// Start cell editor
|
||||
VT := Sender as TVirtualStringTree;
|
||||
case Column of
|
||||
2: begin // Datatype pulldown
|
||||
DatatypeEditor := TDatatypeEditorLink.Create(Sender as TVirtualStringTree);
|
||||
DatatypeEditor := TDatatypeEditorLink.Create(VT);
|
||||
DatatypeEditor.Datatype := dtDateTime;
|
||||
EditLink := DataTypeEditor;
|
||||
end;
|
||||
8: begin // Collation pulldown
|
||||
EnumEditor := TEnumEditorLink.Create;
|
||||
EnumEditor := TEnumEditorLink.Create(VT);
|
||||
EnumEditor.ValueList := TWideStringList.Create;
|
||||
Mainform.GetCollations(EnumEditor.ValueList);
|
||||
EditLink := EnumEditor;
|
||||
end;
|
||||
6: begin
|
||||
DefaultEditor := TColumnDefaultEditorLink.Create;
|
||||
DefaultEditor := TColumnDefaultEditorLink.Create(VT);
|
||||
Props := TWideStringlist(Columns.Objects[Node.Index]);
|
||||
DefaultEditor.DefaultText := Props[Column-2];
|
||||
DefaultEditor.DefaultType := GetColumnDefaultType(DefaultEditor.DefaultText);
|
||||
@ -1486,20 +1488,22 @@ end;
|
||||
procedure TfrmTableEditor.treeIndexesCreateEditor(Sender: TBaseVirtualTree;
|
||||
Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
|
||||
var
|
||||
VT: TVirtualStringTree;
|
||||
EnumEditor: TEnumEditorLink;
|
||||
Level: Cardinal;
|
||||
begin
|
||||
// Start cell editor
|
||||
VT := Sender as TVirtualStringTree;
|
||||
Level := (Sender as TVirtualStringtree).GetNodeLevel(Node);
|
||||
if (Level = 0) and (Column = 1) then begin
|
||||
// Index type pulldown
|
||||
EnumEditor := TEnumEditorLink.Create;
|
||||
EnumEditor := TEnumEditorLink.Create(VT);
|
||||
EnumEditor.ValueList := TWideStringList.Create;
|
||||
EnumEditor.ValueList.CommaText := PKEY +','+ KEY +','+ UKEY +','+ FKEY +','+ SKEY;
|
||||
EditLink := EnumEditor;
|
||||
end else if (Level = 1) and (Column = 0) then begin
|
||||
// Column names pulldown
|
||||
EnumEditor := TEnumEditorLink.Create;
|
||||
EnumEditor := TEnumEditorLink.Create(VT);
|
||||
EnumEditor.ValueList := Columns;
|
||||
EnumEditor.AllowCustomText := True; // Allows adding a subpart in index parts: "TextCol(20)"
|
||||
EditLink := EnumEditor;
|
||||
|
Reference in New Issue
Block a user