class WXDLLEXPORT wxTextCtrl;
 
-// Handy dialog functions (will be converted into classes at some point)
 WXDLLEXPORT_DATA(extern const wxChar*) wxGetTextFromUserPromptStr;
 WXDLLEXPORT_DATA(extern const wxChar*) wxEmptyString;
 
+#define wxTextEntryDialogStyle (wxOK | wxCANCEL | wxCENTRE)
+
+// ----------------------------------------------------------------------------
+// wxTextEntryDialog: a dialog with text control, [ok] and [cancel] buttons
+// ----------------------------------------------------------------------------
+
 class WXDLLEXPORT wxTextEntryDialog : public wxDialog
 {
-    DECLARE_DYNAMIC_CLASS(wxTextEntryDialog)
-
 public:
     wxTextEntryDialog(wxWindow *parent,
                       const wxString& message,
                       const wxString& caption = wxGetTextFromUserPromptStr,
                       const wxString& value = wxEmptyString,
-                      long style = wxOK | wxCANCEL | wxCENTRE,
+                      long style = wxTextEntryDialogStyle,
                       const wxPoint& pos = wxDefaultPosition);
 
     void SetValue(const wxString& val) { m_value = val; }
 
 private:
     DECLARE_EVENT_TABLE()
+    DECLARE_DYNAMIC_CLASS(wxTextEntryDialog)
 };
 
 // ----------------------------------------------------------------------------
                   int y = -1,
                   bool centre = TRUE);
 
+wxString WXDLLEXPORT
+wxGetPasswordFromUser(const wxString& message,
+                      const wxString& caption = wxGetTextFromUserPromptStr,
+                      const wxString& default_value = wxEmptyString,
+                      wxWindow *parent = (wxWindow *) NULL);
+
 #endif
     // __TEXTDLGH_G__
 
   file_menu->Append(DIALOGS_LOG_DIALOG, "&Log dialog\tCtrl-L");
   file_menu->Append(DIALOGS_MESSAGE_BOX, "&Message box\tCtrl-M");
   file_menu->Append(DIALOGS_TEXT_ENTRY,  "Text &entry\tCtrl-E");
+  file_menu->Append(DIALOGS_PASSWORD_ENTRY,  "&Password entry\tCtrl-P");
   file_menu->Append(DIALOGS_NUM_ENTRY, "&Numeric entry\tCtrl-N");
   file_menu->Append(DIALOGS_SINGLE_CHOICE,  "&Single choice\tCtrl-S");
   file_menu->AppendSeparator();
   file_menu->Append(DIALOGS_TIP,  "&Tip of the day\tCtrl-T");
   file_menu->AppendSeparator();
   file_menu->Append(DIALOGS_FILE_OPEN,  "&Open file\tCtrl-O");
-  file_menu->Append(DIALOGS_FILES_OPEN,  "&Open files\tCtrl-Q");
+  file_menu->Append(DIALOGS_FILES_OPEN,  "Open &files\tCtrl-Q");
   file_menu->Append(DIALOGS_FILE_SAVE,  "Sa&ve file");
   file_menu->Append(DIALOGS_DIR_CHOOSE,  "&Choose a directory\tCtrl-D");
   file_menu->AppendSeparator();
     wxMessageBox(msg, "Numeric test result", wxOK | icon, this);
 }
 
