summaryrefslogtreecommitdiff
path: root/src/gui/promptuserdialog.inc
blob: 14124d544f9d88b122645ae3c12fcd2060557d26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
{%mainunit gui_dialogs.pas}

{$IFDEF read_interface}


  TfpgPromptUserDialog = class(TfpgBaseDialog)
  private
    lblTitle: TfpgLabel;
    lblTitlePw: TfpgLabel;
    edUserID: TfpgEdit;
    edPassword: TfpgEdit;
    function    GetUserID: TfpgString;
    function    GetUserPassword: TfpgString;
  public
    constructor Create(AOwner: TComponent); override;
    // Gof defines this Authenticate method a Hook operation in Template methods pattern.
    // Subclass will have to override and implement it. By default it returns True.
    function    Authenticate: boolean; virtual;
    procedure   Wiggle(const Seconds: integer = 1; const MovingPixels: integer = 5; const aSleep: integer = 75);
    property    UserID: TfpgString read GetUserID;
    property    Password: TfpgString read GetUserPassword;
  end;


  TfpgPromptUserDbDialog = class(TfpgPromptUserDialog)
  private
    lblDatabases: TfpgLabel;
  protected
    aStringList: TStringList;
    cbDatabases: TfpgComboBox;
    procedure   PopulateComboDb; virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
  end;


{$ENDIF read_interface}



{$IFDEF read_implementation}


{ TfpgPromptUserDialog }

function TfpgPromptUserDialog.GetUserID: TfpgString;
begin
  Result := edUserID.Text;
end;

function TfpgPromptUserDialog.GetUserPassword: TfpgString;
begin
  Result := edPassword.Text;
end;

constructor TfpgPromptUserDialog.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  // reset dimensions
  Width     := 200;
  Height    := 140;
  MinWidth  := 200;
  MinHeight := 140;
  
  lblTitle := CreateLabel(self, 8, 8, rsUserName);
  edUserID := CreateEdit(self, 8, 28, 184, 0);
  edUserID.Anchors := [anLeft, anTop, anRight];

  lblTitlePw := CreateLabel(self, 8, 55, rsPassword);
  edPassword := CreateEdit(self, 8, 73, 184, 0);
  edPassword.Anchors := [anLeft, anTop, anRight];
  edPassword.PasswordMode := True;

  // reposition buttons
  btnCancel.Left  := Width-FDefaultButtonWidth-FSpacing;
  btnCancel.Top   := Height - FSpacing - btnCancel.Height;
  btnOK.Left      := btnCancel.Left-FDefaultButtonWidth-FSpacing;
  btnOK.Top       := btnCancel.Top;
  
  // now reset tab order
  edUserID.TabOrder     := 1;
  edPassword.TabOrder   := 2;
  btnOK.TabOrder        := 3;
  btnCancel.TabOrder    := 4;
end;

function TfpgPromptUserDialog.Authenticate: boolean;
begin
  Result := True;
end;

procedure TfpgPromptUserDialog.Wiggle(const Seconds: integer; const MovingPixels: integer; const aSleep: integer);
var
  MyTime: TDateTime;
begin
  MyTime := Now;
  repeat
    MoveWindow(Left - MovingPixels, Top);
    fpgApplication.ProcessMessages;
    Sleep(aSleep);
    MoveWindow(Left + MovingPixels * 2, Top);
    fpgApplication.ProcessMessages;
    Sleep(aSleep);
    MoveWindow(Left - MovingPixels, Top);
    fpgApplication.ProcessMessages;
  until SecondsBetween(Now, MyTime) >= Seconds;
end;

{ TfpgPromptUserDbDialog }

constructor TfpgPromptUserDbDialog.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  // reset dimensions
  Width     := 200;
  Height    := 185;
  MinWidth  := 200;
  MinHeight := 185;

  aStringList := TStringList.Create;

  lblDatabases := CreateLabel(self, 8, 101, rsDatabase);
  cbDatabases := CreateComboBox(self, 8, 119, 184, aStringList);
  cbDatabases.Anchors := [anLeft, anTop, anRight];

  // reposition buttons
  btnCancel.Left  := Width-FDefaultButtonWidth-FSpacing;
  btnCancel.Top   := Height - FSpacing - btnCancel.Height;
  btnOK.Left      := btnCancel.Left-FDefaultButtonWidth-FSpacing;
  btnOK.Top       := btnCancel.Top;

  // now reset tab order
  edUserID.TabOrder     := 1;
  edPassword.TabOrder   := 2;
  cbDatabases.TabOrder  := 3;
  btnOK.TabOrder        := 5;
  btnCancel.TabOrder    := 6;
  
  PopulateComboDb;
end;

destructor TfpgPromptUserDbDialog.Destroy;
begin
  aStringList.Free;
  inherited Destroy;
end;

procedure TfpgPromptUserDbDialog.PopulateComboDb;
begin
  // do nothing. Derived classe will implement it
end;

{$ENDIF read_implementation}