summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/gui/filedialog/filedialog.lpr42
-rw-r--r--src/corelib/gfxbase.pas9
-rw-r--r--src/corelib/lang_afrikaans.inc1
-rw-r--r--src/corelib/lang_english.inc2
-rw-r--r--src/corelib/lang_french.inc1
-rw-r--r--src/corelib/lang_german.inc1
-rw-r--r--src/corelib/lang_italian.inc1
-rw-r--r--src/corelib/lang_portuguese.inc1
-rw-r--r--src/corelib/lang_russian.inc1
-rw-r--r--src/corelib/lang_spanish.inc1
-rw-r--r--src/gui/fpgui_package.lpk5
-rw-r--r--src/gui/gui_dialogs.pas1
-rw-r--r--src/gui/promptuserdialog.inc108
13 files changed, 148 insertions, 26 deletions
diff --git a/examples/gui/filedialog/filedialog.lpr b/examples/gui/filedialog/filedialog.lpr
index c85e8cdc..29635dbb 100644
--- a/examples/gui/filedialog/filedialog.lpr
+++ b/examples/gui/filedialog/filedialog.lpr
@@ -7,6 +7,7 @@ uses
cthreads,
{$ENDIF}{$ENDIF}
Classes,
+ gfxbase,
fpgfx,
gui_form,
gui_dialogs,
@@ -39,6 +40,37 @@ type
public
procedure AfterCreate; override;
end;
+
+
+ TMyDBLoginDlg = class(TfpgPromptUserDbDialog)
+ private
+ function GetDatabase: TfpgString;
+ protected
+ procedure PopulateComboDb; override;
+ public
+ property Database: TfpgString read GetDatabase;
+ end;
+
+{ TMyDBLoginDlg }
+
+function TMyDBLoginDlg.GetDatabase: TfpgString;
+begin
+ Result := aStringList.ValueFromIndex[cbDatabases.FocusItem-1];
+end;
+
+procedure TMyDBLoginDlg.PopulateComboDb;
+var
+ i: integer;
+begin
+ aStringList.Clear;
+ aStringList.Add('Database1=192.168.0.1:/data/db1.gdb');
+ aStringList.Add('Database2=192.168.0.10:/data/live.gdb');
+ aStringList.Add('Database3=192.168.0.150:/data/sometest.gdb');
+ aStringList.Add('Database4=192.168.0.200:c:\MyData\test.gdb');
+ cbDatabases.Items.Clear;
+ for i := 0 to aStringList.Count-1 do
+ cbDatabases.Items.Add(aStringList.Names[i]);
+end;
{@VFD_NEWFORM_DECL}
@@ -46,14 +78,18 @@ type
procedure TMainForm.btnUserPromptClick(Sender: TObject);
var
- dlg: TfpgPromptUserDialog;
+ dlg: TMyDBLoginDlg;
begin
- dlg := TfpgPromptUserDialog.Create(nil);
+ dlg := TMyDBLoginDlg.Create(nil);
try
dlg.WindowTitle := 'Sample Login';
if dlg.ShowModal = 1 then
begin
- TfpgMessageDialog.Information('User Results', 'User=' + dlg.UserID + #13#10 + 'Pass='+ dlg.Password, [mbOK]);
+ TfpgMessageDialog.Information('User Results',
+ 'User=' + dlg.UserID + #13 +
+ 'Pass=' + dlg.Password + #13 +
+ 'Database=' + dlg.Database, [mbOK]);
+ fpgApplication.ProcessMessages;
end;
finally
dlg.Free;
diff --git a/src/corelib/gfxbase.pas b/src/corelib/gfxbase.pas
index 1e7984ed..ade4d74e 100644
--- a/src/corelib/gfxbase.pas
+++ b/src/corelib/gfxbase.pas
@@ -380,13 +380,11 @@ type
end;
- { TfpgApplicationBase }
-
TfpgApplicationBase = class(TComponent)
private
FMainForm: TfpgWindowBase;
FTerminated: boolean;
- function GetTopModalForm: TfpgWindowBase;
+ function GetTopModalForm: TfpgWindowBase;
protected
FIsInitialized: Boolean;
FModalFormStack: TList;
@@ -421,9 +419,11 @@ type
property Text: string read DoGetText write DoSetText;
end;
+
TFileEntryType = (etFile, etDir);
TFileListSortOrder = (soNone, soFileName, soCSFileName, soFileExt, soSize, soTime);
+
// A simple data object
TFileEntry = class(TObject)
private
@@ -453,7 +453,6 @@ type
property LinkTarget: string read FLinkTarget write FLinkTarget;
end;
- { TfpgFileListBase }
TfpgFileListBase = class(TObject)
private
@@ -941,6 +940,8 @@ end;
procedure TfpgWindowBase.MoveWindow(const x: TfpgCoord; const y: TfpgCoord);
begin
+ Left := x;
+ Top := y;
DoMoveWindow(x, y);
end;
diff --git a/src/corelib/lang_afrikaans.inc b/src/corelib/lang_afrikaans.inc
index 3e1941ce..78115662 100644
--- a/src/corelib/lang_afrikaans.inc
+++ b/src/corelib/lang_afrikaans.inc
@@ -98,6 +98,7 @@ rsSaveAFile = 'Stoor ''n ler';
// User Dialog
rsUserName = 'Gebruikers naam';
rsPassword = 'Wagwoord';
+rsDatabase = 'Database';
// Error messages
diff --git a/src/corelib/lang_english.inc b/src/corelib/lang_english.inc
index d3f191c0..ec2b85a7 100644
--- a/src/corelib/lang_english.inc
+++ b/src/corelib/lang_english.inc
@@ -98,7 +98,7 @@ rsSaveAFile = 'Save file as';
// User Dialog
rsUserName = 'User name';
rsPassword = 'Password';
-
+rsDatabase = 'Database';
// Error messages
rsErrListMustBeEmpty = 'List must be empty';
diff --git a/src/corelib/lang_french.inc b/src/corelib/lang_french.inc
index 0d186126..385a2271 100644
--- a/src/corelib/lang_french.inc
+++ b/src/corelib/lang_french.inc
@@ -98,6 +98,7 @@ rsSaveAFile = 'Sauver sous';
// User Dialog
rsUserName = 'User name';
rsPassword = 'Password';
+rsDatabase = 'Database';
// Error messages
diff --git a/src/corelib/lang_german.inc b/src/corelib/lang_german.inc
index df5ca54f..45b736fc 100644
--- a/src/corelib/lang_german.inc
+++ b/src/corelib/lang_german.inc
@@ -98,6 +98,7 @@ rsSaveAFile = 'Datei speichern';
// User Dialog
rsUserName = 'User name';
rsPassword = 'Password';
+rsDatabase = 'Database';
// Error messages
diff --git a/src/corelib/lang_italian.inc b/src/corelib/lang_italian.inc
index e4980ddb..e0fb8a35 100644
--- a/src/corelib/lang_italian.inc
+++ b/src/corelib/lang_italian.inc
@@ -98,6 +98,7 @@ rsSaveAFile = 'Salva con nome';
// User Dialog
rsUserName = 'Nome utente';
rsPassword = 'Password';
+rsDatabase = 'Archivi';
// Error messages
rsErrListMustBeEmpty = 'Elenco deve essere vuoto';
diff --git a/src/corelib/lang_portuguese.inc b/src/corelib/lang_portuguese.inc
index ae6edef5..9accff06 100644
--- a/src/corelib/lang_portuguese.inc
+++ b/src/corelib/lang_portuguese.inc
@@ -98,6 +98,7 @@ rsSaveAFile = 'Salvar arquivo como';
// User Dialog
rsUserName = 'User name';
rsPassword = 'Password';
+rsDatabase = 'Database';
// Error messages
diff --git a/src/corelib/lang_russian.inc b/src/corelib/lang_russian.inc
index 544d3345..32dd7380 100644
--- a/src/corelib/lang_russian.inc
+++ b/src/corelib/lang_russian.inc
@@ -98,6 +98,7 @@ rsSaveAFile = 'Сохранить файл как';
// User Dialog
rsUserName = 'Имя пользователя';
rsPassword = 'Пароль';
+rsDatabase = 'Database';
// Error messages
diff --git a/src/corelib/lang_spanish.inc b/src/corelib/lang_spanish.inc
index 492978b8..f7dbbda4 100644
--- a/src/corelib/lang_spanish.inc
+++ b/src/corelib/lang_spanish.inc
@@ -98,6 +98,7 @@ rsSaveAFile = 'Guardar como';
// User Dialog
rsUserName = 'User name';
rsPassword = 'Password';
+rsDatabase = 'Database';
// Error messages
diff --git a/src/gui/fpgui_package.lpk b/src/gui/fpgui_package.lpk
index 0fc84c46..727594b7 100644
--- a/src/gui/fpgui_package.lpk
+++ b/src/gui/fpgui_package.lpk
@@ -17,11 +17,6 @@
<CodeGeneration>
<Generate Value="Faster"/>
</CodeGeneration>
- <Linking>
- <Debugging>
- <GenerateDebugInfo Value="True"/>
- </Debugging>
- </Linking>
<Other>
<CustomOptions Value="-B
"/>
diff --git a/src/gui/gui_dialogs.pas b/src/gui/gui_dialogs.pas
index 660eb1e7..1437a492 100644
--- a/src/gui/gui_dialogs.pas
+++ b/src/gui/gui_dialogs.pas
@@ -211,6 +211,7 @@ uses
{$IFDEF MSWINDOWS}
,Windows // used by File Dialog
{$ENDIF}
+ ,DateUtils
;
diff --git a/src/gui/promptuserdialog.inc b/src/gui/promptuserdialog.inc
index ccb04a94..9c5e5d0f 100644
--- a/src/gui/promptuserdialog.inc
+++ b/src/gui/promptuserdialog.inc
@@ -5,19 +5,36 @@
{ TfpgPromptUserDialog }
-TfpgPromptUserDialog = class(TfpgBaseDialog)
-private
- lblTitle: TfpgLabel;
- lblTitlePw: TfpgLabel;
- edUserID: TfpgEdit;
- edPassword: TfpgEdit;
- function GetUserID: TfpgString;
- function GetUserPassword: TfpgString;
-public
- constructor Create(AOwner: TComponent); override;
- property UserID: TfpgString read GetUserID;
- property Password: TfpgString read GetUserPassword;
-end;
+ 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}
@@ -70,6 +87,71 @@ begin
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}