Vima19 Recent Files 04/04/20
@@ -24,7 +24,9 @@ | ||
24 | 24 | #include "StdAfx.h" |
25 | 25 | #include "resource.h" |
26 | 26 | #include "GD19_App.h" |
27 | +#include "Shlobj.h" | |
27 | 28 | |
29 | + | |
28 | 30 | GD19_App::GD19_App(void) |
29 | 31 | { |
30 | 32 | Cl19_Ogre = nullptr; |
@@ -205,14 +207,18 @@ | ||
205 | 207 | |
206 | 208 | LoadString(hInst, IDS_APP_TITLE, Version, 255); |
207 | 209 | |
208 | - //char Udir[1024]; | |
209 | - //wchar_t* path = new wchar_t[128]; | |
210 | - //if (SUCCEEDED(SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &path)))//KF_FLAG_CREATE | |
211 | - //{ | |
212 | - // wsprintf(Udir, "%ls", path); | |
213 | - // CoTaskMemFree(path); | |
214 | - // strcpy(UserData_Folder, Udir); | |
215 | - //} | |
210 | + char Udir[1024]; | |
211 | + wchar_t* path = new wchar_t[128]; | |
212 | + if (SUCCEEDED(SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &path)))//KF_FLAG_CREATE | |
213 | + { | |
214 | + wsprintf(Udir, "%ls", path); | |
215 | + CoTaskMemFree(path); | |
216 | + strcpy(App->CL_Vm_FileIO->UserData_Folder, Udir); | |
217 | + } | |
218 | + else | |
219 | + { | |
220 | + App->Say("Can not acceses user folder"); | |
221 | + } | |
216 | 222 | |
217 | 223 | //char Udir2[1024]; |
218 | 224 | //wchar_t* path2 = new wchar_t[128]; |
@@ -116,6 +116,8 @@ | ||
116 | 116 | App->Cl_Bullet->Init_Bullet(); |
117 | 117 | App->Cl_Scene_Data->Init_Scene(); |
118 | 118 | |
119 | + App->CL_Vm_FileIO->Init_History(); | |
120 | + | |
119 | 121 | SetTimer(App->MainHwnd, 1, 1, NULL); |
120 | 122 | |
121 | 123 | HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_GD19_OSDN)); |
@@ -1,5 +1,6 @@ | ||
1 | 1 | #include "stdafx.h" |
2 | 2 | #include "GD19_App.h" |
3 | +#include "resource.h" | |
3 | 4 | #include <tchar.h> |
4 | 5 | #include <shellapi.h> |
5 | 6 | #include "Shlobj.h" |
@@ -343,3 +344,218 @@ | ||
343 | 344 | return 0; |
344 | 345 | } |
345 | 346 | |
347 | +// ************************************************************************* | |
348 | +// * Init_History() Terry Bernie * | |
349 | +// ************************************************************************* | |
350 | +void VM_FileIO::Init_History() | |
351 | +{ | |
352 | + char DirCheck[1024]; | |
353 | + strcpy(DirCheck, UserData_Folder); | |
354 | + strcat(DirCheck, "\\"); | |
355 | + strcat(DirCheck, "Vima19"); | |
356 | + | |
357 | + bool check = 0; | |
358 | + check = Search_For_Folder(DirCheck); | |
359 | + if (check == 0) | |
360 | + { | |
361 | + mPreviousFiles.resize(EQUITY_NUM_RECENT_FILES); | |
362 | + | |
363 | + CreateDirectory(DirCheck, NULL); | |
364 | + ResentHistory_Clear(); // Set all slots to Empty | |
365 | + Save_FileHistory(); | |
366 | + LoadHistory(); | |
367 | + } | |
368 | + else | |
369 | + { | |
370 | + LoadHistory(); | |
371 | + } | |
372 | +} | |
373 | +// ************************************************************************* | |
374 | +// * LoadHistory() Terry Bernie * | |
375 | +// ************************************************************************* | |
376 | +void VM_FileIO::LoadHistory() | |
377 | +{ | |
378 | + mPreviousFiles.resize(EQUITY_NUM_RECENT_FILES); | |
379 | + | |
380 | + char buffer[1024]; | |
381 | + char buf[1024]; | |
382 | + | |
383 | + strcpy(buf, UserData_Folder); | |
384 | + strcat(buf, "\\Vima19\\Vima19.ini"); | |
385 | + | |
386 | + ReadRecentFiles = fopen(buf, "rt"); | |
387 | + | |
388 | + if (!ReadRecentFiles) | |
389 | + { | |
390 | + App->Say("Cant Find Recent Files"); | |
391 | + return; | |
392 | + } | |
393 | + | |
394 | + // Read in File Names from RecentFiles.ini | |
395 | + for (unsigned int i = 0; i < EQUITY_NUM_RECENT_FILES; ++i) | |
396 | + { | |
397 | + memset(buffer, 0, 1024); | |
398 | + fgets(buffer, 1024, ReadRecentFiles); | |
399 | + | |
400 | + char Path[1024]; | |
401 | + strcpy(Path, buffer); | |
402 | + int Len = strlen(Path); | |
403 | + Path[Len - 1] = 0; | |
404 | + | |
405 | + mPreviousFiles[i] = std::string(Path); | |
406 | + } | |
407 | + | |
408 | + fclose(ReadRecentFiles); | |
409 | + | |
410 | + mHistoryMenu = CreateMenu(); | |
411 | + | |
412 | + // Check for empty slots and gray out | |
413 | + for (int i = EQUITY_NUM_RECENT_FILES - 1; i >= 0; --i) | |
414 | + { | |
415 | + char szText[1024]; | |
416 | + strcpy(szText, mPreviousFiles[i].c_str()); | |
417 | + | |
418 | + UINT iFlags = 0; | |
419 | + int Result = 0; | |
420 | + Result = strcmp("<empty>", szText); | |
421 | + if (Result == 0) | |
422 | + { | |
423 | + iFlags = MF_GRAYED | MF_DISABLED; | |
424 | + } | |
425 | + | |
426 | + AppendMenu(mHistoryMenu, MF_STRING | iFlags, EQUITY_RECENT_FILE_ID(i), szText); | |
427 | + } | |
428 | + | |
429 | + ModifyMenu(GetMenu(App->MainHwnd), ID_FILE_RECENTFILES, MF_BYCOMMAND | MF_POPUP, | |
430 | + (UINT_PTR)mHistoryMenu, "Recent files"); | |
431 | + return; | |
432 | +} | |
433 | + | |
434 | +// ************************************************************************* | |
435 | +// * Save_FileHistory Terry Bernie * | |
436 | +// ************************************************************************* | |
437 | +void VM_FileIO::Save_FileHistory() | |
438 | +{ | |
439 | + | |
440 | + // WriteRecentFiles = 0; | |
441 | + | |
442 | + char buf[1024]; | |
443 | + strcpy(buf, UserData_Folder); | |
444 | + strcat(buf, "\\Vima19\\Vima19.ini"); | |
445 | + | |
446 | + | |
447 | + WriteRecentFiles = fopen(buf, "wt"); | |
448 | + | |
449 | + if (!WriteRecentFiles) | |
450 | + { | |
451 | + App->Say("Why Cant Find Recent Files"); | |
452 | + return; | |
453 | + } | |
454 | + | |
455 | + // Save out to RecentFile.ini | |
456 | + for (unsigned int i = 0; i < EQUITY_NUM_RECENT_FILES; ++i) | |
457 | + { | |
458 | + char szName[1024]; | |
459 | + strcpy(szName, mPreviousFiles[i].c_str()); | |
460 | + | |
461 | + fprintf(WriteRecentFiles, "%s\n", szName); | |
462 | + } | |
463 | + | |
464 | + fclose(WriteRecentFiles); | |
465 | + return; | |
466 | +} | |
467 | +// ************************************************************************* | |
468 | +// * RecentFileHistory_Update Terry Bernie * | |
469 | +// ************************************************************************* | |
470 | +void VM_FileIO::RecentFileHistory_Update() | |
471 | +{ | |
472 | + if (!mHistoryMenu)return; | |
473 | + | |
474 | + std::string sz = std::string(App->CL_Vm_Model->Path_FileName); | |
475 | + if (mPreviousFiles[EQUITY_NUM_RECENT_FILES - 1] == sz)return; | |
476 | + | |
477 | + // add the new file to the list of recent files | |
478 | + for (unsigned int i = 0; i < EQUITY_NUM_RECENT_FILES - 1; ++i) | |
479 | + { | |
480 | + mPreviousFiles[i] = mPreviousFiles[i + 1]; | |
481 | + } | |
482 | + | |
483 | + mPreviousFiles[EQUITY_NUM_RECENT_FILES - 1] = sz; | |
484 | + | |
485 | + // Check for empty slots and gray out | |
486 | + for (int i = EQUITY_NUM_RECENT_FILES - 1; i >= 0; --i) | |
487 | + { | |
488 | + char szText[1024]; | |
489 | + strcpy(szText, mPreviousFiles[i].c_str()); | |
490 | + | |
491 | + UINT iFlags = 0; | |
492 | + int Result = 0; | |
493 | + Result = strcmp("<empty>", szText); | |
494 | + if (Result == 0) | |
495 | + { | |
496 | + iFlags = MF_GRAYED | MF_DISABLED; | |
497 | + } | |
498 | + | |
499 | + ModifyMenu(mHistoryMenu, EQUITY_RECENT_FILE_ID(i), | |
500 | + MF_STRING | MF_BYCOMMAND | iFlags, EQUITY_RECENT_FILE_ID(i), szText); | |
501 | + } | |
502 | + | |
503 | + // Save Changes | |
504 | + Save_FileHistory(); | |
505 | + | |
506 | + return; | |
507 | +} | |
508 | +// ************************************************************************* | |
509 | +// * ResentHistory_Clear Terry Bernie Hazel Nathan * | |
510 | +// ************************************************************************* | |
511 | +void VM_FileIO::ResentHistory_Clear() | |
512 | +{ | |
513 | + App->Cl_Dialogs->YesNo("Delete file history.", "Are you sure all File history will be Deleted Procede."); | |
514 | + if (App->Cl_Dialogs->Canceled == 1) | |
515 | + { | |
516 | + return; | |
517 | + } | |
518 | + | |
519 | + // Set all slots to <empty> | |
520 | + for (unsigned int i = 0; i < EQUITY_NUM_RECENT_FILES; ++i) | |
521 | + { | |
522 | + mPreviousFiles[i] = std::string("<empty>"); | |
523 | + } | |
524 | + | |
525 | + // Repopulate Menu system | |
526 | + for (int i = EQUITY_NUM_RECENT_FILES - 1; i >= 0; --i) | |
527 | + { | |
528 | + ModifyMenu(mHistoryMenu, EQUITY_RECENT_FILE_ID(i), | |
529 | + MF_STRING | MF_BYCOMMAND | MF_GRAYED | MF_DISABLED, EQUITY_RECENT_FILE_ID(i), "<empty>"); | |
530 | + } | |
531 | + | |
532 | + // Save Changes | |
533 | + Save_FileHistory(); | |
534 | +} | |
535 | + | |
536 | +// ************************************************************************* | |
537 | +// * Search_For_Folder Terry Bernie * | |
538 | +// ************************************************************************* | |
539 | +bool VM_FileIO::Search_For_Folder(char* FolderPath) | |
540 | +{ | |
541 | + char pSearchPath[1024]; | |
542 | + | |
543 | + WIN32_FIND_DATA FindFileData; | |
544 | + HANDLE hFind; | |
545 | + | |
546 | + strcpy(pSearchPath, FolderPath); | |
547 | + | |
548 | + hFind = FindFirstFile(pSearchPath, &FindFileData); | |
549 | + if (hFind == INVALID_HANDLE_VALUE) | |
550 | + { | |
551 | + return 0; | |
552 | + } | |
553 | + else | |
554 | + { | |
555 | + FindClose(hFind); | |
556 | + return 1; | |
557 | + } | |
558 | + | |
559 | + return 0; | |
560 | +} | |
561 | + |
@@ -19,6 +19,14 @@ | ||
19 | 19 | bool StartBrowser(char* szInitDir); |
20 | 20 | bool Create_Output_Folder(char* Extension); |
21 | 21 | |
22 | + void Init_History(); | |
23 | + void LoadHistory(); | |
24 | + void Save_FileHistory(); | |
25 | + void RecentFileHistory_Update(); | |
26 | + void ResentHistory_Clear(); | |
27 | + | |
28 | + bool Search_For_Folder(char* FolderPath); | |
29 | + | |
22 | 30 | bool Cannceled; |
23 | 31 | |
24 | 32 | char Scene_FileName[255]; |
@@ -37,10 +45,22 @@ | ||
37 | 45 | TCHAR szSelectedDir[500]; |
38 | 46 | char OutputFolder[1024]; |
39 | 47 | |
48 | + char UserData_Folder[1024]; | |
49 | + | |
50 | + std::vector<std::string> mPreviousFiles; | |
51 | + | |
40 | 52 | CHOOSECOLOR color; |
41 | 53 | OPENFILENAME ofn; |
42 | 54 | |
43 | 55 | protected: |
44 | 56 | static int __stdcall BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData); |
57 | + | |
58 | + FILE *WriteRecentFiles; | |
59 | + FILE *ReadRecentFiles; | |
60 | + | |
61 | + HMENU mHistoryMenu; | |
62 | + | |
63 | +#define EQUITY_NUM_RECENT_FILES 0x8 | |
64 | +#define EQUITY_RECENT_FILE_ID(_n_) (5000 + _n_) | |
45 | 65 | }; |
46 | 66 |
@@ -190,7 +190,7 @@ | ||
190 | 190 | int Len = strlen(JustName); |
191 | 191 | JustName[Len - 4] = 0; |
192 | 192 | |
193 | -// App->Cl_Importer->RecentFileHistory_Update(); | |
193 | + App->CL_Vm_FileIO->RecentFileHistory_Update(); | |
194 | 194 | } |
195 | 195 | |
196 | 196 | // ************************************************************************* |