Mercurial > msvpvf
view 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 |
line wrap: on
line source
#include "common.h" #include <iup.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> struct msvpvf { struct { Ihandle *main; /* main window */ Ihandle *program; /* listbox, which program (Vegas Pro/Movie Studio) */ Ihandle *ver; /* which version */ Ihandle *vbox; /* main window vbox */ Ihandle *ofilebtn; /* open file button */ Ihandle *sfilebtn; /* save file button */ Ihandle *info; /* opened file info */ Ihandle *about_button; /* about button */ Ihandle *about; /* about dialog */ Ihandle *about_text; /* about text */ } dlg; /* XXX this should be FILE *, so we can't randomly lose the file */ char *open_file; uint8_t version; enum types type; }; static int msvpvf_info_update(struct msvpvf *m) { uint8_t ver; enum types type; char *a; if (!m) return -1; { FILE *i; i = fopen(m->open_file, "rb"); if (!i) return 0; get_file_information(i, &ver, &type); fclose(i); } a = msvpvf_asprintf("File version: %s %d", type_names[type], (int)ver); if (!a) return 0; IupSetStrAttribute(m->dlg.info, "VALUE", a); free(a); return 1; } static int open_file(Ihandle *ih) { /* why is IupGetAttribute not void * */ struct msvpvf *m = (struct msvpvf *)IupGetAttribute(ih, "msvpvf"); const char *ofile; Ihandle *dlg = IupFileDlg(); IupSetAttribute(dlg, "DIALOGTYPE", "OPEN"); IupSetAttribute(dlg, "TITLE", "Vegas Pro / Movie Studio version spoofer"); IupSetAttributes(dlg, "FILTER = \"*.veg;*.vf\", FILTERINFO = \"Project files\""); IupPopup(dlg, IUP_CURRENT, IUP_CURRENT); if (IupGetInt(dlg, "STATUS") != -1) { m->open_file = str_dup(IupGetAttribute(dlg, "VALUE")); if (!msvpvf_info_update(m)) free(m->open_file); } IupDestroy(dlg); return 0; } static int save_file(Ihandle *ih) { struct msvpvf *m = (struct msvpvf *)IupGetAttribute(ih, "msvpvf"); Ihandle *dlg; if (!m->open_file) return 0; dlg = IupFileDlg(); IupSetAttribute(dlg, "DIALOGTYPE", "SAVE"); IupSetAttribute(dlg, "TITLE", "Vegas Pro / Movie Studio version spoofer"); /* FIXME add *.vf here */ IupSetAttributes(dlg, "FILTER = \"*.veg;*.vf\", FILTERINFO = \"Project files\""); IupSetAttribute(dlg, "EXTDEFAULT", (m->type == TYPES_VF ? "vf" : "veg")); IupPopup(dlg, IUP_CURRENT, IUP_CURRENT); if (IupGetInt(dlg, "STATUS") != -1) { FILE *i, *o; const char *sname; sname = IupGetAttribute(dlg, "VALUE"); i = fopen(m->open_file, "rb"); o = fopen(sname, "wb"); if (i && o && (copy_file(i, o) >= 0)) set_file_information(o, m->version, m->type); if (i) fclose(i); if (o) fclose(o); } IupDestroy(dlg); return 0; } static int type_cb(Ihandle *ih, char *text, int item, int state) { struct msvpvf *m = (struct msvpvf *)IupGetAttribute(ih, "msvpvf"); switch (item) { case 1: m->type = TYPES_VEG; break; case 2: m->type = TYPES_VF; break; default: abort(); } return 0; } static int ver_cb(Ihandle *ih) { struct msvpvf *m = (struct msvpvf *)IupGetAttribute(ih, "msvpvf"); /* epic */ m->version = IupGetIntId(ih, "SPINVALUE", 11); return 0; } static int about_cb(Ihandle *ih) { struct msvpvf *m = (struct msvpvf *)IupGetAttribute(ih, "msvpvf"); IupPopup(m->dlg.about, IUP_CURRENT, IUP_CURRENT); return 0; } int main(int argc, char *argv[]) { struct msvpvf msvpvf; static const char about_text[] = { #embed "../LICENSE" , 0 /* nul terminate */ }; IupOpen(&argc, &argv); IupSetLanguage("ENGLISH"); // FIXME: use UTF-8 filenames on Windows msvpvf.dlg.ofilebtn = IupButton("Open File", NULL); IupSetAttribute(msvpvf.dlg.ofilebtn, "msvpvf", (char *)&msvpvf); IupSetCallback(msvpvf.dlg.ofilebtn, "ACTION", open_file); msvpvf.dlg.info = IupText(NULL); IupSetAttribute(msvpvf.dlg.info, "READONLY", "YES"); IupSetAttribute(msvpvf.dlg.info, "VISIBLECOLUMNS", "15"); IupSetAttribute(msvpvf.dlg.info, "VALUE", "No file opened!"); IupSetAttribute(msvpvf.dlg.info, "ALIGNMENT", "ACENTER"); IupSetAttribute(msvpvf.dlg.info, "CANFOCUS", "NO"); IupSetAttribute(msvpvf.dlg.info, "BORDER", "NO"); msvpvf.dlg.program = IupList(NULL); IupSetAttribute(msvpvf.dlg.program, "msvpvf", (char *)&msvpvf); IupSetAttribute(msvpvf.dlg.program, "ALIGNMENT", "ACENTER"); IupSetAttribute(msvpvf.dlg.program, "1", "Vegas Pro"); IupSetAttribute(msvpvf.dlg.program, "2", "Movie Studio"); IupSetAttribute(msvpvf.dlg.program, "3", NULL); IupSetAttribute(msvpvf.dlg.program, "VALUE", "1"); IupSetAttribute(msvpvf.dlg.program, "EXPAND", "YES"); IupSetCallback(msvpvf.dlg.program, "ACTION", (Icallback)type_cb); msvpvf.type = TYPES_VEG; msvpvf.dlg.ver = IupText(NULL); IupSetAttribute(msvpvf.dlg.ver, "msvpvf", (char *)&msvpvf); IupSetAttribute(msvpvf.dlg.ver, "SPIN", "YES"); IupSetAttribute(msvpvf.dlg.ver, "SPINMAX", "21"); IupSetAttribute(msvpvf.dlg.ver, "SPINMIN", "8"); IupSetAttribute(msvpvf.dlg.ver, "SPINVALUE", "11"); /* default */ IupSetCallback(msvpvf.dlg.ver, "ACTION", ver_cb); msvpvf.version = 11; msvpvf.dlg.sfilebtn = IupButton("Save File", NULL); IupSetAttribute(msvpvf.dlg.sfilebtn, "msvpvf", (char *)&msvpvf); IupSetCallback(msvpvf.dlg.sfilebtn, "ACTION", save_file); msvpvf.dlg.about_button = IupButton("About msvpvf", NULL); IupSetAttribute(msvpvf.dlg.about_button, "msvpvf", (char *)&msvpvf); IupSetCallback(msvpvf.dlg.about_button, "ACTION", about_cb); msvpvf.dlg.vbox = IupVbox(msvpvf.dlg.ofilebtn, msvpvf.dlg.info, msvpvf.dlg.program, msvpvf.dlg.ver, msvpvf.dlg.sfilebtn, msvpvf.dlg.about_button, NULL); IupSetAttribute(msvpvf.dlg.vbox, "ALIGNMENT", "ACENTER"); IupSetAttribute(msvpvf.dlg.vbox, "GAP", "10"); IupSetAttribute(msvpvf.dlg.vbox, "MARGIN", "10x10"); IupSetAttribute(msvpvf.dlg.vbox, "EXPAND", "YES"); msvpvf.dlg.main = IupDialog(msvpvf.dlg.vbox); IupSetAttribute(msvpvf.dlg.main, "TITLE", "Vegas Pro / Movie Studio version spoofer"); //IupSetAttribute(msvpvf.dlg.main, "MINSIZE", "225x200"); msvpvf.dlg.about_text = IupText(NULL); IupSetAttribute(msvpvf.dlg.about_text, "READONLY", "YES"); IupSetAttribute(msvpvf.dlg.about_text, "VALUE", about_text); IupSetAttribute(msvpvf.dlg.about_text, "CANFOCUS", "NO"); IupSetAttribute(msvpvf.dlg.about_text, "BORDER", "NO"); IupSetAttribute(msvpvf.dlg.about_text, "MULTILINE", "YES"); IupSetAttribute(msvpvf.dlg.about_text, "EXPAND", "YES"); IupSetAttribute(msvpvf.dlg.about_text, "PADDING", "10x10"); msvpvf.dlg.about = IupDialog(msvpvf.dlg.about_text); IupSetAttribute(msvpvf.dlg.about, "TITLE", "About Vegas Pro / Movie Studio version spoofer"); IupSetAttribute(msvpvf.dlg.about, "MINSIZE", "500x300"); IupShowXY(msvpvf.dlg.main, IUP_CENTER, IUP_CENTER); IupMainLoop(); IupClose(); return 0; }