Files
HeidiSQL/source/selectdbobject.pas
Ansgar Becker b6f7c17ac1 Rewrite code behind user manager dialog:
- Use GRANT + REVOKE queries as recommended by MySQL.
- Fixes various wrong INSERTs/UPDATEs which were intended to normalize structure in mysql db.
- Remove features: max query count per hour/day/...
- Enables user to assign stored routine privileges now, see http://www.heidisql.com/forum.php?t=6684
- Add "Clone user" button, fixes issue #1316
- Add "Repeat password" edit box, fixes issue #1461
- Paint privilege text in different colors for read/write/admin commands.
2010-11-10 21:15:54 +00:00

150 lines
4.6 KiB
ObjectPascal

unit selectdbobject;
interface
uses
Windows, Classes, Controls, Forms, StdCtrls, VirtualTrees,
mysql_connection;
type
TfrmSelectDBObject = class(TForm)
TreeDBO: TVirtualStringTree;
btnOK: TButton;
btnCancel: TButton;
lblSelect: TLabel;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure TreeDBOFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex);
procedure TreeDBOGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var
ImageIndex: Integer);
procedure TreeDBOGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize:
Integer);
procedure TreeDBOGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column:
TColumnIndex; TextType: TVSTTextType; var CellText: String);
procedure TreeDBOInitChildren(Sender: TBaseVirtualTree; Node: PVirtualNode; var
ChildCount: Cardinal);
procedure TreeDBOInitNode(Sender: TBaseVirtualTree; ParentNode, Node:
PVirtualNode; var InitialStates: TVirtualNodeInitStates);
private
{ Private declarations }
FColumns: Array of Array of TStringList;
function GetSelectedObject: TDBObject;
public
{ Public declarations }
property SelectedObject: TDBObject read GetSelectedObject;
end;
function SelectDBO: TDBObject;
implementation
uses main, helpers;
{$R *.dfm}
function SelectDBO: TDBObject;
begin
if Mainform.SelectDBObjectForm = nil then
Mainform.SelectDBObjectForm := TfrmSelectDBObject.Create(Mainform);
Result := nil;
if Mainform.SelectDBObjectForm.ShowModal = mrOK then
Result := Mainform.SelectDBObjectForm.SelectedObject;
end;
procedure TfrmSelectDBObject.FormCreate(Sender: TObject);
begin
Width := GetRegValue(REGNAME_SELECTDBO_WINWIDTH, Width);
Height := GetRegValue(REGNAME_SELECTDBO_WINHEIGHT, Height);
SetWindowSizeGrip( Self.Handle, True );
InheritFont(Font);
TreeDBO.TreeOptions := MainForm.DBtree.TreeOptions;
FixVT(TreeDBO);
end;
procedure TfrmSelectDBObject.FormDestroy(Sender: TObject);
begin
OpenRegistry;
MainReg.WriteInteger( REGNAME_SELECTDBO_WINWIDTH, Width );
MainReg.WriteInteger( REGNAME_SELECTDBO_WINHEIGHT, Height );
end;
procedure TfrmSelectDBObject.FormShow(Sender: TObject);
begin
TreeDBO.Clear;
TreeDBO.RootNodeCount := Mainform.DBtree.RootNodeCount;
SetLength(FColumns, Mainform.ActiveConnection.AllDatabases.Count);
// TreeDBO.OnFocusChanged(TreeDBO, TreeDBO.FocusedNode, 0);
end;
function TfrmSelectDBObject.GetSelectedObject: TDBObject;
var
DBObj: PDBObject;
begin
Result := nil;
if Assigned(TreeDBO.FocusedNode) then begin
DBObj := TreeDBO.GetNodeData(TreeDBO.FocusedNode);
Result := TDBObject.Create(DBObj.Connection);
Result.Assign(DBObj^);
end;
// Let the result be nil to indicate we have no selected node
end;
procedure TfrmSelectDBObject.TreeDBOFocusChanged(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex);
begin
btnOK.Enabled := Assigned(Node);
end;
procedure TfrmSelectDBObject.TreeDBOGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted:
Boolean; var ImageIndex: Integer);
begin
Mainform.DBtreeGetImageIndex(Sender, Node, Kind, Column, Ghosted, ImageIndex);
end;
procedure TfrmSelectDBObject.TreeDBOGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
begin
MainForm.DBtreeGetNodeDataSize(Sender, NodeDataSize);
end;
procedure TfrmSelectDBObject.TreeDBOInitChildren(Sender: TBaseVirtualTree;
Node: PVirtualNode; var ChildCount: Cardinal);
begin
// Fetch sub nodes
Mainform.DBtreeInitChildren(Sender, Node, ChildCount);
end;
procedure TfrmSelectDBObject.TreeDBOGetText(Sender: TBaseVirtualTree; Node:
PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText:
String);
begin
Mainform.DBtreeGetText(Sender, Node, Column, TextType, CellText);
end;
procedure TfrmSelectDBObject.TreeDBOInitNode(Sender: TBaseVirtualTree;
ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
DBObj: PDBObject;
begin
Mainform.DBtreeInitNode(Sender, ParentNode, Node, InitialStates);
DBObj := Sender.GetNodeData(Node);
if DBObj.Connection <> MainForm.ActiveConnection then begin
Include(InitialStates, ivsDisabled);
Exclude(InitialStates, ivsHasChildren);
end else if DBObj.NodeType = lntNone then
Include(InitialStates, ivsExpanded);
end;
end.