| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- /*
- ** 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 <http://www.gnu.org/licenses/>.
- */
- /***********************************************************************************************
- *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
- ***********************************************************************************************
- * *
- * Project Name : Combat *
- * *
- * $Archive:: /Commando/Code/Commando/dlgmpwolpagebuddy.cpp $*
- * *
- * Author:: Patrick Smith *
- * *
- * $Modtime:: 1/12/02 9:35p $*
- * *
- * $Revision:: 15 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #include "dlgmpwolpagebuddy.h"
- #include "dlgmpwolbuddies.h"
- #include "dlgmpwolpagereply.h"
- #include "dlgmpwolbuddylistpopup.h"
- #include "renegadedialogmgr.h"
- //#include "wolbuddymgr.h"
- #include "comboboxctrl.h"
- ////////////////////////////////////////////////////////////////
- //
- // MPWolPageBuddyPopupClass
- //
- ////////////////////////////////////////////////////////////////
- MPWolPageBuddyPopupClass::MPWolPageBuddyPopupClass (void) :
- PopupDialogClass (IDD_MP_WOL_PAGE_BUDDY),
- mBuddyMgr(NULL)
- {
- mBuddyMgr = WOLBuddyMgr::GetInstance(false);
- WWASSERT(mBuddyMgr != NULL);
- }
- MPWolPageBuddyPopupClass::~MPWolPageBuddyPopupClass(void)
- {
- if (mBuddyMgr) {
- mBuddyMgr->Release_Ref();
- }
- }
- ////////////////////////////////////////////////////////////////
- //
- // On_Init_Dialog
- //
- ////////////////////////////////////////////////////////////////
- void
- MPWolPageBuddyPopupClass::On_Init_Dialog(void)
- {
- Enable_Dlg_Item(IDC_INVITE_BUDDY_BUTTON, false);
- if (mBuddyMgr) {
- // Enable the invite button if we are in a situation to invite users.
- bool canInvite = mBuddyMgr->CanInviteUsers();
- Enable_Dlg_Item(IDC_INVITE_BUDDY_BUTTON, canInvite);
- // Get the current buddy list
- const WWOnline::UserList& list = mBuddyMgr->GetBuddyList();
- const unsigned int count = list.size();
- if (count == 0) {
- Observer<WOLBuddyMgrEvent>::NotifyMe (*mBuddyMgr);
- mBuddyMgr->RefreshBuddyList();
- } else {
- // Configure the combobox
- ComboBoxCtrlClass* combo_box = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_BUDDY_NAME_COMBO);
- if (combo_box) {
-
- // Add each buddy to the combobox
- for (unsigned int index = 0; index < count; ++index) {
- const RefPtr<WWOnline::UserData>& user = list[index];
- // Add this buddy if they are currently online
- if (user->GetLocation() != WWOnline::USERLOCATION_OFFLINE) {
- combo_box->Add_String(user->GetName());
- }
- }
- }
- }
- }
- // The page button is disable until the user enters a message.
- Enable_Dlg_Item(IDC_PAGE_BUTTON, false);
- // Set message edit to focus
- DialogControlClass* ctrl = Get_Dlg_Item(IDC_MESSAGE_EDIT);
- if (ctrl) {
- ctrl->Set_Focus();
- }
- PopupDialogClass::On_Init_Dialog();
- }
- ////////////////////////////////////////////////////////////////
- //
- // On_Command
- //
- ////////////////////////////////////////////////////////////////
- void
- MPWolPageBuddyPopupClass::On_Command(int ctrl_id, int message_id, DWORD param)
- {
- switch (ctrl_id) {
- case IDC_INVITE_BUDDY_BUTTON: {
- // Get the name of the user we'll be inviting
- WideStringClass user_name = Get_Dlg_Item_Text(IDC_BUDDY_NAME_COMBO);
- if (user_name.Is_Empty() == false) {
- // Invite the user
- if (mBuddyMgr) {
- mBuddyMgr->InviteUser(user_name, Get_Dlg_Item_Text(IDC_MESSAGE_EDIT));
- }
- End_Dialog();
- }
- break;
- }
- case IDC_BUDDY_LIST_BUTTON: {
- MPWolBuddyListPopupClass* dialog = new MPWolBuddyListPopupClass;
- dialog->Set_Observer(this);
- dialog->Start_Dialog();
- REF_PTR_RELEASE(dialog);
- break;
- }
- case IDC_VIEW_BUDDY_LIST_BUTTON:
- MPWolBuddiesMenuClass::Display();
- End_Dialog();
- break;
-
- case IDC_PAGE_BUTTON:
- Send_Page();
- break;
- }
- PopupDialogClass::On_Command(ctrl_id, message_id, param);
- }
- ////////////////////////////////////////////////////////////////
- //
- // Send_Page
- //
- ////////////////////////////////////////////////////////////////
- void
- MPWolPageBuddyPopupClass::Send_Page(void)
- {
- // Get the message to send
- WideStringClass message(0, true);
- message = Get_Dlg_Item_Text(IDC_MESSAGE_EDIT);
- message.Trim();
- if (message.Is_Empty() == false) {
- // Get the name of the user we'll be paging
- const WCHAR* username = Get_Dlg_Item_Text(IDC_BUDDY_NAME_COMBO);
- if (wcslen(username) > 0) {
- // Send the page
- if (mBuddyMgr) {
- mBuddyMgr->PageUser(username, message);
- }
- End_Dialog();
- }
- }
- }
- ////////////////////////////////////////////////////////////////
- //
- // Set_Buddy_Name
- //
- ////////////////////////////////////////////////////////////////
- void MPWolPageBuddyPopupClass::Set_Buddy_Name(const WCHAR *user_name)
- {
- Set_Dlg_Item_Text(IDC_BUDDY_NAME_COMBO, user_name);
- }
- void MPWolPageBuddyPopupClass::CheckIfCanSendPage(void)
- {
- // Get the length of the message after leading and trailing whitespace
- // has been removed.
- WideStringClass message(0, true);
- message = Get_Dlg_Item_Text(IDC_MESSAGE_EDIT);
- message.Trim();
- // Check for a buddy name
- WideStringClass username(0, true);
- username = Get_Dlg_Item_Text(IDC_BUDDY_NAME_COMBO);
- username.Trim();
- // If there is a message and user then allow page to be sent.
- bool canSend = ((message.Get_Length() > 0) && (username.Get_Length() > 0));
- Enable_Dlg_Item(IDC_PAGE_BUTTON, canSend);
- }
- void MPWolPageBuddyPopupClass::On_ComboBoxCtrl_Edit_Change(ComboBoxCtrlClass* combo, int id)
- {
- if (IDC_BUDDY_NAME_COMBO == id) {
- CheckIfCanSendPage();
- }
- }
- void MPWolPageBuddyPopupClass::On_EditCtrl_Change(EditCtrlClass* edit, int id)
- {
- if (IDC_MESSAGE_EDIT == id) {
- CheckIfCanSendPage();
- }
- }
- void MPWolPageBuddyPopupClass::On_EditCtrl_Enter_Pressed(EditCtrlClass* edit, int id)
- {
- if (IDC_MESSAGE_EDIT == id && Is_Dlg_Item_Enabled(IDC_PAGE_BUTTON)) {
- Send_Page();
- }
- }
- void MPWolPageBuddyPopupClass::HandleNotification(WOLBuddyMgrEvent &event)
- {
- WOLBuddyMgrAction action = event.GetAction();
- if ((BUDDYLIST_CHANGED == action) || (BUDDYINFO_CHANGED == action)) {
- // Configure the combobox
- ComboBoxCtrlClass* combo_box = (ComboBoxCtrlClass*)Get_Dlg_Item(IDC_BUDDY_NAME_COMBO);
- if (combo_box) {
- combo_box->Reset_Content();
-
- const WWOnline::UserList& buddies = mBuddyMgr->GetBuddyList();
- const unsigned int count = buddies.size();
- // Add each buddy to the combobox
- for (unsigned int index = 0; index < count; ++index) {
- const RefPtr<WWOnline::UserData>& user = buddies[index];
- if (user->GetLocation() != WWOnline::USERLOCATION_OFFLINE) {
- combo_box->Add_String(user->GetName());
- }
- }
- }
- }
- }
|