void ChooseServerForm::PositionColumns() { ListControl *plstc = (ListControl *)GetControlPtr(kidcServerList); Rect rcList; plstc->GetRect(&rcList); Font *pfnt = plstc->GetFont(); LabelControl *plblPlayers = (LabelControl *)GetControlPtr(kidcNumPlayers); int cxNumPlayers = pfnt->GetTextExtent(plblPlayers->GetText()); int xNumPlayers = rcList.right - cxNumPlayers; LabelControl *plblStatus = (LabelControl *)GetControlPtr(kidcServerStatus); int cxStatus = pfnt->GetTextExtent(plblStatus->GetText()); int xStatus = xNumPlayers - 40 - cxStatus; int xLocation = rcList.left + (xStatus - rcList.left) / 2; int xName = rcList.left; plstc->SetTabStops(xName - rcList.left, xLocation - rcList.left, xStatus + cxStatus / 2 - rcList.left, xNumPlayers + cxNumPlayers / 2 - rcList.left); plstc->SetTabFlags(0, 0, kfLstTabCenterOn, kfLstTabCenterOn); word ids[] = { kidcServerName, kidcServerLocation, kidcServerStatus, kidcNumPlayers }; int ax[] = { xName, xLocation, xStatus, xNumPlayers }; for (int i = 0; i < ARRAYSIZE(ids); i++) { LabelControl *plbl = (LabelControl *)GetControlPtr(ids[i]); Rect rcCtl; plbl->GetRect(&rcCtl); plbl->SetPosition(ax[i], rcCtl.top); } }
bool LobbyForm::DoModal(int *presult, Sfx sfxShow, Sfx sfxHide) { char name[kcbPlayerName*2]; handler_.GetPlayerName(name, sizeof(name)); LabelControl *plbl = (LabelControl *)GetControlPtr(kidcPlayerName); plbl->Show(false); plbl = (LabelControl *)GetControlPtr(kidcPlayerNameLabel); const char *s = base::Format::ToString("%s / %s", name, server_name_.c_str()); plbl->SetText(s); ListControl *plstc = (ListControl *)GetControlPtr(kidcRoomList); Rect rcList; plstc->GetRect(&rcList); Font *pfnt = plstc->GetFont(); int cxPrivate = pfnt->GetTextExtent("PRIVATE"); int cxStart = rcList.Width() / 20; // 10; plstc->SetTabStops(0, cxStart, rcList.Width() - cxStart - cxPrivate); plstc->SetTabFlags(0, kfLstTabEllipsis, 0); GetControlPtr(kidcJoinRoom)->Show(false); Show(true); gptra->SetCallback(this); dword result = gptra->JoinLobby(this); if (result != knLobbyJoinResultSuccess) { gptra->SetCallback(NULL); ShowJoinMessage(result); *presult = 0; return false; } bool success = ShellForm::DoModal(presult, sfxShow, sfxHide); gptra->LeaveLobby(); gptra->SetCallback(NULL); return success; }
void DownloadMissionPackForm::ShowIndex(const PackId *ppackidSelect) { // Add entries to the list ListControl *plstc = (ListControl *)GetControlPtr(kidcMissionPackList); plstc->SetTabStops(x0_, x1_, x2_, x3_); plstc->SetTabFlags(kfLstTabCenter, kfLstTabEllipsis, kfLstTabCenterOn, kfLstTabCenterOn); plstc->Clear(); int iSelect = 0; int cAdded = 0; int c = idxl_.GetCount(); for (int i = 0; i < c; i++) { const IndexEntry *pentry = idxl_.GetEntry(i); // Show either single player packs, or multiplayer packs. // If a pack has both single and multiplayer missions, show // these in both cases. if (pentry->packid.id != PACKID_CUSTOMURL) { if (fMultiplayer_) { if (pentry->cPlayersMax == 1) { continue; } } else { if (pentry->cPlayersMin != 1) { continue; } } } // Remember which entry to select if (iSelect == 0 && ppackidSelect != NULL) { if (memcmp(ppackidSelect, &pentry->packid, sizeof(*ppackidSelect)) == 0) { iSelect = cAdded; } } plstc->Add(GetItemString(pentry), (void *)pentry); cAdded++; } if (cAdded > 0) { plstc->Select(iSelect, true, true); } }
void DownloadMissionPackForm::ShowStatus(void *ctx, const char *psz) { if (ctx == CTX_INDEX) { ListControl *plstc = (ListControl *)GetControlPtr(kidcMissionPackList); plstc->Clear(); plstc->SetTabStops(0); plstc->SetTabFlags(0); plstc->Add(psz, NULL); } if (ctx == CTX_INFO) { LabelControl *plbl = (LabelControl *)GetControlPtr(kidcMissionPackInfo); plbl->SetText((char *)psz); } // Force the frame draw, since this gets called while the main loop // is "asleep". gpmfrmm->DrawFrame(false); }
bool CreateGameForm::DoModal(int *pnResult) { // Format the lists. int aidcList[] = { kidcChallengeList, kidcAddOnList }; for (int i = 0; i < ARRAYSIZE(aidcList); i++) { ListControl *plstc = (ListControl *)GetControlPtr(aidcList[i]); m_aplstc[i] = plstc; Rect rc; plstc->GetRect(&rc); Font *pfnt = gapfnt[kifntShadow]; int cxComplete = pfnt->GetTextExtent("Complete"); int xTitle = rc.Width() / 2 - cxComplete * 3 / 2; plstc->SetTabStops(xTitle); plstc->SetTabFlags(kfLstTabEllipsis); plstc->SetFlags(plstc->GetFlags() | kfLstcKeepInteriorPositioning); plstc->Clear(); } if (m_pml == NULL) { m_pml = CreateMissionList(NULL, kmltMultiplayer); } if (m_pml == NULL) { return false; } // If asked to find a certain mission, find it first to // see what type it is, and switch the radio button bar to // that type. int iPack = -1; int iMission = -1; int cLevels = m_pml->GetCount(); for (int nLevel = 0; nLevel < cLevels; nLevel++) { MissionIdentifier miid; m_pml->GetMissionIdentifier(nLevel, &miid); if (memcmp(&miid.packid, &m_miidFind.packid, sizeof(miid.packid)) == 0) { if (iPack == -1) { iPack = nLevel; } if (strcmp(miid.szLvlFilename, m_miidFind.szLvlFilename) == 0) { iMission = nLevel; break; } } } if (iMission == -1) { iMission = iPack; } int iMissionSelect = iMission; // Init the lists MissionType mt = InitLists(iMissionSelect); SwitchToMissionType(mt); // Game Speed m_tGameSpeed = gtGameSpeed; if (m_tGameSpeed < 4) m_tGameSpeed = 4; SliderControl *psldr = (SliderControl *)GetControlPtr(kidcGameSpeed); psldr->SetRange(2, ARRAYSIZE(gatGameSpeeds) - 1 - 3); // bring the extremes in a bit for multiplayer psldr->SetValue(8); for (int i = 0; i < ARRAYSIZE(gatGameSpeeds); i++) { if (gatGameSpeeds[i] == m_tGameSpeed) { psldr->SetValue(i); break; } } // Hide this label. If we're finding an Add-On mission, then // there are add-on missions and this label isn't meant to be visible. GetControlPtr(kidcAddOnMessage)->Show(false); UpdateLabels(); gptra->SetCallback(this); bool fSuccess = ShellForm::DoModal(pnResult); gptra->SetCallback(NULL); delete m_pml; m_pml = NULL; return fSuccess; }