mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
New feature in midend.c which allows us to ask for the number of the
currently selected preset, if any. I've used this in the GTK front end to have the Type menu mark the currently selected menu item. (After considerable beating of GTK with sticks, I might add. Grr.) Currently the same UI feature is not yet supported on Windows or MacOS, but I hope to do those too at some point if it's feasible. [originally from svn r7980]
This commit is contained in:
29
midend.c
29
midend.c
@ -31,7 +31,7 @@ struct midend {
|
||||
const game *ourgame;
|
||||
|
||||
game_params **presets;
|
||||
char **preset_names;
|
||||
char **preset_names, **preset_encodings;
|
||||
int npresets, presetsize;
|
||||
|
||||
/*
|
||||
@ -115,6 +115,7 @@ midend *midend_new(frontend *fe, const game *ourgame,
|
||||
me->oldstate = NULL;
|
||||
me->presets = NULL;
|
||||
me->preset_names = NULL;
|
||||
me->preset_encodings = NULL;
|
||||
me->npresets = me->presetsize = 0;
|
||||
me->anim_time = me->anim_pos = 0.0F;
|
||||
me->flash_time = me->flash_pos = 0.0F;
|
||||
@ -186,9 +187,11 @@ void midend_free(midend *me)
|
||||
for (i = 0; i < me->npresets; i++) {
|
||||
sfree(me->presets[i]);
|
||||
sfree(me->preset_names[i]);
|
||||
sfree(me->preset_encodings[i]);
|
||||
}
|
||||
sfree(me->presets);
|
||||
sfree(me->preset_names);
|
||||
sfree(me->preset_encodings);
|
||||
}
|
||||
if (me->ui)
|
||||
me->ourgame->free_ui(me->ui);
|
||||
@ -836,10 +839,14 @@ int midend_num_presets(midend *me)
|
||||
game_params *);
|
||||
me->preset_names = sresize(me->preset_names, me->presetsize,
|
||||
char *);
|
||||
me->preset_encodings = sresize(me->preset_encodings,
|
||||
me->presetsize, char *);
|
||||
}
|
||||
|
||||
me->presets[me->npresets] = preset;
|
||||
me->preset_names[me->npresets] = name;
|
||||
me->preset_encodings[me->npresets] =
|
||||
me->ourgame->encode_params(preset, TRUE);;
|
||||
me->npresets++;
|
||||
}
|
||||
}
|
||||
@ -890,10 +897,14 @@ int midend_num_presets(midend *me)
|
||||
game_params *);
|
||||
me->preset_names = sresize(me->preset_names,
|
||||
me->presetsize, char *);
|
||||
me->preset_encodings = sresize(me->preset_encodings,
|
||||
me->presetsize, char *);
|
||||
}
|
||||
|
||||
me->presets[me->npresets] = preset;
|
||||
me->preset_names[me->npresets] = dupstr(name);
|
||||
me->preset_encodings[me->npresets] =
|
||||
me->ourgame->encode_params(preset, TRUE);
|
||||
me->npresets++;
|
||||
}
|
||||
}
|
||||
@ -910,6 +921,22 @@ void midend_fetch_preset(midend *me, int n,
|
||||
*params = me->presets[n];
|
||||
}
|
||||
|
||||
int midend_which_preset(midend *me)
|
||||
{
|
||||
char *encoding = me->ourgame->encode_params(me->params, TRUE);
|
||||
int i, ret;
|
||||
|
||||
ret = -1;
|
||||
for (i = 0; i < me->npresets; i++)
|
||||
if (!strcmp(encoding, me->preset_encodings[i])) {
|
||||
ret = i;
|
||||
break;
|
||||
}
|
||||
|
||||
sfree(encoding);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int midend_wants_statusbar(midend *me)
|
||||
{
|
||||
return me->ourgame->wants_statusbar;
|
||||
|
Reference in New Issue
Block a user