/////////////////// // Net Internet frame void Menu_Net_NETFrame(int mouse) { gui_event_t *ev = NULL; std::string addr; // Process & Draw the gui ev = cInternet.Process(); cInternet.Draw( VideoPostProcessor::videoSurface() ); // Process the server list static bool wasLoadedBefore = false; if( SvrList_Process() || (tIpToCountryDB->Loaded() && !wasLoadedBefore) ) { // Add the servers to the listview Menu_Net_NET_ServerList_Refresher(); wasLoadedBefore = tIpToCountryDB->Loaded(); } // Process any events if(ev) { switch(ev->iControlID) { // Add Server case mi_AddServer: if(ev->iEventMsg == BTN_CLICKED) { // Click! PlaySoundSample(sfxGeneral.smpClick); Menu_Net_NETAddServer(); } break; // Back case mi_Back: if(ev->iEventMsg == BTN_CLICKED) { // Shutdown Menu_Net_NETShutdown(); // Click! PlaySoundSample(sfxGeneral.smpClick); // Back to main menu Menu_MainInitialize(); } break; // Refresh case mi_Refresh: if(ev->iEventMsg == BTN_CLICKED) { // Click! PlaySoundSample(sfxGeneral.smpClick); // Refresh the currently visible servers SvrList_RefreshList(); Menu_Net_NET_ServerList_Refresher(); } break; // Join case mi_Join: if(ev->iEventMsg == BTN_CLICKED) { addr = ""; int result = cInternet.SendMessage(mi_ServerList, LVS_GETCURSINDEX, &addr, 0); if(result != -1 && addr != "") { // Save the list SvrList_Save(); // Click! PlaySoundSample(sfxGeneral.smpClick); lv_subitem_t *sub = ((CListview *)cInternet.getWidget(mi_ServerList))->getCurSubitem(1); // Join if (sub) Menu_Net_NETJoinServer(addr,sub->sText); return; } } break; // Serverlist case mi_ServerList: // Double click if(ev->iEventMsg == LV_DOUBLECLK) { /* Now.... Should a double click refresh the server (like tribes)? Or should it join the server like other games??? */ // Just join for the moment addr = ""; int result = cInternet.SendMessage(mi_ServerList, LVS_GETCURSINDEX, &addr, 0); lv_subitem_t *sub = ((CListview *)cInternet.getWidget(mi_ServerList))->getCurSubitem(1); if(result != -1 && addr != "" && sub) { // Save the list SvrList_Save(); Menu_Net_NETJoinServer(addr,sub->sText); return; } } // Right click if( ev->iEventMsg == LV_RIGHTCLK ) { addr = ""; int result = cInternet.SendMessage(mi_ServerList, LVS_GETCURSINDEX, &addr, 0); if(result && addr != "") { // Display a menu szNetCurServer = addr; mouse_t *m = GetMouse(); cInternet.Add( new CMenu(m->X, m->Y), mi_PopupMenu, 0,0, 640,480 ); cInternet.SendMessage( mi_PopupMenu, MNS_ADDITEM, "Delete server", 0 ); cInternet.SendMessage( mi_PopupMenu, MNS_ADDITEM, "Refresh server", 1 ); cInternet.SendMessage( mi_PopupMenu, MNS_ADDITEM, "Join server", 2 ); cInternet.SendMessage( mi_PopupMenu, MNS_ADDITEM, "Add to favourites", 3 ); cInternet.SendMessage( mi_PopupMenu, MNS_ADDITEM, "Send \"I want to join message\"",4 ); cInternet.SendMessage( mi_PopupMenu, MNS_ADDITEM, "Copy IP to clipboard", 5 ); cInternet.SendMessage( mi_PopupMenu, MNS_ADDITEM, "Server details", 6 ); } } // Enter key if( ev->iEventMsg == LV_ENTER ) { // Join addr = ""; int result = cInternet.SendMessage(mi_ServerList, LVS_GETCURSINDEX, &addr, 0); lv_subitem_t *sub = ((CListview *)cInternet.getWidget(mi_ServerList))->getCurSubitem(1); if(result != -1 && addr != "" && sub) { // Save the list SvrList_Save(); Menu_Net_NETJoinServer(addr,sub->sText); return; } } // Delete if( ev->iEventMsg == LV_DELETE ) { addr = ""; int result = cInternet.SendMessage(mi_ServerList, LVS_GETCURSINDEX, &addr, 0); if(result && addr != "") { SvrList_RemoveServer(addr); // Re-Fill the server list Menu_Net_NET_ServerList_Refresher(); } } break; // Popup menu case mi_PopupMenu: switch( ev->iEventMsg ) { // Delete the server case MNU_USER+0: SvrList_RemoveServer(szNetCurServer); break; // Refresh the server case MNU_USER+1: { server_t::Ptr sv = SvrList_FindServerStr(szNetCurServer); if(sv) SvrList_RefreshServer(sv); } break; // Join a server case MNU_USER+2: { // Save the list SvrList_Save(); lv_subitem_t *sub = ((CListview *)cInternet.getWidget(mi_ServerList))->getCurSubitem(1); if (sub) Menu_Net_NETJoinServer(szNetCurServer,sub->sText); } return; // Add server to favourites case MNU_USER+3: { server_t::Ptr sv = SvrList_FindServerStr(szNetCurServer); if (sv) SvrList_AddFavourite(sv->szName,sv->szAddress); } break; // Send a "wants to join" message case MNU_USER+4: { server_t::Ptr sv = SvrList_FindServerStr(szNetCurServer); std::string Nick; cInternet.SendMessage(mi_PlayerSelection, CBS_GETCURNAME, &Nick, 0); if (sv) SvrList_WantsJoin(Nick, sv); } break; // Copy the IP to clipboard case MNU_USER+5: { copy_to_clipboard(szNetCurServer); } break; // Show server details case MNU_USER+6: cInternet.removeWidget(mi_PopupMenu); Menu_Net_NETShowServer(szNetCurServer); break; } // Re-Fill the server list Menu_Net_NET_ServerList_Refresher(); // Remove the menu widget cInternet.SendMessage( mi_PopupMenu, MNM_REDRAWBUFFER, (DWORD)0, 0); cInternet.removeWidget(mi_PopupMenu); break; // Update server list case mi_UpdateList: if(ev->iEventMsg == BTN_CLICKED) { // Click! PlaySoundSample(sfxGeneral.smpClick); Menu_Net_NETUpdateList(); } break; } } // F5 updates the list if (WasKeyboardEventHappening(SDLK_F5)) Menu_Net_NETUpdateList(); // Draw the mouse DrawCursor(VideoPostProcessor::videoSurface()); }