Mercurial > msvpvf
comparison src/gui.c @ 18:b5df3f47a30e
Use enums for `type`
| author | Paper <37962225+mrpapersonic@users.noreply.github.com> | 
|---|---|
| date | Thu, 07 Apr 2022 02:36:03 -0400 | 
| parents | 812089083c89 | 
| children | 6d14538a109e | 
   comparison
  equal
  deleted
  inserted
  replaced
| 17:812089083c89 | 18:b5df3f47a30e | 
|---|---|
| 1 /** | |
| 2 * msvpvf GUI for Windows | |
| 3 * Copyright (c) Paper 2022 | |
| 4 * | |
| 5 * View this file with 4-tab spacing; if you don't it will be a formatting nightmare. | |
| 6 * | |
| 7 * Permission is hereby granted, free of charge, to any person obtaining a copy | |
| 8 * of this software and associated documentation files (the "Software"), to deal | |
| 9 * in the Software without restriction, including without limitation the rights | |
| 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| 11 * copies of the Software, and to permit persons to whom the Software is | |
| 12 * furnished to do so, subject to the following conditions: | |
| 13 * | |
| 14 * The above copyright notice and this permission notice shall be included in all | |
| 15 * copies or substantial portions of the Software. | |
| 16 * | |
| 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
| 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
| 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
| 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
| 23 * SOFTWARE. | |
| 24 **/ | |
| 1 #include <stdio.h> | 25 #include <stdio.h> | 
| 2 #include <windows.h> | 26 #include <windows.h> | 
| 3 #include <stdint.h> | 27 #include <stdint.h> | 
| 4 #include <stdbool.h> | 28 #include <stdbool.h> | 
| 5 #include <commdlg.h> | 29 #include <commdlg.h> | 
| 7 #define COMBOBOX 1 | 31 #define COMBOBOX 1 | 
| 8 #define LISTBOX 2 | 32 #define LISTBOX 2 | 
| 9 #define SAVE_FILE_BUTTON 3 | 33 #define SAVE_FILE_BUTTON 3 | 
| 10 | 34 | 
| 11 HWND hWndListBox, hWndComboBox; | 35 HWND hWndListBox, hWndComboBox; | 
| 12 int16_t version = 11, type = 1; /* type: 0 is vf, 1 is veg */ | 36 int16_t version = 11; | 
| 13 char* file_name = " "; /* initialize as a space, a (windows) filename can't just be a space */ | 37 enum type { | 
| 38 vf, | |
| 39 veg | |
| 40 } | |
| 41 char* file_name = " "; | |
| 14 | 42 | 
| 15 void set_data(unsigned char magic[], uint16_t version, FILE* target) { | 43 void set_data(unsigned char magic[], uint16_t version, FILE* target) { | 
| 16 int i; | 44 int i; | 
| 17 fseek(target, 0x46, SEEK_SET); | 45 fseek(target, 0x46, SEEK_SET); | 
| 18 fputc(version, target); | 46 fputc(version, target); | 
| 21 fputc(magic[i], target); | 49 fputc(magic[i], target); | 
| 22 } | 50 } | 
| 23 } | 51 } | 
| 24 | 52 | 
| 25 int copy_file(char* source_file, char* target_file) { | 53 int copy_file(char* source_file, char* target_file) { | 
| 54 /* Copy a file */ | |
| 26 FILE *source, *target; | 55 FILE *source, *target; | 
| 27 | 56 | 
| 28 source = fopen(source_file, "rb"); | 57 source = fopen(source_file, "rb"); | 
| 29 if (source == NULL) return 1; | 58 if (source == NULL) return 1; | 
| 30 target = fopen(target_file, "wb"); | 59 target = fopen(target_file, "wb"); | 
| 81 return _strdup(filename); | 110 return _strdup(filename); | 
| 82 } | 111 } | 
| 83 | 112 | 
| 84 void save_file(HWND hWnd, char* input_file) { | 113 void save_file(HWND hWnd, char* input_file) { | 
| 85 if (strcmp(input_file, " ") == 0) { | 114 if (strcmp(input_file, " ") == 0) { | 
| 86 MessageBoxW(hWnd, L"Please open a file first!", L"Invalid input file!", MB_ICONEXCLAMATION); | 115 MessageBoxW(hWnd, | 
| 116 L"Please open a file first!", | |
| 117 L"Invalid input file!", | |
| 118 MB_ICONEXCLAMATION); | |
| 87 return; | 119 return; | 
| 88 } | 120 } | 
| 89 OPENFILENAME ofn; | 121 OPENFILENAME ofn; | 
| 90 char output_file[256]; | 122 char output_file[256]; | 
| 91 | 123 | 
| 105 if (output == NULL) { | 137 if (output == NULL) { | 
| 106 MessageBoxW(hWnd, L"Failed to save project file!", L"Saving project failed!", MB_ICONEXCLAMATION); | 138 MessageBoxW(hWnd, L"Failed to save project file!", L"Saving project failed!", MB_ICONEXCLAMATION); | 
| 107 return; | 139 return; | 
| 108 } | 140 } | 
| 109 | 141 | 
| 110 if (type == 1) { | 142 switch (type) { | 
| 111 unsigned char magic[] = {0xEF, 0x29, 0xC4, 0x46, 0x4A, 0x90, 0xD2, 0x11, 0x87, 0x22, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A}; | 143 case vf: | 
| 112 set_data(magic, version, output); | 144 unsigned char magic[] = {0xEF, 0x29, 0xC4, 0x46, 0x4A, 0x90, 0xD2, 0x11, | 
| 113 } else { | 145 0x87, 0x22, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A}; | 
| 114 unsigned char magic[] = {0xF6, 0x1B, 0x3C, 0x53, 0x35, 0xD6, 0xF3, 0x43, 0x8A, 0x90, 0x64, 0xB8, 0x87, 0x23, 0x1F, 0x7F}; | 146 set_data(magic, version, output); | 
| 115 set_data(magic, version, output); | 147 break; | 
| 148 case veg: | |
| 149 unsigned char magic[] = {0xF6, 0x1B, 0x3C, 0x53, 0x35, 0xD6, 0xF3, 0x43, | |
| 150 0x8A, 0x90, 0x64, 0xB8, 0x87, 0x23, 0x1F, 0x7F}; | |
| 151 set_data(magic, version, output); | |
| 152 break; | |
| 116 } | 153 } | 
| 117 | 154 | 
| 118 fclose(output); | 155 fclose(output); | 
| 119 } | 156 } | 
| 120 | 157 | 
| 121 void AddControls(HWND hWnd) { | 158 void AddControls(HWND hWnd) { | 
| 122 /* versions */ | 159 /* Versions */ | 
| 123 hWndComboBox = CreateWindowW(L"ComboBox", NULL, CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_VSCROLL, (int)((225 - 50)/2), 30, 50, 200, hWnd, (HMENU)COMBOBOX, NULL, NULL); | 160 hWndComboBox = CreateWindowW(L"ComboBox", NULL, | 
| 124 TCHAR versions[][10] = {TEXT("8"), TEXT("9"), TEXT("10"), TEXT("11"), TEXT("12"), TEXT("13"), TEXT("14"), TEXT("15"), TEXT("16"), TEXT("17"), TEXT("18"), TEXT("19")}; | 161 CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_VSCROLL, | 
| 162 (int)((225 - 50)/2), 30, 50, 200, | |
| 163 hWnd, (HMENU)COMBOBOX, NULL, NULL); /** | |
| 164 * I don't understand what half of | |
| 165 * these arguments are for, so chances | |
| 166 * are that you don't either. | |
| 167 **/ | |
| 168 TCHAR versions[][10] = {TEXT("8"), TEXT("9"), TEXT("10"), | |
| 169 TEXT("11"), TEXT("12"), TEXT("13"), | |
| 170 TEXT("14"), TEXT("15"), TEXT("16"), | |
| 171 TEXT("17"), TEXT("18"), TEXT("19")}; | |
| 125 | 172 | 
| 126 TCHAR A[16]; | 173 TCHAR A[16]; | 
| 127 | 174 | 
| 175 /** | |
| 176 * Here we can't just use a for loop | |
| 177 * and cast all of those to `TEXT()`. | |
| 178 * Why? I don't know. My brain is too | |
| 179 * small to figure it out. | |
| 180 **/ | |
| 128 memset(&A,0,sizeof(A)); | 181 memset(&A,0,sizeof(A)); | 
| 129 int i = 0; | 182 int i = 0; | 
| 130 for (i = 0; i <= 11; i++) { | 183 for (i = 0; i <= 11; i++) { | 
| 131 wcscpy_s((WCHAR*)A, sizeof(A)/sizeof(TCHAR), (WCHAR*)versions[i]); | 184 wcscpy_s((WCHAR*)A, sizeof(A)/sizeof(TCHAR), (WCHAR*)versions[i]); | 
| 132 SendMessage(hWndComboBox, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)A); | 185 SendMessage(hWndComboBox, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)A); | 
| 133 } | 186 } | 
| 134 SendMessage(hWndComboBox, CB_SETCURSEL, (WPARAM)3, (LPARAM)0); | 187 SendMessage(hWndComboBox, CB_SETCURSEL, (WPARAM)3, (LPARAM)0); | 
| 135 /* open file */ | 188 /* Open File */ | 
| 136 HWND open_button = CreateWindowW(L"Button", L"Open", WS_VISIBLE | WS_CHILD, (int)((225 - 50)/2), 5, 50, 20, hWnd, (HMENU)OPEN_FILE_BUTTON, NULL, NULL); | 189 HWND open_button = CreateWindowW(L"Button", L"Open", WS_VISIBLE | WS_CHILD, (int)((225 - 50)/2), 5, 50, 20, hWnd, (HMENU)OPEN_FILE_BUTTON, NULL, NULL); | 
| 137 /* type */ | 190 /* Type */ | 
| 138 TCHAR listbox_items[][13] = {TEXT("VEGAS Pro"), TEXT("Movie Studio")}; | 191 TCHAR listbox_items[][13] = {TEXT("VEGAS Pro"), TEXT("Movie Studio")}; | 
| 139 hWndListBox = CreateWindowW(L"Listbox", NULL, WS_VISIBLE | WS_CHILD | LBS_STANDARD | LBS_NOTIFY, (int)((225 - 100)/2), 55, 100, 40, hWnd, (HMENU)LISTBOX, NULL, NULL); | 192 hWndListBox = CreateWindowW(L"Listbox", NULL, WS_VISIBLE | WS_CHILD | LBS_STANDARD | LBS_NOTIFY, (int)((225 - 100)/2), 55, 100, 40, hWnd, (HMENU)LISTBOX, NULL, NULL); | 
| 140 for (i = 0; i < ARRAYSIZE(listbox_items); i++) { | 193 for (i = 0; i < ARRAYSIZE(listbox_items); i++) { | 
| 141 int pos = (int)SendMessage(hWndListBox, LB_ADDSTRING, i, (LPARAM) listbox_items[i]); | 194 int pos = (int)SendMessage(hWndListBox, LB_ADDSTRING, i, (LPARAM) listbox_items[i]); | 
| 142 SendMessage(hWndListBox, LB_SETITEMDATA, pos, (LPARAM) i); | 195 SendMessage(hWndListBox, LB_SETITEMDATA, pos, (LPARAM) i); | 
| 143 } | 196 } | 
| 144 SendMessage(hWndListBox, LB_SETCURSEL, (WPARAM)0, (LPARAM)0); | 197 SendMessage(hWndListBox, LB_SETCURSEL, (WPARAM)0, (LPARAM)0); | 
| 145 /* save file */ | 198 /* Save File */ | 
| 146 HWND save_button = CreateWindowW(L"Button", L"Save", WS_VISIBLE | WS_CHILD, (int)((225 - 50)/2), 90, 50, 20, hWnd, (HMENU)SAVE_FILE_BUTTON, NULL, NULL); | 199 HWND save_button = CreateWindowW(L"Button", L"Save", WS_VISIBLE | WS_CHILD, (int)((225 - 50)/2), 90, 50, 20, hWnd, (HMENU)SAVE_FILE_BUTTON, NULL, NULL); | 
| 147 if (open_button == NULL || save_button == NULL || hWndListBox == NULL || hWndComboBox == NULL) | 200 if (open_button == NULL || save_button == NULL || hWndListBox == NULL || hWndComboBox == NULL) | 
| 148 MessageBoxW(hWnd, L"how did you even trigger this", L"GUI could not be initialized!", MB_ICONEXCLAMATION); | 201 MessageBoxW(hWnd, L"how did you even trigger this", L"GUI could not be initialized!", MB_ICONEXCLAMATION); | 
| 149 } | 202 } | 
| 150 | 203 | 
