/* ** Command & Conquer Renegade(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ /****************************************************************************** * * FILE * $Archive: /Commando/Code/Commando/DlgWOLSettings.cpp $ * * DESCRIPTION * Westwood Online Account Settings * * PROGRAMMER * Denzil E. Long, Jr. * $Author: Greg_h $ * * VERSION INFO * $Revision: 43 $ * $Modtime: 6/21/02 11:40a $ * ******************************************************************************/ #include "DlgWOLSettings.h" #include "UserOptions.h" #include "RenegadeDialogMgr.h" #include "MPSettingsMgr.h" #include "DlgMessageBox.h" #include "DlgWOLWait.h" #include "DlgWebPage.h" #include "WOLLoginProfile.h" #include "WOLLogonMgr.h" #include #include #include #include #include #include "bandwidthcheck.h" #include "Resource.h" #include "String_ids.h" #include using namespace WWOnline; /****************************************************************************** * * NAME * DlgWOLSettings::DoDialog * * DESCRIPTION * Start Westwood Online settings dialog. * * INPUTS * NONE * * RESULT * True if dialog successfully started. * ******************************************************************************/ bool DlgWOLSettings::DoDialog(void) { DlgWOLSettings* dialog = new DlgWOLSettings; if (dialog) { if (dialog->FinalizeCreate()) { dialog->Start_Dialog(); } dialog->Release_Ref(); } return (dialog != NULL); } /****************************************************************************** * * NAME * DlgWOLSettings::DlgWOLSettings * * DESCRIPTION * Constructor * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ DlgWOLSettings::DlgWOLSettings() : MenuDialogClass(IDD_WOL_SETTINGS), DetectingBandwidth(false), WaitingToExitDialog(false) { WWDEBUG_SAY(("DlgWOLSettings: Instantiated\n")); } /****************************************************************************** * * NAME * DlgWOLSettings::~DlgWOLSettings * * DESCRIPTION * Destructor * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ DlgWOLSettings::~DlgWOLSettings() { WWDEBUG_SAY(("DlgWOLSettings: Destroyed\n")); } /****************************************************************************** * * NAME * DlgWOLSettings::FinalizeCreate * * DESCRIPTION * Finalize the creation of this object (Initialize). * * INPUTS * NONE * * RESULT * True if successful * ******************************************************************************/ bool DlgWOLSettings::FinalizeCreate(void) { mWOLSession = Session::GetInstance(false); return mWOLSession.IsValid(); } /****************************************************************************** * * NAME * DlgWOLSettings::On_Init_Dialog * * DESCRIPTION * Initialize dialog for first time. * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::On_Init_Dialog(void) { // Configure the shortcut bar ShortcutBarCtrlClass* bar = (ShortcutBarCtrlClass*)Get_Dlg_Item(IDC_SHORTCUT_BAR); if (bar) { bar->Add_Button(IDC_MP_SHORTCUT_INTERNET_OPTIONS, TRANSLATE(IDS_INTERNET_OPTIONS)); #ifdef QUICKMATCH_OPTIONS bar->Add_Button(IDC_MP_SHORTCUT_QUICKMATCH_OPTIONS, TRANSLATE(IDS_MENU_TEXT364)); #endif bar->Add_Button(IDC_MP_SHORTCUT_NEWS, TRANSLATE(IDS_MP_SHORTCUT_NEWS)); bar->Add_Button(IDC_MP_SHORTCUT_CLANS, TRANSLATE(IDS_MP_SHORTCUT_CLANS)); bar->Add_Button(IDC_MP_SHORTCUT_RANKINGS, TRANSLATE(IDS_MP_SHORTCUT_RANKINGS)); bar->Add_Button(IDC_MP_SHORTCUT_NET_STATUS, TRANSLATE(IDS_MP_SHORTCUT_NET_STATUS)); } // Initialize combos InitPersonaCombo(); InitSideCombo(); InitLocaleCombo(); InitConnectionSpeedCombo(); UpdateForPersona(); // Initialize server combos const IRCServerList& servers = mWOLSession->GetIRCServerList(); // If we already have a list of servers then use those. Otherwise // request a server list from WOL if (servers.size() > 0) { InitServersCombo(servers); } else { RefPtr serverWait = SerialWait::Create(); WWASSERT(serverWait.IsValid()); if (BandwidthCheckerClass::Got_Bandwidth() == 0 && cUserOptions::Get_Bandwidth_Type() == BANDWIDTH_AUTO) { DetectingBandwidth = true; Add_Ref(); RefPtr bandwidth_wait = BandwidthCheckerClass::Detect(); serverWait->Add(bandwidth_wait); } // Request server list. WWDEBUG_SAY(("DlgWOLSettings: Requesting ServerList\n")); RefPtr listWait = mWOLSession->GetNewServerList(); serverWait->Add(listWait); RefPtr pingWait = PingProfileWait::Create(); serverWait->Add(pingWait); RefPtr wait(serverWait); DlgWOLWait::DoDialog(IDS_WOL_SERVERLISTFETCH, wait, this); } MenuDialogClass::On_Init_Dialog(); } /****************************************************************************** * * NAME * DlgWOLSettings::On_Destroy * * DESCRIPTION * Handle dialog shutdown. * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::On_Destroy(void) { ClearPersonaCombo(); MenuDialogClass::On_Destroy(); } /****************************************************************************** * * NAME * DlgWOLSettings::On_Command * * DESCRIPTION * * INPUTS * Ctrl - Control command is from. * Msg - Command message * Param - Command parameter * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::On_Command(int ctrl, int message, DWORD param) { switch (ctrl) { case IDOK: { ComboBoxCtrlClass* connectCombo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_CONNECTION_SPEED_COMBO); if (connectCombo && BandwidthCheckerClass::Got_Bandwidth() == 0) { int sel = connectCombo->Get_Curr_Sel(); if (sel >= 0) { BANDWIDTH_TYPE_ENUM bandwidth = min((BANDWIDTH_TYPE_ENUM)(sel + BANDWIDTH_FIRST), BANDWIDTH_LAST); if (bandwidth == BANDWIDTH_AUTO) { if (!DetectingBandwidth) { RefPtr serverWait = SerialWait::Create(); WWASSERT(serverWait.IsValid()); DetectingBandwidth = true; Add_Ref(); RefPtr bandwidth_wait = BandwidthCheckerClass::Detect(); DlgWOLWait::DoDialog(TRANSLATE (IDS_MENU_DETECTING_BANDWIDTH), bandwidth_wait, this); WaitingToExitDialog = true; break; } } } } if (SaveSettings()) { End_Dialog(); } } return; break; case IDC_DELETE_ACCOUNT_BUTTON: DeleteSelectedPersona(); break; case IDC_NEWPERSONA: DlgWebPage::DoDialog("Signup"); break; case IDC_CHECK_BANDWIDTH: if (!DetectingBandwidth) { RefPtr serverWait = SerialWait::Create(); WWASSERT(serverWait.IsValid()); DetectingBandwidth = true; Add_Ref(); RefPtr bandwidth_wait = BandwidthCheckerClass::Detect(); DlgWOLWait::DoDialog(TRANSLATE (IDS_MENU_DETECTING_BANDWIDTH), bandwidth_wait, this); } break; case IDC_AUTOLOGIN_CHECK: if (param && mWOLSession->IsAutoLoginAllowed()) { // Get preferred login WideStringClass name(64, true); name = Get_Dlg_Item_Text(IDC_PERSONA_COMBO); // Save preferred login StringClass saveName(64, true); name.Convert_To(saveName); MPSettingsMgrClass::Set_Auto_Login(saveName); } else { MPSettingsMgrClass::Set_Auto_Login(""); } break; case IDC_MENU_BACK_BUTTON: break; } MenuDialogClass::On_Command(ctrl, message, param); } /****************************************************************************** * * NAME * DlgWOLSettings::SaveSettings * * DESCRIPTION * Save the users settings. * * INPUTS * NONE * * RESULT * True if save successful. * ******************************************************************************/ bool DlgWOLSettings::SaveSettings(void) { WWDEBUG_SAY(("DlgWOLSettings: Saving settings\n")); // Save the settings for each login. ComboBoxCtrlClass* combo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_PERSONA_COMBO); if (combo) { int count = combo->Get_Item_Count(); for (int index = 0; index < count; ++index) { LoginProfile* profile = (LoginProfile*)combo->Get_Item_Data(index); if (profile) { profile->SaveSettings(); } } } // Save connection speed ComboBoxCtrlClass* connectCombo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_CONNECTION_SPEED_COMBO); if (connectCombo) { int sel = connectCombo->Get_Curr_Sel(); if (sel >= 0) { BANDWIDTH_TYPE_ENUM bandwidth = min((BANDWIDTH_TYPE_ENUM)(sel + BANDWIDTH_FIRST), BANDWIDTH_LAST); cUserOptions::Set_Bandwidth_Type(bandwidth); } } return true; } /****************************************************************************** * * NAME * DlgWOLSettings::InitPersonaCombo * * DESCRIPTION * Initialize the preferred login combo box with the cached WWOnline * accounts. * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::InitPersonaCombo(void) { ClearPersonaCombo(); ComboBoxCtrlClass* combo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_PERSONA_COMBO); if (combo) { // Populate the persona combo box with the list of WWOnline logins. const LoginInfoList& logins = LoginInfo::GetList(); const unsigned int count = logins.size(); for (unsigned int index = 0; index < count; ++index) { RefPtr login = logins[index]; WWASSERT(login.IsValid()); if (login.IsValid()) { const WideStringClass& name = login->GetNickname(); int item = combo->Add_String(name); // Create a profile for each login if (item >= 0) { LoginProfile* profile = LoginProfile::Get(name, true); combo->Set_Item_Data(item, (uint32)profile); } } } combo->Set_Curr_Sel(0); // Select the last login WideStringClass loginName(64, true); loginName = MPSettingsMgrClass::Get_Last_Login(); combo->Select_String(loginName); } } /****************************************************************************** * * NAME * DlgWOLSettings::ClearPersonaCombo * * DESCRIPTION * Release the personas. * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::ClearPersonaCombo(void) { ComboBoxCtrlClass* combo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_PERSONA_COMBO); if (combo) { // Release the login profiles const int count = combo->Get_Item_Count(); for (int index = 0; index < count; ++index) { LoginProfile* profile = (LoginProfile*)combo->Get_Item_Data(index); if (profile) { profile->Release_Ref(); } } combo->Reset_Content(); } } /****************************************************************************** * * NAME * DlgWOLSettings::DeleteSelectedPersona * * DESCRIPTION * Delete the currently selected persona. * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::DeleteSelectedPersona(void) { ComboBoxCtrlClass* combo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_PERSONA_COMBO); if (combo) { int sel = combo->Get_Curr_Sel(); if (sel >= 0) { const WCHAR* name = combo->Get_Text(); // Delete this login from our local cache and purge it from disk. RefPtr login = LoginInfo::Find(name); if (login.IsValid()) { login->Forget(true); } // Release the login profile LoginProfile* profile = (LoginProfile*)combo->Get_Item_Data(sel); if (profile) { profile->Release_Ref(); } // Delete the persistent profile. LoginProfile::Delete(name); // Remove the persona from the combo box. combo->Delete_String(sel); // Refresh the dialog UpdateForPersona(); } } } /****************************************************************************** * * NAME * DlgWOLSettings::UpdateForPersona * * DESCRIPTION * Update the dialog for the selected persona * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::UpdateForPersona(void) { int sel = -1; ComboBoxCtrlClass* combo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_PERSONA_COMBO); if (combo) { sel = combo->Get_Curr_Sel(); if (sel >= 0) { // Update the dialog with settings from the persona's profile. WideStringClass newLogin(64, true); combo->Get_String(sel, newLogin); LoginProfile* profile = (LoginProfile*)combo->Get_Item_Data(sel); // Set dialog to reflect the profile settings if (profile) { SetServerCombo(profile->GetPreferredServer()); SetSideCombo(profile->GetSidePreference()); SetLocaleCombo(profile->GetLocale()); } else { SetServerCombo(""); SetSideCombo(-1); SetLocaleCombo(WOL::LOC_UNKNOWN); } ShowProfileRanking(this, profile); // Set the autologin checkbox appropriately for this persona. WideStringClass preferred(64, true); preferred = MPSettingsMgrClass::Get_Auto_Login(); bool autoLogin = (mWOLSession->IsAutoLoginAllowed() && (newLogin.Compare_No_Case(preferred) == 0)); Check_Dlg_Button(IDC_AUTOLOGIN_CHECK, autoLogin); // Set the selected login to the persona that is selected. StringClass loginName(64, true); newLogin.Convert_To(loginName); MPSettingsMgrClass::Set_Last_Login(loginName); } else { SetServerCombo(""); SetSideCombo(-1); SetLocaleCombo(WOL::LOC_UNKNOWN); ShowProfileRanking(this, NULL); } } bool isValid = (sel >= 0); Enable_Dlg_Item(IDC_PERSONA_COMBO, isValid); Enable_Dlg_Item(IDC_GAMESERVER_COMBO, isValid); Enable_Dlg_Item(IDC_CHOOSESIDE_COMBO, isValid); Enable_Dlg_Item(IDC_LOCALE_COMBO, isValid); Enable_Dlg_Item(IDC_AUTOLOGIN_CHECK, isValid && mWOLSession->IsAutoLoginAllowed()); Enable_Dlg_Item(IDC_DELETE_ACCOUNT_BUTTON, isValid); } /****************************************************************************** * * NAME * DlgWOLSettings::InitServersCombo * * DESCRIPTION * Initialize server combo boxes * * INPUTS * Servers - List of servers to populate combo with. * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::InitServersCombo(const IRCServerList& servers) { ComboBoxCtrlClass* gameCombo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_GAMESERVER_COMBO); if (gameCombo) { // Remember current chat selection WideStringClass gameSelName(0, true); LoginProfile* profile = GetLoginProfile(); if (profile) { gameSelName = profile->GetPreferredServer(); } int gameSel = -1; gameCombo->Reset_Content(); // convenience reference for list of ping servers const PingServerList& pingers = mWOLSession->GetPingServerList(); int bestTime = INT_MAX; int tmpSel = -1; // walk the list of servers and add them to the combo box const unsigned int serverCount = servers.size(); for (unsigned int index = 0; index < serverCount; ++index) { const RefPtr& server = servers[index]; // Filter out servers that do not have a set of supported languages. if (server->HasLanguageCode()) { WideStringClass serverName(0, true); serverName = server->GetName(); int pos = gameCombo->Add_String(serverName); // Now, figure out which one to pick // they haven't picked a preferred server if (gameSelName.Is_Empty()) { // lets pick a default server for them! if (server->MatchesLanguageCode()) { float serverLong = server->GetLongitude(); float serverLat = server->GetLattitude(); // Find the ping server with the best time that matches this server's lat/long const unsigned int pingersCount = pingers.size(); for (unsigned int pingindex = 0; pingindex < pingersCount; ++pingindex) { const RefPtr& thisPing = pingers[pingindex]; float pingLong = thisPing->GetLongitude(); float pingLat = thisPing->GetLattitude(); // make sure the ping server is associated with the chat server if (serverLong == pingLong && serverLat == pingLat) { int pingTime = thisPing->GetPingTime(); // sanity check if (pingTime == -1) { pingTime = INT_MAX; } // here's our main test! Find the best ping time if (pingTime < bestTime) { bestTime = pingTime; tmpSel = pos; } } } // end for each ping server } } // If this is their preferred server else if ((gameSelName.Compare_No_Case(serverName) == 0) && (gameSel == -1)) { gameSel = pos; // they picked one, and this is it! gameCombo->Set_Curr_Sel(pos); if (profile) { profile->SetPreferredServer(server->GetName()); } } } // if server has a langcode - sanity check } if ((gameSel == -1) && (tmpSel != -1)) { gameSel = tmpSel; gameCombo->Set_Curr_Sel(tmpSel); } } // if valid gameCombo box } /****************************************************************************** * * NAME * DlgWOLSettings::SetServerCombo * * DESCRIPTION * Set the server combo to the specified server. * * INPUTS * Name - Server to set server combo to. * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::SetServerCombo(const char* serverName) { ComboBoxCtrlClass* combo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_GAMESERVER_COMBO); if (combo) { WWDEBUG_SAY(("ServerCombo = %s\n", serverName)); WideStringClass name(64, true); name = serverName; int sel = combo->Select_String(name); if (sel == -1) { RefPtr defaultServer = WOLLogonMgr::GetDefaultServer(); if (defaultServer.IsValid()) { name = defaultServer->GetName(); combo->Select_String(name); } else { combo->Set_Curr_Sel(0); } } } } /****************************************************************************** * * NAME * DlgWOLSettings::InitSideCombo * * DESCRIPTION * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::InitSideCombo(void) { ComboBoxCtrlClass* combo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_CHOOSESIDE_COMBO); if (combo) { //(gth) Renegade day 120 Patch: re-translate these strings each time! struct {const wchar_t* TeamName; int TeamID;} _teams[] = { {TRANSLATE (IDS_MENU_RANDOM), -1}, {TRANSLATE (IDS_MENU_TEXT933), 1}, {TRANSLATE (IDS_MENU_TEXT934), 0}, {NULL, -1}, }; int index = 0; while (_teams[index].TeamName != NULL) { int item = combo->Add_String(_teams[index].TeamName); if (item >= 0) { combo->Set_Item_Data(item, (uint32)_teams[index].TeamID); } ++index; } } // Selected current logins preference int side = -1; LoginProfile* profile = GetLoginProfile(); if (profile) { side = profile->GetSidePreference(); } SetSideCombo(side); } /****************************************************************************** * * NAME * DlgWOLSettings::SetSideCombo * * DESCRIPTION * * INPUTS * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::SetSideCombo(int side) { ComboBoxCtrlClass* combo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_CHOOSESIDE_COMBO); if (combo) { const int count = combo->Get_Item_Count(); for (int index = 0; index < count; ++index) { if (combo->Get_Item_Data(index) == (uint32)side) { combo->Set_Curr_Sel(index); break; } } } } /****************************************************************************** * * NAME * DlgWOLSettings::InitLocaleCombo * * DESCRIPTION * Update the locale combo box with the selectable WWOnline locales. * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::InitLocaleCombo(void) { ComboBoxCtrlClass* combo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_LOCALE_COMBO); if (combo) { combo->Reset_Content(); std::vector localeNames; mWOLSession->GetLocaleStrings(localeNames); const unsigned int localeCount = localeNames.size(); for (unsigned int index = 0; index < localeCount; ++index) { WideStringClass& locale = localeNames[index]; combo->Add_String(locale); } int locale = WOL::LOC_UNKNOWN; LoginProfile* profile = GetLoginProfile(); if (profile) { locale = profile->GetLocale(); } combo->Set_Curr_Sel(locale); } } /****************************************************************************** * * NAME * DlgWOLSettings::SetLocaleCombo * * DESCRIPTION * * INPUTS * Name - Persona to set locale for. * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::SetLocaleCombo(WOL::Locale locale) { ComboBoxCtrlClass* combo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_LOCALE_COMBO); if (combo) { WWDEBUG_SAY(("LocaleCombo = %ld\n", locale)); combo->Set_Curr_Sel((int)locale); } } /****************************************************************************** * * NAME * DlgWOLSettings::InitConnectionSpeedCombo * * DESCRIPTION * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::InitConnectionSpeedCombo(void) { // Configure the connection type combobox ComboBoxCtrlClass* connectCombo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_CONNECTION_SPEED_COMBO); if (connectCombo) { connectCombo->Reset_Content(); connectCombo->Add_String(TRANSLATE(IDS_MP_CONNECTION_288)); connectCombo->Add_String(TRANSLATE(IDS_MP_CONNECTION_336)); connectCombo->Add_String(TRANSLATE(IDS_MP_CONNECTION_56)); connectCombo->Add_String(TRANSLATE(IDS_MP_CONNECTION_ISDN)); connectCombo->Add_String(TRANSLATE(IDS_MP_CONNECTION_CABLE)); connectCombo->Add_String(TRANSLATE(IDS_MP_CONNECTION_T1)); WideStringClass auto_set_str(256, true); if (BandwidthCheckerClass::Get_Reported_Upstream_Bandwidth()) { auto_set_str.Format(TRANSLATE (IDS_MENU_AUTO_FORMAT), BandwidthCheckerClass::Get_Bandwidth_As_String()); } else { auto_set_str.Format(TRANSLATE (IDS_MENU_AUTO)); } connectCombo->Add_String(auto_set_str); // Set the current selection connectCombo->Set_Curr_Sel(cUserOptions::Get_Bandwidth_Type() - BANDWIDTH_FIRST); connectCombo->Set_Dirty(true); } } /****************************************************************************** * * NAME * DlgWOLSettings::On_ComboBoxCtrl_Sel_Change * * DESCRIPTION * * INPUTS * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::On_ComboBoxCtrl_Sel_Change(ComboBoxCtrlClass* combo, int ctrl, int oldSel, int newSel) { switch (ctrl) { case IDC_PERSONA_COMBO: UpdateForPersona(); break; case IDC_GAMESERVER_COMBO: { LoginProfile* profile = GetLoginProfile(); if (profile) { // Save selected game server WideStringClass name(64, true); combo->Get_String(newSel, name); StringClass saveName(64, true); name.Convert_To(saveName); profile->SetPreferredServer(saveName); } } break; case IDC_CHOOSESIDE_COMBO: { LoginProfile* profile = GetLoginProfile(); if (profile) { int side = combo->Get_Item_Data(newSel); profile->SetSidePreference(side); } } break; case IDC_LOCALE_COMBO: { LoginProfile* profile = GetLoginProfile(); if (profile) { profile->SetLocale((WOL::Locale)newSel); } } break; default: break; } } /****************************************************************************** * * NAME * DlgWOLSettings::HandleNotification(DlgWOLWaitEvent) * * DESCRIPTION * * INPUTS * * RESULT * NONE * ******************************************************************************/ void DlgWOLSettings::HandleNotification(DlgWOLWaitEvent& event) { if (WaitCondition::ConditionMet == event.Result()) { if (DetectingBandwidth) { DetectingBandwidth = false; cUserOptions::Set_Bandwidth_Type(BANDWIDTH_AUTO); // Re-init the connection speed combo. InitConnectionSpeedCombo(); Release_Ref(); if (WaitingToExitDialog) { if (SaveSettings()) { End_Dialog(); return; } } } // Check if we got the server list. const IRCServerList& servers = mWOLSession->GetIRCServerList(); if (servers.size()) { InitServersCombo(servers); } } else if (DetectingBandwidth == false) { Enable_Dlg_Item(IDC_GAMESERVER_COMBO, false); } } /****************************************************************************** * * NAME * DlgWOLSettings::GetLoginProfile * * DESCRIPTION * * INPUTS * NONE * * RESULT * ******************************************************************************/ LoginProfile* DlgWOLSettings::GetLoginProfile(void) { ComboBoxCtrlClass* combo = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_PERSONA_COMBO); if (combo) { int sel = combo->Get_Curr_Sel(); if (sel >= 0) { return (LoginProfile*)combo->Get_Item_Data(sel); } } return NULL; }