static JSBool js_createInt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { js_setting_group_t *jsg = JS_GetPrivate(cx, obj); const char *id; const char *title; int def; int min; int max; int step; const char* unit; JSObject *func; JSBool persistent = JS_FALSE; if(!JS_ConvertArguments(cx, argc, argv, "ssiiiiso/b", &id, &title, &def, &min, &max, &step, &unit, &func, &persistent)){ return JS_FALSE; } js_setting_t *jss = jss_create(cx, obj, id, rval, func, jsg, persistent); if(jss == NULL) return JS_FALSE; if(persistent && jsg->jsg_kv_url) def = kv_url_opt_get_int(jsg->jsg_kv_url, KVSTORE_DOMAIN_PLUGIN, id, def); jss->jss_s = setting_create(SETTING_INT, jsg->jsg_root, SETTINGS_INITIAL_UPDATE | jsg->jsg_settings_flags, SETTING_TITLE_CSTR(title), SETTING_VALUE(def), SETTING_RANGE(min, max), SETTING_STEP(step), SETTING_UNIT_CSTR(unit), SETTING_COURIER(js_global_pc), SETTING_CALLBACK(js_store_update_int, jss), SETTING_HTSMSG_CUSTOM_SAVER(id, jsg->jsg_store, js_setting_group_save, jsg), NULL); jss->jss_cx = NULL; return JS_TRUE; }
int glw_ps3_start(void) { glw_ps3_t *gp = calloc(1, sizeof(glw_ps3_t)); glwps3 = gp; prop_t *root = gp->gr.gr_prop_ui = prop_create(prop_get_global(), "ui"); gp->gr.gr_prop_nav = nav_spawn(); prop_set_int(prop_create(root, "fullscreen"), 1); if(glw_ps3_init(gp)) return 1; gp->gr.gr_prop_maxtime = 10000; glw_root_t *gr = &gp->gr; if(glw_init2(gr, GLW_INIT_KEYBOARD_MODE | GLW_INIT_OVERSCAN | GLW_INIT_IN_FULLSCREEN)) return 1; settings_create_separator(glw_settings.gs_settings, _p("Dual-Shock Remote")); setting_create(SETTING_MULTIOPT, glw_settings.gs_settings, SETTINGS_INITIAL_UPDATE, SETTING_TITLE(_p("Seek using L2 and R2 button")), SETTING_OPTION("0", _p("Yes")), SETTING_OPTION("1", _p("Yes with Select button")), SETTING_OPTION("2", _p("No")), SETTING_COURIER(gr->gr_courier), SETTING_CALLBACK(set_seekmode, gp), SETTING_STORE("glw", "analogseekmode"), NULL); gr->gr_open_osk = osk_open; TRACE(TRACE_DEBUG, "GLW", "loading universe"); glw_load_universe(gr); glw_ps3_mainloop(gp); glw_unload_universe(gr); glw_reap(gr); glw_reap(gr); return 0; }
static JSBool js_createString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { js_setting_group_t *jsg = JS_GetPrivate(cx, obj); const char *id; const char *title; const char *def; JSObject *func; JSBool persistent = JS_FALSE; if(!JS_ConvertArguments(cx, argc, argv, "ssso/b", &id, &title, &def, &func, &persistent)) return JS_FALSE; js_setting_t *jss = jss_create(cx, obj, id, rval, func, jsg, persistent); if(jss == NULL) return JS_FALSE; rstr_t *r = NULL; if(persistent && jsg->jsg_kv_url) { r = kv_url_opt_get_rstr(jsg->jsg_kv_url, KVSTORE_DOMAIN_PLUGIN, id); if(r != NULL) def = rstr_get(r); } jss->jss_s = setting_create(SETTING_STRING, jsg->jsg_root, SETTINGS_INITIAL_UPDATE | jsg->jsg_settings_flags, SETTING_TITLE_CSTR(title), SETTING_COURIER(js_global_pc), SETTING_VALUE(def), SETTING_CALLBACK(js_store_update_string, jss), SETTING_HTSMSG_CUSTOM_SAVER(id, jsg->jsg_store, js_setting_group_save, jsg), NULL); jss->jss_cx = NULL; rstr_release(r); return JS_TRUE; }
static JSBool js_createMultiOpt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { js_setting_group_t *jsg = JS_GetPrivate(cx, obj); const char *id; const char *title; JSObject *func; JSObject *optlist; JSBool persistent = JS_FALSE; if(!JS_ConvertArguments(cx, argc, argv, "ssoo/b", &id, &title, &optlist, &func, &persistent)) return JS_FALSE; js_setting_t *jss = jss_create(cx, obj, id, rval, func, jsg, persistent); if(jss == NULL) return JS_FALSE; char **options = NULL; JSIdArray *opts, *opt; int i; char *defvalue = NULL; if((opts = JS_Enumerate(cx, optlist)) != NULL) { for(i = 0; i < opts->length; i++) { jsval name, value, id, title, def; if(!JS_IdToValue(cx, opts->vector[i], &name) || !JSVAL_IS_INT(name) || !JS_GetElement(cx, optlist, JSVAL_TO_INT(name), &value) || !JSVAL_IS_OBJECT(value) || (opt = JS_Enumerate(cx, JSVAL_TO_OBJECT(value))) == NULL) continue; if(opt->length >= 2 && JS_GetElement(cx, JSVAL_TO_OBJECT(value), 0, &id) && JS_GetElement(cx, JSVAL_TO_OBJECT(value), 1, &title)) { if(opt->length < 3 || !JS_GetElement(cx, JSVAL_TO_OBJECT(value), 2, &def)) def = JSVAL_FALSE; const char *k = JS_GetStringBytes(JS_ValueToString(cx, id)); if(def == JSVAL_TRUE) mystrset(&defvalue, k); strvec_addp(&options, k); strvec_addp(&options, JS_GetStringBytes(JS_ValueToString(cx, title))); } JS_DestroyIdArray(cx, opt); } JS_DestroyIdArray(cx, opts); } rstr_t *r = NULL; if(persistent && jsg->jsg_kv_url) r = kv_url_opt_get_rstr(jsg->jsg_kv_url, KVSTORE_DOMAIN_PLUGIN, id); jss->jss_s = setting_create(SETTING_MULTIOPT, jsg->jsg_root, SETTINGS_INITIAL_UPDATE | jsg->jsg_settings_flags, SETTING_TITLE_CSTR(title), SETTING_COURIER(js_global_pc), SETTING_CALLBACK(js_store_update_string, jss), SETTING_VALUE(r ? rstr_get(r) : defvalue), SETTING_OPTION_LIST(options), SETTING_HTSMSG_CUSTOM_SAVER(id, jsg->jsg_store, js_setting_group_save, jsg), NULL); strvec_free(options); rstr_release(r); jss->jss_cx = NULL; return JS_TRUE; }