diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java index 870dd6df3..ef6209a62 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java @@ -17,8 +17,10 @@ along with this program. If not, see . */ package gplx.xowa.addons.apps.cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.mgrs.*; +import gplx.xowa.addons.apps.cfgs.types.*; public class Xocfg_mgr { private final Xocfg_cache_mgr cache_mgr = new Xocfg_cache_mgr(); + public Xocfg_type_mgr Type_mgr() {return type_mgr;} private final Xocfg_type_mgr type_mgr = new Xocfg_type_mgr(); public void Init_by_app(Xoa_app app) { cache_mgr.Init_by_app // SECTION_EDIT ( gplx.xowa.addons.apps.cfgs.dbs.Xocfg_db_app.New_conn(app) diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_row.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_row.java index 5c85dbf91..dd6fec89d 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_row.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_row.java @@ -17,10 +17,10 @@ along with this program. If not, see . */ package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; public class Xocfg_itm_row { - public Xocfg_itm_row(int id, int scope_id, int db_type, int gui_type, String gui_args, String key, String dflt) { + public Xocfg_itm_row(int id, int scope_id, String data_type, int gui_type, String gui_args, String key, String dflt) { this.id = id; this.scope_id = scope_id; - this.db_type = db_type; + this.data_type = data_type; this.gui_type = gui_type; this.gui_args = gui_args; this.key = key; @@ -28,7 +28,7 @@ public class Xocfg_itm_row { } public int Id() {return id;} private final int id; public int Scope_id() {return scope_id;} private final int scope_id; - public int Db_type() {return db_type;} private final int db_type; + public String Data_type() {return data_type;} private final String data_type; public int Gui_type() {return gui_type;} private final int gui_type; public String Gui_args() {return gui_args;} private final String gui_args; public String Key() {return key;} private final String key; diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java index 79ba5306e..c4846cc67 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java @@ -19,7 +19,7 @@ package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.dbs.*; import gplx.dbs.utls.*; public class Xocfg_itm_tbl implements Db_tbl { private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); - private final String fld__itm_id, fld__itm_key, fld__itm_scope_id, fld__itm_db_type, fld__itm_gui_type, fld__itm_gui_args, fld__itm_dflt; + private final String fld__itm_id, fld__itm_key, fld__itm_scope_id, fld__itm_data_type, fld__itm_gui_type, fld__itm_gui_args, fld__itm_dflt; private final Db_conn conn; public Xocfg_itm_tbl(Db_conn conn) { this.conn = conn; @@ -27,7 +27,7 @@ public class Xocfg_itm_tbl implements Db_tbl { this.fld__itm_id = flds.Add_int_pkey("itm_id"); // EX: '2' this.fld__itm_key = flds.Add_str("itm_key", 255); // EX: 'cfg_1' this.fld__itm_scope_id = flds.Add_int("itm_scope_id"); // EX: '1'; ENUM: Xoitm_scope_tid - this.fld__itm_db_type = flds.Add_int("itm_db_type"); // EX: '1'; ENUM: Type_adp_ + this.fld__itm_data_type = flds.Add_str("itm_data_type", 255); // EX: '1'; ENUM: Type_adp_ this.fld__itm_gui_type = flds.Add_int("itm_gui_type"); // EX: '1'; ENUM: Xoitm_gui_tid this.fld__itm_gui_args = flds.Add_str("itm_gui_args", 255); // EX: '1,40' (numeric); '255' (textbox); 'enum_name' (combo); etc.. this.fld__itm_dflt = flds.Add_str("itm_dflt", 4096); // EX: 'abc' @@ -38,7 +38,7 @@ public class Xocfg_itm_tbl implements Db_tbl { conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds , Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, fld__itm_key, fld__itm_key))); } - public void Upsert(int itm_id, int scope_id, int db_type, int gui_type, String gui_args, String itm_key, String itm_dflt) { + public void Upsert(int itm_id, int scope_id, String db_type, int gui_type, String gui_args, String itm_key, String itm_dflt) { Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_id), itm_id, itm_key, scope_id, db_type, gui_type, gui_args, itm_dflt); } public Xocfg_itm_row Select_by_key_or_null(String key) { @@ -50,7 +50,7 @@ public class Xocfg_itm_tbl implements Db_tbl { return new Xocfg_itm_row ( rdr.Read_int(fld__itm_id) , rdr.Read_int(fld__itm_scope_id) - , rdr.Read_int(fld__itm_db_type) + , rdr.Read_str(fld__itm_data_type) , rdr.Read_int(fld__itm_gui_type) , rdr.Read_str(fld__itm_gui_args) , rdr.Read_str(fld__itm_key) 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 0c310637c..a78484691 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 @@ -47,6 +47,8 @@ public class Xoitm_gui_tid { // SERIALIZED return Xoitm_gui_tid.Str__checkbox; else if (String_.Eq(db_type, "memo")) return Xoitm_gui_tid.Str__memo; + else if (String_.Has_at_bgn(db_type, "list:")) + return Xoitm_gui_tid.Str__select; else return Xoitm_gui_tid.Str__textbox; } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java index 349a45bc6..8ccecc336 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java @@ -19,32 +19,22 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gp import gplx.langs.mustaches.*; import gplx.core.gfobjs.*; public class Xoedit_grp implements Xoedit_nde, Mustache_doc_itm { - public Xoedit_grp(int id, int sort, String key) { + private String lang, name, help; + public Xoedit_grp(int id, String key, int sort) { this.id = id; - this.sort = sort; this.key = key; + this.sort = sort; } - public int Id() {return id;} private final int id; - public int Sort() {return sort;} private final int sort; - - public String Key() {return key;} private String key; - - public String Lang() {return lang;} private String lang; - public String Name() {return name;} private String name; - public String Help() {return help;} private String help; - + public int Id() {return id;} private final int id; + public String Key() {return key;} private final String key; + public int Sort() {return sort;} private final int sort; public Xoedit_itm[] Itms() {return itms;} private Xoedit_itm[] itms = new Xoedit_itm[0]; + public void Itms_(Xoedit_itm[] v) {this.itms = v;} public void Load_by_i18n(String lang, String name, String help) { this.lang = lang; this.name = name; this.help = help; } - - public void Grps__add(Xoedit_grp grp) { - } - public void Itms_(Xoedit_itm[] v) { - this.itms = v; - } public Gfobj_nde To_nde() { Gfobj_nde rv = Gfobj_nde.New(); rv.Add_int("id", id); 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 9b7923821..610a02f75 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 @@ -18,34 +18,25 @@ along with this program. If not, see . package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; import gplx.langs.mustaches.*; import gplx.core.gfobjs.*; import gplx.langs.jsons.*; +import gplx.xowa.addons.apps.cfgs.types.*; public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { - public Xoedit_itm(int id, int sort, String key) { + private int gui_type; + private boolean edited; + private String data_type, gui_args, dflt, lang, name, help, ctx, val, date; + private Xocfg_type_mgr type_mgr; + public Xoedit_itm(Xocfg_type_mgr type_mgr, int id, String key, int sort) { + this.type_mgr = type_mgr; this.id = id; - this.sort = sort; this.key = key; + this.sort = sort; } - public int Id() {return id;} private final int id; - public int Sort() {return sort;} private final int sort; - - public int Scope_id() {return scope_id;} private int scope_id; - public int Gui_type() {return gui_type;} private int gui_type; - public String Gui_args() {return gui_args;} private String gui_args; - public String Key() {return key;} private String key; - public String Dflt() {return dflt;} private String dflt; - public boolean Edited() {return edited;} private boolean edited; - - public String Lang() {return lang;} private String lang; - public String Name() {return name;} private String name; - public String Help() {return help;} private String help; - - public String Ctx() {return ctx;} private String ctx; - public String Val() {return val;} private String val; - public String Date() {return date;} private String date; - public void Load_by_meta(String key, int scope_id, int gui_type, String gui_args, String dflt) { - this.scope_id = scope_id; + public int Id() {return id;} private final int id; + public String Key() {return key;} private final String key; + 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) { + this.data_type = data_type; this.gui_type = gui_type; this.gui_args = gui_args; - this.key = key; this.dflt = dflt; } public void Load_by_i18n(String lang, String name, String help) { @@ -77,12 +68,12 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { rv.Add_str("val", val); rv.Add_str("date", date); Bry_bfr bfr = Bry_bfr_.New(); - To_html(bfr); + To_html(bfr, type_mgr); rv.Add_str("html", bfr.To_str_and_clear()); return rv; } - private void To_html(Bry_bfr bfr) { - new Xoedit_itm_html().Build_html(bfr, key, name, gui_type, gui_args, val); + private void To_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr) { + new Xoedit_itm_html().Build_html(bfr, type_mgr, key, name, data_type, gui_type, gui_args, val); } public boolean Mustache__write(String k, Mustache_bfr bfr) { if (String_.Eq(k, "id")) bfr.Add_int(id); @@ -94,7 +85,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, "html")) To_html(bfr.Bfr()); + else if (String_.Eq(k, "html")) To_html(bfr.Bfr(), type_mgr); return true; } public static String Ctx__app = "app"; 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 12dd85ad4..ff51578fb 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 @@ -17,8 +17,9 @@ along with this program. If not, see . */ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; import gplx.xowa.addons.apps.cfgs.enums.*; +import gplx.xowa.addons.apps.cfgs.types.*; public class Xoedit_itm_html { - public void Build_html(Bry_bfr bfr, String key, String name, int gui_type, String gui_args, String data) { + 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\"" : ""); @@ -33,15 +34,21 @@ public class Xoedit_itm_html { bfr.Add_str_u8_fmt("", key, data); break; case Xoitm_gui_tid.Tid__select: - bfr.Add_str_u8_fmt("", key, len); + for (int i = 0; i < len; i++) { + Keyval kv = kvs_ary[i]; + String kv_val = kv.Val_to_str_or_null(); + bfr.Add_str_u8_fmt("", kv.Key(), kv_val, String_.Eq(data, kv_val) ? " selected=\"selected\"" : ""); } bfr.Add_str_u8_fmt(""); break; case Xoitm_gui_tid.Tid__fs_file: bfr.Add_str_u8_fmt("", key, data); 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 44e70c83f..1c4d2922e 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 @@ -18,13 +18,15 @@ along with this program. If not, see . package gplx.xowa.addons.apps.cfgs.specials.edits.services; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.tbls.*; -import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*; +import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*; import gplx.xowa.addons.apps.cfgs.types.*; public class Xocfg_edit_loader { private final Xocfg_db_app db_app; private final Xocfg_db_usr db_usr; - public Xocfg_edit_loader(Xocfg_db_app db_app, Xocfg_db_usr db_usr) { + private final Xocfg_type_mgr type_mgr; + public Xocfg_edit_loader(Xocfg_db_app db_app, Xocfg_db_usr db_usr, Xocfg_type_mgr type_mgr) { this.db_app = db_app; this.db_usr = db_usr; + this.type_mgr = type_mgr; } public Xoedit_root Load_root(String grp_key, String ctx, String lang) { // create lists @@ -35,7 +37,7 @@ public class Xocfg_edit_loader { // get root_itm Xocfg_grp_row grp_meta = db_app.Tbl__grp().Select_by_key_or_null(grp_key); if (grp_meta == null) throw Err_.new_wo_type("cfg:grp not found", "grp", grp_key); - Xoedit_grp owner = new Xoedit_grp(grp_meta.Id(), 0, grp_meta.Key()); + Xoedit_grp owner = new Xoedit_grp(grp_meta.Id(), grp_meta.Key(), 0); grp_temp.Add(grp_meta.Id(), owner); grp_list.Add(owner); @@ -83,11 +85,11 @@ public class Xocfg_edit_loader { sql = Db_sql_.Make_by_fmt(String_.Ary ( "SELECT m.map_trg" , ", m.map_sort" - , ", n.nde_name" - , ", t.grp_key" + , ", t.nde_name" + , ", g.grp_key" , "FROM cfg_map m" - , " LEFT JOIN cfg_grp t ON m.map_trg = t.grp_id" - , " LEFT JOIN cfg_txt n ON m.map_trg = n.nde_id" + , " LEFT JOIN cfg_grp g ON m.map_trg = g.grp_id" + , " LEFT JOIN cfg_txt t ON m.map_trg = t.nde_id" , "WHERE m.map_src = {0}" , "ORDER BY m.map_sort" ), owner_id @@ -124,14 +126,13 @@ public class Xocfg_edit_loader { String grp_key = rdr.Read_str("key"); // nde is grp if (rdr.Read_str("itm_dflt") == null) { - Xoedit_grp gui_grp = new Xoedit_grp(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"), grp_key); - owner.Grps__add(gui_grp); + Xoedit_grp gui_grp = new Xoedit_grp(rdr.Read_int("map_trg"), grp_key, rdr.Read_int("map_sort")); grp_list.Add(gui_grp); grp_temp.Add(gui_grp.Id(), gui_grp); } // nde is itm else { - Xoedit_itm gui_itm = new Xoedit_itm(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"), grp_key); + Xoedit_itm gui_itm = new Xoedit_itm(type_mgr, rdr.Read_int("map_trg"), grp_key, rdr.Read_int("map_sort")); itms_list.Add(gui_itm); itm_list.Add(gui_itm); } @@ -142,21 +143,22 @@ public class Xocfg_edit_loader { Xogui_nde_iter iter = Xogui_nde_iter.New_sql(itm_list); while (iter.Move_next()) { String sql = Db_sql_.Make_by_fmt(String_.Ary - ( "SELECT t.itm_id" - , ", t.itm_key" - , ", t.itm_scope_id" - , ", t.itm_gui_type" - , ", t.itm_gui_args" - , ", t.itm_dflt" - , "FROM cfg_itm t" - , "WHERE t.itm_key IN ({0})" + ( "SELECT i.itm_id" + , ", i.itm_key" + , ", i.itm_scope_id" + , ", i.itm_data_type" + , ", i.itm_gui_type" + , ", i.itm_gui_args" + , ", i.itm_dflt" + , "FROM cfg_itm i" + , "WHERE i.itm_key IN ({0})" ), iter.To_sql_in_key() ); Db_rdr rdr = db_app.Conn().Stmt_sql(sql).Exec_select__rls_auto(); while (rdr.Move_next()) { - Xoedit_itm gui_itm = (Xoedit_itm)itm_list.Get_by_or_fail(rdr.Read_str("itm_key")); - gui_itm.Load_by_meta(rdr.Read_str("itm_key"), rdr.Read_int("itm_scope_id"), rdr.Read_int("itm_gui_type"), rdr.Read_str("itm_gui_args"), rdr.Read_str("itm_dflt")); + Xoedit_itm edit_itm = (Xoedit_itm)itm_list.Get_by_or_fail(rdr.Read_str("itm_key")); + 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"), rdr.Read_str("itm_dflt")); } } } @@ -171,13 +173,13 @@ public class Xocfg_edit_loader { while (cur_iter.Move_next()) { // get all data by ids and ctx String sql = Db_sql_.Make_by_fmt(String_.Ary - ( "SELECT d.itm_key" - , ", d.itm_ctx" - , ", d.itm_val" - , ", d.itm_date" - , "FROM cfg_val d" - , "WHERE d.itm_key IN ({0})" - , "AND d.itm_ctx = '{1}'" + ( "SELECT v.itm_key" + , ", v.itm_ctx" + , ", v.itm_val" + , ", v.itm_date" + , "FROM cfg_val v" + , "WHERE v.itm_key IN ({0})" + , "AND v.itm_ctx = '{1}'" ), cur_iter.To_sql_in_key(), ctxs[i] ); @@ -210,13 +212,13 @@ public class Xocfg_edit_loader { while (cur_iter.Move_next()) { // get all i18n for itms and lang String sql = Db_sql_.Make_by_fmt(String_.Ary - ( "SELECT h.nde_id" - , ", h.nde_name" - , ", h.nde_help" - , ", h.nde_lang" - , "FROM cfg_txt h" - , "WHERE h.nde_id IN ({0})" - , "AND h.nde_lang = '{1}'" + ( "SELECT t.nde_id" + , ", t.nde_name" + , ", t.nde_help" + , ", t.nde_lang" + , "FROM cfg_txt t" + , "WHERE t.nde_id IN ({0})" + , "AND t.nde_lang = '{1}'" ), cur_iter.To_sql_in() , langs[i] ); @@ -234,6 +236,6 @@ public class Xocfg_edit_loader { } public static Xocfg_edit_loader New(Xoa_app app) { Xocfg_db_app db_app = Xocfg_db_app.New(app); - return new Xocfg_edit_loader(db_app, new Xocfg_db_usr(db_app, app.User().User_db_mgr().Conn())); + return new Xocfg_edit_loader(db_app, new Xocfg_db_usr(db_app, app.User().User_db_mgr().Conn()), app.Cfg().Type_mgr()); } } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/pages/Xocfg_maint_html.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/pages/Xocfg_maint_html.java index 6106a65cc..29a469974 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/pages/Xocfg_maint_html.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/pages/Xocfg_maint_html.java @@ -23,7 +23,7 @@ class Xocfg_maint_html extends Xow_special_wtr__base { @Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "app", "cfg", "maint");} @Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xo.cfg_maint.mustache.html");} @Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) { - return new Xoedit_grp(0, 1, "test"); + return new Xoedit_grp(0, "test", 1); } @Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) { Xopg_tag_mgr head_tags = page_data.Head_tags(); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser.java index 9589330b3..0f567d453 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser.java @@ -43,7 +43,7 @@ class Xocfg_maint_parser { return new Xocfg_maint_grp(key, owner, name, help); } else if (String_.Eq(nde_type, "itm")) { - String scope = Get_atr_as_str_or_fail(hash, "scope_"); + String scope = Get_atr_as_str_or(hash, "scope_", ""); if (String_.Eq(scope, "")) scope = "wiki"; String db_type = Get_atr_as_str_or_fail(hash, "db_type_"); String dflt = Get_atr_as_str_or_fail(hash, "dflt_"); String gui_type = Get_atr_as_str_or(hash, "gui_type_", null); 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 c69703c49..0316173c6 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 @@ -34,6 +34,7 @@ public class Xocfg_maint_svc { // exec Xocfg_db_app db_app = Xocfg_db_app.New(app); + db_app.Conn().Txn_bgn("xo__cfg_maint__upsert"); for (Xocfg_maint_nde nde : ndes) { if (nde.Type_is_grp()) { Xocfg_maint_svc.Create_grp(db_app, nde.Key(), nde.Owner(), nde.Name(), nde.Help()); @@ -44,6 +45,7 @@ public class Xocfg_maint_svc { Xocfg_maint_svc.Create_itm(db_app, nde.Key(), nde.Owner(), nde.Name(), String_.new_u8(help), itm.Scope(), itm.Db_type(), itm.Dflt(), itm.Gui_type(), itm.Gui_args()); } } + db_app.Conn().Txn_end(); } public static void Create_grp(Xocfg_db_app db_app, String key, String owner, String name, String help) { // insert grp_meta @@ -63,9 +65,8 @@ public class Xocfg_maint_svc { int grp_id = db_app.Tbl__grp().Select_id_by_key_or_fail(owner); int itm_id = db_app.Conn().Sys_mgr().Autonum_next("cfg_itm_meta.itm_id"); int scope_id = Xoitm_scope_tid.To_int(scope); - int db_type_id = Xoitm_db_tid.To_int(db_type); int gui_type_id = Xoitm_gui_tid.To_tid(gui_type); - db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type_id, gui_type_id, gui_args, key, dflt); + db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type, gui_type_id, gui_args, key, dflt); // insert grp_map int itm_sort = db_app.Tbl__map().Select_next_sort(grp_id); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/types/Xocfg_type_mgr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/types/Xocfg_type_mgr.java new file mode 100644 index 000000000..9a83dbb8f --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/types/Xocfg_type_mgr.java @@ -0,0 +1,30 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +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.types; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +public class Xocfg_type_mgr { + private final Ordered_hash list_hash = Ordered_hash_.New(); + public Xocfg_type_mgr() { + this.Lists__add("list:Xo_load_html_type", Keyval_.new_("mem"), Keyval_.new_("url")); + } + public void Lists__add(String key, Keyval... itms) { + list_hash.Add(key, itms); + } + public Keyval[] Lists__get(String key) { + return (Keyval[])list_hash.Get_by_or_fail(key); + } +}