ecore_getopt: common callbacks go in.

ecore_evas_list_engines and geometry_parse, they're used in almost all
applications using ecore_getopt, let's avoid replicating code.



SVN revision: 38247
This commit is contained in:
Gustavo Sverzut Barbieri 2008-12-20 14:29:45 +00:00
parent 089b1c7925
commit 1fc336c2ee
2 changed files with 67 additions and 0 deletions

View File

@ -380,6 +380,12 @@ extern "C" {
EAPI Eina_List *ecore_getopt_list_free(Eina_List *list);
/* helper functions to be used with ECORE_GETOPT_CALLBACK_*() */
EAPI unsigned char ecore_getopt_callback_ecore_evas_list_engines(const Ecore_Getopt *parser, const Ecore_Getopt_Desc *desc, const char *str, void *data, Ecore_Getopt_Value *storage);
EAPI unsigned char ecore_getopt_callback_geometry_parse(const Ecore_Getopt *parser, const Ecore_Getopt_Desc *desc, const char *str, void *data, Ecore_Getopt_Value *storage);
#ifdef __cplusplus
}
#endif

View File

@ -1639,3 +1639,64 @@ ecore_getopt_list_free(Eina_List *list)
}
return NULL;
}
/**
* Helper ecore_getopt callback to list available Ecore_Evas engines.
*
* This will list all available engines except buffer, this is useful
* for applications to let user choose how they should create windows
* with ecore_evas_new().
*
* @c callback_data value is used as @c FILE* and says where to output
* messages, by default it is @c stdout. You can specify this value
* with ECORE_GETOPT_CALLBACK_FULL() or ECORE_GETOPT_CALLBACK_ARGS().
*
* If there is a boolean storage provided, then it is marked with 1
* when this option is executed.
*/
unsigned char
ecore_getopt_callback_ecore_evas_list_engines(const Ecore_Getopt *parser, const Ecore_Getopt_Desc *desc, const char *str, void *data, Ecore_Getopt_Value *storage)
{
Eina_List *lst, *n;
const char *engine;
FILE *fp = data;
if (!fp)
fp = stdout;
lst = ecore_evas_engines_get();
fputs("supported engines:\n", fp);
EINA_LIST_FOREACH(lst, n, engine)
if (strcmp(engine, "buffer") != 0)
fprintf(fp, "\t%s\n", engine);
ecore_evas_engines_free(lst);
if (storage->boolp)
*storage->boolp = 1;
return 1;
}
/**
* Helper ecore_getopt callback to parse geometry (x:y:w:h).
*
* Storage must be a pointer to @c Eina_Rectangle and will be used to
* store the four values passed in the given string.
*
* @c callback_data value is ignored, you can safely use @c NULL.
*/
unsigned char
ecore_getopt_callback_geometry_parse(const Ecore_Getopt *parser, const Ecore_Getopt_Desc *desc, const char *str, void *data, Ecore_Getopt_Value *storage)
{
Eina_Rectangle *v = (Eina_Rectangle *)storage->ptrp;
if (sscanf(str, "%d:%d:%d:%d", &v->x, &v->y, &v->w, &v->h) != 4)
{
fprintf(stderr, "ERROR: incorrect geometry value '%s'\n", str);
return 0;
}
return 1;
}