diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_gui_tid.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_gui_tid.java index 6470a2e0b..992c47026 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_gui_tid.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_gui_tid.java @@ -16,46 +16,59 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.addons.apps.cfgs.enums; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -public class Xoitm_gui_tid { // SERIALIZED - public static final int Tid__checkbox = 1, Tid__numeric = 2, Tid__select = 3, Tid__textbox = 4, Tid__memo = 5, Tid__io_file = 6, Tid__io_dir = 7, Tid__io_process = 8, Tid__button = 10, Tid__label = 11; - public static final String - Str__checkbox = "checkbox" - , Str__numeric = "numeric" - , Str__select = "select" - , Str__textbox = "textbox" - , Str__memo = "memo" - , Str__io_file = "io.file" - , Str__io_dir = "io.dir" - , Str__io_process = "io.process" - , Str__button = "button" - , Str__label = "label" - ; +public class Xoitm_gui_tid { + public Xoitm_gui_tid(int uid, String key) { + this.uid = uid; + this.key = key; + } + public int Uid() {return uid;} private final int uid; + public String Key() {return key;} private final String key; - public static int To_tid(String str) { - if (String_.Eq(str, Str__checkbox)) return Tid__checkbox; - else if (String_.Eq(str, Str__numeric)) return Tid__numeric; - else if (String_.Eq(str, Str__select)) return Tid__select; - else if (String_.Eq(str, Str__textbox)) return Tid__textbox; - else if (String_.Eq(str, Str__memo)) return Tid__memo; - else if (String_.Eq(str, Str__io_file)) return Tid__io_file; - else if (String_.Eq(str, Str__io_dir)) return Tid__io_dir; - else if (String_.Eq(str, Str__io_process)) return Tid__io_process; - else if (String_.Eq(str, Str__button)) return Tid__button; - else if (String_.Eq(str, Str__label)) return Tid__label; - else throw Err_.new_unhandled_default(str); + public static final int // SERIALIZED + Tid__bool = 0 + , Tid__str = 1 + , Tid__int = 2 + , Tid__memo = 3 + , Tid__list = 4 + , Tid__io_cmd = 5 + , Tid__io_file = 6 + , Tid__io_dir = 7 + , Tid__btn = 8 + , Tid__label = 9 + ; + private static final Hash_adp to_uid_hash = Hash_adp_.New(); + private static final Xoitm_gui_tid[] to_key_ary = new Xoitm_gui_tid[10]; + public static final Xoitm_gui_tid + Itm__bool = New(Tid__bool , "bool") + , Itm__str = New(Tid__str , "string") + , Itm__int = New(Tid__int , "int") + , Itm__memo = New(Tid__memo , "memo") + , Itm__list = New(Tid__list , "select") + , Itm__io_cmd = New(Tid__io_cmd , "io.cmd") + , Itm__io_file = New(Tid__io_file , "io.file") + , Itm__io_dir = New(Tid__io_dir , "io.dir") + , Itm__btn = New(Tid__btn , "btn") + , Itm__lbl = New(Tid__label , "label") + ; + private static Xoitm_gui_tid New(int uid, String key) { + Xoitm_gui_tid rv = new Xoitm_gui_tid(uid, key); + to_uid_hash.Add(key, rv); + to_key_ary[uid] = rv; + return rv; + } + public static int To_uid(String str) { + Xoitm_gui_tid rv = (Xoitm_gui_tid)to_uid_hash.Get_by_or_fail(str); + return rv.uid; + } + public static String To_key(int uid) { + return to_key_ary[uid].key; } public static String Infer_gui_type(String db_type) { - if (String_.Eq(db_type, "bool")) - return Xoitm_gui_tid.Str__checkbox; - else if (String_.Eq(db_type, "int")) - return Xoitm_gui_tid.Str__numeric; - else if (String_.Eq(db_type, "memo")) - return Xoitm_gui_tid.Str__memo; - else if (String_.Eq(db_type, "io.process")) - return Xoitm_gui_tid.Str__io_process; - else if (String_.Has_at_bgn(db_type, "list:")) - return Xoitm_gui_tid.Str__select; - else - return Xoitm_gui_tid.Str__textbox; + if (String_.Eq(db_type, "bool")) return Itm__bool.key; + else if (String_.Eq(db_type, "int")) return Itm__int.key; + else if (String_.Eq(db_type, "memo")) return Itm__memo.key; + else if (String_.Eq(db_type, "io.cmd")) return Itm__io_cmd.key; + else if (String_.Has_at_bgn(db_type, "list:")) return Itm__list.key; + else return Itm__str.key; } } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr__tst.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr__tst.java index 3b79a6f83..f66b796c3 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr__tst.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr__tst.java @@ -53,7 +53,7 @@ class Xocfg_cache_mgr__fxt { public Xocfg_cache_sub_mock Sub() {return sub;} private Xocfg_cache_sub_mock sub = new Xocfg_cache_sub_mock(); public void Init__db_add(String ctx, String key, Object val) { Xocfg_maint_svc.Create_grp(mgr.Db_app(), id++, "test_grp", "", "", ""); - Xocfg_maint_svc.Create_itm(mgr.Db_app(), id++, key, "test_grp", "", "", "wiki", "string", "dflt", "textbox", ""); + Xocfg_maint_svc.Create_itm(mgr.Db_app(), id++, key, "test_grp", "", "", "wiki", "string", "dflt", "string", ""); mgr.Db_usr().Set_str(ctx, key, Object_.Xto_str_strict_or_null(val)); } public void Init__sub(String ctx, String key, String evt) { diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java index f6afc7af3..7fbeb42ed 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java @@ -20,7 +20,7 @@ import gplx.langs.mustaches.*; import gplx.core.gfobjs.*; import gplx.langs.jsons.*; import gplx.xowa.addons.apps.cfgs.mgrs.types.*; public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { - private int gui_type; + private String gui_type; private boolean edited; private String data_type, gui_args, dflt, lang, name, ctx, val, date; private Xocfg_type_mgr type_mgr; @@ -35,7 +35,7 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { public String Help() {return help;} private String help; public int Sort() {return sort;} private final int sort; - public void Load_by_meta(int scope_id, String data_type, int gui_type, String gui_args, String dflt) { + public void Load_by_meta(int scope_id, String data_type, String gui_type, String gui_args, String dflt) { this.data_type = data_type; this.gui_type = gui_type; this.gui_args = gui_args; @@ -69,6 +69,7 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { rv.Add_str("ctx", ctx); rv.Add_str("val", val); rv.Add_str("date", date); + rv.Add_str("gui", gui_type); Bry_bfr bfr = Bry_bfr_.New(); To_html(bfr, type_mgr); rv.Add_str("html", bfr.To_str_and_clear()); @@ -88,6 +89,7 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { else if (String_.Eq(k, "ctx")) bfr.Add_str_u8(ctx); else if (String_.Eq(k, "val")) bfr.Add_str_u8(val); else if (String_.Eq(k, "date")) bfr.Add_str_u8(date); + else if (String_.Eq(k, "gui")) bfr.Add_str_u8(gui_type); else if (String_.Eq(k, "html")) To_html(bfr.Bfr(), type_mgr); return true; } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java index dc6666bc3..856980aef 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java @@ -19,42 +19,43 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gp import gplx.xowa.addons.apps.cfgs.enums.*; import gplx.xowa.addons.apps.cfgs.mgrs.types.*; public class Xoedit_itm_html { - public void Build_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr, String key, String name, String data_type, int gui_type, String gui_args, String data) { - switch (gui_type) { - case Xoitm_gui_tid.Tid__checkbox: - bfr.Add_str_u8_fmt("", key, String_.Eq(data, "y") ? " checked=\"checked\"" : ""); + public void Build_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr, String key, String name, String data_type, String gui_type_key, String gui_args, String data) { + switch (Xoitm_gui_tid.To_uid(gui_type_key)) { + case Xoitm_gui_tid.Tid__bool: + bfr.Add_str_u8_fmt("", gui_type_key, key, String_.Eq(data, "y") ? " checked=\"checked\"" : ""); break; - case Xoitm_gui_tid.Tid__numeric: - bfr.Add_str_u8_fmt("", key, data); + case Xoitm_gui_tid.Tid__int: + bfr.Add_str_u8_fmt("", gui_type_key, key, data); break; - case Xoitm_gui_tid.Tid__textbox: - bfr.Add_str_u8_fmt("", key, data); + case Xoitm_gui_tid.Tid__str: + bfr.Add_str_u8_fmt("", gui_type_key, key, data); break; case Xoitm_gui_tid.Tid__memo: - bfr.Add_str_u8_fmt("", key, String_.Replace(data, "<", "<")); + bfr.Add_str_u8_fmt("", gui_type_key, key, String_.Replace(data, "<", "<")); break; - case Xoitm_gui_tid.Tid__select: + case Xoitm_gui_tid.Tid__list: Keyval[] kvs_ary = type_mgr.Lists__get(data_type); int len = kvs_ary.length; - bfr.Add_str_u8_fmt("\n", gui_type_key, key, len); for (int i = 0; i < len; i++) { Keyval kv = kvs_ary[i]; String kv_key = kv.Key(); String kv_val = kv.Val_to_str_or_null(); - bfr.Add_str_u8_fmt("", kv_key, kv_val, String_.Eq(data, kv_key) ? " selected=\"selected\"" : ""); + bfr.Add_str_u8_fmt("\n", kv_key, kv_val, String_.Eq(data, kv_key) ? " selected=\"selected\"" : ""); } - bfr.Add_str_u8_fmt(""); + bfr.Add_str_u8_fmt("\n"); break; - case Xoitm_gui_tid.Tid__io_process: + case Xoitm_gui_tid.Tid__io_cmd: String[] fields = String_.Split(data, "\n"); - String exe = fields.length > 1 ? fields[0] : "exe"; - String arg = fields.length > 2 ? fields[1] : "args"; + String exe = fields.length > 0 && !String_.Eq(fields[0], "") ? fields[0] : ""; + String arg = fields.length > 1 ? fields[1] : ""; bfr.Add_str_u8_fmt - ( "\n" - + "
\n" - , key + "-exe", exe); + ( "\n" + + "
\n" + , gui_type_key, key, exe); bfr.Add_str_u8_fmt - ( "\n", key + "-arg", arg); + ( "\n" + , gui_type_key, key, arg); break; default: break; diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java index 60fe58fb5..811b18412 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java @@ -165,7 +165,8 @@ public class Xocfg_edit_loader { String key = rdr.Read_str("itm_key"); Xoedit_itm edit_itm = (Xoedit_itm)itm_list.Get_by_or_fail(key); String dflt = dflt_mgr.Get_or(key, rdr.Read_str("itm_dflt")); - edit_itm.Load_by_meta(rdr.Read_int("itm_scope_id"), rdr.Read_str("itm_data_type"), rdr.Read_int("itm_gui_type"), rdr.Read_str("itm_gui_args"), dflt); + int gui_type = rdr.Read_int("itm_gui_type"); + edit_itm.Load_by_meta(rdr.Read_int("itm_scope_id"), rdr.Read_str("itm_data_type"), gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_tid.To_key(gui_type), rdr.Read_str("itm_gui_args"), dflt); } } } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java index 1891b37f3..cb6d3d444 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java @@ -65,7 +65,7 @@ public class Xocfg_maint_svc { // insert itm_meta int grp_id = db_app.Tbl__grp().Select_id_by_key_or_fail(owner); int scope_id = Xoitm_scope_tid.To_int(scope); - int gui_type_id = Xoitm_gui_tid.To_tid(gui_type); + int gui_type_id = Xoitm_gui_tid.To_uid(gui_type); db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type, gui_type_id, gui_args, key, dflt); // insert grp_map