New infrastructure feature. Games are now permitted to be

_conditionally_ able to format the current puzzle as text to be sent
to the clipboard. For instance, if a game were to support playing on
a square grid and on other kinds of grid such as hexagonal, then it
might reasonably feel that only the former could be sensibly
rendered in ASCII art; so it can now arrange for the "Copy" menu
item to be greyed out depending on the game_params.

To do this I've introduced a new backend function
(can_format_as_text_now()), and renamed the existing static backend
field "can_format_as_text" to "can_format_as_text_ever". The latter
will cause compile errors for anyone maintaining a third-party front
end; if any such person is reading this, I apologise to them for the
inconvenience, but I did do it deliberately so that they'd know to
update their front end.

As yet, no checked-in game actually uses this feature; all current
games can still either copy always or copy never.

[originally from svn r8161]
This commit is contained in:
Simon Tatham
2008-09-06 09:27:56 +00:00
parent c6b1d4472b
commit a7431c0b7c
38 changed files with 303 additions and 55 deletions

View File

@ -1198,9 +1198,18 @@ char *midend_set_config(midend *me, int which, config_item *cfg)
return NULL;
}
int midend_can_format_as_text_now(midend *me)
{
if (me->ourgame->can_format_as_text_ever)
return me->ourgame->can_format_as_text_now(me->params);
else
return FALSE;
}
char *midend_text_format(midend *me)
{
if (me->ourgame->can_format_as_text && me->statepos > 0)
if (me->ourgame->can_format_as_text_ever && me->statepos > 0 &&
me->ourgame->can_format_as_text_now(me->params))
return me->ourgame->text_format(me->states[me->statepos-1].state);
else
return NULL;