Mercurial > msvpvf
comparison src/iup.c @ 88:af4ed765c1ac
*: add IUP GUI
a lot simpler than win32, but I assume there's more going on in
the background that I don't know about :)
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 14 Jul 2025 02:39:24 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 87:2e819b84d7c0 | 88:af4ed765c1ac |
|---|---|
| 1 #include "common.h" | |
| 2 | |
| 3 #include <iup.h> | |
| 4 #include <stddef.h> | |
| 5 #include <stdio.h> | |
| 6 #include <stdlib.h> | |
| 7 | |
| 8 struct msvpvf { | |
| 9 struct { | |
| 10 Ihandle *main; /* main window */ | |
| 11 Ihandle *program; /* listbox, which program (Vegas Pro/Movie Studio) */ | |
| 12 Ihandle *ver; /* which version */ | |
| 13 Ihandle *vbox; /* main window vbox */ | |
| 14 Ihandle *ofilebtn; /* open file button */ | |
| 15 Ihandle *sfilebtn; /* save file button */ | |
| 16 Ihandle *info; /* opened file info */ | |
| 17 Ihandle *about_button; /* about button */ | |
| 18 Ihandle *about; /* about dialog */ | |
| 19 Ihandle *about_text; /* about text */ | |
| 20 } dlg; | |
| 21 | |
| 22 /* XXX this should be FILE *, so we can't randomly lose the file */ | |
| 23 char *open_file; | |
| 24 | |
| 25 uint8_t version; | |
| 26 enum types type; | |
| 27 }; | |
| 28 | |
| 29 static int msvpvf_info_update(struct msvpvf *m) | |
| 30 { | |
| 31 uint8_t ver; | |
| 32 enum types type; | |
| 33 char *a; | |
| 34 | |
| 35 if (!m) return -1; | |
| 36 | |
| 37 { | |
| 38 FILE *i; | |
| 39 | |
| 40 i = fopen(m->open_file, "rb"); | |
| 41 if (!i) return 0; | |
| 42 | |
| 43 get_file_information(i, &ver, &type); | |
| 44 fclose(i); | |
| 45 } | |
| 46 | |
| 47 a = msvpvf_asprintf("File version: %s %d", type_names[type], (int)ver); | |
| 48 if (!a) return 0; | |
| 49 IupSetStrAttribute(m->dlg.info, "VALUE", a); | |
| 50 free(a); | |
| 51 | |
| 52 return 1; | |
| 53 } | |
| 54 | |
| 55 static int open_file(Ihandle *ih) | |
| 56 { | |
| 57 /* why is IupGetAttribute not void * */ | |
| 58 struct msvpvf *m = (struct msvpvf *)IupGetAttribute(ih, "msvpvf"); | |
| 59 const char *ofile; | |
| 60 Ihandle *dlg = IupFileDlg(); | |
| 61 | |
| 62 IupSetAttribute(dlg, "DIALOGTYPE", "OPEN"); | |
| 63 IupSetAttribute(dlg, "TITLE", "Vegas Pro / Movie Studio version spoofer"); | |
| 64 IupSetAttributes(dlg, "FILTER = \"*.veg;*.vf\", FILTERINFO = \"Project files\""); | |
| 65 | |
| 66 IupPopup(dlg, IUP_CURRENT, IUP_CURRENT); | |
| 67 | |
| 68 if (IupGetInt(dlg, "STATUS") != -1) { | |
| 69 m->open_file = str_dup(IupGetAttribute(dlg, "VALUE")); | |
| 70 if (!msvpvf_info_update(m)) | |
| 71 free(m->open_file); | |
| 72 } | |
| 73 | |
| 74 IupDestroy(dlg); | |
| 75 return 0; | |
| 76 } | |
| 77 | |
| 78 static int save_file(Ihandle *ih) | |
| 79 { | |
| 80 struct msvpvf *m = (struct msvpvf *)IupGetAttribute(ih, "msvpvf"); | |
| 81 Ihandle *dlg; | |
| 82 | |
| 83 if (!m->open_file) | |
| 84 return 0; | |
| 85 | |
| 86 dlg = IupFileDlg(); | |
| 87 | |
| 88 IupSetAttribute(dlg, "DIALOGTYPE", "SAVE"); | |
| 89 IupSetAttribute(dlg, "TITLE", "Vegas Pro / Movie Studio version spoofer"); | |
| 90 /* FIXME add *.vf here */ | |
| 91 IupSetAttributes(dlg, "FILTER = \"*.veg;*.vf\", FILTERINFO = \"Project files\""); | |
| 92 IupSetAttribute(dlg, "EXTDEFAULT", (m->type == TYPES_VF ? "vf" : "veg")); | |
| 93 | |
| 94 IupPopup(dlg, IUP_CURRENT, IUP_CURRENT); | |
| 95 | |
| 96 if (IupGetInt(dlg, "STATUS") != -1) { | |
| 97 FILE *i, *o; | |
| 98 const char *sname; | |
| 99 | |
| 100 sname = IupGetAttribute(dlg, "VALUE"); | |
| 101 | |
| 102 i = fopen(m->open_file, "rb"); | |
| 103 o = fopen(sname, "wb"); | |
| 104 | |
| 105 if (i && o && (copy_file(i, o) >= 0)) | |
| 106 set_file_information(o, m->version, m->type); | |
| 107 | |
| 108 if (i) fclose(i); | |
| 109 if (o) fclose(o); | |
| 110 } | |
| 111 | |
| 112 IupDestroy(dlg); | |
| 113 return 0; | |
| 114 } | |
| 115 | |
| 116 static int type_cb(Ihandle *ih, char *text, int item, int state) | |
| 117 { | |
| 118 struct msvpvf *m = (struct msvpvf *)IupGetAttribute(ih, "msvpvf"); | |
| 119 | |
| 120 switch (item) { | |
| 121 case 1: m->type = TYPES_VEG; break; | |
| 122 case 2: m->type = TYPES_VF; break; | |
| 123 default: abort(); | |
| 124 } | |
| 125 | |
| 126 return 0; | |
| 127 } | |
| 128 | |
| 129 static int ver_cb(Ihandle *ih) | |
| 130 { | |
| 131 struct msvpvf *m = (struct msvpvf *)IupGetAttribute(ih, "msvpvf"); | |
| 132 | |
| 133 /* epic */ | |
| 134 m->version = IupGetIntId(ih, "SPINVALUE", 11); | |
| 135 | |
| 136 return 0; | |
| 137 } | |
| 138 | |
| 139 static int about_cb(Ihandle *ih) | |
| 140 { | |
| 141 struct msvpvf *m = (struct msvpvf *)IupGetAttribute(ih, "msvpvf"); | |
| 142 | |
| 143 IupPopup(m->dlg.about, IUP_CURRENT, IUP_CURRENT); | |
| 144 | |
| 145 return 0; | |
| 146 } | |
| 147 | |
| 148 int main(int argc, char *argv[]) | |
| 149 { | |
| 150 struct msvpvf msvpvf; | |
| 151 static const char about_text[] = { | |
| 152 #embed "../LICENSE" | |
| 153 , 0 /* nul terminate */ | |
| 154 }; | |
| 155 | |
| 156 IupOpen(&argc, &argv); | |
| 157 IupSetLanguage("ENGLISH"); | |
| 158 | |
| 159 // FIXME: use UTF-8 filenames on Windows | |
| 160 | |
| 161 msvpvf.dlg.ofilebtn = IupButton("Open File", NULL); | |
| 162 IupSetAttribute(msvpvf.dlg.ofilebtn, "msvpvf", (char *)&msvpvf); | |
| 163 IupSetCallback(msvpvf.dlg.ofilebtn, "ACTION", open_file); | |
| 164 | |
| 165 msvpvf.dlg.info = IupText(NULL); | |
| 166 IupSetAttribute(msvpvf.dlg.info, "READONLY", "YES"); | |
| 167 IupSetAttribute(msvpvf.dlg.info, "VISIBLECOLUMNS", "15"); | |
| 168 IupSetAttribute(msvpvf.dlg.info, "VALUE", "No file opened!"); | |
| 169 IupSetAttribute(msvpvf.dlg.info, "ALIGNMENT", "ACENTER"); | |
| 170 IupSetAttribute(msvpvf.dlg.info, "CANFOCUS", "NO"); | |
| 171 IupSetAttribute(msvpvf.dlg.info, "BORDER", "NO"); | |
| 172 | |
| 173 msvpvf.dlg.program = IupList(NULL); | |
| 174 IupSetAttribute(msvpvf.dlg.program, "msvpvf", (char *)&msvpvf); | |
| 175 IupSetAttribute(msvpvf.dlg.program, "ALIGNMENT", "ACENTER"); | |
| 176 IupSetAttribute(msvpvf.dlg.program, "1", "Vegas Pro"); | |
| 177 IupSetAttribute(msvpvf.dlg.program, "2", "Movie Studio"); | |
| 178 IupSetAttribute(msvpvf.dlg.program, "3", NULL); | |
| 179 IupSetAttribute(msvpvf.dlg.program, "VALUE", "1"); | |
| 180 IupSetAttribute(msvpvf.dlg.program, "EXPAND", "YES"); | |
| 181 IupSetCallback(msvpvf.dlg.program, "ACTION", (Icallback)type_cb); | |
| 182 msvpvf.type = TYPES_VEG; | |
| 183 | |
| 184 msvpvf.dlg.ver = IupText(NULL); | |
| 185 IupSetAttribute(msvpvf.dlg.ver, "msvpvf", (char *)&msvpvf); | |
| 186 IupSetAttribute(msvpvf.dlg.ver, "SPIN", "YES"); | |
| 187 IupSetAttribute(msvpvf.dlg.ver, "SPINMAX", "21"); | |
| 188 IupSetAttribute(msvpvf.dlg.ver, "SPINMIN", "8"); | |
| 189 IupSetAttribute(msvpvf.dlg.ver, "SPINVALUE", "11"); /* default */ | |
| 190 IupSetCallback(msvpvf.dlg.ver, "ACTION", ver_cb); | |
| 191 msvpvf.version = 11; | |
| 192 | |
| 193 msvpvf.dlg.sfilebtn = IupButton("Save File", NULL); | |
| 194 IupSetAttribute(msvpvf.dlg.sfilebtn, "msvpvf", (char *)&msvpvf); | |
| 195 IupSetCallback(msvpvf.dlg.sfilebtn, "ACTION", save_file); | |
| 196 | |
| 197 msvpvf.dlg.about_button = IupButton("About msvpvf", NULL); | |
| 198 IupSetAttribute(msvpvf.dlg.about_button, "msvpvf", (char *)&msvpvf); | |
| 199 IupSetCallback(msvpvf.dlg.about_button, "ACTION", about_cb); | |
| 200 | |
| 201 msvpvf.dlg.vbox = IupVbox(msvpvf.dlg.ofilebtn, msvpvf.dlg.info, msvpvf.dlg.program, msvpvf.dlg.ver, msvpvf.dlg.sfilebtn, msvpvf.dlg.about_button, NULL); | |
| 202 IupSetAttribute(msvpvf.dlg.vbox, "ALIGNMENT", "ACENTER"); | |
| 203 IupSetAttribute(msvpvf.dlg.vbox, "GAP", "10"); | |
| 204 IupSetAttribute(msvpvf.dlg.vbox, "MARGIN", "10x10"); | |
| 205 IupSetAttribute(msvpvf.dlg.vbox, "EXPAND", "YES"); | |
| 206 | |
| 207 msvpvf.dlg.main = IupDialog(msvpvf.dlg.vbox); | |
| 208 IupSetAttribute(msvpvf.dlg.main, "TITLE", "Vegas Pro / Movie Studio version spoofer"); | |
| 209 //IupSetAttribute(msvpvf.dlg.main, "MINSIZE", "225x200"); | |
| 210 | |
| 211 msvpvf.dlg.about_text = IupText(NULL); | |
| 212 IupSetAttribute(msvpvf.dlg.about_text, "READONLY", "YES"); | |
| 213 IupSetAttribute(msvpvf.dlg.about_text, "VALUE", about_text); | |
| 214 IupSetAttribute(msvpvf.dlg.about_text, "CANFOCUS", "NO"); | |
| 215 IupSetAttribute(msvpvf.dlg.about_text, "BORDER", "NO"); | |
| 216 IupSetAttribute(msvpvf.dlg.about_text, "MULTILINE", "YES"); | |
| 217 IupSetAttribute(msvpvf.dlg.about_text, "EXPAND", "YES"); | |
| 218 IupSetAttribute(msvpvf.dlg.about_text, "PADDING", "10x10"); | |
| 219 | |
| 220 msvpvf.dlg.about = IupDialog(msvpvf.dlg.about_text); | |
| 221 IupSetAttribute(msvpvf.dlg.about, "TITLE", "About Vegas Pro / Movie Studio version spoofer"); | |
| 222 IupSetAttribute(msvpvf.dlg.about, "MINSIZE", "500x300"); | |
| 223 | |
| 224 IupShowXY(msvpvf.dlg.main, IUP_CENTER, IUP_CENTER); | |
| 225 | |
| 226 IupMainLoop(); | |
| 227 | |
| 228 IupClose(); | |
| 229 | |
| 230 return 0; | |
| 231 } |
