#include <network_teams_selection_box.h>
Inheritance diagram for NetworkTeamsSelectionBox:
Public Member Functions | |
NetworkTeamsSelectionBox (const Rectanglei &rect) | |
void | ValidTeamsSelection () |
Widget * | Clic (const Point2i &mousePosition, uint button) |
void | AddTeamCallback (std::string team_id) |
void | UpdateTeamCallback (std::string team_id) |
void | DelTeamCallback (std::string team_id) |
Private Member Functions | |
void | SetNbLocalTeams (uint nb_teams, uint previous_nb) |
void | AddLocalTeam (uint i) |
void | RemoveLocalTeam (uint i) |
void | SetLocalTeam (uint i, Team &team, bool remove_previous_team) |
void | PrevTeam (uint i) |
void | NextTeam (uint i, bool check_null_prev_team=true) |
Private Attributes | |
SpinButtonBig * | local_teams_nb |
std::vector< TeamBox * > | teams_selections |
Definition at line 37 of file network_teams_selection_box.h.
NetworkTeamsSelectionBox::NetworkTeamsSelectionBox | ( | const Rectanglei & | rect | ) |
Definition at line 27 of file network_teams_selection_box.cpp.
00027 : HBox(rect, true) 00028 { 00029 AddWidget(new PictureWidget(Rectanglei(0,0,38,150), "menu/teams_label")); 00030 Rectanglei rectZero(0, 0, 0, 0); 00031 00032 // How many teams ? 00033 local_teams_nb = new SpinButtonBig(_("Local teams:"), Rectanglei(0, 0, 130, 30), 00034 0, 1, 00035 0, NMAX_NB_TEAMS); 00036 AddWidget(local_teams_nb); 00037 00038 Box * top_n_bottom_team_options = new VBox( Rectanglei(0, 0, 00039 rect.GetSizeX() - local_teams_nb->GetSizeX() - 60, 0) 00040 ,false); 00041 top_n_bottom_team_options->SetBorder(Point2i(5,0)); 00042 top_n_bottom_team_options->SetMargin(10); 00043 Box * top_team_options = new HBox ( Rectanglei(0, 0, 0, rect.GetSizeY()/2 - 20), false); 00044 Box * bottom_team_options = new HBox ( Rectanglei(0, 0, 0, rect.GetSizeY()/2 - 20), false); 00045 top_team_options->SetBorder(Point2i(0,0)); 00046 bottom_team_options->SetBorder(Point2i(0,0)); 00047 00048 // Initialize teams 00049 uint team_w_size= top_n_bottom_team_options->GetSizeX() * 2 / NMAX_NB_TEAMS; 00050 00051 for (uint i=0; i < NMAX_NB_TEAMS; i++) { 00052 std::string player_name = _("Player") ; 00053 char num_player[4]; 00054 sprintf(num_player, " %d", i+1); 00055 player_name += num_player; 00056 teams_selections.push_back(new TeamBox(player_name, Rectanglei(0,0,team_w_size,rect.GetSizeY()/2))); 00057 if ( i%2 == 0) 00058 top_team_options->AddWidget(teams_selections.at(i)); 00059 else 00060 bottom_team_options->AddWidget(teams_selections.at(i)); 00061 } 00062 00063 top_n_bottom_team_options->AddWidget(top_team_options); 00064 top_n_bottom_team_options->AddWidget(bottom_team_options); 00065 00066 AddWidget(top_n_bottom_team_options); 00067 00068 // Load Teams' list 00069 teams_list.full_list.sort(compareTeams); 00070 teams_list.Clear(); 00071 00072 // No selected team by default 00073 for (uint i=0; i<teams_selections.size(); i++) { 00074 teams_selections.at(i)->ClearTeam(); 00075 } 00076 }
Here is the call graph for this function:
void NetworkTeamsSelectionBox::AddLocalTeam | ( | uint | i | ) | [private] |
Definition at line 221 of file network_teams_selection_box.cpp.
00222 { 00223 // we should find an available team 00224 NextTeam(i, false); 00225 }
Here is the call graph for this function:
Here is the caller graph for this function:
void NetworkTeamsSelectionBox::AddTeamCallback | ( | std::string | team_id | ) |
Definition at line 255 of file network_teams_selection_box.cpp.
00256 { 00257 for (uint i=0; i < teams_selections.size(); i++) { 00258 if (teams_selections.at(i)->GetTeam() == NULL) { 00259 int index = 0; 00260 Team * tmp = teams_list.FindById(team_id, index); 00261 00262 teams_selections.at(i)->SetTeam(*tmp, true); 00263 break; 00264 } 00265 } 00266 00267 // Count the current number of local teams 00268 uint nb_local_teams=0; 00269 for (uint i=0; i < teams_selections.size(); i++) { 00270 if (teams_selections.at(i)->GetTeam() != NULL && 00271 teams_selections.at(i)->IsLocal()) { 00272 nb_local_teams++; 00273 } 00274 } 00275 local_teams_nb->SetValue(nb_local_teams); 00276 }
Here is the call graph for this function:
Here is the caller graph for this function:
Reimplemented from Box.
Definition at line 78 of file network_teams_selection_box.cpp.
00079 { 00080 if (!Contains(mousePosition)) return NULL; 00081 00082 uint current_nb_teams = local_teams_nb->GetValue(); 00083 00084 if (local_teams_nb->Clic(mousePosition, button)){ 00085 SetNbLocalTeams(local_teams_nb->GetValue(), current_nb_teams); 00086 00087 } else { 00088 for (uint i=0; i<teams_selections.size() ; i++) { 00089 00090 if ( teams_selections.at(i)->Contains(mousePosition) && 00091 teams_selections.at(i)->IsLocal() ) { 00092 00093 Widget * w = teams_selections.at(i)->Clic(mousePosition, button); 00094 00095 if ( w == NULL ) { 00096 if ( button == SDL_BUTTON_LEFT || button == SDL_BUTTON_WHEELDOWN ) { 00097 NextTeam(i); 00098 } else if ( button == SDL_BUTTON_RIGHT || button == SDL_BUTTON_WHEELUP ) { 00099 PrevTeam(i); 00100 } 00101 } else { 00102 return w; 00103 } 00104 break; 00105 } 00106 } 00107 } 00108 00109 return NULL; 00110 }
Here is the call graph for this function:
void NetworkTeamsSelectionBox::DelTeamCallback | ( | std::string | team_id | ) |
Definition at line 293 of file network_teams_selection_box.cpp.
00294 { 00295 for (uint i=0; i < teams_selections.size(); i++) { 00296 if (teams_selections.at(i)->GetTeam() != NULL && 00297 teams_selections.at(i)->GetTeam()->GetId() == team_id) { 00298 00299 teams_selections.at(i)->ClearTeam(); 00300 break; 00301 } 00302 } 00303 00304 // Count the current number of local teams 00305 uint nb_local_teams=0; 00306 for (uint i=0; i < teams_selections.size(); i++) { 00307 if (teams_selections.at(i)->GetTeam() != NULL && 00308 teams_selections.at(i)->IsLocal()) { 00309 nb_local_teams++; 00310 } 00311 } 00312 local_teams_nb->SetValue(nb_local_teams); 00313 }
Here is the call graph for this function:
Here is the caller graph for this function:
void NetworkTeamsSelectionBox::NextTeam | ( | uint | i, | |
bool | check_null_prev_team = true | |||
) | [private] |
Definition at line 151 of file network_teams_selection_box.cpp.
00153 { 00154 if (check_null_prev_team && 00155 teams_selections.at(i)->GetTeam() == NULL) 00156 return; 00157 00158 bool to_continue; 00159 Team* tmp; 00160 int previous_index = -1, index; 00161 00162 if (check_null_prev_team) { 00163 teams_list.FindById(teams_selections.at(i)->GetTeam()->GetId(), previous_index); 00164 } 00165 00166 index = previous_index+1; 00167 00168 do 00169 { 00170 to_continue = false; 00171 00172 // select the first team if we are outside list 00173 if ( index >= int(teams_list.full_list.size()) ) 00174 index = 0; 00175 00176 // Get the team at current index 00177 tmp = teams_list.FindByIndex(index); 00178 00179 // Check if that team is already selected 00180 for (uint j = 0; j < NMAX_NB_TEAMS; j++) { 00181 if (j!= i && tmp == teams_selections.at(j)->GetTeam()) { 00182 index++; 00183 to_continue = true; 00184 break; 00185 } 00186 } 00187 00188 // We have found a team which is not selected 00189 if (tmp != NULL && !to_continue) { 00190 SetLocalTeam(i, *tmp, check_null_prev_team); 00191 } 00192 } while ( index != previous_index && to_continue); 00193 }
Here is the call graph for this function:
Here is the caller graph for this function:
void NetworkTeamsSelectionBox::PrevTeam | ( | uint | i | ) | [private] |
Definition at line 112 of file network_teams_selection_box.cpp.
00113 { 00114 if (teams_selections.at(i)->GetTeam() == NULL) return; 00115 00116 bool to_continue; 00117 Team* tmp; 00118 int previous_index = -1, index; 00119 00120 teams_list.FindById(teams_selections.at(i)->GetTeam()->GetId(), previous_index); 00121 00122 index = previous_index-1; 00123 00124 do 00125 { 00126 to_continue = false; 00127 00128 // select the last team if we are outside list 00129 if ( index < 0 ) 00130 index = int(teams_list.full_list.size())-1; 00131 00132 // Get the team at current index 00133 tmp = teams_list.FindByIndex(index); 00134 00135 // Check if that team is already selected 00136 for (uint j = 0; j < NMAX_NB_TEAMS; j++) { 00137 if (j!= i && tmp == teams_selections.at(j)->GetTeam()) { 00138 index--; 00139 to_continue = true; 00140 break; 00141 } 00142 } 00143 00144 // We have found a team which is not selected 00145 if (tmp != NULL && !to_continue) { 00146 SetLocalTeam(i, *tmp, true); 00147 } 00148 } while ( index != previous_index && to_continue); 00149 }
Here is the call graph for this function:
Here is the caller graph for this function:
void NetworkTeamsSelectionBox::RemoveLocalTeam | ( | uint | i | ) | [private] |
Definition at line 227 of file network_teams_selection_box.cpp.
00228 { 00229 if ( teams_selections.at(i)->GetTeam() != NULL ) { 00230 ActionHandler::GetInstance()->NewAction (new Action(Action::ACTION_DEL_TEAM, 00231 teams_selections.at(i)->GetTeam()->GetId())); 00232 } 00233 }
Here is the call graph for this function:
Here is the caller graph for this function:
void NetworkTeamsSelectionBox::SetLocalTeam | ( | uint | i, | |
Team & | team, | |||
bool | remove_previous_team | |||
) | [private] |
Definition at line 235 of file network_teams_selection_box.cpp.
00236 { 00237 if (remove_previous_team) { 00238 RemoveLocalTeam(i); 00239 } 00240 00241 team.SetLocal(); 00242 #ifdef WIN32 00243 team.SetPlayerName(getenv("USERNAME")); 00244 #else 00245 team.SetPlayerName(getenv("USER")); 00246 #endif 00247 std::string team_id = team.GetId(); 00248 00249 Action* a = new Action(Action::ACTION_NEW_TEAM, team_id); 00250 a->Push(team.GetPlayerName()); 00251 a->Push(int(team.GetNbCharacters())); 00252 ActionHandler::GetInstance()->NewAction (a); 00253 }
Here is the call graph for this function:
Here is the caller graph for this function:
Definition at line 195 of file network_teams_selection_box.cpp.
00196 { 00197 00198 int delta_team = nb_teams - previous_nb; 00199 00200 if (delta_team < 0) { 00201 // we hide the useless LOCAL teams selector 00202 for (uint i=teams_selections.size()-1; int(i) >= 0 && delta_team < 0; i--) { 00203 if (teams_selections.at(i)->GetTeam() != NULL && 00204 teams_selections.at(i)->IsLocal()) { 00205 RemoveLocalTeam(i); 00206 delta_team++; 00207 } 00208 } 00209 } else if (delta_team > 0) { 00210 // we had the mandatory LOCAL teams selection 00211 for (uint i=0; delta_team > 0 && i < teams_selections.size(); i++) { 00212 if (teams_selections.at(i)->GetTeam() == NULL) { 00213 AddLocalTeam(i); 00214 delta_team--; 00215 } 00216 } 00217 00218 } 00219 }
Here is the call graph for this function:
Here is the caller graph for this function:
void NetworkTeamsSelectionBox::UpdateTeamCallback | ( | std::string | team_id | ) |
Definition at line 278 of file network_teams_selection_box.cpp.
00279 { 00280 for (uint i=0; i < teams_selections.size(); i++) { 00281 if (teams_selections.at(i)->GetTeam() != NULL && 00282 teams_selections.at(i)->GetTeam()->GetId() == team_id) { 00283 int index = 0; 00284 Team * tmp = teams_list.FindById(team_id, index); 00285 // Force refresh of information 00286 teams_selections.at(i)->SetTeam(*tmp, true); 00287 std::cout << "Update " << team_id << std::endl; 00288 break; 00289 } 00290 } 00291 }
Here is the call graph for this function:
Here is the caller graph for this function:
void NetworkTeamsSelectionBox::ValidTeamsSelection | ( | ) |
Definition at line 316 of file network_teams_selection_box.cpp.
00317 { 00318 std::list<uint> selection; 00319 00320 uint nb_teams=0; 00321 for (uint i=0; i < teams_selections.size(); i++) { 00322 if (teams_selections.at(i)->GetTeam() != NULL) 00323 nb_teams++; 00324 } 00325 00326 if (nb_teams >= 2) { 00327 std::list<uint> selection; 00328 00329 for (uint i=0; i < teams_selections.size(); i++) { 00330 if (teams_selections.at(i)->GetTeam() != NULL) { 00331 int index = -1; 00332 teams_selections.at(i)->ValidOptions(); 00333 teams_list.FindById(teams_selections.at(i)->GetTeam()->GetId(), index); 00334 if (index > -1) 00335 selection.push_back(uint(index)); 00336 } 00337 } 00338 teams_list.ChangeSelection (selection); 00339 } 00340 }
Here is the call graph for this function:
Here is the caller graph for this function:
Definition at line 40 of file network_teams_selection_box.h.
std::vector<TeamBox*> NetworkTeamsSelectionBox::teams_selections [private] |
Definition at line 41 of file network_teams_selection_box.h.