-void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event) )
+void MyFrame::PasswordEntry(wxCommandEvent& WXUNUSED(event))
 {
-  wxTextEntryDialog dialog(this, "This is a small sample\nA long, long string to test out the text entrybox",
-      "Please enter a string", "Default value", wxOK|wxCANCEL);
+    wxString pwd = wxGetPasswordFromUser("Enter password:",
+                                         "Passowrd entry dialog",
+                                         "",
+                                         this);
+    if ( !!pwd )
+    {
+        wxMessageBox(wxString::Format("Your password is '%s'", pwd.c_str()),
+                     "Got password", wxOK | wxICON_INFORMATION, this);
+    }
+}
+
+void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event))
+{
+  wxTextEntryDialog dialog(this,
+                           "This is a small sample\n"
+                           "A long, long string to test out the text entrybox",
+                           "Please enter a string",
+                           "Default value",
+                           wxOK | wxCANCEL);
 
   if (dialog.ShowModal() == wxID_OK)
   {
 END_EVENT_TABLE()
 
 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
-    EVT_MENU(DIALOGS_CHOOSE_COLOUR,                MyFrame::ChooseColour)
-    EVT_MENU(DIALOGS_CHOOSE_FONT,                MyFrame::ChooseFont)
-    EVT_MENU(DIALOGS_LOG_DIALOG,                MyFrame::LogDialog)
-    EVT_MENU(DIALOGS_MESSAGE_BOX,                MyFrame::MessageBox)
-    EVT_MENU(DIALOGS_TEXT_ENTRY,                MyFrame::TextEntry)
-    EVT_MENU(DIALOGS_NUM_ENTRY,                MyFrame::NumericEntry)
-    EVT_MENU(DIALOGS_SINGLE_CHOICE,                MyFrame::SingleChoice)
-    EVT_MENU(DIALOGS_FILE_OPEN,                    MyFrame::FileOpen)
-    EVT_MENU(DIALOGS_FILES_OPEN,                   MyFrame::FilesOpen)
-    EVT_MENU(DIALOGS_FILE_SAVE,                    MyFrame::FileSave)
-    EVT_MENU(DIALOGS_DIR_CHOOSE,                MyFrame::DirChoose)
-    EVT_MENU(DIALOGS_TIP,                        MyFrame::ShowTip)
+    EVT_MENU(DIALOGS_CHOOSE_COLOUR,                 MyFrame::ChooseColour)
+    EVT_MENU(DIALOGS_CHOOSE_FONT,                   MyFrame::ChooseFont)
+    EVT_MENU(DIALOGS_LOG_DIALOG,                    MyFrame::LogDialog)
+    EVT_MENU(DIALOGS_MESSAGE_BOX,                   MyFrame::MessageBox)
+    EVT_MENU(DIALOGS_TEXT_ENTRY,                    MyFrame::TextEntry)
+    EVT_MENU(DIALOGS_PASSWORD_ENTRY,                MyFrame::PasswordEntry)
+    EVT_MENU(DIALOGS_NUM_ENTRY,                     MyFrame::NumericEntry)
+    EVT_MENU(DIALOGS_SINGLE_CHOICE,                 MyFrame::SingleChoice)
+    EVT_MENU(DIALOGS_FILE_OPEN,                     MyFrame::FileOpen)
+    EVT_MENU(DIALOGS_FILES_OPEN,                    MyFrame::FilesOpen)
+    EVT_MENU(DIALOGS_FILE_SAVE,                     MyFrame::FileSave)
+    EVT_MENU(DIALOGS_DIR_CHOOSE,                    MyFrame::DirChoose)
+    EVT_MENU(DIALOGS_TIP,                           MyFrame::ShowTip)
 #if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW
-    EVT_MENU(DIALOGS_CHOOSE_COLOUR_GENERIC,        MyFrame::ChooseColourGeneric)
-    EVT_MENU(DIALOGS_CHOOSE_FONT_GENERIC,        MyFrame::ChooseFontGeneric)
+    EVT_MENU(DIALOGS_CHOOSE_COLOUR_GENERIC,         MyFrame::ChooseColourGeneric)
+    EVT_MENU(DIALOGS_CHOOSE_FONT_GENERIC,           MyFrame::ChooseFontGeneric)
 #endif
-    EVT_MENU(wxID_EXIT,                            MyFrame::OnExit)
+    EVT_MENU(wxID_EXIT,                             MyFrame::OnExit)
 END_EVENT_TABLE()
 
 
     void MessageBox(wxCommandEvent& event);
     void SingleChoice(wxCommandEvent& event);
     void TextEntry(wxCommandEvent& event);
+    void PasswordEntry(wxCommandEvent& event);
     void NumericEntry(wxCommandEvent& event);
     void FileOpen(wxCommandEvent& event);
     void FilesOpen(wxCommandEvent& event);
 
 
 // Menu IDs
-#define DIALOGS_CHOOSE_COLOUR               1
-#define DIALOGS_CHOOSE_COLOUR_GENERIC       2
-#define DIALOGS_CHOOSE_FONT                 3
-#define DIALOGS_CHOOSE_FONT_GENERIC         4
-#define DIALOGS_MESSAGE_BOX                 5
-#define DIALOGS_SINGLE_CHOICE               6
-#define DIALOGS_TEXT_ENTRY                  7
-#define DIALOGS_FILE_OPEN                   8
-#define DIALOGS_FILES_OPEN                  9
-#define DIALOGS_FILE_SAVE                   10
-#define DIALOGS_DIR_CHOOSE                  11
-#define DIALOGS_TIP                         12
-#define DIALOGS_NUM_ENTRY                   13
-#define DIALOGS_LOG_DIALOG                  14
+enum
+{
+    DIALOGS_CHOOSE_COLOUR = 1,
+    DIALOGS_CHOOSE_COLOUR_GENERIC,
+    DIALOGS_CHOOSE_FONT,
+    DIALOGS_CHOOSE_FONT_GENERIC,
+    DIALOGS_MESSAGE_BOX,
+    DIALOGS_SINGLE_CHOICE,
+    DIALOGS_TEXT_ENTRY,
+    DIALOGS_PASSWORD_ENTRY,
+    DIALOGS_FILE_OPEN,
+    DIALOGS_FILES_OPEN,
+    DIALOGS_FILE_SAVE,
+    DIALOGS_DIR_CHOOSE,
+    DIALOGS_TIP,
+    DIALOGS_NUM_ENTRY,
+    DIALOGS_LOG_DIALOG
+};
 
 #endif