Mercurial > vba-linux
comparison src/win32/MovieOpen.cpp @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:8ced16adf2e1 | 1:f9f4f1b99eed |
---|---|
1 // MovieOpen.cpp : implementation file | |
2 // | |
3 | |
4 #include "stdafx.h" | |
5 #include "resource.h" | |
6 #include "MovieOpen.h" | |
7 #include "MainWnd.h" | |
8 #include "FileDlg.h" | |
9 #include "WinResUtil.h" | |
10 #include "WinMiscUtil.h" | |
11 #include "VBA.h" | |
12 | |
13 #include "../gba/GBA.h" | |
14 #include "../gb/gbGlobals.h" | |
15 #include "../common/Util.h" | |
16 #include "7zip/OpenArchive.h" | |
17 | |
18 // MovieOpen dialog | |
19 | |
20 IMPLEMENT_DYNAMIC(MovieOpen, CDialog) | |
21 MovieOpen::MovieOpen(CWnd *pParent /*=NULL*/) | |
22 : CDialog(MovieOpen::IDD, pParent) | |
23 {} | |
24 | |
25 MovieOpen::~MovieOpen() | |
26 { | |
27 SetArchiveParentHWND(NULL); | |
28 } | |
29 | |
30 BOOL MovieOpen::OnInitDialog() | |
31 { | |
32 CDialog::OnInitDialog(); | |
33 | |
34 pauseFrame = 0; | |
35 ZeroMemory(&movieInfo, sizeof SMovie); | |
36 | |
37 SetArchiveParentHWND(GetSafeHwnd()); | |
38 | |
39 GetDlgItem(IDC_CHECK_HIDEBORDER)->ShowWindow(FALSE); | |
40 GetDlgItem(IDC_LABEL_WARNING1)->SetWindowText(""); | |
41 GetDlgItem(IDC_LABEL_WARNING2)->SetWindowText(""); | |
42 GetDlgItem(IDC_EDIT_PAUSEFRAME)->SetWindowText(""); | |
43 GetDlgItem(IDC_EDIT_PAUSEFRAME)->EnableWindow(FALSE); | |
44 GetDlgItem(IDC_CHECK_PAUSEFRAME)->EnableWindow(FALSE); | |
45 | |
46 CheckDlgButton(IDC_READONLY, TRUE); | |
47 m_editDescription.SetReadOnly(theApp.movieReadOnly); | |
48 | |
49 m_editFilename.LimitText(_MAX_PATH); | |
50 m_editAuthor.LimitText(MOVIE_METADATA_AUTHOR_SIZE); | |
51 m_editDescription.LimitText(MOVIE_METADATA_SIZE - MOVIE_METADATA_AUTHOR_SIZE); | |
52 m_editPauseFrame.LimitText(8); | |
53 | |
54 // convert the ROM filename into a default movie name | |
55 CString movieName = winGetDestFilename(theApp.gameFilename, IDS_MOVIE_DIR, ".vbm"); | |
56 | |
57 GetDlgItem(IDC_MOVIE_FILENAME)->SetWindowText(movieName); | |
58 | |
59 // scroll to show the rightmost side of the movie filename | |
60 ((CEdit *)GetDlgItem(IDC_MOVIE_FILENAME))->SetSel((DWORD)(movieName.GetLength() - 1), FALSE); | |
61 | |
62 OnBnClickedMovieRefresh(); | |
63 | |
64 return TRUE; // return TRUE unless you set the focus to a control | |
65 // EXCEPTION: OCX Property Pages should return FALSE | |
66 } | |
67 | |
68 void MovieOpen::DoDataExchange(CDataExchange *pDX) | |
69 { | |
70 CDialog::DoDataExchange(pDX); | |
71 //{{AFX_DATA_MAP(MovieCreate) | |
72 DDX_Control(pDX, IDC_EDIT_AUTHOR, m_editAuthor); | |
73 DDX_Control(pDX, IDC_EDIT_DESCRIPTION, m_editDescription); | |
74 DDX_Control(pDX, IDC_MOVIE_FILENAME, m_editFilename); | |
75 DDX_Control(pDX, IDC_EDIT_PAUSEFRAME, m_editPauseFrame); | |
76 //}}AFX_DATA_MAP | |
77 } | |
78 | |
79 BEGIN_MESSAGE_MAP(MovieOpen, CDialog) | |
80 ON_BN_CLICKED(IDC_BROWSE, OnBnClickedBrowse) | |
81 ON_BN_CLICKED(IDOK, OnBnClickedOk) | |
82 ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel) | |
83 ON_BN_CLICKED(IDC_MOVIE_REFRESH, OnBnClickedMovieRefresh) | |
84 ON_BN_CLICKED(IDC_READONLY, OnBnClickedReadonly) | |
85 ON_BN_CLICKED(IDC_CHECK_PAUSEFRAME, OnBnClickedCheckPauseframe) | |
86 ON_BN_CLICKED(IDC_CHECK_HIDEBORDER, OnBnClickedHideborder) | |
87 ON_EN_CHANGE(IDC_MOVIE_FILENAME, OnEnChangeMovieFilename) | |
88 END_MESSAGE_MAP() | |
89 | |
90 // MovieOpen message handlers | |
91 | |
92 // FIXME: file-scope-global | |
93 static bool shouldReopenBrowse = false; | |
94 | |
95 void MovieOpen::OnBnClickedBrowse() | |
96 { | |
97 theApp.winCheckFullscreen(); // FIXME: necessary or not? | |
98 | |
99 LPCTSTR exts[] = { ".vbm", NULL }; | |
100 | |
101 CString filter = winResLoadFilter(IDS_FILTER_MOVIE); | |
102 CString title = winResLoadString(IDS_SELECT_MOVIE_NAME); | |
103 | |
104 CString movieName = winGetDestFilename(theApp.gameFilename, IDS_MOVIE_DIR, exts[0]); | |
105 CString movieDir = winGetDestDir(IDS_MOVIE_DIR); | |
106 | |
107 FileDlg dlg(this, movieName, filter, 1, "VBM", exts, movieDir, title, false, true); | |
108 | |
109 do | |
110 { | |
111 shouldReopenBrowse = false; | |
112 | |
113 if (dlg.DoModal() == IDCANCEL) | |
114 { | |
115 return; | |
116 } | |
117 | |
118 movieName = dlg.GetPathName(); | |
119 | |
120 GetDlgItem(IDC_MOVIE_FILENAME)->SetWindowText(movieName); | |
121 | |
122 // SetWindowText calls OnEnChangeMovieFilename which calls OnBnClickedMovieRefresh | |
123 // so this extra call to OnBnClickedMovieRefresh is bad | |
124 //OnBnClickedMovieRefresh(); | |
125 } | |
126 while (shouldReopenBrowse); | |
127 | |
128 // scroll to show the rightmost side of the movie filename | |
129 ((CEdit *)GetDlgItem(IDC_MOVIE_FILENAME))->SetSel((DWORD)(movieName.GetLength() - 1), FALSE); | |
130 } | |
131 | |
132 // some extensions that might commonly be near emulation-related files that we almost certainly can't open, or at least not | |
133 // directly. | |
134 // also includes definitely non-movie extensions we know about, since we only use this variable in a movie opening function. | |
135 // we do this by exclusion instead of inclusion because we don't want to exclude extensions used for any archive files, even | |
136 // extensionless or unusually-named archives. | |
137 static const char *s_movieIgnoreExtensions [] = { | |
138 "gba", "gbc", "gb", "sgb", "cgb", "bin", "agb", "bios", "mb", "elf", "sgm", "clt", "dat", "gbs", "gcf", "spc", | |
139 "xpc", "pal", "act", "dmp", "avi", "ini", "txt", "nfo", "htm", "html", "jpg", "jpeg", "png", "bmp", "gif", "mp3", | |
140 "wav", "lnk", "exe", "bat", "sav", "luasav" | |
141 }; | |
142 | |
143 void MovieOpen::OnBnClickedMovieRefresh() | |
144 { | |
145 static int recursionDepth = 0; | |
146 if (recursionDepth > 0) | |
147 return; | |
148 struct Scope {Scope(){ ++ recursionDepth; } ~Scope(){ --recursionDepth; }} scope; | |
149 | |
150 CString tempName; | |
151 GetDlgItem(IDC_MOVIE_FILENAME)->GetWindowText(tempName); | |
152 | |
153 #if 1 | |
154 // use ObtainFile to support opening files within archives (.7z, .rar, .zip, .zip.rar.7z, etc.) | |
155 | |
156 if (movieLogicalName.GetLength() > 2048) movieLogicalName.Truncate(2048); | |
157 | |
158 char LogicalName[2048], PhysicalName[2048]; | |
159 if (ObtainFile(tempName, LogicalName, PhysicalName, "mov", s_movieIgnoreExtensions, | |
160 sizeof(s_movieIgnoreExtensions) / sizeof(*s_movieIgnoreExtensions))) | |
161 { | |
162 if (tempName != LogicalName) | |
163 { | |
164 int selStart = 0, selEnd = 0; | |
165 ((CEdit *)GetDlgItem(IDC_MOVIE_FILENAME))->GetSel(selStart, selEnd); | |
166 | |
167 GetDlgItem(IDC_MOVIE_FILENAME)->SetWindowText(LogicalName); | |
168 | |
169 ((CEdit *)GetDlgItem(IDC_MOVIE_FILENAME))->SetSel(selStart, selEnd, FALSE); | |
170 } | |
171 moviePhysicalName = PhysicalName; | |
172 movieLogicalName = LogicalName; | |
173 ReleaseTempFileCategory("mov", PhysicalName); | |
174 } | |
175 else | |
176 { | |
177 shouldReopenBrowse = true; | |
178 return; | |
179 } | |
180 #else | |
181 // old version that only supports uncompressed movies | |
182 moviePhysicalName = tempName; | |
183 movieLogicalName = tempName; | |
184 #endif | |
185 | |
186 if (VBAMovieGetInfo(moviePhysicalName, &movieInfo) == MOVIE_SUCCESS) | |
187 { | |
188 if (movieInfo.readOnly) | |
189 { | |
190 CheckDlgButton(IDC_READONLY, TRUE); | |
191 m_editDescription.SetReadOnly(TRUE); | |
192 } | |
193 | |
194 char buffer[MOVIE_METADATA_SIZE]; | |
195 | |
196 strncpy(buffer, movieInfo.authorInfo, MOVIE_METADATA_AUTHOR_SIZE); | |
197 buffer[MOVIE_METADATA_AUTHOR_SIZE - 1] = '\0'; | |
198 GetDlgItem(IDC_EDIT_AUTHOR)->SetWindowText(buffer); | |
199 | |
200 strncpy(buffer, movieInfo.authorInfo + MOVIE_METADATA_AUTHOR_SIZE, MOVIE_METADATA_SIZE - MOVIE_METADATA_AUTHOR_SIZE); | |
201 buffer[MOVIE_METADATA_SIZE - MOVIE_METADATA_AUTHOR_SIZE - 1] = '\0'; | |
202 GetDlgItem(IDC_EDIT_DESCRIPTION)->SetWindowText(buffer); | |
203 | |
204 int option = 2; | |
205 if (movieInfo.header.startFlags & MOVIE_START_FROM_SRAM) | |
206 option = 1; | |
207 if (movieInfo.header.startFlags & MOVIE_START_FROM_SNAPSHOT) | |
208 option = 0; | |
209 CheckRadioButton(IDC_RECNOW, IDC_RECSTART, IDC_RECNOW + option); | |
210 | |
211 option = 3; | |
212 if (movieInfo.header.typeFlags & MOVIE_TYPE_SGB) | |
213 option = 2; | |
214 if (movieInfo.header.typeFlags & MOVIE_TYPE_GBC) | |
215 option = 1; | |
216 if (movieInfo.header.typeFlags & MOVIE_TYPE_GBA) | |
217 option = 0; | |
218 CheckRadioButton(IDC_REC_GBA, IDC_REC_GB, IDC_REC_GBA + option); | |
219 | |
220 GetDlgItem(IDC_CHECK_HIDEBORDER)->ShowWindow(option == 2 ? TRUE : FALSE); | |
221 | |
222 if (movieInfo.header.typeFlags & MOVIE_TYPE_GBA) | |
223 { | |
224 if (movieInfo.header.optionFlags & MOVIE_SETTING_USEBIOSFILE) | |
225 { | |
226 if (movieInfo.header.optionFlags & MOVIE_SETTING_SKIPBIOSFILE) | |
227 option = 2; | |
228 else | |
229 option = 3; | |
230 } | |
231 else | |
232 option = 1; | |
233 } | |
234 else | |
235 option = 0; | |
236 | |
237 CheckRadioButton(IDC_REC_NOBIOS, IDC_REC_GBABIOSINTRO, IDC_REC_NOBIOS + option); | |
238 | |
239 { | |
240 char * p; | |
241 time_t ttime = (time_t)movieInfo.header.uid; | |
242 strncpy(buffer, ctime(&ttime), 127); | |
243 buffer[127] = '\0'; | |
244 if ((p = strrchr(buffer, '\n'))) | |
245 *p = '\0'; | |
246 GetDlgItem(IDC_LABEL_DATE)->SetWindowText(buffer); | |
247 | |
248 uint32 div = 60; | |
249 uint32 l = (movieInfo.header.length_frames + (div >> 1)) / div; | |
250 uint32 seconds = l % 60; | |
251 l /= 60; | |
252 uint32 minutes = l % 60; | |
253 l /= 60; | |
254 uint32 hours = l % 60; | |
255 sprintf(buffer, "%02d:%02d:%02d", hours, minutes, seconds); | |
256 GetDlgItem(IDC_LABEL_LENGTH)->SetWindowText(buffer); | |
257 sprintf(buffer, "%ld", movieInfo.header.length_frames); | |
258 GetDlgItem(IDC_LABEL_FRAMES)->SetWindowText(buffer); | |
259 sprintf(buffer, "%ld", movieInfo.header.rerecord_count); | |
260 GetDlgItem(IDC_LABEL_RERECORD)->SetWindowText(buffer); | |
261 } | |
262 | |
263 { | |
264 char warning1 [1024], warning2 [1024], buffer [1024]; | |
265 | |
266 strcpy(warning1, ""); | |
267 strcpy(warning2, ""); | |
268 | |
269 char romTitle [12]; | |
270 uint32 romGameCode; | |
271 uint16 checksum; | |
272 uint8 crc; | |
273 | |
274 VBAMovieGetRomInfo(movieInfo, romTitle, romGameCode, checksum, crc); | |
275 | |
276 // rather than treat these as warnings, might as well always show the info in the dialog (it's probably more | |
277 // informative and reassuring) | |
278 /// if (strncmp(movieInfo.header.romTitle,romTitle,12) != 0) | |
279 { | |
280 char str [13]; | |
281 strncpy(str, movieInfo.header.romTitle, 12); | |
282 str[12] = '\0'; | |
283 sprintf(buffer, "title=%s ", str); | |
284 strcat(warning1, buffer); | |
285 | |
286 strncpy(str, romTitle, 12); | |
287 str[12] = '\0'; | |
288 sprintf(buffer, "title=%s ", str); | |
289 strcat(warning2, buffer); | |
290 } | |
291 /// if (((movieInfo.header.typeFlags & MOVIE_TYPE_GBA)!=0) != (systemCartridgeType == 0)) | |
292 { | |
293 sprintf(buffer, "type=%s ", | |
294 (movieInfo.header.typeFlags & MOVIE_TYPE_GBA) ? "GBA" : (movieInfo.header.typeFlags & | |
295 MOVIE_TYPE_GBC) ? "GBC" : (movieInfo.header. | |
296 typeFlags & | |
297 MOVIE_TYPE_SGB) ? "SGB" : "GB"); | |
298 strcat(warning1, buffer); | |
299 | |
300 sprintf(buffer, "type=%s ", systemCartridgeType == | |
301 0 ? "GBA" : (gbRom[0x143] & 0x80 ? "GBC" : (gbRom[0x146] == 0x03 ? "SGB" : "GB"))); | |
302 strcat(warning2, buffer); | |
303 } | |
304 /// if (movieInfo.header.romCRC != crc) | |
305 { | |
306 sprintf(buffer, "crc=%02x ", movieInfo.header.romCRC); | |
307 strcat(warning1, buffer); | |
308 | |
309 sprintf(buffer, "crc=%02x ", crc); | |
310 strcat(warning2, buffer); | |
311 } | |
312 /// if (movieInfo.header.romGameCode != romGameCode) | |
313 { | |
314 char code [5]; | |
315 if (movieInfo.header.typeFlags & MOVIE_TYPE_GBA) | |
316 { | |
317 memcpy(code, &movieInfo.header.romGameCode, 4); | |
318 code[4] = '\0'; | |
319 sprintf(buffer, "code=%s ", code); | |
320 strcat(warning1, buffer); | |
321 } | |
322 | |
323 if (systemCartridgeType == 0) | |
324 { | |
325 memcpy(code, &romGameCode, 4); | |
326 code[4] = '\0'; | |
327 sprintf(buffer, "code=%s ", code); | |
328 strcat(warning2, buffer); | |
329 } | |
330 } | |
331 /// if (movieInfo.header.romOrBiosChecksum != checksum && !((movieInfo.header.optionFlags & | |
332 // MOVIE_SETTING_USEBIOSFILE)==0 | |
333 // && checksum==0)) | |
334 { | |
335 sprintf(buffer, | |
336 movieInfo.header.typeFlags & | |
337 MOVIE_TYPE_GBA ? ((movieInfo.header.optionFlags & MOVIE_SETTING_USEBIOSFILE) == | |
338 0 ? "(bios=none) " : "(bios=%04x) ") : "check=%04x ", | |
339 movieInfo.header.romOrBiosChecksum); | |
340 strcat(warning1, buffer); | |
341 | |
342 sprintf(buffer, | |
343 checksum == 0 ? "(bios=none) " : systemCartridgeType == 0 ? "(bios=%04x) " : "check=%04x ", | |
344 checksum); | |
345 strcat(warning2, buffer); | |
346 } | |
347 | |
348 if (strlen(warning1) > 0) | |
349 { | |
350 sprintf(buffer, "Movie ROM: %s", warning1); | |
351 GetDlgItem(IDC_LABEL_WARNING1)->SetWindowText(buffer); | |
352 | |
353 sprintf(buffer, "Your ROM: %s", warning2); | |
354 | |
355 //if(movieInfo.header.romCRC != crc | |
356 //|| strncmp(movieInfo.header.romTitle,romTitle,12) != 0 | |
357 //|| movieInfo.header.romOrBiosChecksum != checksum && !((movieInfo.header.optionFlags & | |
358 // MOVIE_SETTING_USEBIOSFILE)==0 && checksum==0)) | |
359 // strcat(buffer, "<-- MISMATCH"); | |
360 | |
361 GetDlgItem(IDC_LABEL_WARNING2)->SetWindowText(buffer); | |
362 } | |
363 else | |
364 { | |
365 GetDlgItem(IDC_LABEL_WARNING1)->SetWindowText("(No problems detected)"); | |
366 GetDlgItem(IDC_LABEL_WARNING2)->SetWindowText(" "); | |
367 } | |
368 } | |
369 GetDlgItem(IDC_CHECK_PAUSEFRAME)->EnableWindow(TRUE); | |
370 } | |
371 else | |
372 { | |
373 GetDlgItem(IDC_LABEL_DATE)->SetWindowText(" "); | |
374 GetDlgItem(IDC_LABEL_LENGTH)->SetWindowText(" "); | |
375 GetDlgItem(IDC_LABEL_FRAMES)->SetWindowText(" "); | |
376 GetDlgItem(IDC_LABEL_RERECORD)->SetWindowText(" "); | |
377 GetDlgItem(IDC_EDIT_AUTHOR)->SetWindowText(" "); | |
378 GetDlgItem(IDC_EDIT_DESCRIPTION)->SetWindowText(" "); | |
379 GetDlgItem(IDC_LABEL_WARNING1)->SetWindowText(" "); | |
380 GetDlgItem(IDC_LABEL_WARNING2)->SetWindowText(" "); | |
381 | |
382 GetDlgItem(IDC_EDIT_PAUSEFRAME)->SetWindowText(""); | |
383 GetDlgItem(IDC_EDIT_PAUSEFRAME)->EnableWindow(FALSE); | |
384 GetDlgItem(IDC_CHECK_PAUSEFRAME)->EnableWindow(FALSE); | |
385 CheckDlgButton(IDC_CHECK_PAUSEFRAME, FALSE); | |
386 /* | |
387 /// FIXME: how to un-check all the radio buttons? | |
388 CheckRadioButton(IDC_RECNOW, IDC_RECSTART, -1); | |
389 CheckRadioButton(IDC_REC_GBA, IDC_REC_GB, -1); | |
390 CheckRadioButton(IDC_REC_NOBIOS, IDC_REC_GBABIOSINTRO, -1);*/ | |
391 } | |
392 } | |
393 | |
394 BOOL MovieOpen::OnWndMsg(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *res) | |
395 { | |
396 switch (msg) | |
397 { | |
398 case WM_CTLCOLORSTATIC: | |
399 { | |
400 //HWND hwndDlg = GetSafeHwnd(); | |
401 HWND warnDlg = NULL; | |
402 GetDlgItem(IDC_LABEL_WARNING2, &warnDlg); | |
403 | |
404 if ((HWND)lParam == warnDlg) | |
405 { | |
406 char romTitle [12]; | |
407 uint32 romGameCode; | |
408 uint16 checksum; | |
409 uint8 crc; | |
410 | |
411 VBAMovieGetRomInfo(movieInfo, romTitle, romGameCode, checksum, crc); | |
412 | |
413 if (movieInfo.header.romCRC != crc | |
414 || strncmp(movieInfo.header.romTitle, romTitle, 12) != 0 | |
415 || movieInfo.header.romOrBiosChecksum != checksum | |
416 && !((movieInfo.header.optionFlags & MOVIE_SETTING_USEBIOSFILE) == 0 && checksum == 0)) | |
417 { | |
418 // draw the md5 sum in red if it's different from the md5 of the rom used in the replay | |
419 HDC hdcStatic = (HDC)wParam; | |
420 SetTextColor(hdcStatic, RGB(255, 0, 0)); // use red for a mismatch | |
421 | |
422 // I'm not sure why this doesn't work to make the background transparent... it turns white anyway | |
423 SetBkMode(hdcStatic, TRANSPARENT); | |
424 return (LONG)GetStockObject(NULL_BRUSH); | |
425 } | |
426 } | |
427 return FALSE; | |
428 } | |
429 } | |
430 return CDialog::OnWndMsg(msg, wParam, lParam, res); | |
431 } | |
432 | |
433 void MovieOpen::OnBnClickedOk() | |
434 { | |
435 bool useBIOSFile = (movieInfo.header.optionFlags & MOVIE_SETTING_USEBIOSFILE) != 0; | |
436 if (useBIOSFile) | |
437 { | |
438 extern bool systemLoadBIOS(const char *biosFileName, bool useBiosFile); | |
439 if (!systemLoadBIOS(theApp.biosFileName, useBIOSFile)) | |
440 { | |
441 systemMessage(0, "This movie requires a valid GBA BIOS file to play.\nPlease locate a BIOS file."); | |
442 ((MainWnd *)theApp.m_pMainWnd)->OnOptionsEmulatorSelectbiosfile(); | |
443 if (!systemLoadBIOS(theApp.biosFileName, useBIOSFile)) | |
444 { | |
445 systemMessage(0, "\"%s\" is not a valid BIOS file; cannot play movie without one.", theApp.biosFileName); | |
446 return; | |
447 } | |
448 } | |
449 } | |
450 | |
451 int code = VBAMovieOpen(moviePhysicalName, IsDlgButtonChecked(IDC_READONLY) != FALSE); | |
452 | |
453 if (code != MOVIE_SUCCESS) | |
454 { | |
455 if (code == MOVIE_FILE_NOT_FOUND) | |
456 systemMessage(0, "Could not find movie file \"%s\".", (const char *)movieLogicalName); | |
457 else if (code == MOVIE_WRONG_FORMAT) | |
458 systemMessage(0, "Movie file \"%s\" is not in proper VBM format.", (const char *)movieLogicalName); | |
459 else if (code == MOVIE_WRONG_VERSION) | |
460 systemMessage(0, "Movie file \"%s\" is not a supported version.", (const char *)movieLogicalName); | |
461 else | |
462 systemMessage(0, "Failed to open movie \"%s\".", (const char *)movieLogicalName); | |
463 return; | |
464 } | |
465 else | |
466 { | |
467 // get author and movie info from the edit fields (the description might change): | |
468 char info[MOVIE_METADATA_SIZE], buffer[MOVIE_METADATA_SIZE]; | |
469 | |
470 GetDlgItem(IDC_EDIT_AUTHOR)->GetWindowText(buffer, MOVIE_METADATA_AUTHOR_SIZE); | |
471 strncpy(info, buffer, MOVIE_METADATA_AUTHOR_SIZE); | |
472 info[MOVIE_METADATA_AUTHOR_SIZE - 1] = '\0'; | |
473 | |
474 GetDlgItem(IDC_EDIT_DESCRIPTION)->GetWindowText(buffer, MOVIE_METADATA_SIZE - MOVIE_METADATA_AUTHOR_SIZE); | |
475 strncpy(info + MOVIE_METADATA_AUTHOR_SIZE, buffer, MOVIE_METADATA_SIZE - MOVIE_METADATA_AUTHOR_SIZE); | |
476 info[MOVIE_METADATA_SIZE - 1] = '\0'; | |
477 | |
478 VBAMovieSetMetadata(info); | |
479 } | |
480 | |
481 if (IsDlgButtonChecked(IDC_CHECK_PAUSEFRAME)) | |
482 { | |
483 char buffer [9]; | |
484 GetDlgItem(IDC_EDIT_PAUSEFRAME)->GetWindowText(buffer, 8); | |
485 buffer[8] = '\0'; | |
486 | |
487 int pauseFrame = atoi(buffer); | |
488 if (pauseFrame >= 0) | |
489 VBAMovieSetPauseAt(pauseFrame); | |
490 } | |
491 | |
492 OnOK(); | |
493 } | |
494 | |
495 void MovieOpen::OnBnClickedCancel() | |
496 { | |
497 OnCancel(); | |
498 } | |
499 | |
500 void MovieOpen::OnBnClickedReadonly() | |
501 { | |
502 theApp.movieReadOnly = IsDlgButtonChecked(IDC_READONLY) != 0; | |
503 m_editDescription.SetReadOnly(theApp.movieReadOnly); | |
504 OnBnClickedMovieRefresh(); | |
505 } | |
506 | |
507 void MovieOpen::OnBnClickedCheckPauseframe() | |
508 { | |
509 if (IsDlgButtonChecked(IDC_CHECK_PAUSEFRAME)) | |
510 { | |
511 char buffer [8]; | |
512 _itoa(movieInfo.header.length_frames, buffer, 10); | |
513 GetDlgItem(IDC_EDIT_PAUSEFRAME)->SetWindowText(buffer); | |
514 GetDlgItem(IDC_EDIT_PAUSEFRAME)->EnableWindow(TRUE); | |
515 } | |
516 else | |
517 { | |
518 GetDlgItem(IDC_EDIT_PAUSEFRAME)->SetWindowText(""); | |
519 GetDlgItem(IDC_EDIT_PAUSEFRAME)->EnableWindow(FALSE); | |
520 } | |
521 } | |
522 | |
523 void MovieOpen::OnBnClickedHideborder() | |
524 { | |
525 theApp.hideMovieBorder = IsDlgButtonChecked(IDC_CHECK_HIDEBORDER) != 0; | |
526 } | |
527 | |
528 void MovieOpen::OnEnChangeMovieFilename() | |
529 { | |
530 OnBnClickedMovieRefresh(); | |
531 } | |
532 |