FS2_Open
Open source remastering of the Freespace 2 engine
cmdbrief.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) Volition, Inc. 1999. All rights reserved.
3  *
4  * All source code herein is the property of Volition, Inc. You may not sell
5  * or otherwise commercially exploit the source or things you created based on the
6  * source.
7  *
8 */
9 
10 
11 
12 #include "stdafx.h"
13 #include "FRED.h"
14 #include "CmdBrief.h"
15 #include "cfile/cfile.h"
16 #include "sound/audiostr.h"
17 #include "localization/localize.h"
18 
19 #ifdef _DEBUG
20 #undef THIS_FILE
21 static char THIS_FILE[] = __FILE__;
22 #endif
23 
25 // cmd_brief_dlg dialog
26 
27 cmd_brief_dlg::cmd_brief_dlg(CWnd* pParent /*=NULL*/)
28  : CDialog(cmd_brief_dlg::IDD, pParent)
29 {
30  //{{AFX_DATA_INIT(cmd_brief_dlg)
31  m_ani_filename = _T("");
32  m_text = _T("");
33  m_stage_title = _T("");
34  m_wave_filename = _T("");
35  //}}AFX_DATA_INIT
36 
37  m_wave_id = -1;
38 }
39 
40 void cmd_brief_dlg::DoDataExchange(CDataExchange* pDX)
41 {
42  CDialog::DoDataExchange(pDX);
43  //{{AFX_DATA_MAP(cmd_brief_dlg)
44  DDX_Text(pDX, IDC_ANI_FILENAME, m_ani_filename);
45  DDX_Text(pDX, IDC_TEXT, m_text);
46  DDX_Text(pDX, IDC_STAGE_TITLE, m_stage_title);
47  DDX_Text(pDX, IDC_WAVE_FILENAME, m_wave_filename);
48  //}}AFX_DATA_MAP
49 
50  DDV_MaxChars(pDX, m_ani_filename, MAX_FILENAME_LEN - 1);
51  DDV_MaxChars(pDX, m_wave_filename, MAX_FILENAME_LEN - 1);
52 }
53 
54 BEGIN_MESSAGE_MAP(cmd_brief_dlg, CDialog)
55  //{{AFX_MSG_MAP(cmd_brief_dlg)
56  ON_BN_CLICKED(IDC_NEXT, OnNext)
57  ON_BN_CLICKED(IDC_PREV, OnPrev)
58  ON_BN_CLICKED(IDC_ADD_STAGE, OnAddStage)
59  ON_BN_CLICKED(IDC_INSERT_STAGE, OnInsertStage)
60  ON_BN_CLICKED(IDC_DELETE_STAGE, OnDeleteStage)
61  ON_BN_CLICKED(IDC_BROWSE_ANI, OnBrowseAni)
62  ON_BN_CLICKED(IDC_BROWSE_WAVE, OnBrowseWave)
63  ON_BN_CLICKED(IDC_PLAY, OnPlay)
64  //}}AFX_MSG_MAP
65 END_MESSAGE_MAP()
66 
68 // cmd_brief_dlg message handlers
69 
70 BOOL cmd_brief_dlg::OnInitDialog()
71 {
72  Cur_cmd_brief = Cmd_briefs; // default to first cmd briefing
73  m_cur_stage = 0;
74  last_cmd_brief = NULL;
75 
76  CDialog::OnInitDialog();
77  m_play_bm.LoadBitmap(IDB_PLAY);
78  ((CButton *) GetDlgItem(IDC_PLAY)) -> SetBitmap(m_play_bm);
79 
80  update_data();
81  return TRUE;
82 }
83 
85 {
86  int enable;
87 
88  if (update)
89  UpdateData(TRUE);
90 
91  // save previously editing data before we load over it.
92  if (last_cmd_brief && m_last_stage >= 0 && m_last_stage < last_cmd_brief->num_stages) {
94 
96  lcl_fred_replace_stuff(last_stage->text);
97 
100  }
101 
102  // load data of new stage into dialog
103  if (Cur_cmd_brief && Cur_cmd_brief->num_stages > 0) {
104  if (m_cur_stage < 0 || m_cur_stage >= Cur_cmd_brief->num_stages)
105  m_cur_stage = 0;
106 
107  m_stage_title.Format("Stage %d of %d", m_cur_stage + 1, Cur_cmd_brief->num_stages);
111  enable = TRUE;
112 
113  } else {
114  m_stage_title = _T("No stages");
115  m_text = _T("");
116  m_ani_filename = _T("");
117  m_wave_filename = _T("");
118  enable = FALSE;
119  m_cur_stage = -1;
120  }
121 
122  if (m_cur_stage < Cur_cmd_brief->num_stages - 1)
123  GetDlgItem(IDC_NEXT) -> EnableWindow(enable);
124  else
125  GetDlgItem(IDC_NEXT) -> EnableWindow(FALSE);
126 
127  if (m_cur_stage)
128  GetDlgItem(IDC_PREV) -> EnableWindow(enable);
129  else
130  GetDlgItem(IDC_PREV) -> EnableWindow(FALSE);
131 
133  GetDlgItem(IDC_ADD_STAGE) -> EnableWindow(FALSE);
134  else
135  GetDlgItem(IDC_ADD_STAGE) -> EnableWindow(TRUE);
136 
137  if (Cur_cmd_brief->num_stages) {
138  GetDlgItem(IDC_DELETE_STAGE) -> EnableWindow(enable);
139  GetDlgItem(IDC_INSERT_STAGE) -> EnableWindow(enable);
140 
141  } else {
142  GetDlgItem(IDC_DELETE_STAGE) -> EnableWindow(FALSE);
143  GetDlgItem(IDC_INSERT_STAGE) -> EnableWindow(FALSE);
144  }
145 
146  GetDlgItem(IDC_WAVE_FILENAME) -> EnableWindow(enable);
147  GetDlgItem(IDC_ANI_FILENAME) -> EnableWindow(enable);
148  GetDlgItem(IDC_BROWSE_ANI) -> EnableWindow(enable);
149  GetDlgItem(IDC_BROWSE_WAVE) -> EnableWindow(enable);
150  GetDlgItem(IDC_TEXT) -> EnableWindow(enable);
151 
152  UpdateData(FALSE);
153 
156 }
157 
159 {
161  m_wave_id = -1;
162 
163  update_data();
164  CDialog::OnOK();
165 }
166 
168 {
170  m_wave_id = -1;
171 
172  m_cur_stage++;
173  update_data();
174 }
175 
177 {
179  m_wave_id = -1;
180 
181  m_cur_stage--;
182  update_data();
183 }
184 
186 {
187  int i;
188 
190  return;
191 
193  m_wave_id = -1;
194 
196  copy_stage(i - 1, i);
197  update_data(1);
198 }
199 
201 {
202  int i, z;
203 
205  return;
206 
207  if (!Cur_cmd_brief->num_stages) {
208  OnAddStage();
209  return;
210  }
211 
213  m_wave_id = -1;
214 
215  z = m_cur_stage;
216  m_cur_stage = -1;
217  update_data(1);
218  for (i=Cur_cmd_brief->num_stages; i>z; i--)
220 
222  copy_stage(z, z + 1);
223  m_cur_stage = z;
224  m_last_stage = -1;
225  update_data(0);
226 }
227 
229 {
230  int i, z;
231 
232  if (m_cur_stage < 0)
233  return;
234 
236  m_wave_id = -1;
237 
239  z = m_cur_stage;
240  m_cur_stage = -1;
241  update_data(1);
242  Cur_cmd_brief->stage[z].text = "";
243 
244  for (i=z+1; i<Cur_cmd_brief->num_stages; i++)
246 
248  m_cur_stage = z;
249  m_last_stage = -1;
250 
253 
254  update_data(0);
255 }
256 
257 void cmd_brief_dlg::copy_stage(int from, int to)
258 {
259  if ((from < 0) || (from >= Cur_cmd_brief->num_stages)) {
260  Cur_cmd_brief->stage[to].text = "<Text here>";
261  strcpy_s(Cur_cmd_brief->stage[to].ani_filename, "<default>");
263  return;
264  }
265 
266  Cur_cmd_brief->stage[to] = Cur_cmd_brief->stage[from];
268 }
269 
271 {
272  int z;
273  CString name;
274 
275  UpdateData(TRUE);
277  CFileDialog dlg(TRUE, "ani", NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_NOCHANGEDIR,
278  "Ani Files (*.ani)|*.ani|Avi Files (*.avi)|*.avi|Both (*.ani, *.avi)|*.ani;*.avi||");
279 
280  if (dlg.DoModal() == IDOK) {
281  m_ani_filename = dlg.GetFileName();
282  UpdateData(FALSE);
283  }
284 
285  if (!z)
286  cfile_pop_dir();
287 }
288 
290 {
291  int z;
292  CString name;
293 
295  m_wave_id = -1;
296 
297  UpdateData(TRUE);
299  CFileDialog dlg(TRUE, "wav", NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_NOCHANGEDIR,
300  "Voice Files (*.ogg, *.wav)|*.ogg;*.wav|Ogg Vorbis Files (*.ogg)|*.ogg|Wave Files (*.wav)|*.wav||");
301 
302  if (dlg.DoModal() == IDOK) {
303  m_wave_filename = dlg.GetFileName();
304  UpdateData(FALSE);
305  }
306 
307  if (!z)
308  cfile_pop_dir();
309 }
310 
312 {
314  m_wave_id = -1;
315 
316  m_play_bm.DeleteObject();
317  return CDialog::DestroyWindow();
318 }
319 
321 {
322  GetDlgItem(IDC_WAVE_FILENAME)->GetWindowText(m_wave_filename);
323 
324  if (m_wave_id >= 0) {
326  m_wave_id = -1;
327  return;
328  }
329 
330  // we use ASF_EVENTMUSIC here so that it will keep the extension in place
332 
333  if (m_wave_id >= 0) {
334  audiostream_play(m_wave_id, 1.0f, 0);
335  }
336 }
#define MAX_FILENAME_LEN
Definition: pstypes.h:324
int i
Definition: multi_pxo.cpp:466
void update_data(int update=1)
Definition: cmdbrief.cpp:84
int m_cur_stage
Definition: cmdbrief.h:47
#define ASF_EVENTMUSIC
Definition: audiostr.h:19
#define IDC_DELETE_STAGE
Definition: resource.h:568
int m_wave_id
Definition: cmdbrief.h:49
Assert(pm!=NULL)
int cfile_pop_dir()
Definition: cfile.cpp:381
GLclampf f
Definition: Glext.h:7097
#define TRUE
Definition: pstypes.h:399
int m_last_stage
Definition: cmdbrief.h:48
char ani_filename[MAX_FILENAME_LEN]
#define IDC_TEXT
Definition: resource.h:771
cmd_brief Cmd_briefs[MAX_TVT_TEAMS]
void deconvert_multiline_string(char *dest, const CString &str, int max_len)
Definition: management.cpp:184
#define CMD_BRIEF_STAGES_MAX
#define IDC_BROWSE_WAVE
Definition: resource.h:859
afx_msg void OnPrev()
Definition: cmdbrief.cpp:176
afx_msg void OnPlay()
Definition: cmdbrief.cpp:320
int cfile_push_chdir(int type)
Push current directory onto a 'stack' and change to a new directory.
Definition: cfile.cpp:342
void convert_multiline_string(CString &dest, const SCP_string &src)
Definition: management.cpp:169
cmd_brief * last_cmd_brief
Definition: cmdbrief.h:50
#define CF_TYPE_VOICE_CMD_BRIEF
Definition: cfile.h:56
GLdouble GLdouble z
Definition: Glext.h:5451
afx_msg void OnDeleteStage()
Definition: cmdbrief.cpp:228
void copy_stage(int from, int to)
Definition: cmdbrief.cpp:257
#define CF_TYPE_INTERFACE
Definition: cfile.h:63
cmd_brief_stage stage[CMD_BRIEF_STAGES_MAX]
afx_msg void OnAddStage()
Definition: cmdbrief.cpp:185
#define IDC_WAVE_FILENAME
Definition: resource.h:585
void string_copy(char *dest, const CString &src, int max_len, int modify)
Definition: management.cpp:142
CString m_ani_filename
Definition: cmdbrief.h:28
CString m_wave_filename
Definition: cmdbrief.h:31
#define IDC_STAGE_TITLE
Definition: resource.h:849
virtual BOOL DestroyWindow()
Definition: cmdbrief.cpp:311
#define IDC_PREV
Definition: resource.h:851
#define IDC_ANI_FILENAME
Definition: resource.h:938
GLuint const GLchar * name
Definition: Glext.h:5608
#define IDC_BROWSE_ANI
Definition: resource.h:954
GLboolean enable
Definition: Glext.h:10591
int BOOL
Definition: config.h:80
void audiostream_close_file(int i, int fade)
Definition: audiostr.cpp:1772
cmd_brief_dlg(CWnd *pParent=NULL)
Definition: cmdbrief.cpp:27
if(aifft_max_checks<=0)
Definition: aiturret.cpp:1581
afx_msg void OnBrowseWave()
Definition: cmdbrief.cpp:289
#define IDC_PLAY
Definition: resource.h:333
CString m_stage_title
Definition: cmdbrief.h:30
afx_msg void OnInsertStage()
Definition: cmdbrief.cpp:200
virtual void DoDataExchange(CDataExchange *pDX)
Definition: cmdbrief.cpp:40
char wave_filename[MAX_FILENAME_LEN]
void audiostream_play(int i, float volume, int looping)
Definition: audiostr.cpp:1803
CString m_text
Definition: cmdbrief.h:29
CBitmap m_play_bm
Definition: cmdbrief.h:34
cmd_brief * Cur_cmd_brief
#define IDB_PLAY
Definition: resource.h:87
int audiostream_open(const char *filename, int type)
Definition: audiostr.cpp:1713
#define IDC_INSERT_STAGE
Definition: resource.h:853
afx_msg void OnBrowseAni()
Definition: cmdbrief.cpp:270
#define IDC_ADD_STAGE
Definition: resource.h:845
afx_msg void OnNext()
Definition: cmdbrief.cpp:167
#define FALSE
Definition: pstypes.h:400
void lcl_fred_replace_stuff(char *text, size_t max_len)
Definition: localize.cpp:610
#define strcpy_s(...)
Definition: safe_strings.h:67
#define IDC_NEXT
Definition: resource.h:844