/* ** 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 . */ // EditConversationRemarkDialog.cpp : implementation file // #include "stdafx.h" #include "leveledit.h" #include "editconversationremarkdialog.h" #include "stringsmgr.h" #include "translatedb.h" #include "translateobj.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // Constants ///////////////////////////////////////////////////////////////////////////// static const int ORATOR_MAX = 7; typedef struct _ORATOR_BUTTON_INFO { int button_id; int icon_id; } ORATOR_BUTTON_INFO; const ORATOR_BUTTON_INFO ORATOR_BUTTONS[ORATOR_MAX] = { { IDC_ORATOR1_RADIO, IDI_ORATOR1 }, { IDC_ORATOR2_RADIO, IDI_ORATOR2 }, { IDC_ORATOR3_RADIO, IDI_ORATOR3 }, { IDC_ORATOR4_RADIO, IDI_ORATOR4 }, { IDC_ORATOR5_RADIO, IDI_ORATOR5 }, { IDC_ORATOR6_RADIO, IDI_ORATOR6 }, { IDC_ORATOR7_RADIO, IDI_ORATOR7 } }; ///////////////////////////////////////////////////////////////////////////// // // EditConversationRemarkDialogClass // ///////////////////////////////////////////////////////////////////////////// EditConversationRemarkDialogClass::EditConversationRemarkDialogClass(CWnd* pParent /*=NULL*/) : m_OratorBitmask (1), CDialog(EditConversationRemarkDialogClass::IDD, pParent) { //{{AFX_DATA_INIT(EditConversationRemarkDialogClass) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT return ; } ///////////////////////////////////////////////////////////////////////////// // // DoDataExchange // ///////////////////////////////////////////////////////////////////////////// void EditConversationRemarkDialogClass::DoDataExchange (CDataExchange *pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(EditConversationRemarkDialogClass) //}}AFX_DATA_MAP return ; } BEGIN_MESSAGE_MAP(EditConversationRemarkDialogClass, CDialog) //{{AFX_MSG_MAP(EditConversationRemarkDialogClass) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // // OnInitDialog // ///////////////////////////////////////////////////////////////////////////// BOOL EditConversationRemarkDialogClass::OnInitDialog (void) { CDialog::OnInitDialog (); // // Assign icons to each of the orator buttons // for (int index = 0; index < ORATOR_MAX; index ++) { HICON icon = ::LoadIcon (::AfxGetResourceHandle (), MAKEINTRESOURCE (ORATOR_BUTTONS[index].icon_id)); SendDlgItemMessage (ORATOR_BUTTONS[index].button_id, BM_SETIMAGE, IMAGE_ICON, (LPARAM)icon); // // Disable this button if the user hasn't configured the orator // if ((m_OratorBitmask & (1 << index)) == false) { ::EnableWindow (::GetDlgItem (m_hWnd, ORATOR_BUTTONS[index].button_id), FALSE); } } // // Select the current orator // SendDlgItemMessage (ORATOR_BUTTONS[Remark.Get_Orator_ID ()].button_id, BM_SETCHECK, TRUE); // // Put the animation name into the text field // SetDlgItemText (IDC_ANIMATION_NAME, Remark.Get_Animation_Name ()); // // Calculate the rectangle where we are to display the string picker // CRect rect; ::GetWindowRect (::GetDlgItem (m_hWnd, IDC_PICKER_AREA), &rect); ScreenToClient (&rect); // // Create the string picker // StringPicker.Set_Selection (Remark.Get_Text_ID ()); StringPicker.Create (this); StringPicker.SetWindowPos (NULL, rect.left, rect.top, rect.Width (), rect.Height (), SWP_NOZORDER); StringPicker.ShowWindow (SW_SHOW); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // // OnOK // ///////////////////////////////////////////////////////////////////////////// void EditConversationRemarkDialogClass::OnOK (void) { // // Assign icons to each of the orator buttons // for (int index = 0; index < ORATOR_MAX; index ++) { if (SendDlgItemMessage (ORATOR_BUTTONS[index].button_id, BM_GETCHECK) == 1) { Remark.Set_Orator_ID (index); break; } } // // Get the selected string from the picker object // Remark.Set_Text_ID (StringPicker.Get_Selection ()); // // Get the animation name from the text field // CString animation_name; GetDlgItemText (IDC_ANIMATION_NAME, animation_name); // // Pass the animation name onto the remark object // Remark.Set_Animation_Name (animation_name); CDialog::OnOK (); return ; }