diff --git a/150_gfui/src/gplx/gfui/kits/swts/Swt_html.java b/150_gfui/src/gplx/gfui/kits/swts/Swt_html.java index c71740521..c36f8a85e 100644 --- a/150_gfui/src/gplx/gfui/kits/swts/Swt_html.java +++ b/150_gfui/src/gplx/gfui/kits/swts/Swt_html.java @@ -25,6 +25,8 @@ import gplx.gfui.controls.gxws.Gxw_html; import gplx.gfui.controls.gxws.Gxw_html_load_tid_; import gplx.gfui.controls.standards.Gfui_html; import gplx.gfui.controls.standards.Gfui_tab_mgr; +import gplx.gfui.draws.ColorAdp; +import gplx.gfui.draws.ColorAdp_; import gplx.gfui.ipts.*; import gplx.gfui.kits.core.Swt_kit; @@ -62,6 +64,7 @@ public class Swt_html implements Gxw_html, Swt_control, FocusListener, Gfo_evt_m browser.addFocusListener(this); browser.addTitleListener(new Swt_html_lnr_title(this)); browser.addMouseWheelListener(new Swt_html_lnr_wheel(this)); + // browser.addOpenWindowListener(new Swt_open_window_listener(this)); // handle target='blank' // browser.addTraverseListener(new Swt_html_lnr_Traverse(this)); } @@ -74,7 +77,7 @@ public class Swt_html implements Gxw_html, Swt_control, FocusListener, Gfo_evt_m public String Load_by_url_path() {return load_by_url_path;} private String load_by_url_path; public void Html_doc_html_load_by_mem(String html) { this.html_doc_html_load_tid = Gxw_html_load_tid_.Tid_mem; - this.load_by_url_path = null; + this.load_by_url_path = null; browser.setText(html); // DBG: Io_mgr.I.SaveFilStr(Io_url_.new_fil_("C:\\temp.txt"), s) } public void Html_doc_html_load_by_url(Io_url path, String html) { diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/files/Xoax_builds_files_addon.java b/400_xowa/src/gplx/xowa/addons/bldrs/files/Xoax_builds_files_addon.java index 6d4c9e51a..5a8ee7b5a 100644 --- a/400_xowa/src/gplx/xowa/addons/bldrs/files/Xoax_builds_files_addon.java +++ b/400_xowa/src/gplx/xowa/addons/bldrs/files/Xoax_builds_files_addon.java @@ -19,6 +19,7 @@ import gplx.xowa.addons.bldrs.files.cmds.*; import gplx.xowa.addons.bldrs.mass_parses.inits.*; import gplx.xowa.addons.bldrs.mass_parses.parses.*; import gplx.xowa.addons.bldrs.mass_parses.makes.*; import gplx.xowa.addons.bldrs.mass_parses.resumes.*; import gplx.xowa.addons.bldrs.files.cksums.*; import gplx.xowa.addons.bldrs.files.checks.*; import gplx.xowa.addons.bldrs.app_cfgs.wm_server_cfgs.*; +import gplx.xowa.addons.bldrs.files.missing_origs.*; public class Xoax_builds_files_addon implements Xoax_addon_itm, Xoax_addon_itm__bldr { public Xob_cmd[] Bldr_cmds() { return new Xob_cmd[] @@ -26,7 +27,7 @@ public class Xoax_builds_files_addon implements Xoax_addon_itm, Xoax_addon_itm__ , Xobldr__lnki_regy__create.Prototype , Xobldr__page_regy__create.Prototype , Xobldr__orig_regy__create.Prototype - , Xobldr__orig_regy__find_missing.Prototype + , Xobldr_missing_origs_cmd.Prototype , Xobldr__xfer_temp__insert_thm.Prototype , Xobldr__xfer_temp__insert_orig.Prototype , Xobldr__xfer_regy__create.Prototype diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/files/cmds/Xobldr__orig_regy__find_missing.java b/400_xowa/src/gplx/xowa/addons/bldrs/files/missing_origs/Xobldr_missing_origs_cmd.java similarity index 82% rename from 400_xowa/src/gplx/xowa/addons/bldrs/files/cmds/Xobldr__orig_regy__find_missing.java rename to 400_xowa/src/gplx/xowa/addons/bldrs/files/missing_origs/Xobldr_missing_origs_cmd.java index d89346f17..9cf9174a3 100644 --- a/400_xowa/src/gplx/xowa/addons/bldrs/files/cmds/Xobldr__orig_regy__find_missing.java +++ b/400_xowa/src/gplx/xowa/addons/bldrs/files/missing_origs/Xobldr_missing_origs_cmd.java @@ -13,21 +13,21 @@ The terms of each license can be found in the source code repository: GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt */ -package gplx.xowa.addons.bldrs.files.cmds; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.bldrs.*; import gplx.xowa.addons.bldrs.files.*; +package gplx.xowa.addons.bldrs.files.missing_origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.bldrs.*; import gplx.xowa.addons.bldrs.files.*; import gplx.dbs.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wkrs.*; import gplx.xowa.files.*; import gplx.xowa.files.origs.*; import gplx.xowa.apps.wms.apis.origs.*; import gplx.xowa.addons.bldrs.files.dbs.*; -public class Xobldr__orig_regy__find_missing extends Xob_cmd__base { +public class Xobldr_missing_origs_cmd extends Xob_cmd__base { private int fail_max = 100000; - public Xobldr__orig_regy__find_missing(Xob_bldr bldr, Xowe_wiki wiki) {super(bldr, wiki);} + public Xobldr_missing_origs_cmd(Xob_bldr bldr, Xowe_wiki wiki) {super(bldr, wiki);} @Override public void Cmd_run() { // got orig_tbl Db_conn conn = Xob_db_file.New__file_make(wiki.Fsys_mgr().Root_dir()).Conn(); Xob_orig_regy_tbl.Create_table(conn); // get counts; fail if too many - int fail_count = conn.Exec_select_count_as_int("orig_regy", 0); + int fail_count = conn.Exec_sql(Db_sql_.Make_by_fmt(String_.Ary("SELECT Count(lnki_ttl) FROM orig_regy WHERE orig_page_id IS NULL"))); if (fail_count > fail_max) throw Err_.new_wo_type("bldr.find_missing: too many missing: missing=~{0} max=~{1}", fail_count, fail_max); Gfo_usr_dlg_.Instance.Note_many("", "", "bldr.find_missing: found=~{0}", fail_count); @@ -70,7 +70,8 @@ public class Xobldr__orig_regy__find_missing extends Xob_cmd__base { for (int i = 0; i < len; i++) { Xof_fsdb_itm itm = (Xof_fsdb_itm)list.Get_at(i); update_stmt - .Val_int("orig_w", itm.Orig_w()).Val_int("orig_h", itm.Orig_h()) + .Val_int("orig_w", itm.Orig_w()) + .Val_int("orig_h", itm.Orig_h()) .Crt_bry_as_str("lnki_ttl", itm.Lnki_ttl()).Exec_update(); } conn.Txn_end(); @@ -83,6 +84,6 @@ public class Xobldr__orig_regy__find_missing extends Xob_cmd__base { public static final String BLDR_CMD_KEY = "file.orig_regy.find_missing"; @Override public String Cmd_key() {return BLDR_CMD_KEY;} - public static final Xob_cmd Prototype = new Xobldr__orig_regy__find_missing(null, null); - @Override public Xob_cmd Cmd_clone(Xob_bldr bldr, Xowe_wiki wiki) {return new Xobldr__orig_regy__find_missing(bldr, wiki);} + public static final Xob_cmd Prototype = new Xobldr_missing_origs_cmd(null, null); + @Override public Xob_cmd Cmd_clone(Xob_bldr bldr, Xowe_wiki wiki) {return new Xobldr_missing_origs_cmd(bldr, wiki);} } diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/files/missing_origs/Xobldr_missing_origs_wmfapi.java b/400_xowa/src/gplx/xowa/addons/bldrs/files/missing_origs/Xobldr_missing_origs_wmfapi.java new file mode 100644 index 000000000..723ba1f9e --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/bldrs/files/missing_origs/Xobldr_missing_origs_wmfapi.java @@ -0,0 +1,95 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012-2017 gnosygnu@gmail.com + +XOWA is licensed under the terms of the General Public License (GPL) Version 3, +or alternatively under the terms of the Apache License Version 2.0. + +You may use XOWA according to either of these licenses as is most appropriate +for your project on a case-by-case basis. + +The terms of each license can be found in the source code repository: + +GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt +Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt +*/ +package gplx.xowa.addons.bldrs.files.missing_origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.bldrs.*; import gplx.xowa.addons.bldrs.files.*; +import gplx.langs.htmls.encoders.*; +import gplx.langs.jsons.*; +import gplx.xowa.files.repos.*; +import gplx.xowa.files.downloads.*; +import gplx.xowa.apps.wms.apis.origs.*; +public class Xobldr_missing_origs_wmfapi { +// private final Xoapi_orig_base orig_api; +// private final Xof_download_wkr download_wkr; +// private final Xow_repo_mgr repo_mgr; +// private final byte[] wiki_domain; +// private final Xoapi_orig_rslts api_rv = new Xoapi_orig_rslts(); + public Xobldr_missing_origs_wmfapi(Xoapi_orig_base orig_api, Xof_download_wkr download_wkr, Xow_repo_mgr repo_mgr, byte[] wiki_domain) { +// this.orig_api = orig_api; +// this.download_wkr = download_wkr; +// this.repo_mgr = repo_mgr; +// this.wiki_domain = wiki_domain; + } + public void Find_by_list(Ordered_hash src, Ordered_hash trg, String api_domain, int idx) { + // fail if web access disabled + if (!gplx.core.ios.IoEngine_system.Web_access_enabled) { + throw Err_.new_wo_type("web access must be enabled for missing_origs cmd"); + } + +// Json_parser parser = new Json_parser(); + Gfo_url_encoder encoder = Gfo_url_encoder_.New__http_url().Make(); + Bry_bfr bfr = Bry_bfr_.New(); + int len = src.Len(); + try { + // loop until all titles found + while (idx < len) { + // generate super api; EX: https://commons.wikimedia.org/w/api.php?action=query&format=xml&prop=imageinfo&iiprop=size|url|mediatype|mime|bitdepth|timestamp|size|sha1&redirects&iilimit=500&titles= + bfr.Add_str_a7("https://"); + bfr.Add_str_a7(api_domain); + bfr.Add_str_a7("/w/api.php?action=query"); + bfr.Add_str_a7("&format=json"); // json easier to use than xml + bfr.Add_str_a7("&iilimit=1"); // limit to 1 revision history (default will return more); EX:File:Different_Faces_Neptune.jpg + bfr.Add_str_a7("&redirects"); // show redirects + bfr.Add_str_a7("&prop=imageinfo&iiprop=size|url|mediatype|mime|bitdepth|timestamp|size|sha1"); // list of props + bfr.Add_str_a7("&titles="); + + // add titles; EX: File:A.png|File:B.png| + for (int i = idx; i < idx + 500; i++) { + Xobldr_missing_origs_item item = (Xobldr_missing_origs_item)src.Get_at(i); + Xoa_ttl ttl = item.Lnki_ttl(); + + // skip "|" if first + if (i != idx) bfr.Add_byte_pipe(); + + // make ttl_bry so (a) namespace is present (EX:File:); (b) spaces are present (not underscores) + byte[] ttl_bry = ttl.Full_txt_wo_qarg(); + ttl_bry = encoder.Encode(ttl_bry); + bfr.Add(ttl_bry); + } + + // call api +// byte[] rslt = download_wkr.Download_xrg().Exec_as_bry(bfr.To_bry_and_clear()); + + // deserialize +// Json_doc jdoc = parser.Parse(rslt); + + // loop over /query/pages + // for each node, deserialize orig info and add to hash by "title" + // loop over /query/redirects + // for each node, retrieve from hash by "to"; add "from" as prop + // loop over hash + // for each item, retrieve from src; copy props over + } + } catch (Exception e) { + Gfo_usr_dlg_.Instance.Warn_many("", "", "missing_origs:failure while calling wmf_api; domain=~{0} idx=~{1} err=~{2}", api_domain, idx, Err_.Message_gplx_log(e)); + } + } +} +class Xobldr_missing_origs_item { + private final Xoa_ttl lnki_ttl; + public Xobldr_missing_origs_item(Xoa_ttl lnki_ttl) { + this.lnki_ttl = lnki_ttl; + } + public Xoa_ttl Lnki_ttl() {return lnki_ttl;} +} diff --git a/400_xowa/src/gplx/xowa/apps/apis/xowa/gui/Xoapi_browser.java b/400_xowa/src/gplx/xowa/apps/apis/xowa/gui/Xoapi_browser.java index 2dc37f565..9c35ce16d 100644 --- a/400_xowa/src/gplx/xowa/apps/apis/xowa/gui/Xoapi_browser.java +++ b/400_xowa/src/gplx/xowa/apps/apis/xowa/gui/Xoapi_browser.java @@ -16,7 +16,9 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt package gplx.xowa.apps.apis.xowa.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.gui.browsers.*; public class Xoapi_browser implements Gfo_invk { + private Xoae_app app; public void Init_by_kit(Xoae_app app) { + this.app = app; url.Init_by_kit(app); tabs.Init_by_kit(app); html.Init_by_kit(app); @@ -34,6 +36,9 @@ public class Xoapi_browser implements Gfo_invk { public Xoapi_prog Prog() {return prog;} private Xoapi_prog prog = new Xoapi_prog(); public Xoapi_info Info() {return info;} private Xoapi_info info = new Xoapi_info(); public Xoapi_prog_log Prog_log() {return prog_log;} private Xoapi_prog_log prog_log = new Xoapi_prog_log(); + private void Nightmode_toggle() { + app.Gui_mgr().Nightmode_mgr().Enabled_toggle_(); + } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_url)) return url; else if (ctx.Match(k, Invk_tabs)) return tabs; @@ -43,9 +48,13 @@ public class Xoapi_browser implements Gfo_invk { else if (ctx.Match(k, Invk_prog)) return prog; else if (ctx.Match(k, Invk_info)) return info; else if (ctx.Match(k, Invk_prog_log)) return prog_log; + else if (ctx.Match(k, Invk__nightmode_toggle)) Nightmode_toggle(); else return Gfo_invk_.Rv_unhandled; + return this; } private static final String Invk_url = "url", Invk_tabs = "tabs", Invk_html = "html", Invk_search = "search" - , Invk_find = "find", Invk_prog = "prog", Invk_info = "info", Invk_prog_log = "prog_log"; + , Invk_find = "find", Invk_prog = "prog", Invk_info = "info", Invk_prog_log = "prog_log" + , Invk__nightmode_toggle = "nightmode_toggle" + ; } diff --git a/400_xowa/src/gplx/xowa/guis/Xoa_gui_mgr.java b/400_xowa/src/gplx/xowa/guis/Xoa_gui_mgr.java index 48249b1d2..8a31209f9 100644 --- a/400_xowa/src/gplx/xowa/guis/Xoa_gui_mgr.java +++ b/400_xowa/src/gplx/xowa/guis/Xoa_gui_mgr.java @@ -19,7 +19,7 @@ import gplx.gfui.*; import gplx.gfui.ipts.*; import gplx.gfui.kits.core.*; impor import gplx.xowa.addons.wikis.searchs.*; import gplx.xowa.guis.menus.*; import gplx.xowa.guis.cmds.*; import gplx.xowa.apps.cfgs.*; import gplx.xowa.users.*; import gplx.xowa.langs.*; import gplx.xowa.guis.bnds.*; import gplx.xowa.guis.views.*; import gplx.xowa.guis.urls.url_macros.*; import gplx.xowa.addons.wikis.searchs.gui.htmlbars.*; -import gplx.xowa.guis.views.boots.*; +import gplx.xowa.guis.views.boots.*; import gplx.xowa.guis.views.nightmodes.*; import gplx.gfui.layouts.swts.*; public class Xoa_gui_mgr implements Gfo_evt_itm, Gfo_invk { public Xoa_gui_mgr(Xoae_app app) { @@ -41,7 +41,8 @@ public class Xoa_gui_mgr implements Gfo_evt_itm, Gfo_invk { public Xog_layout Layout() {return layout;} private Xog_layout layout = new Xog_layout(); public Xog_html_mgr Html_mgr() {return html_mgr;} private Xog_html_mgr html_mgr; public Xog_menu_mgr Menu_mgr() {return menu_mgr;} private Xog_menu_mgr menu_mgr; - public Xog_url_macro_mgr Url_macro_mgr() {return url_macro_mgr;} private Xog_url_macro_mgr url_macro_mgr = new Xog_url_macro_mgr(); + public Xog_url_macro_mgr Url_macro_mgr() {return url_macro_mgr;} private final Xog_url_macro_mgr url_macro_mgr = new Xog_url_macro_mgr(); + public Xog_nightmode_mgr Nightmode_mgr() {return nightmode_mgr;} private final Xog_nightmode_mgr nightmode_mgr = new Xog_nightmode_mgr(); public void Show_prog() { // get rects for positioning RectAdp statusbar_rect = browser_win.Statusbar_grp().Rect(); @@ -76,6 +77,7 @@ public class Xoa_gui_mgr implements Gfo_evt_itm, Gfo_invk { , new gplx.core.logs.Gfo_log_itm_wtr__csv())); } win_cfg.Init_by_app(app); + nightmode_mgr.Init_by_app(app); } public void Kit_(Gfui_kit kit) { this.kit = kit; diff --git a/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java b/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java index 14ad02010..06b5c22b8 100644 --- a/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java +++ b/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java @@ -311,6 +311,7 @@ public class Xog_bnd_mgr implements Gfo_invk { Init_itm(Xog_cmd_itm_.Key_gui_browser_info_focus , Xog_bnd_box_.Tid_browser , "mod.ca+key.i"); Init_itm(Xog_cmd_itm_.Key_gui_browser_info_clear , Xog_bnd_box_.Tid_browser , "mod.ca+key.c"); Init_itm(Xog_cmd_itm_.Key_gui_browser_prog_log_show , Xog_bnd_box_.Tid_browser_prog , "mouse.middle", "mod.cs+key.p"); + Init_itm(Xog_cmd_itm_.Key_gui_browser_nightmode_toggle , Xog_bnd_box_.Tid_browser , ""); Init_itm(Xog_cmd_itm_.Key_html_tidy_toggle , Xog_bnd_box_.Tid_browser , "key.f7"); Init_itm(Xog_cmd_itm_.Key_usr_bookmarks_add , Xog_bnd_box_.Tid_browser , ""); Init_itm(Xog_cmd_itm_.Key_usr_bookmarks_show , Xog_bnd_box_.Tid_browser , "key.f3"); diff --git a/400_xowa/src/gplx/xowa/guis/cmds/Xog_cmd_itm_.java b/400_xowa/src/gplx/xowa/guis/cmds/Xog_cmd_itm_.java index 5fcf07bb8..dad50e562 100644 --- a/400_xowa/src/gplx/xowa/guis/cmds/Xog_cmd_itm_.java +++ b/400_xowa/src/gplx/xowa/guis/cmds/Xog_cmd_itm_.java @@ -123,6 +123,7 @@ public class Xog_cmd_itm_ { , Key_gui_browser_prog_log_show = new_dflt_(Xog_ctg_itm_.Tid_browser , "xowa.gui.browser.prog_log.show") , Key_gui_browser_info_focus = new_dflt_(Xog_ctg_itm_.Tid_browser , "xowa.gui.browser.info.focus") , Key_gui_browser_info_clear = new_dflt_(Xog_ctg_itm_.Tid_browser , "xowa.gui.browser.info.clear") + , Key_gui_browser_nightmode_toggle = new_dflt_(Xog_ctg_itm_.Tid_browser , "xowa.gui.browser.nightmode_toggle") , Key_gui_menus_group_file = "xowa.gui.menus.group.file" , Key_gui_menus_group_edit = "xowa.gui.menus.group.edit" diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java b/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java index 50f1e95f9..cad1f8b8b 100644 --- a/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java +++ b/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java @@ -33,6 +33,7 @@ public class Xog_win_itm implements Gfo_invk, Gfo_evt_itm { public Xoa_gui_mgr Gui_mgr() {return gui_mgr;} private Xoa_gui_mgr gui_mgr; public GfuiWin Win_box() {return win_box;} private GfuiWin win_box; + public Gfui_grp Toolbar_grp() {return toolbar_grp;} private Gfui_grp toolbar_grp; public GfuiBtn Go_bwd_btn() {return go_bwd_btn;} private GfuiBtn go_bwd_btn; public GfuiBtn Go_fwd_btn() {return go_fwd_btn;} private GfuiBtn go_fwd_btn; public GfuiComboBox Url_box() {return url_box;} private GfuiComboBox url_box; @@ -313,7 +314,7 @@ public class Xog_win_itm implements Gfo_invk, Gfo_evt_itm { win_box.Layout_mgr_(new Swt_layout_mgr__grid().Cols_(1).Margin_w_(0).Margin_h_(0).Spacing_h_(0)); // toolbar - Gfui_grp toolbar_grp = Xog_win_itm_.new_grp(app, kit, win_box, "toolbar_grp"); + this.toolbar_grp = Xog_win_itm_.new_grp(app, kit, win_box, "toolbar_grp"); go_bwd_btn = Xog_win_itm_.new_btn(app, kit, toolbar_grp, img_dir, "go_bwd_btn", "go_bwd.png" ); go_fwd_btn = Xog_win_itm_.new_btn(app, kit, toolbar_grp, img_dir, "go_fwd_btn", "go_fwd.png" ); url_box = Xog_win_itm_.new_cbo(app, kit, toolbar_grp, ui_font, "url_box" , true); diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm_.java b/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm_.java index 7504c0a50..2b49b3786 100644 --- a/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm_.java +++ b/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm_.java @@ -20,55 +20,28 @@ import gplx.xowa.guis.langs.*; public class Xog_win_itm_ { public static void Show_win(Xog_win_itm win) { Xoae_app app = win.App(); GfuiWin win_box = win.Win_box(); - win_box.Focus_able_(false); - win_box.BackColor_(ColorAdp_.White); - win.Tab_mgr().Tab_mgr().BackColor_(ColorAdp_.White); - win.Tab_mgr().Tab_mgr().Btns_selected_foreground_(ColorAdp_.Black); - win.Tab_mgr().Tab_mgr().Btns_selected_background_(ColorAdp_.White); - win.Tab_mgr().Tab_mgr().Btns_unselected_foreground_(ColorAdp_.Black); - win.Tab_mgr().Tab_mgr().Btns_unselected_background_(ColorAdp_.White); - -// win_box.BackColor_(ColorAdp_.Black); -// win.Tab_mgr().Tab_mgr().BackColor_(ColorAdp_.Black); -// win.Tab_mgr().Tab_mgr().Btns_selected_foreground_(ColorAdp_.White); -// win.Tab_mgr().Tab_mgr().Btns_selected_background_(ColorAdp_.Black); -// win.Tab_mgr().Tab_mgr().Btns_unselected_foreground_(ColorAdp_.White); -// win.Tab_mgr().Tab_mgr().Btns_unselected_background_(ColorAdp_.Black); - + app.Gui_mgr().Nightmode_mgr().Enabled_dflt_(); Xog_startup_win_.Startup(app, win_box); win_box.Icon_(IconAdp.file_or_blank(app.Fsys_mgr().Bin_xowa_dir().GenSubFil_nest("file", "app.window", "app_icon.png"))); } public static Gfui_grp new_grp(Xoae_app app, Gfui_kit kit, GfuiElem win, String id) { - Gfui_grp rv = kit.New_grp(id, win); - rv.BackColor_(ColorAdp_.White); -// rv.BackColor_(ColorAdp_.Black); - return rv; + return kit.New_grp(id, win); } public static GfuiBtn new_btn(Xoae_app app, Gfui_kit kit, GfuiElem win, Io_url img_dir, String id, String file) { GfuiBtn rv = kit.New_btn(id, win); rv.Btn_img_(kit.New_img_load(img_dir.GenSubFil(file))); - rv.ForeColor_(ColorAdp_.Black).BackColor_(ColorAdp_.White); -// rv.ForeColor_(ColorAdp_.White).BackColor_(ColorAdp_.Black); return rv; } public static GfuiComboBox new_cbo(Xoae_app app, Gfui_kit kit, GfuiElem win, FontAdp ui_font, String id, boolean border_on) { GfuiComboBox rv = kit.New_combo(id, win, Keyval_.new_(GfuiTextBox.CFG_border_on_, border_on)); rv.TextMgr().Font_(ui_font); - rv.ForeColor_(ColorAdp_.Black).BackColor_(ColorAdp_.White); - rv.Border_color_(ColorAdp_.LightGray); -// rv.ForeColor_(ColorAdp_.White).BackColor_(ColorAdp_.Black); -// rv.Border_color_(ColorAdp_.Black); return rv; } public static GfuiTextBox new_txt(Xoae_app app, Gfui_kit kit, GfuiElem win, FontAdp ui_font, String id, boolean border_on) { GfuiTextBox rv = kit.New_text_box(id, win, Keyval_.new_(GfuiTextBox.CFG_border_on_, border_on)); rv.TextMgr().Font_(ui_font); - rv.ForeColor_(ColorAdp_.Black).BackColor_(ColorAdp_.White); - rv.Border_color_(border_on ? ColorAdp_.LightGray : rv.BackColor()); -// rv.ForeColor_(ColorAdp_.White).BackColor_(ColorAdp_.Black); -// rv.Border_color_(border_on ? ColorAdp_.Black : rv.BackColor()); return rv; } public static void Update_tiptext(Xoae_app app, GfuiElem elem, int tiptext_id) { diff --git a/400_xowa/src/gplx/xowa/guis/views/nightmodes/Xog_nightmode_mgr.java b/400_xowa/src/gplx/xowa/guis/views/nightmodes/Xog_nightmode_mgr.java new file mode 100644 index 000000000..01f4307ce --- /dev/null +++ b/400_xowa/src/gplx/xowa/guis/views/nightmodes/Xog_nightmode_mgr.java @@ -0,0 +1,80 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012-2017 gnosygnu@gmail.com + +XOWA is licensed under the terms of the General Public License (GPL) Version 3, +or alternatively under the terms of the Apache License Version 2.0. + +You may use XOWA according to either of these licenses as is most appropriate +for your project on a case-by-case basis. + +The terms of each license can be found in the source code repository: + +GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt +Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt +*/ +package gplx.xowa.guis.views.nightmodes; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*; import gplx.xowa.guis.views.*; +import gplx.gfui.controls.elems.*; import gplx.gfui.draws.*; +public class Xog_nightmode_mgr { + private boolean enabled; + private Xog_win_itm win; + public void Init_by_app(Xoae_app app) { + this.win = app.Gui_mgr().Browser_win(); + } + public boolean Enabled() {return enabled;} + public void Enabled_dflt_() { + Enabled_(false); + } + public void Enabled_toggle_() { + Enabled_(!enabled); + } + private void Enabled_(boolean v) { + this.enabled = v; + + // get colors + ColorAdp backcolor, forecolor, edgecolor; + if (enabled) { + backcolor = ColorAdp_.Black; + forecolor = ColorAdp_.White; + edgecolor = ColorAdp_.Black; + } + else { + backcolor = ColorAdp_.White; + forecolor = ColorAdp_.Black; + edgecolor = ColorAdp_.LightGray; + } + + // set back / fore for window and tab + win.Win_box().BackColor_(backcolor); + win.Tab_mgr().Tab_mgr().BackColor_(backcolor); + win.Tab_mgr().Tab_mgr().Btns_selected_background_(backcolor); + win.Tab_mgr().Tab_mgr().Btns_selected_foreground_(forecolor); + win.Tab_mgr().Tab_mgr().Btns_unselected_background_(backcolor); + win.Tab_mgr().Tab_mgr().Btns_unselected_foreground_(forecolor); + + // set back / fore for other elems + GfuiElemBase[] elems = new GfuiElemBase[] + { win.Toolbar_grp() + , win.Go_bwd_btn() + , win.Go_fwd_btn() + , win.Url_box() + , win.Url_exec_btn() + , win.Search_box() + , win.Search_exec_btn() + , win.Statusbar_grp() + , win.Find_close_btn() + , win.Find_bwd_btn() + , win.Find_fwd_btn() + , win.Find_box() + , win.Prog_box() + }; + for (GfuiElemBase elem : elems) + elem.BackColor_(backcolor).ForeColor_(forecolor); + + // set edge colors + win.Url_box().Border_color_(edgecolor); + win.Search_box().Border_color_(edgecolor); + win.Find_box().Border_color_(edgecolor); + win.Prog_box().Border_color_(backcolor); + } +} diff --git a/400_xowa/src/gplx/xowa/specials/xowa/default_tab/Default_tab_page.java b/400_xowa/src/gplx/xowa/specials/xowa/default_tab/Default_tab_page.java index 6d76b1e6b..145145576 100644 --- a/400_xowa/src/gplx/xowa/specials/xowa/default_tab/Default_tab_page.java +++ b/400_xowa/src/gplx/xowa/specials/xowa/default_tab/Default_tab_page.java @@ -19,12 +19,17 @@ public class Default_tab_page implements Xow_special_page { public void Special__gen(Xow_wiki wiki, Xoa_page pagei, Xoa_url url, Xoa_ttl ttl) { Xoae_page page = (Xoae_page)pagei; page.Db().Text().Text_bry_(Bry_.Empty); - page.Html_data().Custom_html_(DEFAULT_HTML); + + boolean nightmode_enabled = ((Xoae_app)wiki.App()).Gui_mgr().Nightmode_mgr().Enabled(); + page.Html_data().Custom_html_(nightmode_enabled ? DEFAULT_HTML_NIGHT : DEFAULT_HTML_DAY); page.Html_data().Custom_tab_name_(Tab_name_bry); } public static final byte[] Tab_name_bry = Bry_.new_a7("New Tab"); public Xow_special_page Special__clone() {return this;} - private static final byte[] DEFAULT_HTML = Bry_.new_a7(""); + private static final byte[] + DEFAULT_HTML_DAY = Bry_.new_a7("") + , DEFAULT_HTML_NIGHT = Bry_.new_a7("") + ; }