From 95f50b9ca5fc7686fef8111f7d646db1f05a3dc0 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Thu, 3 Feb 2011 23:50:01 +0000 Subject: [PATCH] Improve user manager: Add drop down menu to "From host" input, containing some predefined hosts plus all unique ones from the users list. --- source/usermanager.dfm | 34 ++++++++++++++++++++++++- source/usermanager.pas | 56 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/source/usermanager.dfm b/source/usermanager.dfm index f70afc07..936a9028 100644 --- a/source/usermanager.dfm +++ b/source/usermanager.dfm @@ -280,12 +280,16 @@ object UserManagerForm: TUserManagerForm ParentFont = False Visible = False end - object editFromHost: TEdit + object editFromHost: TButtonedEdit Left = 109 Top = 44 Width = 169 Height = 21 Anchors = [akLeft, akTop, akRight] + Images = MainForm.ImageListMain + RightButton.DropDownMenu = menuHost + RightButton.ImageIndex = 75 + RightButton.Visible = True TabOrder = 1 OnChange = Modification end @@ -337,4 +341,32 @@ object UserManagerForm: TUserManagerForm TabOrder = 3 OnClick = btnDiscardClick end + object menuHost: TPopupMenu + OnPopup = menuHostPopup + Left = 8 + Top = 328 + object menuHost1: TMenuItem + Caption = 'Access from server location only' + Hint = 'localhost' + OnClick = menuHostClick + end + object menuHost2: TMenuItem + Caption = 'Local network: 192.168.%' + Hint = '192.168.%' + OnClick = menuHostClick + end + object menuHost3: TMenuItem + Caption = 'Local network: 10.122.%' + Hint = '10.122.%' + OnClick = menuHostClick + end + object menuHostLocal4: TMenuItem + Caption = 'Access from everywhere' + Hint = '%' + OnClick = menuHostClick + end + object N1: TMenuItem + Caption = '-' + end + end end diff --git a/source/usermanager.pas b/source/usermanager.pas index 30d6f47b..23085fc8 100644 --- a/source/usermanager.pas +++ b/source/usermanager.pas @@ -6,7 +6,7 @@ interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls, ToolWin, ClipBrd, Generics.Collections, Generics.Defaults, SynRegExpr, - mysql_connection, helpers, VirtualTrees; + mysql_connection, helpers, VirtualTrees, Menus; {$I const.inc} @@ -50,7 +50,7 @@ type lblPassword: TLabel; lblUsername: TLabel; lblRepeatPassword: TLabel; - editFromHost: TEdit; + editFromHost: TButtonedEdit; editUsername: TEdit; editPassword: TButtonedEdit; editRepeatPassword: TEdit; @@ -62,6 +62,12 @@ type btnCloneUser: TToolButton; lblWarning: TLabel; Label1: TLabel; + menuHost: TPopupMenu; + menuHost1: TMenuItem; + menuHostLocal4: TMenuItem; + menuHost2: TMenuItem; + menuHost3: TMenuItem; + N1: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormShow(Sender: TObject); @@ -101,6 +107,8 @@ type procedure listUsersHeaderClick(Sender: TVTHeader; HitInfo: TVTHeaderHitInfo); procedure listUsersCompareNodes(Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer); procedure listUsersAfterPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas); + procedure menuHostClick(Sender: TObject); + procedure menuHostPopup(Sender: TObject); private { Private declarations } FUsers: TUserList; @@ -1033,6 +1041,50 @@ begin end; +procedure TUserManagerForm.menuHostClick(Sender: TObject); +begin + // Insert predefined host + editFromHost.Text := (Sender as TMenuItem).Hint; +end; + + +procedure TUserManagerForm.menuHostPopup(Sender: TObject); +var + Item: TMenuItem; + i: Integer; + User: TUser; + ItemExists: Boolean; +begin + // Delete custom items and readd unique ones + for i:=menuHost.Items.Count-1 downto 0 do begin + if menuHost.Items[i].Caption = '-' then + break; + menuHost.Items.Delete(i); + end; + for User in FUsers do begin + if User.Host = '' then + Continue; + ItemExists := False; + for Item in menuHost.Items do begin + if Item.Hint = User.Host then begin + ItemExists := True; + Break; + end; + end; + if not ItemExists then begin + Item := TMenuItem.Create(menuHost); + Item.Caption := User.Host; + Item.Hint := User.Host; + Item.OnClick := menuHostClick; + menuHost.Items.Add(Item); + end; + end; + // Auto check current host if any matches + for Item in menuHost.Items do + Item.Checked := Item.Hint = editFromHost.Text; +end; + + procedure TUserManagerForm.editPasswordRightButtonClick(Sender: TObject); begin // Auto generate a random password, display it for a second and copy it to clipboard