From deb0c1afbfcc90f0a59a92e31608433c8f1900ef Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Tue, 8 Feb 2011 22:11:43 +0000 Subject: [PATCH] User manager: Turn custom object editors into one single editor for a wildcard database. Enhances what r3681 did for issue #2299. --- source/selectdbobject.dfm | 36 +++++++------------------- source/selectdbobject.pas | 53 +++++++++++---------------------------- 2 files changed, 24 insertions(+), 65 deletions(-) diff --git a/source/selectdbobject.dfm b/source/selectdbobject.dfm index 97ec96a3..5590a92d 100644 --- a/source/selectdbobject.dfm +++ b/source/selectdbobject.dfm @@ -16,7 +16,6 @@ object frmSelectDBObject: TfrmSelectDBObject Position = poOwnerFormCenter OnCreate = FormCreate OnDestroy = FormDestroy - OnResize = FormResize OnShow = FormShow DesignSize = ( 232 @@ -33,10 +32,10 @@ object frmSelectDBObject: TfrmSelectDBObject object lblCustom: TLabel Left = 8 Top = 239 - Width = 174 + Width = 210 Height = 13 Anchors = [akLeft, akBottom] - Caption = 'Custom, wildcards % and _ allowed:' + Caption = '... or wildcard database (% and _ allowed):' end object TreeDBO: TVirtualStringTree Left = 8 @@ -57,6 +56,7 @@ object frmSelectDBObject: TfrmSelectDBObject Margin = 2 TabOrder = 0 TreeOptions.PaintOptions = [toHideFocusRect, toHotTrack, toShowButtons, toShowDropmark, toShowTreeLines, toThemeAware, toUseBlendedImages, toUseExplorerTheme, toHideTreeLinesIfThemed] + OnEnter = ValidateControls OnFocusChanged = TreeDBOFocusChanged OnGetText = TreeDBOGetText OnGetImageIndex = TreeDBOGetImageIndex @@ -85,7 +85,7 @@ object frmSelectDBObject: TfrmSelectDBObject Default = True Enabled = False ModalResult = 1 - TabOrder = 4 + TabOrder = 2 end object btnCancel: TButton Left = 149 @@ -96,36 +96,18 @@ object frmSelectDBObject: TfrmSelectDBObject Cancel = True Caption = 'Cancel' ModalResult = 2 - TabOrder = 5 + TabOrder = 3 end object editDb: TEdit Left = 8 Top = 255 - Width = 58 + Width = 216 Height = 21 - Anchors = [akBottom] + Anchors = [akLeft, akRight, akBottom] TabOrder = 1 Text = 'editDb' TextHint = 'database' - end - object editTable: TEdit - Left = 72 - Top = 255 - Width = 71 - Height = 21 - Anchors = [akBottom] - TabOrder = 2 - Text = 'editTable' - TextHint = 'all tables' - end - object editColumn: TEdit - Left = 149 - Top = 255 - Width = 75 - Height = 21 - Anchors = [akBottom] - TabOrder = 3 - Text = 'editColumn' - TextHint = 'all columns' + OnChange = ValidateControls + OnEnter = ValidateControls end end diff --git a/source/selectdbobject.pas b/source/selectdbobject.pas index 59856258..5e7e87a1 100644 --- a/source/selectdbobject.pas +++ b/source/selectdbobject.pas @@ -3,7 +3,7 @@ unit selectdbobject; interface uses - Windows, Classes, Controls, Forms, StdCtrls, VirtualTrees, + Windows, Classes, Controls, Forms, StdCtrls, VirtualTrees, Graphics, mysql_connection; type @@ -14,8 +14,6 @@ type lblSelect: TLabel; lblCustom: TLabel; editDb: TEdit; - editTable: TEdit; - editColumn: TEdit; procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); @@ -32,7 +30,7 @@ type ChildCount: Cardinal); procedure TreeDBOInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); - procedure FormResize(Sender: TObject); + procedure ValidateControls(Sender: TObject); private { Private declarations } FColumns: Array of Array of TStringList; @@ -78,19 +76,16 @@ begin end; -procedure TfrmSelectDBObject.FormResize(Sender: TObject); -var - EditWidth: Integer; -const - Spacing=4; +procedure TfrmSelectDBObject.ValidateControls(Sender: TObject); begin - // Adjust dimensions of edit boxes - EditWidth := (TreeDBO.Width - 2*Spacing) div 3; - editDb.Width := EditWidth; - editTable.Width := EditWidth; - editTable.Left := editDb.Left + editDb.Width + Spacing; - editColumn.Width := EditWidth; - editColumn.Left := editTable.Left + editTable.Width + Spacing; + // Signalize if tree or edit box is used + if editDb.Modified then begin + TreeDBO.Color := clBtnFace; + editDb.Color := clWindow; + end else begin + TreeDBO.Color := clWindow; + editDb.Color := clBtnFace; + end; end; @@ -109,17 +104,10 @@ var begin // Return currently selected object, either from tree node or from edit boxes Result := nil; - if editDb.Modified or editTable.Modified or editColumn.Modified then begin + if editDb.Modified then begin Result := TDBObject.Create(MainForm.ActiveConnection); Result.Database := editDb.Text; - Result.Name := editTable.Text; - Result.Column := editColumn.Text; - if Result.Column <> '' then - Result.NodeType := lntColumn - else if Result.Name <> '' then - Result.NodeType := lntTable - else - Result.NodeType := lntDb; + Result.NodeType := lntDb; end else if Assigned(TreeDBO.FocusedNode) then begin DBObj := TreeDBO.GetNodeData(TreeDBO.FocusedNode); Result := TDBObject.Create(DBObj.Connection); @@ -142,29 +130,18 @@ var begin // Overtake node text into lower edit boxes editDb.Clear; - editTable.Clear; - editColumn.Clear; Tree := Sender as TVirtualStringTree; btnOK.Enabled := Assigned(Node); if btnOK.Enabled then begin case Sender.GetNodeLevel(Node) of 0: editDb.Text := '%'; 1: editDb.Text := esc(Tree.Text[Node, 0], True); - 2: begin - editDb.Text := Tree.Text[Node.Parent, 0]; - editTable.Text := Tree.Text[Node, 0]; - end; - 3: begin - editDb.Text := Tree.Text[Node.Parent.Parent, 0]; - editTable.Text := Tree.Text[Node.Parent, 0]; - editColumn.Text := Tree.Text[Node, 0]; - end; + 2: editDb.Text := esc(Tree.Text[Node.Parent, 0], True); + 3: editDb.Text := esc(Tree.Text[Node.Parent.Parent, 0], True); end; end; // Indicate automatic changes only editDb.Modified := False; - editTable.Modified := False; - editColumn.Modified := False; end;