mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
'v3.6.3.1'
This commit is contained in:
@@ -33,7 +33,7 @@ public class Xoa_cfg_db_txt implements Xoa_cfg_db {
|
||||
}
|
||||
public void Cfg_save_bgn(Xoa_cfg_mgr cfg_mgr) {
|
||||
bfr.ClearAndReset();
|
||||
} private Bry_bfr bfr = Bry_bfr.new_();
|
||||
} private Bry_bfr bfr = Bry_bfr_.New();
|
||||
public void Cfg_save_end(Xoa_cfg_mgr cfg_mgr) {
|
||||
Xoa_app_.Usr_dlg().Log_many("", "", "shutting down app; saving cfg: len=~{0}", bfr.Len());
|
||||
Io_mgr.Instance.SaveFilBfr(Cfg_url(cfg_mgr), bfr);
|
||||
|
||||
@@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*;
|
||||
public class Xoa_cfg_itm implements GfoInvkAble {
|
||||
public class Xoa_cfg_itm implements Gfo_invk {
|
||||
public Xoa_cfg_itm(Xoa_cfg_grp grp, byte[] key) {this.grp = grp; this.key = key;}
|
||||
public Xoa_cfg_grp Grp() {return grp;} private final Xoa_cfg_grp grp;
|
||||
public byte[] Key() {return key;} private final byte[] key;
|
||||
public Xoa_cfg_grp Grp() {return grp;} private final Xoa_cfg_grp grp;
|
||||
public byte[] Key() {return key;} private final byte[] key;
|
||||
public String Val() {return val;} private String val;
|
||||
public boolean Val_is_dirty() {return val_is_dirty;} private boolean val_is_dirty;
|
||||
public boolean Val_is_customized() {return val_is_customized;} private boolean val_is_customized; // false if value is system default; true if changed by user
|
||||
@@ -37,7 +37,7 @@ public class Xoa_cfg_itm implements GfoInvkAble {
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_val)) return val;
|
||||
else if (ctx.Match(k, Invk_val_)) Val_(m.ReadStr("v"));
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
} private static final String Invk_val = "val", Invk_val_ = "val_";
|
||||
}
|
||||
|
||||
@@ -17,10 +17,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*;
|
||||
import gplx.xowa.wikis.domains.*;
|
||||
public class Xoa_cfg_mgr implements GfoInvkAble {
|
||||
private final Ordered_hash hash = Ordered_hash_.New_bry();
|
||||
public class Xoa_cfg_mgr implements Gfo_invk {
|
||||
private final Ordered_hash hash = Ordered_hash_.New_bry();
|
||||
public Xoa_cfg_mgr(Xoa_app app) {this.app = app;}
|
||||
public Xoa_app App() {return app;} private final Xoa_app app;
|
||||
public Xoa_app App() {return app;} private final Xoa_app app;
|
||||
public Xoa_cfg_itm Get_itm_or_null(byte[] grp_key, byte[] itm_key) {
|
||||
Xoa_cfg_grp grp = (Xoa_cfg_grp)hash.Get_by(grp_key);
|
||||
return grp == null ? null : grp.Get_by_or_null(itm_key);
|
||||
@@ -95,7 +95,7 @@ public class Xoa_cfg_mgr implements GfoInvkAble {
|
||||
grp.Db_load_end();
|
||||
}
|
||||
}
|
||||
public void Db_save_txt() {Db_save(db_txt);} private final Xoa_cfg_db_txt db_txt = new Xoa_cfg_db_txt();
|
||||
public void Db_save_txt() {Db_save(db_txt);} private final Xoa_cfg_db_txt db_txt = new Xoa_cfg_db_txt();
|
||||
public void Db_save(Xoa_cfg_db db) {
|
||||
int len = hash.Count();
|
||||
db.Cfg_save_bgn(this);
|
||||
@@ -105,19 +105,19 @@ public class Xoa_cfg_mgr implements GfoInvkAble {
|
||||
}
|
||||
db.Cfg_save_end(this);
|
||||
}
|
||||
private boolean Eval_set(GfoInvkAble invk, String key, String val) {
|
||||
private boolean Eval_set(Gfo_invk invk, String key, String val) {
|
||||
String msg_str = key + "_(<:['\n" + val + "\n']:>);";
|
||||
Object rslt = app.Gfs_mgr().Run_str_for(invk, msg_str);
|
||||
return rslt != GfoInvkAble_.Rv_error;
|
||||
return rslt != Gfo_invk_.Rv_error;
|
||||
}
|
||||
public Object Eval_get(GfoInvkAble invk, String key) {
|
||||
public Object Eval_get(Gfo_invk invk, String key) {
|
||||
String msg_str = key + ";";
|
||||
return app.Gfs_mgr().Run_str_for(invk, msg_str);
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_get)) return Get_itm_or_make(m.ReadBry("itm_key"), m.ReadBry("grp_key"));
|
||||
else if (ctx.Match(k, Invk_reset_all)) Reset_all();
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
} private static final String Invk_get = "get", Invk_reset_all = "reset_all";
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ class Xoa_cfg_mgr_fxt {
|
||||
Xowe_wiki wiki = Exec_make_wiki(wiki_key_bry);
|
||||
Test_cfg_get(wiki, prop_key, expd_val);
|
||||
}
|
||||
private void Test_cfg_get(GfoInvkAble invk, String prop, String expd) {
|
||||
private void Test_cfg_get(Gfo_invk invk, String prop, String expd) {
|
||||
Tfds.Eq(expd, Object_.Xto_str_strict_or_null_mark(app.Cfg_mgr().Eval_get(invk, prop)));
|
||||
}
|
||||
public void Test_cfg_itm(String wiki, String prop, boolean expd_customized, boolean expd_dirty) {
|
||||
|
||||
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*;
|
||||
import gplx.xowa.parsers.lnkis.cfgs.*;
|
||||
public class Xowc_parser implements GfoInvkAble {
|
||||
public class Xowc_parser implements Gfo_invk {
|
||||
public Xowc_parser(Xowe_wiki wiki) {
|
||||
lnki_cfg = new Xoc_lnki_cfg(wiki);
|
||||
if (wiki.Domain_tid() == gplx.xowa.wikis.domains.Xow_domain_tid_.Int__home)
|
||||
@@ -31,7 +31,7 @@ public class Xowc_parser implements GfoInvkAble {
|
||||
else if (ctx.Match(k, Invk_lnki)) return lnki_cfg;
|
||||
else if (ctx.Match(k, Invk_display_title_restrict)) return display_title_restrict;
|
||||
else if (ctx.Match(k, Invk_display_title_restrict_)) display_title_restrict = m.ReadYn("v");
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String Invk_xtns = "xtns", Invk_lnki = "lnki", Invk_display_title_restrict = "display_title_restrict", Invk_display_title_restrict_ = "display_title_restrict_";
|
||||
|
||||
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*;
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
public class Xowc_xtn_pages implements GfoInvkAble {
|
||||
public class Xowc_xtn_pages implements Gfo_invk {
|
||||
public boolean Init_needed() {return init_needed;} private boolean init_needed = true;
|
||||
public int Ns_page_id() {return ns_page_id;} private int ns_page_id = Int_.Min_value;
|
||||
public int Ns_page_talk_id() {return ns_page_talk_id;} private int ns_page_talk_id = Int_.Min_value;
|
||||
@@ -69,13 +69,13 @@ public class Xowc_xtn_pages implements GfoInvkAble {
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_ns_names_)) Ns_names_(m.ReadBry("page"), m.ReadBry("page_talk"), m.ReadBry("index"), m.ReadBry("index_talk"));
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
} private static final String Invk_ns_names_ = "ns_names_";
|
||||
public static final byte[] Xtn_key = Bry_.new_a7("pages");
|
||||
public static final byte[] Xtn_key = Bry_.new_a7("pages");
|
||||
public static final int Ns_index_id_default = 102, Ns_page_id_default = 104;
|
||||
|
||||
private static final byte[]
|
||||
private static final byte[]
|
||||
Default_ns_page_name = Bry_.new_a7("Page")
|
||||
, Default_ns_page_talk_name = Bry_.new_a7("Page_talk")
|
||||
, Default_ns_index_name = Bry_.new_a7("Index")
|
||||
|
||||
@@ -16,13 +16,13 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*;
|
||||
public class Xowc_xtns implements GfoInvkAble {
|
||||
public class Xowc_xtns implements Gfo_invk {
|
||||
private Hash_adp_bry hash = Hash_adp_bry.ci_a7();
|
||||
public Xowc_xtns() {hash.Add(Xowc_xtn_pages.Xtn_key, itm_pages);}
|
||||
public Xowc_xtn_pages Itm_pages() {return itm_pages;} private Xowc_xtn_pages itm_pages = new Xowc_xtn_pages();
|
||||
public Object Get_by_key(byte[] key) {return hash.Get_by_bry(key);}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_get)) return (GfoInvkAble)hash.Get_by_bry(m.ReadBry("v"));
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
if (ctx.Match(k, Invk_get)) return (Gfo_invk)hash.Get_by_bry(m.ReadBry("v"));
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
} private static final String Invk_get = "get";
|
||||
}
|
||||
|
||||
25
400_xowa/src/gplx/xowa/apps/cfgs/dbs/Xocfg_data_itm.java
Normal file
25
400_xowa/src/gplx/xowa/apps/cfgs/dbs/Xocfg_data_itm.java
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
public class Xocfg_data_itm {
|
||||
public Xocfg_data_itm(String key, String usr, String ctx, String val) {this.key = key; this.usr = usr; this.ctx = ctx; this.val = val;}
|
||||
public String Key() {return key;} private final String key;
|
||||
public String Usr() {return usr;} private final String usr;
|
||||
public String Ctx() {return ctx;} private String ctx;
|
||||
public String Val() {return val;} private String val;
|
||||
}
|
||||
50
400_xowa/src/gplx/xowa/apps/cfgs/dbs/Xocfg_data_tbl.java
Normal file
50
400_xowa/src/gplx/xowa/apps/cfgs/dbs/Xocfg_data_tbl.java
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
import gplx.dbs.*;
|
||||
public class Xocfg_data_tbl implements Rls_able {
|
||||
private final String tbl_name; public final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_key, fld_usr, fld_ctx, fld_val;
|
||||
private final Db_conn conn;
|
||||
public Xocfg_data_tbl(Db_conn conn) {
|
||||
this.conn = conn;
|
||||
tbl_name = Tbl_name;
|
||||
fld_key = flds.Add_str_pkey ("cfg_key", 1024); // EX: "xowa.net.web_enabled"
|
||||
fld_usr = flds.Add_str ("cfg_usr", 1024); // EX: "xowa_user"
|
||||
fld_ctx = flds.Add_str ("cfg_ctx", 1024); // EX: "app"
|
||||
fld_val = flds.Add_str ("cfg_val", 4096); // EX: "y"
|
||||
}
|
||||
public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));}
|
||||
public void Insert(String key, String usr, String ctx, String val) {
|
||||
Db_stmt stmt_insert = conn.Stmt_insert(tbl_name, flds);
|
||||
stmt_insert.Clear().Val_str(fld_key, key).Val_str(fld_usr, usr).Val_str(fld_ctx, ctx).Val_str(fld_val, val)
|
||||
.Exec_insert();
|
||||
}
|
||||
public Xocfg_data_itm Select(String key, String usr, String ctx) {
|
||||
Db_stmt stmt_select = conn.Stmt_select(tbl_name, flds, fld_key, fld_usr, fld_ctx);
|
||||
Db_rdr rdr = stmt_select.Clear().Crt_str(fld_key, key).Crt_str(fld_usr, usr).Crt_str(fld_ctx, ctx).Exec_select__rls_auto();
|
||||
try {
|
||||
if (rdr.Move_next())
|
||||
return new Xocfg_data_itm(key, usr, ctx, rdr.Read_str(fld_val));
|
||||
else
|
||||
return null;
|
||||
} finally {rdr.Rls();}
|
||||
}
|
||||
public void Rls() {conn.Rls_conn();}
|
||||
public static final String Tbl_name = "cfg_data";
|
||||
}
|
||||
27
400_xowa/src/gplx/xowa/apps/cfgs/dbs/Xocfg_meta_itm.java
Normal file
27
400_xowa/src/gplx/xowa/apps/cfgs/dbs/Xocfg_meta_itm.java
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
public class Xocfg_meta_itm {
|
||||
public Xocfg_meta_itm(String key, String type, String dflt, String version) {
|
||||
this.key = key; this.type = type; this.dflt = dflt; this.version = version;
|
||||
}
|
||||
public String Key() {return key;} private final String key;
|
||||
public String Type() {return type;} private String type;
|
||||
public String Dflt() {return dflt;} private String dflt;
|
||||
public String Version() {return version;} private String version;
|
||||
}
|
||||
40
400_xowa/src/gplx/xowa/apps/cfgs/dbs/Xocfg_meta_tbl.java
Normal file
40
400_xowa/src/gplx/xowa/apps/cfgs/dbs/Xocfg_meta_tbl.java
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
import gplx.dbs.*;
|
||||
public class Xocfg_meta_tbl implements Rls_able {
|
||||
private final String tbl_name; public final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_key, fld_type, fld_dflt, fld_version;
|
||||
private final Db_conn conn;
|
||||
public Xocfg_meta_tbl(Db_conn conn) {
|
||||
this.conn = conn;
|
||||
tbl_name = Tbl_name;
|
||||
fld_key = flds.Add_str_pkey ("cfg_key" , 1024); // EX: "xowa.net.web_enabled"
|
||||
fld_type = flds.Add_str ("cfg_type" , 255); // EX: "yn"
|
||||
fld_dflt = flds.Add_str ("cfg_dflt" , 1024); // EX: "n"
|
||||
fld_version = flds.Add_str ("cfg_version" , 16); // EX: "v1.1.1.1"
|
||||
}
|
||||
public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));}
|
||||
public void Insert(String key, String type, String dflt, String version) {
|
||||
Db_stmt stmt_insert = conn.Stmt_insert(tbl_name, flds);
|
||||
stmt_insert.Clear().Val_str(fld_key, key).Val_str(fld_type, type).Val_str(fld_dflt, dflt).Val_str(fld_version, version)
|
||||
.Exec_insert();
|
||||
}
|
||||
public void Rls() {}
|
||||
public static final String Tbl_name = "cfg_meta";
|
||||
}
|
||||
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
public class Xocfg_gui_mgr implements GfoInvkAble {
|
||||
public class Xocfg_gui_mgr implements Gfo_invk {
|
||||
public Xocfg_gui_mgr(Xoae_app app) {
|
||||
win_cfg = new Xocfg_win(app);
|
||||
}
|
||||
@@ -25,7 +25,7 @@ public class Xocfg_gui_mgr implements GfoInvkAble {
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_win)) return win_cfg;
|
||||
else if (ctx.Match(k, Invk_html)) return html_cfg;
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
}
|
||||
private static final String Invk_win = "win", Invk_html = "html";
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
public class Xocfg_html implements GfoInvkAble {
|
||||
public class Xocfg_html implements Gfo_invk {
|
||||
public Xocfg_html() {
|
||||
this.content_editable = false; // CFG: default to false for general user
|
||||
}
|
||||
@@ -24,7 +24,7 @@ public class Xocfg_html implements GfoInvkAble {
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_content_editable)) return Yn.To_str(content_editable);
|
||||
else if (ctx.Match(k, Invk_content_editable_)) content_editable = m.ReadYn_toggle("v", content_editable);
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String Invk_content_editable = "content_editable", Invk_content_editable_ = "content_editable_";
|
||||
|
||||
@@ -16,19 +16,19 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
class Test_api implements GfoInvkAble {
|
||||
class Test_api implements Gfo_invk {
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_meta)) return meta_mgr.Get_or_null(m.ReadStr("v"));
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
// return this;
|
||||
} private static final String Invk_meta = "meta";
|
||||
private static final String Invk_prop_1 = "prop_1", Invk_prop_2 = "prop_2", Invk_prop_3 = "prop_3", Invk_prop_bry = "bry", Invk_prop_enm = "enm";
|
||||
private static final boolean Dflt_prop_1 = false;
|
||||
private static final int Dflt_prop_2 = 2;
|
||||
private static final String Dflt_prop_3 = "3";
|
||||
private static final byte[] Dflt_prop_bry = Bry_.new_a7("bry");
|
||||
private static final int Dflt_prop_enm = 5;
|
||||
private static final Xocfg_meta_mgr meta_mgr = new Xocfg_meta_mgr().Add
|
||||
private static final String Invk_prop_1 = "prop_1", Invk_prop_2 = "prop_2", Invk_prop_3 = "prop_3", Invk_prop_bry = "bry", Invk_prop_enm = "enm";
|
||||
private static final boolean Dflt_prop_1 = false;
|
||||
private static final int Dflt_prop_2 = 2;
|
||||
private static final String Dflt_prop_3 = "3";
|
||||
private static final byte[] Dflt_prop_bry = Bry_.new_a7("bry");
|
||||
private static final int Dflt_prop_enm = 5;
|
||||
private static final Xocfg_meta_mgr meta_mgr = new Xocfg_meta_mgr().Add
|
||||
( Xocfg_meta_itm_.bool_ (Invk_prop_1, Dflt_prop_1)
|
||||
, Xocfg_meta_itm_.int_ (Invk_prop_2, Dflt_prop_2).Rng_bgn_(-1)
|
||||
, Xocfg_meta_itm_.str_ (Invk_prop_3, Dflt_prop_3)
|
||||
@@ -52,7 +52,7 @@ class Xocfg_gui_itm_memo implements Xocfg_gui_itm {
|
||||
public int Box_h() {return box_h;} private int box_h;
|
||||
}
|
||||
class Xocfg_meta_mgr {
|
||||
private Hash_adp hash = Hash_adp_.new_();
|
||||
private Hash_adp hash = Hash_adp_.New();
|
||||
public Xocfg_meta_mgr Add(Xocfg_meta_itm_base... ary) {
|
||||
int len = ary.length;
|
||||
for (int i = 0; i < len; i++) {
|
||||
|
||||
@@ -17,15 +17,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
import gplx.core.brys.fmtrs.*;
|
||||
import gplx.gfui.draws.*;
|
||||
import gplx.xowa.guis.langs.*;
|
||||
public class Xocfg_win implements GfoInvkAble {
|
||||
public class Xocfg_win implements Gfo_invk {
|
||||
public Xocfg_win(Xoae_app app) {}
|
||||
public Xol_font_info Font() {return font;} private Xol_font_info font = new Xol_font_info("Arial", 8, gplx.gfui.FontStyleAdp_.Plain);
|
||||
public Xol_font_info Font() {return font;} private Xol_font_info font = new Xol_font_info("Arial", 8, FontStyleAdp_.Plain);
|
||||
public Bry_fmtr Search_box_fmtr() {return search_box_fmtr;} private Bry_fmtr search_box_fmtr = Bry_fmtr.new_("Special:Allpages?from=", "search");
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_font)) return font;
|
||||
else if (ctx.Match(k, Invk_search_box_fmt_)) search_box_fmtr.Fmt_(m.ReadBry("v"));
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String Invk_search_box_fmt_ = "search_box_fmt_", Invk_font = "font";
|
||||
|
||||
@@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
public class Xow_gui_mgr implements GfoInvkAble {
|
||||
public class Xow_gui_mgr implements Gfo_invk {
|
||||
public Xocfg_html Cfg_browser() {return cfg_browser;} private Xocfg_html cfg_browser = new Xocfg_html();
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_cfg_browser)) return cfg_browser;
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
} private static final String Invk_cfg_browser = "cfg_browser";
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.apps.cfgs.old; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
import gplx.gfui.*; import gplx.xowa.guis.bnds.*; import gplx.xowa.guis.cmds.*;
|
||||
import gplx.langs.gfs.*; import gplx.xowa.apps.*;
|
||||
public class Xocfg_bnd_itm implements GfoInvkAble {
|
||||
public class Xocfg_bnd_itm implements Gfo_invk {
|
||||
private Xocfg_bnd_mgr mgr;
|
||||
public Xocfg_bnd_itm(Xocfg_bnd_mgr mgr, Xog_cmd_itm cmd, Xog_bnd_itm bnd) {
|
||||
this.mgr = mgr; this.cmd = cmd; this.bnd = bnd;
|
||||
@@ -39,7 +39,7 @@ public class Xocfg_bnd_itm implements GfoInvkAble {
|
||||
else if (ctx.Match(k, Invk_bnd_box)) return Xog_bnd_box_.Xto_gui_str(bnd.Box());
|
||||
else if (ctx.Match(k, Invk_bnd_box_idx)) return bnd.Box();
|
||||
else if (ctx.Match(k, Invk_bnd_ipt)) return mgr.Bnd_mgr().Bnd_parser().Xto_norm(bnd.Ipt().Key());
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String
|
||||
|
||||
@@ -16,9 +16,9 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.old; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
import gplx.gfui.*; import gplx.xowa.guis.bnds.*;
|
||||
import gplx.gfui.*; import gplx.gfui.ipts.*; import gplx.xowa.guis.bnds.*;
|
||||
import gplx.langs.gfs.*; import gplx.xowa.apps.gfs.*;
|
||||
public class Xocfg_bnd_itm_srl implements GfoInvkAble {
|
||||
public class Xocfg_bnd_itm_srl implements Gfo_invk {
|
||||
private Xoae_app app;
|
||||
public Xocfg_bnd_itm_srl(Xoae_app app, String key) {
|
||||
this.app = app;
|
||||
@@ -31,7 +31,7 @@ public class Xocfg_bnd_itm_srl implements GfoInvkAble {
|
||||
if (ctx.Match(k, Invk_src_)) Src_(app, this, m.ReadStr("v"));
|
||||
else if (ctx.Match(k, Invk_box_)) box = Xog_bnd_box_.Xto_sys_int(m.ReadStr("v"));
|
||||
else if (ctx.Match(k, Invk_ipt_)) ipt = IptArg_.parse(m.ReadStr("v"));
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String Invk_src_ = "src_", Invk_box_ = "box_", Invk_ipt_ = "ipt_";
|
||||
@@ -40,7 +40,7 @@ public class Xocfg_bnd_itm_srl implements GfoInvkAble {
|
||||
wtr.Add_set_eq(Key_box, Bry_.new_a7(Xog_bnd_box_.Xto_sys_str(box)));
|
||||
wtr.Add_set_eq(Key_ipt, Bry_.new_a7(ipt.Key()));
|
||||
return wtr.Bfr().To_str_and_clear();
|
||||
} private static final byte[] Key_box = Bry_.new_a7("box"), Key_ipt = Bry_.new_a7("ipt");
|
||||
} private static final byte[] Key_box = Bry_.new_a7("box"), Key_ipt = Bry_.new_a7("ipt");
|
||||
public static void Src_(Xoae_app app, Xocfg_bnd_itm_srl itm, String v) {
|
||||
Xoa_gfs_mgr gfs_mgr = app.Gfs_mgr();
|
||||
gfs_mgr.Run_str_for(itm, v);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.apps.cfgs.old; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
import gplx.gfui.*; import gplx.xowa.guis.bnds.*; import gplx.xowa.guis.cmds.*;
|
||||
import gplx.xowa.apps.fmtrs.*;
|
||||
public class Xocfg_bnd_mgr implements GfoInvkAble, Gfo_sort_able {
|
||||
public class Xocfg_bnd_mgr implements Gfo_invk, Gfo_sort_able {
|
||||
private Xog_bnd_mgr_srl bnd_mgr_srl; private Xog_cmd_mgr cmd_mgr;
|
||||
private Xoa_fmtr_sort_mgr sorter;
|
||||
public Xocfg_bnd_mgr(Xoae_app app) {
|
||||
@@ -65,7 +65,7 @@ public class Xocfg_bnd_mgr implements GfoInvkAble, Gfo_sort_able {
|
||||
else if (ctx.Match(k, Invk_set_bulk)) Set_bulk(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_init)) return Init(m.ReadStr("v"));
|
||||
else if (ctx.Match(k, Invk_show_shortcut_win)) Show_shortcut_win(m.ReadStr("uid"), m.ReadStr("name"), m.ReadStr("binding"));
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String Invk_set_bulk = "set_bulk", Invk_init = "init", Invk_show_shortcut_win = "show_shortcut_win";
|
||||
|
||||
@@ -16,14 +16,14 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.old; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
public class Xocfg_gui_mgr implements GfoInvkAble {
|
||||
public class Xocfg_gui_mgr implements Gfo_invk {
|
||||
public Xocfg_gui_mgr(Xoae_app app) {bnd_mgr = new Xocfg_bnd_mgr(app);}
|
||||
public Xocfg_tab_mgr Tab_mgr() {return tab_mgr;} private Xocfg_tab_mgr tab_mgr = new Xocfg_tab_mgr();
|
||||
public Xocfg_bnd_mgr Bnd_mgr() {return bnd_mgr;} private Xocfg_bnd_mgr bnd_mgr;
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_tabs)) return tab_mgr;
|
||||
else if (ctx.Match(k, Invk_bnds)) return bnd_mgr;
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
}
|
||||
private static final String Invk_tabs = "tabs", Invk_bnds = "bnds";
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.old; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
public class Xocfg_regy implements GfoInvkAble {
|
||||
public class Xocfg_regy implements Gfo_invk {
|
||||
public Xocfg_regy(Xoae_app app) {
|
||||
app_cfg = new Xocfg_root(app, Xocfg_root_.Tid_app);
|
||||
}
|
||||
@@ -27,7 +27,7 @@ public class Xocfg_regy implements GfoInvkAble {
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_get)) return Get_or_null(m.ReadStrOr("v", Key_app));
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
}
|
||||
private static final String Invk_get = "get";
|
||||
public static final String Key_app = null;
|
||||
|
||||
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.old; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
public class Xocfg_root implements GfoInvkAble {
|
||||
public class Xocfg_root implements Gfo_invk {
|
||||
public Xocfg_root(Xoae_app app, byte tid) {
|
||||
this.tid = tid;
|
||||
this.gui_mgr = new Xocfg_gui_mgr(app);
|
||||
@@ -25,7 +25,7 @@ public class Xocfg_root implements GfoInvkAble {
|
||||
public Xocfg_gui_mgr Gui_mgr() {return gui_mgr;} private Xocfg_gui_mgr gui_mgr;
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_gui)) return gui_mgr;
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
}
|
||||
private static final String Invk_gui = "gui";
|
||||
}
|
||||
|
||||
@@ -17,11 +17,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.old; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
import gplx.xowa.guis.views.*;
|
||||
public class Xocfg_tab_btn_mgr implements GfoInvkAble, GfoEvMgrOwner {
|
||||
public class Xocfg_tab_btn_mgr implements Gfo_invk, Gfo_evt_mgr_owner {
|
||||
public Xocfg_tab_btn_mgr() {
|
||||
evMgr = GfoEvMgr.new_(this);
|
||||
evt_mgr = new Gfo_evt_mgr(this);
|
||||
}
|
||||
public GfoEvMgr EvMgr() {return evMgr;} private GfoEvMgr evMgr;
|
||||
public Gfo_evt_mgr Evt_mgr() {return evt_mgr;} private Gfo_evt_mgr evt_mgr;
|
||||
public int Height() {return height;} private int height = 20;
|
||||
public boolean Place_on_top() {return place_on_top;} private boolean place_on_top = true;
|
||||
public boolean Curved() {return curved;} private boolean curved = false;
|
||||
@@ -32,22 +32,22 @@ public class Xocfg_tab_btn_mgr implements GfoInvkAble, GfoEvMgrOwner {
|
||||
public boolean Hide_if_one() {return hide_if_one;} public Xocfg_tab_btn_mgr Hide_if_one_(boolean v) {hide_if_one = v; return this;} private boolean hide_if_one;
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_place_on_top)) return Yn.To_str(place_on_top);
|
||||
else if (ctx.Match(k, Invk_place_on_top_)) {place_on_top = m.ReadYn("v"); GfoEvMgr_.PubVal(this, Evt_place_on_top_changed, place_on_top);}
|
||||
else if (ctx.Match(k, Invk_place_on_top_)) {place_on_top = m.ReadYn("v"); Gfo_evt_mgr_.Pub_val(this, Evt_place_on_top_changed, place_on_top);}
|
||||
else if (ctx.Match(k, Invk_curved)) return Yn.To_str(curved);
|
||||
else if (ctx.Match(k, Invk_curved_)) {curved = m.ReadYn("v"); GfoEvMgr_.PubVal(this, Evt_curved_changed, curved);}
|
||||
else if (ctx.Match(k, Invk_curved_)) {curved = m.ReadYn("v"); Gfo_evt_mgr_.Pub_val(this, Evt_curved_changed, curved);}
|
||||
else if (ctx.Match(k, Invk_height)) return height;
|
||||
else if (ctx.Match(k, Invk_height_)) {height = m.ReadInt("v"); GfoEvMgr_.PubVal(this, Evt_height_changed, height);}
|
||||
else if (ctx.Match(k, Invk_height_)) {height = m.ReadInt("v"); Gfo_evt_mgr_.Pub_val(this, Evt_height_changed, height);}
|
||||
else if (ctx.Match(k, Invk_close_visible)) return Yn.To_str(close_visible);
|
||||
else if (ctx.Match(k, Invk_close_visible_)) {close_visible = m.ReadYn("v"); GfoEvMgr_.PubVal(this, Evt_close_visible_changed, close_visible);}
|
||||
else if (ctx.Match(k, Invk_close_visible_)) {close_visible = m.ReadYn("v"); Gfo_evt_mgr_.Pub_val(this, Evt_close_visible_changed, close_visible);}
|
||||
else if (ctx.Match(k, Invk_unselected_close_visible)) return Yn.To_str(unselected_close_visible);
|
||||
else if (ctx.Match(k, Invk_unselected_close_visible_)) {unselected_close_visible = m.ReadYn("v"); GfoEvMgr_.PubVal(this, Evt_unselected_close_visible_changed, unselected_close_visible);}
|
||||
else if (ctx.Match(k, Invk_unselected_close_visible_)) {unselected_close_visible = m.ReadYn("v"); Gfo_evt_mgr_.Pub_val(this, Evt_unselected_close_visible_changed, unselected_close_visible);}
|
||||
else if (ctx.Match(k, Invk_text_min_chars)) return text_min_chars;
|
||||
else if (ctx.Match(k, Invk_text_min_chars_)) {text_min_chars = m.ReadInt("v"); GfoEvMgr_.PubVal(this, Evt_text_min_chars_changed, text_min_chars);}
|
||||
else if (ctx.Match(k, Invk_text_min_chars_)) {text_min_chars = m.ReadInt("v"); Gfo_evt_mgr_.Pub_val(this, Evt_text_min_chars_changed, text_min_chars);}
|
||||
else if (ctx.Match(k, Invk_text_max_chars)) return text_max_chars;
|
||||
else if (ctx.Match(k, Invk_text_max_chars_)) {text_max_chars = m.ReadInt("v"); GfoEvMgr_.PubVal(this, Evt_text_max_chars_changed, text_max_chars);}
|
||||
else if (ctx.Match(k, Invk_text_max_chars_)) {text_max_chars = m.ReadInt("v"); Gfo_evt_mgr_.Pub_val(this, Evt_text_max_chars_changed, text_max_chars);}
|
||||
else if (ctx.Match(k, Invk_hide_if_one)) return Yn.To_str(hide_if_one);
|
||||
else if (ctx.Match(k, Invk_hide_if_one_)) {hide_if_one = m.ReadYn("v"); GfoEvMgr_.PubVal(this, Evt_hide_if_one_changed, hide_if_one);}
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else if (ctx.Match(k, Invk_hide_if_one_)) {hide_if_one = m.ReadYn("v"); Gfo_evt_mgr_.Pub_val(this, Evt_hide_if_one_changed, hide_if_one);}
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String
|
||||
|
||||
@@ -16,12 +16,12 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.old; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
public class Xocfg_tab_mgr implements GfoInvkAble {
|
||||
public class Xocfg_tab_mgr implements Gfo_invk {
|
||||
public Xocfg_tab_new_mgr New_mgr() {return new_mgr;} private Xocfg_tab_new_mgr new_mgr = new Xocfg_tab_new_mgr();
|
||||
public Xocfg_tab_btn_mgr Btn_mgr() {return btn_mgr;} private Xocfg_tab_btn_mgr btn_mgr = new Xocfg_tab_btn_mgr();
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_new)) return new_mgr;
|
||||
else if (ctx.Match(k, Invk_btns)) return btn_mgr;
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
} private static final String Invk_new = "new", Invk_btns = "btns";
|
||||
}
|
||||
|
||||
@@ -16,13 +16,13 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.apps.cfgs.old; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.cfgs.*;
|
||||
public class Xocfg_tab_new_mgr implements GfoInvkAble {
|
||||
public class Xocfg_tab_new_mgr implements Gfo_invk {
|
||||
public byte Insert_pos() {return insert_pos;} private byte insert_pos = Xocfg_new_tab_pos.Tid_cur_nxt;
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_insert_pos)) return Xocfg_new_tab_pos.Xto_str(insert_pos);
|
||||
else if (ctx.Match(k, Invk_insert_pos_)) insert_pos = Xocfg_new_tab_pos.Xto_tid(m.ReadStr("v"));
|
||||
else if (ctx.Match(k, Invk_insert_pos_list)) return Xocfg_new_tab_pos.Options__all;
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String Invk_insert_pos = "insert_pos", Invk_insert_pos_ = "insert_pos_", Invk_insert_pos_list = "insert_pos_list";
|
||||
|
||||
Reference in New Issue
Block a user