/////////////////// // Initialize the Internet menu bool Menu_Net_NETInitialize() { iNetMode = net_internet; szNetCurServer = ""; cInternet.Shutdown(); cInternet.Initialize(); cInternet.Add( new CListview(), mi_ServerList, 40, 180, 560, 242); cInternet.Add( new CButton(BUT_BACK, tMenu->bmpButtons), mi_Back, 25, 440, 50, 15); cInternet.Add( new CButton(BUT_ADD, tMenu->bmpButtons), mi_AddServer, 140,440, 40, 15); cInternet.Add( new CButton(BUT_REFRESH, tMenu->bmpButtons), mi_Refresh, 250,440, 83, 15); cInternet.Add( new CButton(BUT_UPDATELIST, tMenu->bmpButtons), mi_UpdateList, 390,440, 125, 15); cInternet.Add( new CButton(BUT_JOIN, tMenu->bmpButtons), mi_Join, 570,440, 43, 15); cInternet.Add( new CLabel("Select player:",tLX->clNormalLabel),-1, 125, 152, 180,15); cInternet.Add( new CCombobox(), mi_PlayerSelection, 225,150, 170, 19); if( tLXOptions->bEnableChat && tLXOptions->bEnableMiniChat ) cInternet.Add( new CChatWidget(), -1, 25, 15, 585, 85 ); /* Server list columns Connection speed Name State Players Ping Address */ // Add players to the list profile_t *p = GetProfiles(); bool validName = false; for(;p;p=p->tNext) { if(p->iType == PRF_COMPUTER->toInt()) continue; int i = ((CCombobox*) cInternet.getWidget( mi_PlayerSelection ))->addItem(p->sName, p->sName); ((CCombobox*) cInternet.getWidget( mi_PlayerSelection ))->setImage(p->cSkin.getPreview(), i); if( p->sName == tLXOptions->sLastSelectedPlayer ) validName=true; } if( ! validName ) tLXOptions->sLastSelectedPlayer = GetProfiles()->sName; ((CCombobox*) cInternet.getWidget( mi_PlayerSelection ))->setCurSIndexItem( tLXOptions->sLastSelectedPlayer ); Menu_redrawBufferRect(0, 0, 640, 480); cInternet.SendMessage( mi_ServerList, LVS_ADDCOLUMN, "", tLXOptions->iInternetList[0]); cInternet.SendMessage( mi_ServerList, LVS_ADDCOLUMN, "Server Name", tLXOptions->iInternetList[1]); cInternet.SendMessage( mi_ServerList, LVS_ADDCOLUMN, "State", tLXOptions->iInternetList[2]); cInternet.SendMessage( mi_ServerList, LVS_ADDCOLUMN, "Players", tLXOptions->iInternetList[3]); cInternet.SendMessage( mi_ServerList, LVS_ADDCOLUMN, "Ping", tLXOptions->iInternetList[4]); if (tLXOptions->bUseIpToCountry) { // Too lazy to update tLXOptions, so I'll calculate last column width from width of listview //int CountryColumnWidth = 21; // TODO: not used // HINT: because this column is optional, it is at the end of the array from options cInternet.SendMessage( mi_ServerList, LVS_ADDCOLUMN, "Country", tLXOptions->iInternetList[5]); } cInternet.SendMessage( mi_ServerList, LVS_ADDCOLUMN, "Address", tLXOptions->iInternetList[6]); ((CListview*) cInternet.getWidget( mi_ServerList ))->SetSortColumn( tLXOptions->iInternetSortColumn, true ); // Sorting // Load the list Menu_Net_NET_ServerList_Refresher(); SvrList_UpdateUDPList(); Timer("Menu_Net_NETInitialize serverlist timeout", null, NULL, SVRLIST_TIMEOUT, true).startHeadless(); return true; }
/////////////////// // 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()); }
void Menu_Net_NETAddServer() { CGuiLayout cAddSvr; gui_event_t *ev = NULL; bool addServerMsg = true; // Create the background cInternet.Draw( tMenu->bmpBuffer.get() ); Menu_DrawBox(tMenu->bmpBuffer.get(), 200, 220, 440, 340); //DrawImageAdv(tMenu->bmpBuffer, tMenu->bmpMainBack, 202,222, 202,222, 237,117); DrawRectFill(tMenu->bmpBuffer.get(), 202,222,439,339,tLX->clDialogBackground); for(int i=0;i<6;i++) cNetButtons[i].Draw(tMenu->bmpBuffer.get()); Menu_RedrawMouse(true); cAddSvr.Initialize(); cAddSvr.Add( new CButton(BUT_ADD, tMenu->bmpButtons), na_Add, 220, 320, 40,15); cAddSvr.Add( new CButton(BUT_CANCEL, tMenu->bmpButtons),na_Cancel, 350, 320, 70,15); cAddSvr.Add( new CLabel("Add a server", tLX->clNormalLabel), -1,275, 225, 0, 0); cAddSvr.Add( new CLabel("Address", tLX->clNormalLabel), -1,215, 267, 0, 0); cAddSvr.Add( new CTextbox(), na_Address, 280, 265, 140, tLX->cFont.GetHeight()); ProcessEvents(); while(!WasKeyboardEventHappening(SDLK_ESCAPE,false) && addServerMsg && tMenu->bMenuRunning) { Menu_RedrawMouse(true); DrawImageAdv(VideoPostProcessor::videoSurface(),tMenu->bmpBuffer, 200,220, 200,220, 240, 240); ProcessEvents(); // Process the server list if( SvrList_Process() ) { // Add the servers to the listview Menu_Net_NET_ServerList_Refresher(); } cAddSvr.Draw( VideoPostProcessor::videoSurface() ); ev = cAddSvr.Process(); // Process any events if(ev) { switch(ev->iControlID) { // Add case na_Add: if(ev->iEventMsg == BTN_CLICKED) { std::string addr; cAddSvr.SendMessage(na_Address, TXS_GETTEXT, &addr, 0); SvrList_AddServer(addr, true); Menu_Net_NET_ServerList_Refresher(); // Click! PlaySoundSample(sfxGeneral.smpClick); addServerMsg = false; } break; // Cancel case na_Cancel: if(ev->iEventMsg == BTN_CLICKED) { // Click! PlaySoundSample(sfxGeneral.smpClick); addServerMsg = false; } break; } } DrawCursor(VideoPostProcessor::videoSurface()); doVideoFrameInMainThread(); CapFPS(); } cAddSvr.Shutdown(); // Re-draw the background DrawImage(tMenu->bmpBuffer.get(),tMenu->bmpMainBack_common,0,0); Menu_DrawSubTitle(tMenu->bmpBuffer.get(),SUB_NETWORK); if (tMenu->tFrontendInfo.bPageBoxes) Menu_DrawBox(tMenu->bmpBuffer.get(), 15,130, 625, 465); Menu_RedrawMouse(true); }
/////////////////// // The net news menu frame void Menu_Net_ChatFrame(int mouse) { gui_event_t *ev = NULL; // Process & Draw the gui ev = cChat.Process(); cChat.Draw( VideoPostProcessor::videoSurface() ); // Process any events if(ev) { switch(ev->iControlID) { // Back case nc_Back: if(ev->iEventMsg == BTN_CLICKED) { // Click! PlaySoundSample(sfxGeneral.smpClick); // Shutdown Menu_Net_ChatShutdown(); // Back to main menu Menu_MainInitialize(); } break; case nc_EnableChat: if(ev->iEventMsg == CHK_CHANGED) { PlaySoundSample(sfxGeneral.smpClick); tLXOptions->bEnableChat = cChat.SendMessage(nc_EnableChat, CKM_GETCHECK, 1, 1) != 0; if (!tLXOptions->bEnableChat) { ((CChatWidget *)cChat.getWidget(nc_Chat))->DisableChat(); ShutdownIRC(); } else { InitializeIRC(); ((CChatWidget *)cChat.getWidget(nc_Chat))->EnableChat(); } } break; case nc_EnableMiniChat: if(ev->iEventMsg == CHK_CHANGED) { PlaySoundSample(sfxGeneral.smpClick); tLXOptions->bEnableMiniChat = cChat.SendMessage(nc_EnableMiniChat, CKM_GETCHECK, 1, 1) != 0; } break; } } // Draw the mouse DrawCursor(VideoPostProcessor::videoSurface()); }