Enlightenment CVS committal Author : turran Project : e17 Module : proto
Dir : e17/proto/etk/src/lib Modified Files: etk_argument.c etk_argument.h etk_main.c etk_main.h etk_menu_bar.c Log Message: Etk === + API changed: etk_init(int *argc, char *** argv). + etk_argument: now it modifies the parameters on the detected arguments Rest of etk apps, change etk_init(engine) with the new one. =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_argument.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- etk_argument.c 15 Mar 2006 12:38:41 -0000 1.6 +++ etk_argument.c 2 Aug 2006 05:53:59 -0000 1.7 @@ -44,19 +44,24 @@ * * int main(int argc, char **argv) * { - * etk_arguments_parse(args, argc, argv); + * etk_arguments_parse(args, &argc, argv); * * return 0; * } * @endcode */ -int etk_arguments_parse(Etk_Argument *args, int argc, char **argv) +int etk_arguments_parse(Etk_Argument *args, int *argc, char ***argv) { int i; + int ret_argc; + char **ret_argv; + int *delete; /* 1 delete, 0 keep */ Etk_Argument *arg; - + + if(!args || !argc || !argv) + return ETK_ARGUMENT_RETURN_OK_NONE_PARSED; /* no arguments */ - if(argc < 2) + if(*argc < 2) { /* check for required arguments */ i = 0; @@ -72,18 +77,22 @@ } return ETK_ARGUMENT_RETURN_OK_NONE_PARSED; } - - for(i = 1; i < argc; i++) + /* create the array */ + delete = calloc(*argc, sizeof(int)); + + /* arguments */ + for(i = 1; i < *argc; i++) { char *cur; - cur = argv[i]; + cur = (*argv)[i]; if(!cur) continue; /* min length is 2, anything less is invalid */ if(strlen(cur) < 2 && cur[0] == '-') { - printf(_("Argument %d '%s' is too short\n"), i, argv[i]); + printf(_("Argument %d '%s' is too short\n"), i, (*argv)[i]); + free(delete); return ETK_ARGUMENT_RETURN_MALFORMED; } @@ -99,14 +108,15 @@ { /* check to see if arg needs value */ if((arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED) && - i + 1 < argc) + i + 1 < *argc) { - char *val = argv[i + 1]; + char *val = (*argv)[i + 1]; /* if no value is present, report error */ if(val[0] == '-') { printf(_("Argument %d '%s' requires a value\n"), i, cur); + free(delete); return ETK_ARGUMENT_RETURN_REQUIRED_VALUE_NOT_FOUND; } @@ -114,20 +124,22 @@ arg->flags |= ETK_ARGUMENT_FLAG_PRIV_SET; _etk_argument_status = 1; ++i; + delete[i] = delete[i+1] = 1; } else if (arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED - && i + 1 >= argc) + && i + 1 >= *argc) { /* if no value is present, report error */ printf(_("Argument %d '%s' requires a value\n"), i, cur); + free(delete); return ETK_ARGUMENT_RETURN_REQUIRED_VALUE_NOT_FOUND; } else if(!(arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED)) { arg->flags |= ETK_ARGUMENT_FLAG_PRIV_SET; _etk_argument_status = 1; + delete[i] = 1; } - } ++arg; } @@ -161,12 +173,12 @@ { /* check to see if arg needs value */ if((arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED) && - ((i + 1 < argc) || (tmp != NULL))) + ((i + 1 < *argc) || (tmp != NULL))) { char *val; if(!tmp) - val = argv[i + 1]; + val = (*argv)[i + 1]; else val = tmp + 1; @@ -174,37 +186,45 @@ if(val[0] == '-') { printf(_("Argument %d '%s' requires a value\n"), i, cur); + free(delete); return ETK_ARGUMENT_RETURN_REQUIRED_VALUE_NOT_FOUND; } arg->data = evas_list_append(arg->data, val); arg->flags |= ETK_ARGUMENT_FLAG_PRIV_SET; - _etk_argument_status = 1; + _etk_argument_status = 1; + delete[i] = 1; if(!tmp) + { ++i; + delete[i+1] = 1; + } + } else if (arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED - && i + 1 >= argc) + && i + 1 >= *argc) { /* if no value is present, report error */ printf(_("Argument %d '%s' requires a value\n"), i, cur); + free(delete); return ETK_ARGUMENT_RETURN_REQUIRED_VALUE_NOT_FOUND; } else if(!(arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED)) { arg->flags |= ETK_ARGUMENT_FLAG_PRIV_SET; _etk_argument_status = 1; + delete[i] = 1; } } if(tmp) { free(cur); - cur = argv[i]; + cur = (*argv)[i]; } - - if(arg->flags & ETK_ARGUMENT_FLAG_MULTIVALUE && i + 1 < argc && + /* TODO test this on removing args! */ + if(arg->flags & ETK_ARGUMENT_FLAG_MULTIVALUE && i + 1 < *argc && arg->short_name != -1 && arg->flags & ETK_ARGUMENT_FLAG_PRIV_SET) { /* if we want multi-argument arguments like: @@ -213,14 +233,14 @@ */ char *extra; Evas_List *value = NULL; - int j = 1; + int j = i + 1; - extra = argv[i + j]; - while(i + j < argc) + extra = (*argv)[j]; + while(j < *argc) { if(extra[0] == '-') { - j = argc; + j = *argc; break; } @@ -244,7 +264,7 @@ } ++j; - extra = argv[i + j]; + extra = (*argv)[j]; } } @@ -261,12 +281,30 @@ if(!(arg->flags & ETK_ARGUMENT_FLAG_PRIV_SET) && arg->flags & ETK_ARGUMENT_FLAG_REQUIRED) { - printf(_("Argument %d '-%c | --%s' is required\n"), i, arg->short_name, arg->long_name); + printf(_("Argument %d '-%c | --%s' is required\n"), i, arg->short_name, arg->long_name); free(delete); return ETK_ARGUMENT_RETURN_REQUIRED_NOT_FOUND; } ++i; ++arg; } - + /* copy parameters */ + ret_argc = 0; + ret_argv = malloc(sizeof(char *) * (*argc)); + for(i = 0; i < *argc; i++) + { + if(!delete[i]) + { + ret_argv[ret_argc] = strdup((*argv)[i]); + ret_argc++; + /* TODO: delete this comments after correct behaviour */ + //printf("dont delete %s\n", (*argv)[i]); + } + /*else + printf("deleting %s\n", (*argv)[i]);*/ + } + free(delete); + *argv = ret_argv; + *argc = ret_argc; + /* call all the callbacks */ i = 0; arg = args; @@ -276,7 +314,6 @@ arg->func(args, i); ++i; ++arg; } - if(_etk_argument_status == 0) return ETK_ARGUMENT_RETURN_OK_NONE_PARSED; else =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_argument.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- etk_argument.h 18 May 2006 13:13:33 -0000 1.6 +++ etk_argument.h 2 Aug 2006 05:53:59 -0000 1.7 @@ -38,7 +38,7 @@ char *description; /* description of the argument for help */ }; -int etk_arguments_parse(Etk_Argument *args, int argc, char **argv); +int etk_arguments_parse(Etk_Argument *args, int *argc, char ***argv); void etk_argument_help_show(Etk_Argument *args); Evas_List *etk_argument_extra_find(const char *key); Etk_Bool etk_argument_is_set(Etk_Argument *args, const char *long_name, char short_name); =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_main.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- etk_main.c 30 Jul 2006 21:09:32 -0000 1.27 +++ etk_main.c 2 Aug 2006 05:53:59 -0000 1.28 @@ -2,12 +2,14 @@ #include "etk_main.h" #include <locale.h> #include <limits.h> +#include <string.h> #include <Ecore.h> #include <Ecore_Job.h> #include <Ecore_Evas.h> #include <Evas.h> #include <Edje.h> +#include "etk_argument.h" #include "etk_engine.h" #include "etk_type.h" #include "etk_signal.h" @@ -34,6 +36,16 @@ static Etk_Bool _etk_main_initialized = ETK_FALSE; static Ecore_Job *_etk_main_iterate_job = NULL; +/* configuration. FIXME should be on other subsystem? */ +static void _etk_main_options_setup(Etk_Argument *args, int index); + +Etk_Argument args[] = { + { "etk-engine", 0, NULL, _etk_main_options_setup, NULL, ETK_ARGUMENT_FLAG_OPTIONAL | ETK_ARGUMENT_FLAG_VALUE_REQUIRED, " " }, + { NULL, -1, NULL, NULL, NULL, ETK_ARGUMENT_FLAG_NONE, " " } +}; +char *_etk_engine_name = NULL; + + /************************** * * Implementation @@ -47,10 +59,22 @@ * @return Returns ETK_TRUE on success, ETK_FALSE on failure * @see etk_shutdown() */ -Etk_Bool etk_init(const char *engine_name) +Etk_Bool etk_init(int *argc, char ***argv) { + int ret; + if (_etk_main_initialized) return ETK_TRUE; + + ret = etk_arguments_parse(args, argc, argv); + if((ret != ETK_ARGUMENT_RETURN_OK_NONE_PARSED) && (ret != ETK_ARGUMENT_RETURN_OK)) + { + ETK_WARNING("Arguments parsing failed!"); + return ETK_FALSE; + } + /* TODO after the parsing, setup defaults if they arent set */ + if(!_etk_engine_name) + _etk_engine_name = strdup("ecore_evas_software_x11"); if (!evas_init()) { @@ -74,7 +98,7 @@ ETK_WARNING("Etk_Engine initialization failed!"); return ETK_FALSE; } - if (!etk_engine_load(engine_name)) + if (!etk_engine_load(_etk_engine_name)) { ETK_WARNING("Etk can not load the requested engine!"); return ETK_FALSE; @@ -94,6 +118,18 @@ _etk_main_initialized = ETK_TRUE; return ETK_TRUE; } +/** + * @brief Initializes Etk. This function needs to be called before any other call to an etk_* function. @n + * It initializes Evas, Ecore, Ecore_Evas, Ecore_X and Edje so you do not need to initialize them manually + * if you call etk_init(). + * @return Returns ETK_TRUE on success, ETK_FALSE on failure + * @see etk_shutdown() + */ +Etk_Bool etk_init_with_options(int *argc, char ***argv, const char *extra_options) +{ + /* TODO: this is just a stub */ + return ETK_TRUE; +} /** * @brief Shuts down Etk. @n @@ -263,4 +299,15 @@ _etk_main_size_allocate_recursive(ETK_WIDGET(l->data), ETK_FALSE); } +/* Setup parsed values. FIXME this should be on other subsystem (config?) */ +static void _etk_main_options_setup(Etk_Argument *args, int index) +{ + Evas_List *l; + + l = args[index].data; + if(!strcmp(args[index].long_name, "etk-engine")) + { + _etk_engine_name = l->data; + } +} /** @} */ =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_main.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- etk_main.h 27 Jul 2006 16:49:35 -0000 1.5 +++ etk_main.h 2 Aug 2006 05:53:59 -0000 1.6 @@ -11,7 +11,8 @@ * @{ */ -Etk_Bool etk_init(const char *engine_name); +Etk_Bool etk_init(int *argc, char ***argv); +Etk_Bool etk_init_with_options(int *argc, char ***argv, const char *extra_options); void etk_shutdown(); void etk_main(); =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_menu_bar.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- etk_menu_bar.c 31 Jul 2006 23:23:12 -0000 1.8 +++ etk_menu_bar.c 2 Aug 2006 05:53:59 -0000 1.9 @@ -1,8 +1,16 @@ /** @file etk_menu_bar.c */ + +/* TODO: + * remove Ecore_X from here + */ #include "etk_menu_bar.h" #include <stdlib.h> #include <Ecore.h> -//#include <Ecore_X.h> + +#if BUILD_ENGINE_EE_S_X11 +#include <Ecore_X.h> +#endif + #include "etk_menu.h" #include "etk_menu_item.h" #include "etk_toplevel_widget.h" @@ -168,7 +176,7 @@ */ static int _etk_menu_bar_mouse_move_cb(void *data, int type, void *event) { -#if 0 +#if BUILD_ENGINE_EE_S_X11 Etk_Menu_Bar *menu_bar; Ecore_X_Event_Mouse_Move *mouse_event; Etk_Toplevel_Widget *toplevel; @@ -197,9 +205,8 @@ break; } } - +#endif return 1; -#endif } /* Called when the item is selected */ ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs