mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
Gui: Update colors dynamically when changed from options screen
This commit is contained in:
@@ -91,6 +91,7 @@ public class Xoa_gui_mgr implements Gfo_evt_itm, Gfo_invk {
|
||||
menu_mgr.Menu_bldr().Init_by_kit(app, kit, app.Fsys_mgr().Bin_xowa_file_dir().GenSubDir_nest("app.menu"));
|
||||
menu_mgr.Init_by_kit();
|
||||
bnd_mgr.Init_by_kit(app);
|
||||
nightmode_mgr.Init_by_kit(app);
|
||||
Gfo_evt_mgr_.Sub_same_many(app.Usere(), this, Xoue_user.Evt_lang_changed);
|
||||
app.Sys_cfg().Lang_(app.Sys_cfg().Lang()); // NOTE: force refresh of lang. must occur after after gui_mgr init, else menu lbls will break
|
||||
}
|
||||
|
||||
@@ -16,49 +16,23 @@ 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.*;
|
||||
import gplx.xowa.specials.xowa.default_tab.*;
|
||||
public class Xog_nightmode_mgr {
|
||||
public class Xog_nightmode_mgr implements Gfo_invk {
|
||||
private Xoae_app app;
|
||||
private boolean enabled;
|
||||
private Xog_win_itm win;
|
||||
private GfuiElemBase[] backcolor_elems, forecolor_elems;
|
||||
public void Init_by_app(Xoae_app app) {
|
||||
this.app = app;
|
||||
this.win = app.Gui_mgr().Browser_win();
|
||||
app.Cfg().Sub_many_app(this
|
||||
, Cfg__enabled
|
||||
, Cfg__night_back, Cfg__night_fore, Cfg__night_edge
|
||||
, Cfg__day_back, Cfg__day_fore, Cfg__day_edge
|
||||
);
|
||||
}
|
||||
public boolean Enabled() {return enabled;}
|
||||
public void Enabled_by_cfg() {
|
||||
Enabled_(app.Cfg().Get_bool_app_or(Cfg__nightmode_enabled, false));
|
||||
}
|
||||
public void Enabled_toggle() {
|
||||
boolean val = !enabled;
|
||||
Enabled_(val);
|
||||
app.Cfg().Set_bool_app(Cfg__nightmode_enabled, val);
|
||||
}
|
||||
private void Enabled_(boolean v) {
|
||||
this.enabled = v;
|
||||
|
||||
// get colors
|
||||
ColorAdp backcolor, forecolor, edgecolor;
|
||||
if (enabled) {
|
||||
backcolor = Parse_from_cfg(app, "xowa.gui.nightmode.nightcolors.backcolor", ColorAdp_.White);
|
||||
forecolor = Parse_from_cfg(app, "xowa.gui.nightmode.nightcolors.forecolor", ColorAdp_.Black);
|
||||
edgecolor = Parse_from_cfg(app, "xowa.gui.nightmode.nightcolors.edgecolor", ColorAdp_.LightGray);
|
||||
}
|
||||
else {
|
||||
backcolor = Parse_from_cfg(app, "xowa.gui.nightmode.daycolors.backcolor", ColorAdp_.Black);
|
||||
forecolor = Parse_from_cfg(app, "xowa.gui.nightmode.daycolors.forecolor", ColorAdp_.White);
|
||||
edgecolor = Parse_from_cfg(app, "xowa.gui.nightmode.daycolors.edgecolor", ColorAdp_.Black);
|
||||
}
|
||||
|
||||
// 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);
|
||||
|
||||
public void Init_by_kit(Xoae_app app) {
|
||||
// set back / fore for other elems
|
||||
GfuiElemBase[] elems = new GfuiElemBase[]
|
||||
this.backcolor_elems = this.forecolor_elems = new GfuiElemBase[]
|
||||
{ win.Toolbar_grp()
|
||||
, win.Go_bwd_btn()
|
||||
, win.Go_fwd_btn()
|
||||
@@ -73,16 +47,58 @@ public class Xog_nightmode_mgr {
|
||||
, 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);
|
||||
}
|
||||
private void Set_color(int color_group_type, ColorAdp color) {
|
||||
if (color == null) return; // null passed by invk
|
||||
switch (color_group_type) {
|
||||
case COLOR_GROUP_BACK:
|
||||
win.Win_box().BackColor_(color);
|
||||
win.Tab_mgr().Tab_mgr().BackColor_(color);
|
||||
win.Tab_mgr().Tab_mgr().Btns_selected_background_(color);
|
||||
win.Tab_mgr().Tab_mgr().Btns_unselected_background_(color);
|
||||
for (GfuiElemBase elem : backcolor_elems)
|
||||
elem.BackColor_(color);
|
||||
win.Prog_box().Border_color_(color);
|
||||
break;
|
||||
case COLOR_GROUP_FORE:
|
||||
win.Tab_mgr().Tab_mgr().Btns_selected_foreground_(color);
|
||||
win.Tab_mgr().Tab_mgr().Btns_unselected_foreground_(color);
|
||||
for (GfuiElemBase elem : forecolor_elems)
|
||||
elem.ForeColor_(color);
|
||||
break;
|
||||
case COLOR_GROUP_EDGE:
|
||||
win.Url_box().Border_color_(color);
|
||||
win.Search_box().Border_color_(color);
|
||||
win.Find_box().Border_color_(color);
|
||||
break;
|
||||
}
|
||||
|
||||
// change button icons
|
||||
}
|
||||
public boolean Enabled() {return enabled;}
|
||||
public void Enabled_by_cfg() {
|
||||
Enabled_(app.Cfg().Get_bool_app_or(Cfg__enabled, false));
|
||||
}
|
||||
public void Enabled_(boolean v) {
|
||||
// set enabled
|
||||
this.enabled = v;
|
||||
|
||||
// set colors
|
||||
ColorAdp backcolor, forecolor, edgecolor;
|
||||
if (enabled) {
|
||||
backcolor = Parse_from_cfg(app, Cfg__night_back, ColorAdp_.White);
|
||||
forecolor = Parse_from_cfg(app, Cfg__night_fore, ColorAdp_.Black);
|
||||
edgecolor = Parse_from_cfg(app, Cfg__night_edge, ColorAdp_.LightGray);
|
||||
}
|
||||
else {
|
||||
backcolor = Parse_from_cfg(app, Cfg__day_back, ColorAdp_.Black);
|
||||
forecolor = Parse_from_cfg(app, Cfg__day_fore, ColorAdp_.White);
|
||||
edgecolor = Parse_from_cfg(app, Cfg__day_edge, ColorAdp_.Black);
|
||||
}
|
||||
Set_color(COLOR_GROUP_BACK, backcolor);
|
||||
Set_color(COLOR_GROUP_FORE, forecolor);
|
||||
Set_color(COLOR_GROUP_EDGE, edgecolor);
|
||||
|
||||
// set button icons
|
||||
// note that nightmode needs 16px and unresized b/c swt interpolates white pixels when resizing images (even when downsizing?)
|
||||
// note that daymode needs 32px and resized b/c resizing "blurs" image which looks better
|
||||
Io_url img_dir = app.Fsys_mgr().Bin_xowa_file_dir().GenSubDir_nest("app.window", enabled ? "16px" : "32px");
|
||||
@@ -94,8 +110,32 @@ public class Xog_nightmode_mgr {
|
||||
win.Find_bwd_btn().Btn_img_(app.Gui_mgr().Kit().New_img_load(img_dir.GenSubFil("find_bwd.png")));
|
||||
win.Find_fwd_btn().Btn_img_(app.Gui_mgr().Kit().New_img_load(img_dir.GenSubFil("find_fwd.png")));
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Cfg__enabled)) {this.Enabled_(m.ReadBool("v")); app.Api_root().Gui().Browser().Nightmode_reload();}
|
||||
else if (ctx.MatchIn(k, Cfg__night_back)) {if (enabled) this.Set_color(COLOR_GROUP_BACK, Parse(k, m.ReadStr("v"), null));}
|
||||
else if (ctx.MatchIn(k, Cfg__night_fore)) {if (enabled) this.Set_color(COLOR_GROUP_FORE, Parse(k, m.ReadStr("v"), null));}
|
||||
else if (ctx.MatchIn(k, Cfg__night_edge)) {if (enabled) this.Set_color(COLOR_GROUP_EDGE, Parse(k, m.ReadStr("v"), null));}
|
||||
else if (ctx.MatchIn(k, Cfg__day_back)) {if (!enabled) this.Set_color(COLOR_GROUP_BACK, Parse(k, m.ReadStr("v"), null));}
|
||||
else if (ctx.MatchIn(k, Cfg__day_fore)) {if (!enabled) this.Set_color(COLOR_GROUP_FORE, Parse(k, m.ReadStr("v"), null));}
|
||||
else if (ctx.MatchIn(k, Cfg__day_edge)) {if (!enabled) this.Set_color(COLOR_GROUP_EDGE, Parse(k, m.ReadStr("v"), null));}
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
public static final String
|
||||
Cfg__enabled = "xowa.gui.nightmode.enabled"
|
||||
, Cfg__night_back = "xowa.gui.nightmode.nightcolors.backcolor"
|
||||
, Cfg__night_fore = "xowa.gui.nightmode.nightcolors.forecolor"
|
||||
, Cfg__night_edge = "xowa.gui.nightmode.nightcolors.edgecolor"
|
||||
, Cfg__day_back = "xowa.gui.nightmode.daycolors.backcolor"
|
||||
, Cfg__day_fore = "xowa.gui.nightmode.daycolors.forecolor"
|
||||
, Cfg__day_edge = "xowa.gui.nightmode.daycolors.edgecolor"
|
||||
;
|
||||
|
||||
private static final int COLOR_GROUP_BACK = 0, COLOR_GROUP_FORE = 1, COLOR_GROUP_EDGE = 2;
|
||||
private static ColorAdp Parse_from_cfg(Xoa_app app, String key, ColorAdp or) {
|
||||
String val = app.Cfg().Get_str_app_or(key, null);
|
||||
return Parse(key, app.Cfg().Get_str_app_or(key, null), or);
|
||||
}
|
||||
private static ColorAdp Parse(String key, String val, ColorAdp or) {
|
||||
try {
|
||||
return val == null ? or : ColorAdp_.parse_hex_("#00" + val); // parse_hex requires leading "#00"
|
||||
} catch (Exception e) {
|
||||
@@ -103,5 +143,4 @@ public class Xog_nightmode_mgr {
|
||||
return or;
|
||||
}
|
||||
}
|
||||
private static final String Cfg__nightmode_enabled = "xowa.gui.nightmode.enabled";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user