From e1a8267912a969ce8f6f5b38581a0db130107fff Mon Sep 17 00:00:00 2001 From: driAn Date: Wed, 14 May 2008 19:57:37 +0000 Subject: [PATCH] apply menu git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@1968 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/main.cpp | 13 +++++++------ source/src/menus.cpp | 26 ++++++++++++++++++++++++++ source/src/protos.h | 16 +++++++++++++++- 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/source/src/main.cpp b/source/src/main.cpp index bc8cd5c6..93bf857d 100644 --- a/source/src/main.cpp +++ b/source/src/main.cpp @@ -60,12 +60,12 @@ void fatal(const char *s, ...) // failure exit SDL_Surface *screen = NULL; static bool initing = false, restoredinits = false; -bool initwarning() +bool initwarning(const char *desc) { if(!initing) { - if(restoredinits) conoutf("\f3Please restart AssaultCube for this setting to take effect."); - else conoutf("\f3Please restart AssaultCube with the --init command-line option for this setting to take effect."); + if(!restoredinits) conoutf("\f3Please start AssaultCube with the --init command-line option to persist this setting"); + addchange(desc); } return !initing; } @@ -78,7 +78,7 @@ VAR(fsaa, -1, -1, 16); VAR(vsync, -1, -1, 1); #if defined(WIN32) || defined(__APPLE__) -VARF(fullscreen, 0, 0, 1, initwarning()); +VARF(fullscreen, 0, 0, 1, initwarning("fullscreen")); #else void setfullscreen(bool enable) { @@ -149,7 +149,7 @@ void screenres(int w, int h) scr_w = w; scr_h = h; #if defined(WIN32) || defined(__APPLE__) - initwarning(); + initwarning("screen resolution"); #else return; } @@ -522,7 +522,7 @@ int main(int argc, char **argv) initsound(); initlog("cfg"); - extern void *scoremenu, *teammenu, *ctfmenu, *servmenu, *kickmenu, *banmenu, *forceteammenu, *giveadminmenu, *docmenu; + extern void *scoremenu, *teammenu, *ctfmenu, *servmenu, *kickmenu, *banmenu, *forceteammenu, *giveadminmenu, *docmenu, *applymenu; scoremenu = addmenu("score", "frags\tdeath\tratio\tpj\tping\tcn\tname", false, renderscores, false, true); teammenu = addmenu("team score", "frags\tdeath\tratio\tpj\tping\tcn\tname", false, renderscores, false, true); ctfmenu = addmenu("ctf score", "flags\tfrags\tdeath\tratio\tpj\tping\tcn\tname", false, renderscores, false, true); @@ -532,6 +532,7 @@ int main(int argc, char **argv) forceteammenu = addmenu("force team", NULL, true, refreshsopmenu); giveadminmenu = addmenu("give admin", NULL, true, refreshsopmenu); docmenu = addmenu("reference", NULL, true, renderdocmenu); + applymenu = addmenu("apply", "apply changes now?", true, refreshapplymenu); persistidents = false; exec("config/scontext.cfg"); diff --git a/source/src/menus.cpp b/source/src/menus.cpp index 3e4d5f6b..cbf35ddc 100644 --- a/source/src/menus.cpp +++ b/source/src/menus.cpp @@ -744,3 +744,29 @@ void gmenu::renderbg(int x1, int y1, int x2, int y2, bool border) blendbox(x1, y1, x2, y2, border, tex->id); } +// apply changes menu + +void *applymenu = NULL; +static vector needsapply; +VARP(applydialog, 0, 1, 1); + +void addchange(const char *desc) +{ + if(!applydialog) return; + loopv(needsapply) if(!strcmp(needsapply[i], desc)) return; + needsapply.add(desc); + showmenu("apply"); +} + +void refreshapplymenu(void *menu, bool init) +{ + if(!init) return; + gmenu *m = (gmenu *) menu; + if(!m) return; + m->items.setsize(0); + loopv(needsapply) m->items.add(new mitemtext(m, newstring(needsapply[i]), NULL, NULL, NULL)); + m->items.add(new mitemtext(m, newstring(""), NULL, NULL, NULL)); + m->items.add(new mitemtext(m, newstring("Yes"), newstring("resetgl"), NULL, NULL)); + m->items.add(new mitemtext(m, newstring("No"), newstring("echo [..restart AssaultCube to apply the new settings]"), NULL, NULL)); + m->menusel = m->items.length()-2; // select OK +} \ No newline at end of file diff --git a/source/src/protos.h b/source/src/protos.h index 069c0434..b6663037 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -85,6 +85,8 @@ extern void rendermenumdl(); extern void menuset(void *m); extern void menuselect(void *menu, int sel); extern void showmenu(char *name); +extern void addchange(const char *desc); +extern void refreshapplymenu(void *menu, bool init); struct mitem { @@ -129,6 +131,18 @@ struct gmenu int anim, rotspeed, scale; mdirlist *dirlist; + gmenu(){}; + virtual ~gmenu() + { + DELETEA(name); + DELETEA(title); + DELETEA(header); + DELETEA(footer); + DELETEA(mdl); + DELETEP(dirlist); + items.deletecontentsp(); + } + void render(); void renderbg(int x1, int y1, int x2, int y2, bool border); void refresh(); @@ -346,7 +360,7 @@ extern int isoccluded(float vx, float vy, float cx, float cy, float csize); extern SDL_Surface *screen; extern void keyrepeat(bool on); -extern bool initwarning(); +extern bool initwarning(const char *desc); extern bool firstrun; // rendertext