doom3-gpl
Doom 3 GPL source release
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
DialogAF.cpp
Go to the documentation of this file.
1 /*
2 ===========================================================================
3 
4 Doom 3 GPL Source Code
5 Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
6 
7 This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
8 
9 Doom 3 Source Code is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13 
14 Doom 3 Source Code is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18 
19 You should have received a copy of the GNU General Public License
20 along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
21 
22 In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
23 
24 If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
25 
26 ===========================================================================
27 */
28 
29 #include "../../idlib/precompiled.h"
30 #pragma hdrstop
31 
32 #include "../../sys/win32/rc/AFEditor_resource.h"
33 
34 #include "DialogAF.h"
35 #include "DialogAFName.h"
36 #include "DialogAFView.h"
37 #include "DialogAFProperties.h"
38 #include "DialogAFBody.h"
39 #include "DialogAFConstraint.h"
40 
41 #ifdef ID_DEBUG_MEMORY
42 #undef new
43 #undef DEBUG_NEW
44 #define DEBUG_NEW new
45 #endif
46 
47 // DialogAF
48 
49 #define AFTAB_VIEW 0x01
50 #define AFTAB_PROPERTIES 0x02
51 #define AFTAB_BODIES 0x03
52 #define AFTAB_CONSTRAINTS 0x04
53 
55  { IDC_COMBO_AF, "select an articulated figure for editing" },
56  { IDC_BUTTON_AF_NEW, "create a new articulated figure" },
57  { IDC_BUTTON_AF_DELETE, "delete the selected articulated figure" },
58  { IDC_BUTTON_AF_SPAWN, "spawn ingame entity using the selected articulated figure" },
59  { IDC_BUTTON_AF_TPOSE, "set ingame entity using the selected articulated figure back into T-Pose" },
60  { IDC_BUTTON_AF_KILL, "kill ingame entity using the selected articulated figure" },
61  { IDC_BUTTON_AF_SAVE, "save the selected articulated figure" },
62  { IDCANCEL, "cancel all changes to all articulated figures" },
63  { 0, NULL }
64 };
65 
66 
68 
69 
70 IMPLEMENT_DYNAMIC(DialogAF, CDialog)
71 
72 /*
73 ================
74 DialogAF::DialogAF
75 ================
76 */
77 DialogAF::DialogAF( CWnd* pParent /*=NULL*/ )
78  : CDialog(DialogAF::IDD, pParent)
79  , file(NULL)
80 {
81  wndTabs = NULL;
82  wndTabDisplay = NULL;
83 }
84 
85 /*
86 ================
87 DialogAF::~DialogAF
88 ================
89 */
91 }
92 
93 /*
94 ================
95 DialogAF::DoDataExchange
96 ================
97 */
98 void DialogAF::DoDataExchange(CDataExchange* pDX) {
99  CDialog::DoDataExchange(pDX);
100  //{{AFX_DATA_MAP(DialogAF)
101  DDX_Control(pDX, IDC_COMBO_AF, AFList);
102  //}}AFX_DATA_MAP
103 }
104 
105 /*
106 ================
107 DialogAF::LoadFile
108 ================
109 */
111  file = af;
112  propertiesDlg->LoadFile( af );
113  bodyDlg->LoadFile( af );
114  constraintDlg->LoadFile( af );
115 
116  if ( file ) {
117  // select file in AFList
118  int i = AFList.FindString( -1, file->GetName() );
119  if ( i != AFList.GetCurSel() ) {
120  AFList.SetCurSel( i );
121  }
122  GetDlgItem( IDC_BUTTON_AF_SAVE )->EnableWindow( file->modified );
123  GetDlgItem( IDC_BUTTON_AF_DELETE )->EnableWindow( true );
124  }
125  else {
126  AFList.SetCurSel( -1 );
127  GetDlgItem( IDC_BUTTON_AF_SAVE )->EnableWindow( false );
128  GetDlgItem( IDC_BUTTON_AF_DELETE )->EnableWindow( false );
129  }
130 }
131 
132 /*
133 ================
134 DialogAF::LoadFile
135 ================
136 */
137 void DialogAF::SaveFile( void ) {
138  if ( !file ) {
139  return;
140  }
142  bodyDlg->SaveFile();
145 }
146 
147 /*
148 ================
149 DialogAF::SetFileModified
150 ================
151 */
153  if ( file ) {
154  file->modified = true;
155  GetDlgItem( IDC_BUTTON_AF_SAVE )->EnableWindow( true );
156  }
157 }
158 
159 /*
160 ================
161 DialogAF::ReloadFile
162 ================
163 */
164 void DialogAF::ReloadFile( void ) {
165  LoadFile( file );
166 }
167 
168 /*
169 ================
170 DialogAF::InitAFList
171 ================
172 */
173 void DialogAF::InitAFList( void ) {
174  int i, c;
175 
176  AFList.ResetContent();
178  for ( i = 0; i < c; i++ ) {
179  AFList.AddString( static_cast<const idDeclAF *>( declManager->DeclByIndex( DECL_AF, i, false ) )->GetName() );
180  }
181 }
182 
183 /*
184 ================
185 DialogAF::AddTabItem
186 ================
187 */
188 void DialogAF::AddTabItem( int id, const char *name ) {
189  TCITEM item;
190  item.mask = TCIF_PARAM;
191  item.lParam = id;
192  int tab = wndTabs->InsertItem( wndTabs->GetItemCount(), name );
193  wndTabs->SetItem( tab, &item );
194 }
195 
196 /*
197 ================
198 DialogAF::SetTab
199 ================
200 */
201 void DialogAF::SetTab( int id ) {
202  int c = wndTabs->GetItemCount();
203  for ( int i = 0; i < c; i++ ) {
204  TCITEM item;
205  item.mask = TCIF_PARAM;
206  wndTabs->GetItem( i, &item );
207  if ( item.lParam == id ) {
208  wndTabs->SetCurSel(i);
209  return;
210  }
211  }
212  wndTabs->SetCurSel(0);
213 }
214 
215 /*
216 ================
217 DialogAF::SetTabChildPos
218 
219  position the child dialog box
220 ================
221 */
223  if ( wndTabDisplay ) {
224  wndTabDisplay->ShowWindow( SW_SHOW );
225  wndTabDisplay->SetWindowPos( wndTabs, 12, 60, 0, 0, SWP_NOSIZE );
226  }
227 }
228 
229 /*
230 ================
231 DialogAF::OnInitDialog
232 ================
233 */
235  CDialog::OnInitDialog();
236 
238 
239  // initialize list with articulated figure files
240  InitAFList();
241 
242  // initialize tabs
243  wndTabs = (CTabCtrl *) GetDlgItem( IDC_DIALOG_AF_TAB_MODE );
244  AddTabItem( AFTAB_VIEW, "View" );
245  AddTabItem( AFTAB_PROPERTIES, "Properties" );
246  AddTabItem( AFTAB_BODIES, "Bodies" );
247  AddTabItem( AFTAB_CONSTRAINTS, "Constraints" );
248  SetTab( AFTAB_VIEW );
249 
250  // create child dialog windows
251  viewDlg = new DialogAFView( this );
252  propertiesDlg = new DialogAFProperties( this );
253  bodyDlg = new DialogAFBody( this );
254  constraintDlg = new DialogAFConstraint( this );
255 
256  // the body dialog may force the constraint dialog to reload the file
258 
259  // the properties dialog may force the body or constraint dialog to reload the file
262 
263  // set active child dialog
265  SetTabChildPos();
266 
267  EnableToolTips( TRUE );
268 
269  GetDlgItem( IDC_BUTTON_AF_DELETE )->EnableWindow( false );
270  GetDlgItem( IDC_BUTTON_AF_SAVE )->EnableWindow( false );
271 
272  return TRUE; // return TRUE unless you set the focus to a control
273  // EXCEPTION: OCX Property Pages should return FALSE
274 }
275 
276 
277 BEGIN_MESSAGE_MAP(DialogAF, CDialog)
278  ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipNotify)
279  ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipNotify)
280  ON_NOTIFY(TCN_SELCHANGE, IDC_DIALOG_AF_TAB_MODE, OnTcnSelchangeTabMode)
281  ON_WM_DESTROY()
282  ON_WM_ACTIVATE()
283  ON_WM_MOVE()
284  ON_WM_SETFOCUS()
285  ON_CBN_SELCHANGE(IDC_COMBO_AF, OnCbnSelchangeComboAf)
286  ON_BN_CLICKED(IDC_BUTTON_AF_NEW, OnBnClickedButtonAfNew)
287  ON_BN_CLICKED(IDC_BUTTON_AF_DELETE, OnBnClickedButtonAfDelete)
288  ON_BN_CLICKED(IDC_BUTTON_AF_SAVE, OnBnClickedButtonAfSave)
289  ON_BN_CLICKED(IDC_BUTTON_AF_SPAWN, OnBnClickedButtonAfSpawn)
290  ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
291  ON_BN_CLICKED(IDC_BUTTON_AF_KILL, OnBnClickedButtonAfKill)
292  ON_BN_CLICKED(IDC_BUTTON_AF_TPOSE, OnBnClickedButtonAfTpose)
293 END_MESSAGE_MAP()
294 
295 
296 /*
297 ================
298 AFEditorInit
299 ================
300 */
301 void AFEditorInit( const idDict *spawnArgs ) {
302 
303  if ( renderSystem->IsFullScreen() ) {
304  common->Printf( "Cannot run the articulated figure editor in fullscreen mode.\n"
305  "Set r_fullscreen to 0 and vid_restart.\n" );
306  return;
307  }
308 
309  if ( g_AFDialog == NULL ) {
310  InitAfx();
311  g_AFDialog = new DialogAF();
312  }
313 
314  if ( g_AFDialog->GetSafeHwnd() == NULL) {
315  g_AFDialog->Create( IDD_DIALOG_AF );
316 /*
317  // FIXME: restore position
318  CRect rct;
319  g_AFDialog->SetWindowPos( NULL, rct.left, rct.top, 0, 0, SWP_NOSIZE );
320 */
321  }
322 
324 
325  g_AFDialog->ShowWindow( SW_SHOW );
326  g_AFDialog->SetFocus();
327 
328  if ( spawnArgs ) {
329  // select AF based on spawn args
330  const char *name = spawnArgs->GetString( "articulatedFigure" );
331  if ( name[0] == '\0' ) {
332  name = spawnArgs->GetString( "ragdoll" );
333  }
334  idDeclAF *decl = static_cast<idDeclAF *>( const_cast<idDecl *>( declManager->FindType( DECL_AF, name ) ) );
335  if ( decl ) {
336  g_AFDialog->LoadFile( decl );
337  }
338  }
339 }
340 
341 /*
342 ================
343 AFEditorRun
344 ================
345 */
346 void AFEditorRun( void ) {
347 #if _MSC_VER >= 1300
348  MSG *msg = AfxGetCurrentMessage(); // TODO Robert fix me!!
349 #else
350  MSG *msg = &m_msgCur;
351 #endif
352 
353  while( ::PeekMessage(msg, NULL, NULL, NULL, PM_NOREMOVE) ) {
354  // pump message
355  if ( !AfxGetApp()->PumpMessage() ) {
356  }
357  }
358 }
359 
360 /*
361 ================
362 AFEditorShutdown
363 ================
364 */
365 void AFEditorShutdown( void ) {
366  delete g_AFDialog;
367  g_AFDialog = NULL;
368 }
369 
370 
371 // DialogAF message handlers
372 
373 /*
374 ================
375 DialogAF::OnActivate
376 ================
377 */
378 void DialogAF::OnActivate( UINT nState, CWnd *pWndOther, BOOL bMinimized ) {
379  CDialog::OnActivate( nState, pWndOther, bMinimized );
380 }
381 
382 /*
383 ================
384 DialogAF::OnToolTipNotify
385 ================
386 */
387 BOOL DialogAF::OnToolTipNotify( UINT id, NMHDR *pNMHDR, LRESULT *pResult ) {
388  return DefaultOnToolTipNotify( toolTips, id, pNMHDR, pResult );
389 }
390 
391 /*
392 ================
393 DialogAF::OnSetFocus
394 ================
395 */
396 void DialogAF::OnSetFocus( CWnd *pOldWnd ) {
397  //SetActiveWindow();
398  CDialog::OnSetFocus( pOldWnd );
399 }
400 
401 /*
402 ================
403 DialogAF::OnDestroy
404 ================
405 */
407 
409 
410  return CDialog::OnDestroy();
411 }
412 
413 /*
414 ================
415 DialogAF::OnMove
416 ================
417 */
418 void DialogAF::OnMove( int x, int y ) {
419  if ( GetSafeHwnd() ) {
420  CRect rct;
421  GetWindowRect( rct );
422  // FIXME: save position
423  }
424  CDialog::OnMove( x, y );
425 }
426 
427 /*
428 ================
429 DialogAF::OnTcnSelchangeTabMode
430 
431  tab control notification handler
432 ================
433 */
434 void DialogAF::OnTcnSelchangeTabMode( NMHDR *pNMHDR, LRESULT *pResult ) {
435  *pResult = 0;
436 
437  // hide the current tab child dialog box, if any.
438  if ( wndTabDisplay != NULL ) {
439  wndTabDisplay->ShowWindow( SW_HIDE );
440  }
441 
442  TCITEM item;
443  item.mask = TCIF_PARAM;
444  wndTabs->GetItem( wndTabs->GetCurSel(), &item );
445 
446  // show the new tab child dialog box.
447  switch ( item.lParam ) {
448  case AFTAB_VIEW:
450  break;
451  case AFTAB_PROPERTIES:
453  break;
454  case AFTAB_BODIES:
456  break;
457  case AFTAB_CONSTRAINTS:
459  break;
460  }
461 
462  SetTabChildPos();
463 }
464 
465 /*
466 ================
467 DialogAF::OnCbnSelchangeComboAf
468 ================
469 */
471  int index = AFList.GetCurSel();
473  InitAFList();
474  return;
475  }
476  if ( index != CB_ERR ) {
477  CString str;
478  AFList.GetLBText( index, str );
479  LoadFile( static_cast<idDeclAF *>( const_cast<idDecl *>( declManager->FindType( DECL_AF, str ) ) ) );
480  }
481 }
482 
483 /*
484 ================
485 DialogAF::OnBnClickedButtonAfNew
486 ================
487 */
489  DialogAFName nameDlg;
490  CString name;
491  idStr fileName;
492 
493  nameDlg.SetComboBox( &AFList );
494  if ( nameDlg.DoModal() != IDOK ) {
495  return;
496  }
497  nameDlg.GetName( name );
498 
499  CFileDialog dlgSave( FALSE, "map", NULL, OFN_OVERWRITEPROMPT, "AF Files (*.af)|*.af|All Files (*.*)|*.*||", AfxGetMainWnd() );
500  if ( dlgSave.DoModal() != IDOK ) {
501  return;
502  }
503  fileName = fileSystem->OSPathToRelativePath( dlgSave.m_ofn.lpstrFile );
504 
505  // create a new .af file
506  AFList.AddString( name );
507  AFList.SetCurSel( AFList.FindString( -1, name ) );
508  idDeclAF *decl = static_cast<idDeclAF *>( declManager->CreateNewDecl( DECL_AF, name, fileName ) );
509  LoadFile( decl );
511 }
512 
513 /*
514 ================
515 DialogAF::OnBnClickedButtonAfDelete
516 ================
517 */
519  int i;
520 
521  i = AFList.GetCurSel();
522  if ( i != CB_ERR ) {
523  if ( MessageBox( "Are you sure you want to delete the articulated figure file ?", "Delete Articulated Figure", MB_YESNO | MB_ICONQUESTION ) == IDYES ) {
524  // FIXME: delete the currently selected .af file
525  }
526  }
527 }
528 
529 /*
530 ================
531 DialogAF::OnBnClickedButtonAfSpawn
532 ================
533 */
535  int index = AFList.GetCurSel();
536  if ( index != CB_ERR ) {
537  CString str;
538  AFList.GetLBText( index, str );
539  gameEdit->AF_SpawnEntity( str );
540  }
541 }
542 
543 /*
544 ================
545 DialogAF::OnBnClickedButtonAfTpose
546 ================
547 */
549  if ( file ) {
551  }
552 }
553 
554 /*
555 ================
556 DialogAF::OnBnClickedButtonAfKill
557 ================
558 */
560  cmdSystem->BufferCommandText( CMD_EXEC_APPEND, "deleteSelected\n" );
561 }
562 
563 /*
564 ================
565 DialogAF::OnBnClickedButtonAfSave
566 ================
567 */
569  // save the selected .af file
570  if ( file ) {
571  if ( file->Save() ) {
572  GetDlgItem( IDC_BUTTON_AF_SAVE )->EnableWindow( false );
573  }
574  else {
575  MessageBox( "Saving the file failed. Make sure the file is not read-only.", "Delete Articulated Figure", MB_OK );
576  }
577  }
578 }
579 
580 /*
581 ================
582 DialogAF::OnBnClickedCancel
583 ================
584 */
586  int i, c;
587 
588  // check if there are modified .af files and come up with a warning if so
590  for ( i = 0; i < c; i++ ) {
591  if ( static_cast<const idDeclAF *>( declManager->DeclByIndex( DECL_AF, i ) )->modified ) {
592  if ( MessageBox( "Some articulated figures have been modified.\nCancel all changes ?", "Cancel", MB_YESNO | MB_ICONQUESTION ) != IDYES ) {
593  return;
594  }
595  break;
596  }
597  }
598  // reload all modified .af files
599  LoadFile( NULL );
601  InitAFList();
602  OnCancel();
603 }
604 
605 
606 // General convenience routines
607 
608 /*
609 ================
610 AFDialogSetFileModified
611 ================
612 */
614  if ( g_AFDialog ) {
615  g_AFDialog->SetFileModified();
616  }
617 }
618 
619 /*
620 ================
621 AFDialogReloadFile
622 ================
623 */
624 void AFDialogReloadFile( void ) {
625  if ( g_AFDialog ) {
626  g_AFDialog->ReloadFile();
627  }
628 }
BOOL DefaultOnToolTipNotify(const toolTip_t *toolTips, UINT id, NMHDR *pNMHDR, LRESULT *pResult)
Definition: StdAfx.cpp:104
DialogAF * g_AFDialog
Definition: DialogAF.cpp:67
virtual void AF_UpdateEntities(const char *fileName)
Definition: AFEntity.cpp:2856
void GetName(CString &str)
afx_msg void OnBnClickedCancel()
Definition: DialogAF.cpp:585
virtual void AF_UndoChanges(void)
Definition: AFEntity.cpp:2881
CONST PIXELFORMATDESCRIPTOR UINT
Definition: win_qgl.cpp:47
afx_msg void OnBnClickedButtonAfDelete()
Definition: DialogAF.cpp:518
#define const
Definition: getdate.c:251
void SetFileModified(void)
Definition: DialogAF.cpp:152
#define IDC_BUTTON_AF_NEW
#define IDC_BUTTON_AF_DELETE
afx_msg void OnBnClickedButtonAfSpawn()
Definition: DialogAF.cpp:534
static void ClearStates(void)
Definition: KeyInput.cpp:746
GLenum GLint GLint y
Definition: glext.h:2849
idRenderSystem * renderSystem
afx_msg void OnMove(int x, int y)
Definition: DialogAF.cpp:418
void SaveFile(void)
Definition: DialogAF.cpp:137
idFileSystem * fileSystem
Definition: FileSystem.cpp:500
void AFDialogReloadFile(void)
Definition: DialogAF.cpp:624
bool modified
Definition: DeclAF.h:171
void SetComboBox(CComboBox *combo)
const char * GetName(void) const
Definition: DeclManager.h:140
virtual idDecl * CreateNewDecl(declType_t type, const char *name, const char *fileName)=0
void AFEditorInit(const idDict *spawnArgs)
Definition: DialogAF.cpp:301
afx_msg void OnBnClickedButtonAfSave()
Definition: DialogAF.cpp:568
afx_msg void OnActivate(UINT nState, CWnd *pWndOther, BOOL bMinimized)
Definition: DialogAF.cpp:378
#define AFTAB_VIEW
Definition: DialogAF.cpp:49
idCmdSystem * cmdSystem
Definition: CmdSystem.cpp:116
CComboBox AFList
Definition: DialogAF.h:85
GLenum GLint x
Definition: glext.h:2849
int i
Definition: process.py:33
#define BOOL
Definition: mprintf.c:71
afx_msg void OnBnClickedButtonAfNew()
Definition: DialogAF.cpp:488
virtual ~DialogAF()
Definition: DialogAF.cpp:90
idGameEdit * gameEdit
Definition: GameEdit.cpp:668
afx_msg void OnBnClickedButtonAfTpose()
Definition: DialogAF.cpp:548
void InitAfx(void)
Definition: StdAfx.cpp:53
int com_editors
Definition: Common.cpp:97
CTabCtrl * wndTabs
Definition: DialogAF.h:75
virtual void BufferCommandText(cmdExecution_t exec, const char *text)=0
void LoadFile(idDeclAF *af)
virtual BOOL OnInitDialog()
Definition: DialogAF.cpp:234
virtual bool IsFullScreen(void) const =0
GLuint index
Definition: glext.h:3476
const GLubyte * c
Definition: glext.h:4677
#define IDC_BUTTON_AF_TPOSE
void LoadFile(idDeclAF *af)
Definition: DialogAF.cpp:110
virtual void DoDataExchange(CDataExchange *pDX)
Definition: DialogAF.cpp:98
idCommon * common
Definition: Common.cpp:206
DialogAFBody * bodyDlg
Definition: DialogAF.h:79
Definition: Dict.h:65
#define NULL
Definition: Lib.h:88
virtual const idDecl * FindType(declType_t type, const char *name, bool makeDefault=true)=0
void LoadFile(idDeclAF *af)
DialogAFBody * bodyDlg
void SetTab(int id)
Definition: DialogAF.cpp:201
bool Save(void)
Definition: DeclAF.cpp:641
#define IDD_DIALOG_AF
idDeclAF * file
Definition: DialogAF.h:82
virtual void Printf(const char *fmt,...) id_attribute((format(printf
int modified
DialogAFConstraint * constraintDlg
DialogAFView * viewDlg
Definition: DialogAF.h:77
CWnd * wndTabDisplay
Definition: DialogAF.h:76
void LoadFile(idDeclAF *af)
void AFEditorRun(void)
Definition: DialogAF.cpp:346
DialogAFProperties * propertiesDlg
Definition: DialogAF.h:78
idDeclManager * declManager
void AFEditorShutdown(void)
Definition: DialogAF.cpp:365
virtual int GetNumDecls(declType_t type)=0
DialogAFConstraint * constraintDlg
Definition: DialogAFBody.h:45
void InitAFList(void)
Definition: DialogAF.cpp:173
void SaveFile(void)
void AFDialogSetFileModified(void)
Definition: DialogAF.cpp:613
GLuint id
Definition: glext.h:3103
virtual const idDecl * DeclByIndex(declType_t type, int index, bool forceParse=true)=0
DialogAFConstraint * constraintDlg
Definition: DialogAF.h:80
afx_msg void OnTcnSelchangeTabMode(NMHDR *pNMHDR, LRESULT *pResult)
Definition: DialogAF.cpp:434
static toolTip_t toolTips[]
Definition: DialogAF.h:88
virtual bool AF_SpawnEntity(const char *fileName)
Definition: AFEntity.cpp:2806
afx_msg void OnCbnSelchangeComboAf()
Definition: DialogAF.cpp:470
const GLcharARB * name
Definition: glext.h:3629
Definition: Str.h:116
afx_msg void OnBnClickedButtonAfKill()
Definition: DialogAF.cpp:559
#define FALSE
Definition: mprintf.c:70
#define AFTAB_BODIES
Definition: DialogAF.cpp:51
#define TRUE
Definition: mprintf.c:69
afx_msg BOOL OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
Definition: DialogAF.cpp:387
void AddTabItem(int id, const char *name)
Definition: DialogAF.cpp:188
void SetTabChildPos(void)
Definition: DialogAF.cpp:222
#define IDC_DIALOG_AF_TAB_MODE
#define IDC_COMBO_AF
#define AFTAB_CONSTRAINTS
Definition: DialogAF.cpp:52
virtual const char * OSPathToRelativePath(const char *OSPath)=0
#define IDC_BUTTON_AF_KILL
#define IDC_BUTTON_AF_SAVE
afx_msg void OnDestroy()
Definition: DialogAF.cpp:406
void ReloadFile(void)
Definition: DialogAF.cpp:164
#define IDC_BUTTON_AF_SPAWN
afx_msg void OnSetFocus(CWnd *pOldWnd)
Definition: DialogAF.cpp:396
#define AFTAB_PROPERTIES
Definition: DialogAF.cpp:50