Richard Boegli's CnC_Generals_Zero_Hour Fork WIP
This is documentation of Richard Boegil's Zero Hour Fork
 
Loading...
Searching...
No Matches
gennamesdialog.cpp
Go to the documentation of this file.
1/*
2** Command & Conquer Generals Zero Hour(tm)
3** Copyright 2025 Electronic Arts Inc.
4**
5** This program is free software: you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation, either version 3 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19/***********************************************************************************************
20 *** 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 ***
21 ***********************************************************************************************
22 * *
23 * Project Name : Max2W3D *
24 * *
25 * $Archive:: /Commando/Code/Tools/max2w3d/gennamesdialog.cpp $*
26 * *
27 * Original Author:: Greg Hjelstrom *
28 * *
29 * $Author:: Greg_h $*
30 * *
31 * $Modtime:: 12/06/00 3:24p $*
32 * *
33 * $Revision:: 2 $*
34 * *
35 *---------------------------------------------------------------------------------------------*
36 * Functions: *
37 * GenNamesDialogClass::GenNamesDialogClass -- Constructor *
38 * GenNamesDialogClass::~GenNamesDialogClass -- Destructor *
39 * GenNamesDialogClass::Get_Options -- Get_Options *
40 * GenNamesDialogClass::Ok_To_Exit -- verifies that the input is valid *
41 * GenNamesDialogClass::Toggle_Name_Assignment -- toggles the controls related to name assig *
42 * GenNamesDialogClass::Toggle_Collision_Bits_Assignment -- toggles the controls related to *
43 * GenNamesDialogClass::Dialog_Proc -- windows dialog proc *
44 * _gen_names_dialog_proc -- dialog proc that "thunks" to the class's dialog proc *
45 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
46
47
48#include "gennamesdialog.h"
49#include "dllmain.h"
50#include "resource.h"
51
52
53static BOOL CALLBACK _gen_names_dialog_proc(HWND Hwnd,UINT message,WPARAM wParam,LPARAM lParam);
54
55
56/**********************************************************************************************
57**
58** GenNamesDialogClass Implementation
59**
60**********************************************************************************************/
61
62
63/***********************************************************************************************
64 * GenNamesDialogClass::GenNamesDialogClass -- Constructor *
65 * *
66 * INPUT: *
67 * *
68 * OUTPUT: *
69 * *
70 * WARNINGS: *
71 * *
72 * HISTORY: *
73 *=============================================================================================*/
75 Hwnd(NULL),
76 Options(NULL),
77 MaxInterface(maxinterface),
78 NameIndexSpin(NULL)
79{
80}
81
82
83/***********************************************************************************************
84 * GenNamesDialogClass::~GenNamesDialogClass -- Destructor *
85 * *
86 * INPUT: *
87 * *
88 * OUTPUT: *
89 * *
90 * WARNINGS: *
91 * *
92 * HISTORY: *
93 * 10/10/2000 gth : Created. *
94 *=============================================================================================*/
96{
97 ReleaseISpinner(NameIndexSpin);
98}
99
100
101/***********************************************************************************************
102 * GenNamesDialogClass::Get_Options -- Get_Options *
103 * *
104 * presents the dialog to the user and records his selections into the passed-in options *
105 * structure. *
106 * *
107 * INPUT: *
108 * options - pointer to a OptionsStruct to store the users input in. *
109 * *
110 * OUTPUT: *
111 * true - user pressed ok and entered valid input *
112 * *
113 * WARNINGS: *
114 * *
115 * HISTORY: *
116 * 10/10/2000 gth : Created. *
117 *=============================================================================================*/
119{
120 Options = options;
121
122 // Put up the options dialog box.
123 BOOL result = DialogBoxParam
124 (
126 MAKEINTRESOURCE (IDD_GENERATE_NAMES_DIALOG),
127 MaxInterface->GetMAXHWnd(),
128 (DLGPROC) _gen_names_dialog_proc,
129 (LPARAM) this
130 );
131
132 if (result == TRUE) {
133 return true;
134 } else {
135 return false;
136 }
137}
138
139
140/***********************************************************************************************
141 * GenNamesDialogClass::Ok_To_Exit -- verifies that the input is valid *
142 * *
143 * INPUT: *
144 * *
145 * OUTPUT: *
146 * true - dialog contains valid input *
147 * *
148 * WARNINGS: *
149 * *
150 * HISTORY: *
151 * 10/10/2000 gth : Created. *
152 *=============================================================================================*/
154{
155 if (IsDlgButtonChecked(Hwnd,IDC_ASSIGN_NAMES_CHECK) == BST_CHECKED) {
156
157 // just check that the user entered a name
158 char buf[W3D_NAME_LEN];
159 GetWindowText(GetDlgItem(Hwnd,IDC_BASE_NAME_EDIT),buf,sizeof(buf));
160
161 if (strlen(buf) == 0) {
162 MessageBox(Hwnd,"Please enter a root name to use.\n","Error",MB_OK);
163 return false;
164 } else {
165 return true;
166 }
167 }
168
169 return true;
170}
171
172
173/***********************************************************************************************
174 * GenNamesDialogClass::Toggle_Name_Assignment -- toggles the controls related to name assignm *
175 * *
176 * INPUT: *
177 * *
178 * OUTPUT: *
179 * *
180 * WARNINGS: *
181 * *
182 * HISTORY: *
183 * 10/10/2000 gth : Created. *
184 *=============================================================================================*/
186{
187 bool onoff = (IsDlgButtonChecked(Hwnd,IDC_ASSIGN_NAMES_CHECK) == BST_CHECKED);
188 EnableWindow(GetDlgItem(Hwnd,IDC_BASE_NAME_EDIT),onoff);
189 EnableWindow(GetDlgItem(Hwnd,IDC_LOD_INDEX_EDIT),onoff);
190 EnableWindow(GetDlgItem(Hwnd,IDC_LOD_INDEX_SPIN),onoff);
191 EnableWindow(GetDlgItem(Hwnd,IDC_NAME_INDEX_EDIT),onoff);
192 EnableWindow(GetDlgItem(Hwnd,IDC_NAME_INDEX_SPIN),onoff);
193}
194
195
196/***********************************************************************************************
197 * GenNamesDialogClass::Toggle_Collision_Bits_Assignment -- toggles the controls related to co *
198 * *
199 * INPUT: *
200 * *
201 * OUTPUT: *
202 * *
203 * WARNINGS: *
204 * *
205 * HISTORY: *
206 * 10/10/2000 gth : Created. *
207 *=============================================================================================*/
209{
210 bool onoff = (IsDlgButtonChecked(Hwnd,IDC_ASSIGN_COLLISION_BITS_CHECK) == BST_CHECKED);
211 EnableWindow(GetDlgItem(Hwnd,IDC_COLLISION_PHYSICAL),onoff);
212 EnableWindow(GetDlgItem(Hwnd,IDC_COLLISION_PROJECTILE),onoff);
213 EnableWindow(GetDlgItem(Hwnd,IDC_COLLISION_VIS),onoff);
214 EnableWindow(GetDlgItem(Hwnd,IDC_COLLISION_CAMERA),onoff);
215 EnableWindow(GetDlgItem(Hwnd,IDC_COLLISION_VEHICLE),onoff);
216}
217
218
219/***********************************************************************************************
220 * GenNamesDialogClass::Dialog_Proc -- windows dialog proc *
221 * *
222 * INPUT: *
223 * *
224 * OUTPUT: *
225 * *
226 * WARNINGS: *
227 * *
228 * HISTORY: *
229 * 10/10/2000 gth : Created. *
230 *=============================================================================================*/
231bool GenNamesDialogClass::Dialog_Proc(HWND hWnd,UINT message,WPARAM wParam,LPARAM)
232{
233 switch (message ) {
234
235 case WM_INITDIALOG:
236
237 NameIndexSpin = SetupIntSpinner
238 (
239 Hwnd,
242 MIN_NAME_INDEX,MAX_NAME_INDEX,INITIAL_NAME_INDEX
243 );
244
245 // limit the base name edit box to 10 characters
246 SendDlgItemMessage(Hwnd,IDC_BASE_NAME_EDIT,EM_LIMITTEXT,MAX_ROOT_NAME_LEN,0);
247
248 // limit the suffix and prefix edit boxes
249 SendDlgItemMessage(Hwnd,IDC_PREFIX_EDIT,EM_LIMITTEXT,MAX_PREFIX_LEN,0);
250 SendDlgItemMessage(Hwnd,IDC_SUFFIX_EDIT,EM_LIMITTEXT,MAX_SUFFIX_LEN,0);
251
252 // set initial name to root of the filename
253 char buf[_MAX_FNAME];
254 _splitpath(MaxInterface->GetCurFileName(),NULL,NULL,buf,NULL);
255 buf[MAX_ROOT_NAME_LEN+1] = 0;
256 SetWindowText(GetDlgItem(Hwnd,IDC_BASE_NAME_EDIT),buf);
257
258 // init radio buttons
259 CheckDlgButton(Hwnd,IDC_AFFECT_ALL_RADIO,BST_UNCHECKED);
260 CheckDlgButton(Hwnd,IDC_AFFECT_SELECTED_RADIO,BST_CHECKED);
261
262 // init the check boxes
263 CheckDlgButton(Hwnd,IDC_ASSIGN_NAMES_CHECK,BST_CHECKED);
264 CheckDlgButton(Hwnd,IDC_ASSIGN_PREFIX_CHECK,BST_UNCHECKED);
265 CheckDlgButton(Hwnd,IDC_ASSIGN_SUFFIX_CHECK,BST_UNCHECKED);
266 CheckDlgButton(Hwnd,IDC_ASSIGN_COLLISION_BITS_CHECK,BST_CHECKED);
267 CheckDlgButton(Hwnd,IDC_COLLISION_PHYSICAL,BST_CHECKED);
268 CheckDlgButton(Hwnd,IDC_COLLISION_PROJECTILE,BST_CHECKED);
269 CheckDlgButton(Hwnd,IDC_COLLISION_VIS,BST_CHECKED);
270 CheckDlgButton(Hwnd,IDC_COLLISION_CAMERA,BST_CHECKED);
271 CheckDlgButton(Hwnd,IDC_COLLISION_VEHICLE,BST_CHECKED);
272 return 1;
273
274 case WM_COMMAND:
275
276 switch (LOWORD(wParam))
277 {
278 case IDOK:
279 if (Ok_To_Exit()) {
280 // general options
281 Options->AssignNames = (IsDlgButtonChecked(Hwnd,IDC_ASSIGN_NAMES_CHECK) == BST_CHECKED);
282 Options->AssignPrefix = (IsDlgButtonChecked(Hwnd,IDC_ASSIGN_PREFIX_CHECK) == BST_CHECKED);
283 Options->AssignSuffix = (IsDlgButtonChecked(Hwnd,IDC_ASSIGN_SUFFIX_CHECK) == BST_CHECKED);
284 Options->AssignCollisionBits = (IsDlgButtonChecked(Hwnd,IDC_ASSIGN_COLLISION_BITS_CHECK) == BST_CHECKED);
285 Options->OnlyAffectSelected = (IsDlgButtonChecked(Hwnd,IDC_AFFECT_SELECTED_RADIO) == BST_CHECKED);
286
287 // naming options
288 Options->NameIndex = NameIndexSpin->GetIVal();
289 GetWindowText(GetDlgItem(Hwnd,IDC_BASE_NAME_EDIT),Options->RootName,sizeof(Options->RootName));
290 GetWindowText(GetDlgItem(Hwnd,IDC_PREFIX_EDIT),Options->PrefixName,sizeof(Options->PrefixName));
291 GetWindowText(GetDlgItem(Hwnd,IDC_SUFFIX_EDIT),Options->SuffixName,sizeof(Options->SuffixName));
292
293 // collision options
294 Options->PhysicalCollision = (IsDlgButtonChecked(Hwnd,IDC_COLLISION_PHYSICAL) == BST_CHECKED);
295 Options->ProjectileCollision = (IsDlgButtonChecked(Hwnd,IDC_COLLISION_PROJECTILE) == BST_CHECKED);
296 Options->VisCollision = (IsDlgButtonChecked(Hwnd,IDC_COLLISION_VIS) == BST_CHECKED);
297 Options->CameraCollision = (IsDlgButtonChecked(Hwnd,IDC_COLLISION_CAMERA) == BST_CHECKED);
298 Options->VehicleCollision = (IsDlgButtonChecked(Hwnd,IDC_COLLISION_VEHICLE) == BST_CHECKED);
299 EndDialog(Hwnd, 1);
300 }
301 break;
302
303 case IDCANCEL:
304 EndDialog(Hwnd, 0);
305 break;
306
309 break;
310
312 EnableWindow(GetDlgItem(Hwnd,IDC_PREFIX_EDIT),(IsDlgButtonChecked(Hwnd,IDC_ASSIGN_SUFFIX_CHECK) == BST_CHECKED));
313 break;
314
316 EnableWindow(GetDlgItem(Hwnd,IDC_SUFFIX_EDIT),(IsDlgButtonChecked(Hwnd,IDC_ASSIGN_SUFFIX_CHECK) == BST_CHECKED));
317 break;
318
321 break;
322 }
323 return 1;
324 }
325 return 0;
326}
327
328
329/***********************************************************************************************
330 * _gen_names_dialog_proc -- dialog proc that "thunks" to the class's dialog proc *
331 * *
332 * INPUT: *
333 * *
334 * OUTPUT: *
335 * *
336 * WARNINGS: *
337 * *
338 * HISTORY: *
339 * 10/10/2000 gth : Created. *
340 *=============================================================================================*/
341static BOOL CALLBACK _gen_names_dialog_proc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
342{
343 static GenNamesDialogClass * dialog = NULL;
344
345 if (message == WM_INITDIALOG) {
346 dialog = (GenNamesDialogClass *)lparam;
347 dialog->Hwnd = hwnd;
348 }
349
350 if (dialog) {
351 return dialog->Dialog_Proc(hwnd, message, wparam, lparam);
352 } else {
353 return FALSE;
354 }
355}
356
357
#define NULL
Definition BaseType.h:92
#define TRUE
Definition BaseType.h:109
#define FALSE
Definition BaseType.h:113
#define W3D_NAME_LEN
Definition w3d_file.h:319
unsigned int UINT
Definition bittype.h:63
#define IDC_SUFFIX_EDIT
Definition resource.h:293
#define IDC_BASE_NAME_EDIT
Definition resource.h:288
#define IDC_LOD_INDEX_SPIN
Definition resource.h:298
#define IDC_AFFECT_ALL_RADIO
Definition resource.h:295
#define IDC_COLLISION_CAMERA
Definition resource.h:291
#define IDC_ASSIGN_COLLISION_BITS_CHECK
Definition resource.h:299
#define IDC_AFFECT_SELECTED_RADIO
Definition resource.h:296
#define IDC_COLLISION_PHYSICAL
Definition resource.h:194
#define IDC_NAME_INDEX_SPIN
Definition resource.h:205
#define IDC_PREFIX_EDIT
Definition resource.h:290
#define IDC_ASSIGN_NAMES_CHECK
Definition resource.h:300
#define IDC_LOD_INDEX_EDIT
Definition resource.h:297
#define IDC_ASSIGN_PREFIX_CHECK
Definition resource.h:303
#define IDC_NAME_INDEX_EDIT
Definition resource.h:152
#define IDC_COLLISION_VEHICLE
Definition resource.h:304
#define IDC_ASSIGN_SUFFIX_CHECK
Definition resource.h:306
#define IDD_GENERATE_NAMES_DIALOG
Definition resource.h:82
#define IDC_COLLISION_VIS
Definition resource.h:284
#define IDC_COLLISION_PROJECTILE
Definition resource.h:301
#define BOOL
Definition Wnd_File.h:57
void Toggle_Name_Assignment(void)
void Toggle_Collision_Bits_Assignment(void)
bool Dialog_Proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM)
bool Get_Options(OptionsStruct *options)
friend BOOL CALLBACK _gen_names_dialog_proc(HWND Hwnd, UINT message, WPARAM wParam, LPARAM lParam)
GenNamesDialogClass(Interface *maxinterface)
HINSTANCE AppInstance
Definition dllmain.cpp:67