@ -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.* ;
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.gfui.controls.elems.* ; import gplx.gfui.draws.* ;
import gplx.xowa.specials.xowa.default_tab.* ;
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 Xoae_app app ;
private boolean enabled ;
private boolean enabled ;
private Xog_win_itm win ;
private Xog_win_itm win ;
private GfuiElemBase [ ] backcolor_elems , forecolor_elems ;
public void Init_by_app ( Xoae_app app ) {
public void Init_by_app ( Xoae_app app ) {
this . app = app ;
this . app = app ;
this . win = app . Gui_mgr ( ) . Browser_win ( ) ;
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 Init_by_kit ( Xoae_app app ) {
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 ) ;
// set back / fore for other elems
// set back / fore for other elems
GfuiElemBase [ ] elems = new GfuiElemBase [ ]
this . backcolor_elems = this . forecolor_elems = new GfuiElemBase [ ]
{ win . Toolbar_grp ( )
{ win . Toolbar_grp ( )
, win . Go_bwd_btn ( )
, win . Go_bwd_btn ( )
, win . Go_fwd_btn ( )
, win . Go_fwd_btn ( )
@ -73,16 +47,58 @@ public class Xog_nightmode_mgr {
, win . Find_box ( )
, win . Find_box ( )
, win . Prog_box ( )
, win . Prog_box ( )
} ;
} ;
for ( GfuiElemBase elem : elems )
}
elem . BackColor_ ( backcolor ) . ForeColor_ ( forecolor ) ;
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 ;
}
// set edge colors
}
win . Url_box ( ) . Border_color_ ( edgecolor ) ;
public boolean Enabled ( ) { return enabled ; }
win . Search_box ( ) . Border_color_ ( edgecolor ) ;
public void Enabled_by_cfg ( ) {
win . Find_box ( ) . Border_color_ ( edgecolor ) ;
Enabled_ ( app . Cfg ( ) . Get_bool_app_or ( Cfg__enabled , false ) ) ;
win . Prog_box ( ) . Border_color_ ( backcolor ) ;
}
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 ) ;
// change button icons
// set button icons
// note that nightmode needs 16px and unresized b/c swt interpolates white pixels when resizing images (even when downsizing?)
// 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
// 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" ) ;
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_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" ) ) ) ;
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 ) {
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 {
try {
return val = = null ? or : ColorAdp_ . parse_hex_ ( "#00" + val ) ; // parse_hex requires leading "#00"
return val = = null ? or : ColorAdp_ . parse_hex_ ( "#00" + val ) ; // parse_hex requires leading "#00"
} catch ( Exception e ) {
} catch ( Exception e ) {
@ -103,5 +143,4 @@ public class Xog_nightmode_mgr {
return or ;
return or ;
}
}
}
}
private static final String Cfg__nightmode_enabled = "xowa.gui.nightmode.enabled" ;
}
}