]> git.saurik.com Git - wxWidgets.git/blob - demos/forty/playerdg.cpp
Fix for tip disappearing immediately under MSW
[wxWidgets.git] / demos / forty / playerdg.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: playerdg.cpp
3 // Purpose: Forty Thieves patience game
4 // Author: Chris Breeze
5 // Modified by:
6 // Created: 21/07/97
7 // RCS-ID: $Id$
8 // Copyright: (c) 1993-1998 Chris Breeze
9 // Licence: wxWindows licence
10 //---------------------------------------------------------------------------
11 // Last modified: 22nd July 1998 - ported to wxWindows 2.0
12 /////////////////////////////////////////////////////////////////////////////
13
14 #ifdef __GNUG__
15 #pragma implementation
16 #pragma interface
17 #endif
18
19 // For compilers that support precompilation, includes "wx/wx.h".
20 #include "wx/wxprec.h"
21
22 #ifdef __BORLANDC__
23 #pragma hdrstop
24 #endif
25
26 #ifndef WX_PRECOMP
27 #include "wx/wx.h"
28 #endif
29
30 #include "scorefil.h"
31 #include "playerdg.h"
32
33 const int ID_LISTBOX = 101;
34
35 BEGIN_EVENT_TABLE(PlayerSelectionDialog, wxDialog)
36 EVT_SIZE(PlayerSelectionDialog::OnSize)
37 EVT_BUTTON(wxID_OK, PlayerSelectionDialog::ButtonCallback)
38 EVT_BUTTON(wxID_CANCEL, PlayerSelectionDialog::ButtonCallback)
39 EVT_LISTBOX(ID_LISTBOX, PlayerSelectionDialog::SelectCallback)
40 EVT_CLOSE(PlayerSelectionDialog::OnCloseWindow)
41 END_EVENT_TABLE()
42
43 PlayerSelectionDialog::PlayerSelectionDialog(
44 wxWindow* parent,
45 ScoreFile* file
46 ) :
47 wxDialog(parent, -1, "Player Selection",
48 wxDefaultPosition, wxSize(320, 200),
49 wxDIALOG_MODAL | wxDEFAULT_DIALOG_STYLE),
50 m_scoreFile(file)
51 {
52 // enable constraints
53 SetAutoLayout (TRUE);
54
55 wxStaticText* msg = new wxStaticText(this, -1, "Please select a name from the list");
56
57 wxListBox* list = new wxListBox(
58 this, ID_LISTBOX,
59 wxDefaultPosition, wxDefaultSize,
60 0, 0,
61 wxLB_SINGLE
62 );
63
64 wxArrayString players;
65 m_scoreFile->GetPlayerList(players);
66 for (unsigned int i = 0; i < players.Count(); i++)
67 {
68 list->Append(players[i]);
69 }
70
71 m_textField = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxDefaultSize, 0);
72
73 m_OK = new wxButton(this, wxID_OK, "OK");
74 m_cancel = new wxButton(this, wxID_CANCEL, "Cancel");
75
76 wxLayoutConstraints* layout;
77
78 // Constrain the msg at the top of the window
79 layout = new wxLayoutConstraints;
80 layout->left.SameAs (this, wxLeft, 10);
81 layout->top.SameAs (this, wxTop, 10);
82 layout->height.AsIs();
83 layout->width.AsIs();
84 msg->SetConstraints(layout);
85
86 // Constrain the OK button
87 layout = new wxLayoutConstraints;
88 layout->left.SameAs (this, wxLeft, 10);
89 layout->bottom.SameAs (this, wxBottom, 10);
90 layout->height.AsIs();
91 layout->width.AsIs();
92 m_OK->SetConstraints(layout);
93
94 // Constrain the OK button
95 layout = new wxLayoutConstraints;
96 layout->left.RightOf (m_OK, 10);
97 layout->bottom.SameAs (this, wxBottom, 10);
98 layout->height.AsIs();
99 layout->width.AsIs();
100 m_cancel->SetConstraints(layout);
101
102 // Constrain the Name text entry field
103 layout = new wxLayoutConstraints;
104 layout->left.SameAs (this, wxLeft, 10);
105 layout->right.SameAs (this, wxRight, 10);
106 layout->bottom.SameAs (m_OK, wxTop, 10);
107 layout->height.AsIs();
108 m_textField->SetConstraints(layout);
109
110 // Constrain the list of players
111 layout = new wxLayoutConstraints;
112 layout->left.SameAs (this, wxLeft, 10);
113 layout->right.SameAs (this, wxRight, 10);
114 layout->top.Below (msg, 10);
115 layout->bottom.SameAs (m_textField, wxTop, 10);
116 list->SetConstraints(layout);
117
118 wxString prevPlayer = m_scoreFile->GetPreviousPlayer();
119 if ((prevPlayer.Length() > 0) && (list->FindString(prevPlayer) != -1))
120 {
121 list->SetStringSelection(prevPlayer);
122 m_textField->SetValue(prevPlayer);
123 }
124
125 Layout();
126
127 CentreOnParent();
128 }
129
130 PlayerSelectionDialog::~PlayerSelectionDialog()
131 {
132 }
133
134 void PlayerSelectionDialog::OnSize(wxSizeEvent& WXUNUSED(event))
135 {
136 Layout();
137 }
138
139 const wxString& PlayerSelectionDialog::GetPlayersName()
140 {
141 /*
142 m_player = "";
143 Show(TRUE);
144 */
145 return m_player;
146 }
147
148 void PlayerSelectionDialog::OnCloseWindow(wxCloseEvent& event)
149 {
150 m_player = "";
151 EndModal(wxID_CANCEL);
152 }
153
154 void PlayerSelectionDialog::SelectCallback(wxCommandEvent& event)
155 {
156 if (event.GetEventType() == wxEVT_COMMAND_LISTBOX_SELECTED)
157 {
158 // if (event.IsSelection())
159 m_textField->SetValue(event.GetString());
160 }
161 }
162
163 void PlayerSelectionDialog::ButtonCallback(wxCommandEvent& event)
164 {
165 if (event.GetId() == wxID_OK)
166 {
167 wxString name = m_textField->GetValue();
168 if (!name.IsNull() && name.Length() > 0)
169 {
170 if (name.Contains('@'))
171 {
172 wxMessageBox("Names should not contain the '@' character", "Forty Thieves");
173 }
174 else
175 {
176 m_player = name;
177 EndModal(wxID_OK);
178 }
179 }
180 else
181 {
182 wxMessageBox("Please enter your name", "Forty Thieves");
183 }
184 }
185 else
186 {
187 m_player = "";
188 EndModal(wxID_CANCEL);
189 }
190 }