mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-21 06:45:39 -06:00
bazaar: Styler refactoring
git-svn-id: svn://ultimatepp.org/upp/trunk@5469 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
976f6c81f1
commit
412d1594e3
7 changed files with 337 additions and 318 deletions
|
|
@ -25,7 +25,7 @@ public:
|
||||||
DEEP = 0x80,
|
DEEP = 0x80,
|
||||||
|
|
||||||
DEF = VISIBLE | INVISIBLE | ENABLED | DISABLED | VIEW | FRAME | DEEP,
|
DEF = VISIBLE | INVISIBLE | ENABLED | DISABLED | VIEW | FRAME | DEEP,
|
||||||
};
|
} FLAGS;
|
||||||
|
|
||||||
CtrlFinder() : flags(DEF), filter(STDBACK(StdCtrlFilter)), multi(true) { WantFocus(); }
|
CtrlFinder() : flags(DEF), filter(STDBACK(StdCtrlFilter)), multi(true) { WantFocus(); }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
#ifndef _Gen_Misc_h_
|
#ifndef _Gen_Misc_h_
|
||||||
#define _Gen_Misc_h_
|
#define _Gen_Misc_h_
|
||||||
|
|
||||||
|
#include <Core/Core.h>
|
||||||
|
|
||||||
NAMESPACE_UPP
|
NAMESPACE_UPP
|
||||||
|
|
||||||
//some usefull interfaces
|
//some usefull interfaces
|
||||||
|
|
@ -38,8 +40,8 @@ public:
|
||||||
virtual ~GetSetData() {} //might be used as base interface
|
virtual ~GetSetData() {} //might be used as base interface
|
||||||
virtual T GetData() const = 0;
|
virtual T GetData() const = 0;
|
||||||
virtual void SetData(const T& _v) = 0;
|
virtual void SetData(const T& _v) = 0;
|
||||||
virtual T& GetRef() = 0;
|
// virtual T& GetRef() { NEVER(); Value v; return v; }
|
||||||
virtual const T& GetRef() const = 0;
|
// virtual const T& GetRef() const { NEVER(); Value v; return v; }
|
||||||
T operator~() const { return GetData(); }
|
T operator~() const { return GetData(); }
|
||||||
const T& operator<<=(const T& v) { SetData(v); return v; }
|
const T& operator<<=(const T& v) { SetData(v); return v; }
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,11 @@
|
||||||
#define IMAGEFILE <Styler/StylerCtrls.iml>
|
#define IMAGEFILE <Styler/StylerCtrls.iml>
|
||||||
#include <Draw/iml_source.h>
|
#include <Draw/iml_source.h>
|
||||||
|
|
||||||
|
Color Invert(const Color& c)
|
||||||
|
{
|
||||||
|
return Color(255-c.GetR(), 255-c.GetG(),255-c.GetB());
|
||||||
|
}
|
||||||
|
|
||||||
void ColorizeIml(Iml& target, Iml& source, const Color& c, int alpha)
|
void ColorizeIml(Iml& target, Iml& source, const Color& c, int alpha)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < target.GetCount(); i++) {
|
for(int i = 0; i < target.GetCount(); i++) {
|
||||||
|
|
@ -33,18 +38,18 @@ void ChStylerSkin(const Color& c, int blnd, const Color& fg, const Color& bg)
|
||||||
ColorizeIml(CtrlsImg::Iml(), StylerCtrlsImg::Iml(), c, 255);
|
ColorizeIml(CtrlsImg::Iml(), StylerCtrlsImg::Iml(), c, 255);
|
||||||
|
|
||||||
|
|
||||||
SColorFace_Write(Blend(c, fg, blnd)); //controls face color
|
SColorFace_Write(Blend(c, fg, min(255, blnd))); //controls face color
|
||||||
SColorShadow_Write(Blend(c, bg, blnd));
|
SColorShadow_Write(Blend(c, bg, min(255, blnd)));
|
||||||
SColorLtFace_Write(Blend(c, fg, blnd+20));
|
SColorLtFace_Write(Blend(c, fg, min(255, blnd+20)));
|
||||||
SColorDkShadow_Write(Blend(c, bg, blnd+20));
|
SColorDkShadow_Write(Blend(c, bg, min(255, blnd+20)));
|
||||||
|
|
||||||
SColorHighlight_Write(Blend(fg, c, blnd+20));
|
SColorHighlight_Write(Blend(fg, c, min(255, blnd+20)));
|
||||||
SColorDisabled_Write(Blend(bg, c, blnd+20));
|
SColorDisabled_Write(Blend(bg, c, min(255, blnd+20)));
|
||||||
|
|
||||||
SColorPaper_Write(Blend(c, fg, blnd+40)); //for lists, edits etc..
|
SColorPaper_Write(Blend(c, fg, min(255, blnd+40))); //for lists, edits etc..
|
||||||
SColorText_Write(Blend(c, bg, blnd+40));
|
SColorText_Write(Blend(c, bg, min(255, blnd+40)));
|
||||||
|
|
||||||
SColorHighlightText_Write(Blend(c, fg, blnd+60));
|
SColorHighlightText_Write(Blend(c, fg, min(255, blnd+60)));
|
||||||
|
|
||||||
SColorLight_Write(SColorHighlight());
|
SColorLight_Write(SColorHighlight());
|
||||||
|
|
||||||
|
|
@ -59,229 +64,7 @@ void ChStylerSkin(const Color& c, int blnd, const Color& fg, const Color& bg)
|
||||||
LabelBoxColor_Write(SColorHighlight());
|
LabelBoxColor_Write(SColorHighlight());
|
||||||
}
|
}
|
||||||
|
|
||||||
void StylerCtrl::ColorizedSkin()
|
void XmlizeCol(XmlIO& xml, const String& tag, Color& c)
|
||||||
{
|
|
||||||
Color c = ~mcl;
|
|
||||||
int blnd = ~bl;
|
|
||||||
Color fg = ~fgcl;
|
|
||||||
Color bg = ~bgcl;
|
|
||||||
|
|
||||||
if(Grayscale(fg)<Grayscale(bg))
|
|
||||||
{
|
|
||||||
dk <<= true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dk <<= false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChStylerSkin(c, blnd, fg, bg);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StylerCtrl::SkinAction()
|
|
||||||
{
|
|
||||||
if((int)stsw.GetData() != 2)
|
|
||||||
{
|
|
||||||
mcl.Disable();
|
|
||||||
fgcl.Disable();
|
|
||||||
bgcl.Disable();
|
|
||||||
bl.Disable();
|
|
||||||
inv.Disable();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mcl.Enable();
|
|
||||||
fgcl.Enable();
|
|
||||||
bgcl.Enable();
|
|
||||||
bl.Enable();
|
|
||||||
inv.Enable();
|
|
||||||
}
|
|
||||||
|
|
||||||
//reset
|
|
||||||
switch((int)stsw.GetData())
|
|
||||||
{
|
|
||||||
case 1: ChStdSkin(); break;
|
|
||||||
case 2: ColorizedSkin(); break;
|
|
||||||
default:
|
|
||||||
case 0: ChClassicSkin(); break;
|
|
||||||
}
|
|
||||||
|
|
||||||
RefreshGlobalStyles();
|
|
||||||
RefreshLayoutDeepAll();
|
|
||||||
UpdateAction();
|
|
||||||
}
|
|
||||||
|
|
||||||
Color Invert(const Color& c)
|
|
||||||
{
|
|
||||||
return Color(255-c.GetR(), 255-c.GetG(),255-c.GetB());
|
|
||||||
}
|
|
||||||
|
|
||||||
void StylerCtrl::InvertAction()
|
|
||||||
{
|
|
||||||
Color c = ~mcl;
|
|
||||||
Color fg = ~fgcl;
|
|
||||||
Color bg = ~bgcl;
|
|
||||||
|
|
||||||
fg = Invert(fg);
|
|
||||||
bg = Invert(bg);
|
|
||||||
c = Invert(c);
|
|
||||||
|
|
||||||
fgcl <<= fg;
|
|
||||||
bgcl <<= bg;
|
|
||||||
mcl <<= c;
|
|
||||||
|
|
||||||
SkinAction();
|
|
||||||
}
|
|
||||||
|
|
||||||
void StylerCtrl::Updated()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
StylerCtrl::StylerCtrl()
|
|
||||||
{
|
|
||||||
CtrlLayout(*this);
|
|
||||||
|
|
||||||
dk.SetReadOnly();
|
|
||||||
|
|
||||||
stsw <<= 2;
|
|
||||||
stsw <<= THISBACK(SkinAction);
|
|
||||||
|
|
||||||
mcl <<= Gray();
|
|
||||||
mcl <<= THISBACK(SkinAction);
|
|
||||||
|
|
||||||
fgcl <<= White();
|
|
||||||
fgcl <<= THISBACK(SkinAction);
|
|
||||||
|
|
||||||
bgcl <<= Black();
|
|
||||||
bgcl <<= THISBACK(SkinAction);
|
|
||||||
|
|
||||||
|
|
||||||
bl.MinMax(0,255);
|
|
||||||
bl <<= 192;
|
|
||||||
bl <<= THISBACK(SkinAction);
|
|
||||||
|
|
||||||
inv <<= THISBACK(InvertAction);
|
|
||||||
|
|
||||||
SkinAction();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
void ChamStyleCtrl::Updated()
|
|
||||||
{
|
|
||||||
clface <<= SColorFace();
|
|
||||||
clshadow <<= SColorShadow();
|
|
||||||
clltface <<= SColorLtFace();
|
|
||||||
cldkshadow <<= SColorDkShadow();
|
|
||||||
clhighlight <<= SColorHighlight();
|
|
||||||
cldisabled <<= SColorDisabled();
|
|
||||||
clpaper <<= SColorPaper();
|
|
||||||
cltext <<= SColorText();
|
|
||||||
clhighlighttext <<= SColorHighlightText();
|
|
||||||
cllight <<= SColorLight();
|
|
||||||
|
|
||||||
clmenu <<= SColorMenu();
|
|
||||||
clmenutext <<= SColorMenuText();
|
|
||||||
clmenumark <<= SColorMenuMark();
|
|
||||||
clinfo <<= SColorInfo();
|
|
||||||
clinfotext <<= SColorInfoText();
|
|
||||||
clmark <<= SColorMark();
|
|
||||||
cllabel <<= SColorLabel();
|
|
||||||
cllbtext <<= LabelBoxTextColor();
|
|
||||||
cllb <<= LabelBoxColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChamStyleCtrl::ColorAction()
|
|
||||||
{
|
|
||||||
ChReset();
|
|
||||||
|
|
||||||
SColorFace_Write(~clface);
|
|
||||||
SColorShadow_Write(~clshadow);
|
|
||||||
SColorLtFace_Write(~clltface);
|
|
||||||
SColorDkShadow_Write(~cldkshadow);
|
|
||||||
SColorHighlight_Write(~clhighlight);
|
|
||||||
SColorDisabled_Write(~cldisabled);
|
|
||||||
SColorPaper_Write(~clpaper);
|
|
||||||
SColorText_Write(~cltext);
|
|
||||||
SColorHighlightText_Write(~clhighlighttext);
|
|
||||||
SColorLight_Write(~cllight);
|
|
||||||
|
|
||||||
SColorMenu_Write(~clmenu);
|
|
||||||
SColorMenuText_Write(~clmenutext);
|
|
||||||
SColorMenuMark_Write(~clmenumark);
|
|
||||||
SColorInfo_Write(~clinfo);
|
|
||||||
SColorInfoText_Write(~clinfotext);
|
|
||||||
SColorMark_Write(~clmark);
|
|
||||||
SColorLabel_Write(~cllabel);
|
|
||||||
LabelBoxTextColor_Write(~cllbtext);
|
|
||||||
LabelBoxColor_Write(~cllb);
|
|
||||||
|
|
||||||
RefreshGlobalStyles();
|
|
||||||
RefreshLayoutDeepAll();
|
|
||||||
Action();
|
|
||||||
}
|
|
||||||
|
|
||||||
ChamStyleCtrl::ChamStyleCtrl()
|
|
||||||
{
|
|
||||||
CtrlLayout(*this);
|
|
||||||
load <<= THISBACK(LoadCB);
|
|
||||||
save <<= THISBACK(SaveCB);
|
|
||||||
|
|
||||||
clface <<= THISBACK(ColorAction);
|
|
||||||
clshadow <<= THISBACK(ColorAction);
|
|
||||||
clltface <<= THISBACK(ColorAction);
|
|
||||||
cldkshadow <<= THISBACK(ColorAction);
|
|
||||||
clhighlight <<= THISBACK(ColorAction);
|
|
||||||
cldisabled <<= THISBACK(ColorAction);
|
|
||||||
clpaper <<= THISBACK(ColorAction);
|
|
||||||
cltext <<= THISBACK(ColorAction);
|
|
||||||
clhighlighttext <<= THISBACK(ColorAction);
|
|
||||||
cllight <<= THISBACK(ColorAction);
|
|
||||||
|
|
||||||
clmenu <<= THISBACK(ColorAction);
|
|
||||||
clmenutext <<= THISBACK(ColorAction);
|
|
||||||
clmenumark <<= THISBACK(ColorAction);
|
|
||||||
clinfo <<= THISBACK(ColorAction);
|
|
||||||
clinfotext <<= THISBACK(ColorAction);
|
|
||||||
clmark <<= THISBACK(ColorAction);
|
|
||||||
cllabel <<= THISBACK(ColorAction);
|
|
||||||
cllbtext <<= THISBACK(ColorAction);
|
|
||||||
cllb <<= THISBACK(ColorAction);
|
|
||||||
|
|
||||||
Update();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChamStyleCtrl::SaveCB()
|
|
||||||
{
|
|
||||||
FileSel fs;
|
|
||||||
if(!fs.ExecuteSaveAs("Save global colors")) return;
|
|
||||||
|
|
||||||
PerChStyle d;
|
|
||||||
StoreAsXMLFile(d, "style", fs.Get());
|
|
||||||
|
|
||||||
//StoreToFile(d, fs.Get());
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChamStyleCtrl::LoadCB()
|
|
||||||
{
|
|
||||||
FileSel fs;
|
|
||||||
if(!fs.ExecuteOpen("Save global colors")) return;
|
|
||||||
|
|
||||||
ChReset();
|
|
||||||
|
|
||||||
PerChStyle d;
|
|
||||||
LoadFromXMLFile(d, fs.Get());
|
|
||||||
//LoadFromFile(d, fs.Get());
|
|
||||||
|
|
||||||
Update();
|
|
||||||
RefreshGlobalStyles();
|
|
||||||
RefreshLayoutDeepAll();
|
|
||||||
Action();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
void XmlizeCol(XmlIO xml, const String& tag, Color& c)
|
|
||||||
{
|
{
|
||||||
if(xml.IsStoring())
|
if(xml.IsStoring())
|
||||||
{
|
{
|
||||||
|
|
@ -290,21 +73,10 @@ void XmlizeCol(XmlIO xml, const String& tag, Color& c)
|
||||||
if(xml.IsLoading())
|
if(xml.IsLoading())
|
||||||
{
|
{
|
||||||
int i = xml->FindTag(tag);
|
int i = xml->FindTag(tag);
|
||||||
if(i>=0) { ::Xmlize(xml.At(i), c); }
|
if(i>=0) { XmlIO _ = xml.At(i); ::Xmlize(_, c); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define XMLIZECOL(TAG, SCOL) \
|
|
||||||
if(xml.IsStoring()) \
|
|
||||||
XmlizeCol(xml, TAG, c = SCOL()); \
|
|
||||||
if(xml.IsLoading()) \
|
|
||||||
{ \
|
|
||||||
c = Null; \
|
|
||||||
XmlizeCol(xml, TAG, c); if(!c.IsNullInstance()) COMBINE(SCOL, _Write)(c); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
|
|
||||||
|
|
||||||
NAMESPACE_UPP
|
NAMESPACE_UPP
|
||||||
template<> Stream& operator%(Stream& s, PerChStyle& o)
|
template<> Stream& operator%(Stream& s, PerChStyle& o)
|
||||||
{
|
{
|
||||||
|
|
@ -363,7 +135,17 @@ template<> Stream& operator%(Stream& s, PerChStyle& o)
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<> void Xmlize(XmlIO xml, PerChStyle& o)
|
#define XMLIZECOL(TAG, SCOL) \
|
||||||
|
if(xml.IsStoring()) \
|
||||||
|
XmlizeCol(xml, TAG, c = SCOL()); \
|
||||||
|
if(xml.IsLoading()) \
|
||||||
|
{ \
|
||||||
|
c = Null; \
|
||||||
|
XmlizeCol(xml, TAG, c); if(!c.IsNullInstance()) COMBINE(SCOL, _Write)(c); \
|
||||||
|
} \
|
||||||
|
|
||||||
|
|
||||||
|
template<> void Xmlize(XmlIO& xml, PerChStyle& o)
|
||||||
{
|
{
|
||||||
Color c;
|
Color c;
|
||||||
|
|
||||||
|
|
@ -389,3 +171,228 @@ template<> void Xmlize(XmlIO xml, PerChStyle& o)
|
||||||
XMLIZECOL("labelbox", LabelBoxColor)
|
XMLIZECOL("labelbox", LabelBoxColor)
|
||||||
}
|
}
|
||||||
END_UPP_NAMESPACE
|
END_UPP_NAMESPACE
|
||||||
|
|
||||||
|
bool SaveGlobalStyle(const String& filename)
|
||||||
|
{
|
||||||
|
PerChStyle d;
|
||||||
|
return StoreAsXMLFile(d, "style", filename);
|
||||||
|
//return StoreToFile(d, fs.Get());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LoadGlobalStyle(const String& filename)
|
||||||
|
{
|
||||||
|
ChReset();
|
||||||
|
|
||||||
|
PerChStyle d;
|
||||||
|
bool b = LoadFromXMLFile(d, filename);
|
||||||
|
//b = LoadFromFile(d, filename);
|
||||||
|
|
||||||
|
if(!b) return b;
|
||||||
|
|
||||||
|
RefreshGlobalStyles();
|
||||||
|
RefreshLayoutDeepAll();
|
||||||
|
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
//ChamStyleCtrl
|
||||||
|
|
||||||
|
void ChamStyleCtrl::Updated()
|
||||||
|
{
|
||||||
|
clface <<= SColorFace();
|
||||||
|
clshadow <<= SColorShadow();
|
||||||
|
clltface <<= SColorLtFace();
|
||||||
|
cldkshadow <<= SColorDkShadow();
|
||||||
|
clhighlight <<= SColorHighlight();
|
||||||
|
cldisabled <<= SColorDisabled();
|
||||||
|
clpaper <<= SColorPaper();
|
||||||
|
cltext <<= SColorText();
|
||||||
|
clhighlighttext <<= SColorHighlightText();
|
||||||
|
cllight <<= SColorLight();
|
||||||
|
|
||||||
|
clmenu <<= SColorMenu();
|
||||||
|
clmenutext <<= SColorMenuText();
|
||||||
|
clmenumark <<= SColorMenuMark();
|
||||||
|
clinfo <<= SColorInfo();
|
||||||
|
clinfotext <<= SColorInfoText();
|
||||||
|
clmark <<= SColorMark();
|
||||||
|
cllabel <<= SColorLabel();
|
||||||
|
cllbtext <<= LabelBoxTextColor();
|
||||||
|
cllb <<= LabelBoxColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChamStyleCtrl::OnColorAction()
|
||||||
|
{
|
||||||
|
ChReset();
|
||||||
|
|
||||||
|
SColorFace_Write(~clface);
|
||||||
|
SColorShadow_Write(~clshadow);
|
||||||
|
SColorLtFace_Write(~clltface);
|
||||||
|
SColorDkShadow_Write(~cldkshadow);
|
||||||
|
SColorHighlight_Write(~clhighlight);
|
||||||
|
SColorDisabled_Write(~cldisabled);
|
||||||
|
SColorPaper_Write(~clpaper);
|
||||||
|
SColorText_Write(~cltext);
|
||||||
|
SColorHighlightText_Write(~clhighlighttext);
|
||||||
|
SColorLight_Write(~cllight);
|
||||||
|
|
||||||
|
SColorMenu_Write(~clmenu);
|
||||||
|
SColorMenuText_Write(~clmenutext);
|
||||||
|
SColorMenuMark_Write(~clmenumark);
|
||||||
|
SColorInfo_Write(~clinfo);
|
||||||
|
SColorInfoText_Write(~clinfotext);
|
||||||
|
SColorMark_Write(~clmark);
|
||||||
|
SColorLabel_Write(~cllabel);
|
||||||
|
LabelBoxTextColor_Write(~cllbtext);
|
||||||
|
LabelBoxColor_Write(~cllb);
|
||||||
|
|
||||||
|
RefreshGlobalStyles();
|
||||||
|
WhenSColorsChange(); //let outside apply own changes after recalculation, before we apply them
|
||||||
|
RefreshLayoutDeepAll();
|
||||||
|
|
||||||
|
Action();
|
||||||
|
}
|
||||||
|
|
||||||
|
ChamStyleCtrl::ChamStyleCtrl()
|
||||||
|
{
|
||||||
|
CtrlLayout(*this);
|
||||||
|
|
||||||
|
clface <<= THISBACK(OnColorAction);
|
||||||
|
clshadow <<= THISBACK(OnColorAction);
|
||||||
|
clltface <<= THISBACK(OnColorAction);
|
||||||
|
cldkshadow <<= THISBACK(OnColorAction);
|
||||||
|
clhighlight <<= THISBACK(OnColorAction);
|
||||||
|
cldisabled <<= THISBACK(OnColorAction);
|
||||||
|
clpaper <<= THISBACK(OnColorAction);
|
||||||
|
cltext <<= THISBACK(OnColorAction);
|
||||||
|
clhighlighttext <<= THISBACK(OnColorAction);
|
||||||
|
cllight <<= THISBACK(OnColorAction);
|
||||||
|
|
||||||
|
clmenu <<= THISBACK(OnColorAction);
|
||||||
|
clmenutext <<= THISBACK(OnColorAction);
|
||||||
|
clmenumark <<= THISBACK(OnColorAction);
|
||||||
|
clinfo <<= THISBACK(OnColorAction);
|
||||||
|
clinfotext <<= THISBACK(OnColorAction);
|
||||||
|
clmark <<= THISBACK(OnColorAction);
|
||||||
|
cllabel <<= THISBACK(OnColorAction);
|
||||||
|
cllbtext <<= THISBACK(OnColorAction);
|
||||||
|
cllb <<= THISBACK(OnColorAction);
|
||||||
|
|
||||||
|
load <<= THISBACK(DoLoad);
|
||||||
|
save <<= THISBACK(DoSave);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChamStyleCtrl::DoSave()
|
||||||
|
{
|
||||||
|
FileSel fs;
|
||||||
|
if(!fs.ExecuteSaveAs("Save global colors")) return;
|
||||||
|
SaveGlobalStyle(fs.Get());
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChamStyleCtrl::DoLoad()
|
||||||
|
{
|
||||||
|
FileSel fs;
|
||||||
|
if(!fs.ExecuteOpen("Save global colors")) return;
|
||||||
|
LoadGlobalStyle(fs.Get());
|
||||||
|
Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
//StylerCtrl
|
||||||
|
|
||||||
|
void StylerCtrl::SetColorizedSkin()
|
||||||
|
{
|
||||||
|
Color c = ~mcl;
|
||||||
|
int blnd = ~bl;
|
||||||
|
Color fg = ~fgcl;
|
||||||
|
Color bg = ~bgcl;
|
||||||
|
|
||||||
|
ChStylerSkin(c, blnd, fg, bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void StylerCtrl::OnSkinAction()
|
||||||
|
{
|
||||||
|
if((int)stsw.GetData() != 2)
|
||||||
|
{
|
||||||
|
mcl.Disable();
|
||||||
|
fgcl.Disable();
|
||||||
|
bgcl.Disable();
|
||||||
|
bl.Disable();
|
||||||
|
inv.Disable();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mcl.Enable();
|
||||||
|
fgcl.Enable();
|
||||||
|
bgcl.Enable();
|
||||||
|
bl.Enable();
|
||||||
|
inv.Enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
//reset
|
||||||
|
switch((int)stsw.GetData())
|
||||||
|
{
|
||||||
|
case 1: ChStdSkin(); break;
|
||||||
|
case 2: SetColorizedSkin(); break;
|
||||||
|
default:
|
||||||
|
case 0: ChClassicSkin(); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
RefreshGlobalStyles();
|
||||||
|
WhenSkinChange(); //let outside apply own changes after recalculation, before we apply them
|
||||||
|
RefreshLayoutDeepAll();
|
||||||
|
|
||||||
|
UpdateAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
void StylerCtrl::OnInvertAction()
|
||||||
|
{
|
||||||
|
Color c = ~mcl;
|
||||||
|
Color fg = ~fgcl;
|
||||||
|
Color bg = ~bgcl;
|
||||||
|
|
||||||
|
fg = Invert(fg);
|
||||||
|
bg = Invert(bg);
|
||||||
|
c = Invert(c);
|
||||||
|
|
||||||
|
fgcl <<= fg;
|
||||||
|
bgcl <<= bg;
|
||||||
|
mcl <<= c;
|
||||||
|
|
||||||
|
OnSkinAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
void StylerCtrl::Updated()
|
||||||
|
{
|
||||||
|
Color fg = ~fgcl;
|
||||||
|
Color bg = ~bgcl;
|
||||||
|
|
||||||
|
dk <<= bool(Grayscale(fg)<Grayscale(bg));
|
||||||
|
}
|
||||||
|
|
||||||
|
StylerCtrl::StylerCtrl()
|
||||||
|
{
|
||||||
|
CtrlLayout(*this);
|
||||||
|
|
||||||
|
dk.SetReadOnly();
|
||||||
|
|
||||||
|
stsw <<= 2; //ColorizedSkin
|
||||||
|
stsw <<= THISBACK(OnSkinAction);
|
||||||
|
|
||||||
|
mcl <<= Gray();
|
||||||
|
mcl <<= THISBACK(OnSkinAction);
|
||||||
|
|
||||||
|
fgcl <<= White();
|
||||||
|
fgcl <<= THISBACK(OnSkinAction);
|
||||||
|
|
||||||
|
bgcl <<= Black();
|
||||||
|
bgcl <<= THISBACK(OnSkinAction);
|
||||||
|
|
||||||
|
|
||||||
|
bl.MinMax(0,255);
|
||||||
|
bl <<= 192;
|
||||||
|
bl <<= THISBACK(OnSkinAction);
|
||||||
|
|
||||||
|
inv <<= THISBACK(OnInvertAction);
|
||||||
|
|
||||||
|
//SkinAction(); //try our setup
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,42 +2,82 @@
|
||||||
#define _Styler_Styler_h
|
#define _Styler_Styler_h
|
||||||
|
|
||||||
#include <CtrlLib/CtrlLib.h>
|
#include <CtrlLib/CtrlLib.h>
|
||||||
|
|
||||||
using namespace Upp;
|
using namespace Upp;
|
||||||
|
|
||||||
struct PerChStyle : ChStyle<PerChStyle>
|
|
||||||
{
|
|
||||||
//dummy for saving the current status
|
|
||||||
};
|
|
||||||
|
|
||||||
NAMESPACE_UPP
|
|
||||||
template<> Stream& operator%(Stream& s, PerChStyle& o);
|
|
||||||
template<> void Xmlize(XmlIO xml, PerChStyle& o);
|
|
||||||
END_UPP_NAMESPACE
|
|
||||||
|
|
||||||
#define IMAGECLASS StylerCtrlsImg
|
#define IMAGECLASS StylerCtrlsImg
|
||||||
#define IMAGEFILE <Styler/StylerCtrls.iml>
|
#define IMAGEFILE <Styler/StylerCtrls.iml>
|
||||||
#include <Draw/iml_header.h>
|
#include <Draw/iml_header.h>
|
||||||
|
|
||||||
|
#define LAYOUTFILE <Styler/Styler.lay>
|
||||||
|
#include <CtrlCore/lay.h>
|
||||||
|
|
||||||
|
Color Invert(const Color& c);
|
||||||
|
|
||||||
void ColorizeIml(Iml& target, Iml& source, const Color& c, int alpha = 100);
|
void ColorizeIml(Iml& target, Iml& source, const Color& c, int alpha = 100);
|
||||||
void RefreshGlobalStyles();
|
void RefreshGlobalStyles();
|
||||||
void RefreshLayoutDeepAll();
|
void RefreshLayoutDeepAll();
|
||||||
|
|
||||||
#define LAYOUTFILE <Styler/Styler.lay>
|
void ChStylerSkin(const Color& c, int blnd, const Color& fg, const Color& bg);
|
||||||
#include <CtrlCore/lay.h>
|
|
||||||
|
|
||||||
|
void XmlizeCol(XmlIO& xml, const String& tag, Color& c);
|
||||||
|
|
||||||
|
//dummy for saving the global status
|
||||||
|
struct PerChStyle : ChStyle<PerChStyle> {};
|
||||||
|
|
||||||
|
NAMESPACE_UPP
|
||||||
|
template<> Stream& operator%(Stream& s, PerChStyle& o);
|
||||||
|
template<> void Xmlize(XmlIO& xml, PerChStyle& o);
|
||||||
|
END_UPP_NAMESPACE
|
||||||
|
|
||||||
|
bool SaveGlobalStyle(const String& filename);
|
||||||
|
bool LoadGlobalStyle(const String& filename);
|
||||||
|
|
||||||
|
//for manipulating the SColors
|
||||||
|
class ChamStyleCtrl : public WithChamStyleLay<ParentCtrl> {
|
||||||
|
public:
|
||||||
|
typedef ChamStyleCtrl CLASSNAME;
|
||||||
|
ChamStyleCtrl();
|
||||||
|
|
||||||
|
virtual void Updated();
|
||||||
|
|
||||||
|
void DoLoad();
|
||||||
|
void DoSave();
|
||||||
|
|
||||||
|
void OnColorAction();
|
||||||
|
|
||||||
|
Callback WhenSColorsChange;
|
||||||
|
};
|
||||||
|
|
||||||
|
class StylerCtrl : public WithStylerLay<ParentCtrl> {
|
||||||
|
public:
|
||||||
|
typedef StylerCtrl CLASSNAME;
|
||||||
|
StylerCtrl();
|
||||||
|
|
||||||
|
virtual void Updated();
|
||||||
|
|
||||||
|
void OnSkinAction();
|
||||||
|
void OnInvertAction();
|
||||||
|
|
||||||
|
Callback WhenSkinChange;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void SetColorizedSkin();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//overriding CH_STYLE definitions for a class:: StyleFunction by own definitions, which are not bound to the namespace
|
||||||
#define CH_LOCSTYLE(klass, type, style) \
|
#define CH_LOCSTYLE(klass, type, style) \
|
||||||
struct COMBINE5(klass, __, type, __, style) : klass::type { \
|
struct COMBINE5(klass, __, type, __, style) : klass::type { \
|
||||||
void Init(); \
|
void Init(); \
|
||||||
static void InitIt(); \
|
static void InitIt(); \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
const klass::Style& style(); \
|
const klass::type& style(); \
|
||||||
void COMBINE5(klass, __, type, __, style)::InitIt() { \
|
void COMBINE5(klass, __, type, __, style)::InitIt() { \
|
||||||
style(); \
|
style(); \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
const klass::Style& style() \
|
const klass::type& style() \
|
||||||
{ \
|
{ \
|
||||||
static COMBINE5(klass, __, type, __, style) b, standard; \
|
static COMBINE5(klass, __, type, __, style) b, standard; \
|
||||||
if(b.status == 0) { \
|
if(b.status == 0) { \
|
||||||
|
|
@ -52,39 +92,5 @@ const klass::Style& style() \
|
||||||
\
|
\
|
||||||
void COMBINE5(klass, __, type, __, style)::Init()
|
void COMBINE5(klass, __, type, __, style)::Init()
|
||||||
|
|
||||||
void XmlizeCol(XmlIO xml, const String& tag, Color& c);
|
|
||||||
|
|
||||||
void RefreshGlobalStyles();
|
|
||||||
void RefreshLayoutDeepAll();
|
|
||||||
|
|
||||||
void ChStylerSkin(const Color& c, int blnd, const Color& fg, const Color& bg);
|
|
||||||
|
|
||||||
class StylerCtrl : public WithStylerLay<ParentCtrl> {
|
|
||||||
public:
|
|
||||||
typedef StylerCtrl CLASSNAME;
|
|
||||||
StylerCtrl();
|
|
||||||
|
|
||||||
virtual void Updated();
|
|
||||||
|
|
||||||
void SkinAction();
|
|
||||||
void InvertAction();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void ColorizedSkin();
|
|
||||||
};
|
|
||||||
|
|
||||||
class ChamStyleCtrl : public WithChamStyleLay<ParentCtrl> {
|
|
||||||
public:
|
|
||||||
typedef ChamStyleCtrl CLASSNAME;
|
|
||||||
ChamStyleCtrl();
|
|
||||||
|
|
||||||
virtual void Updated();
|
|
||||||
|
|
||||||
void LoadCB();
|
|
||||||
void SaveCB();
|
|
||||||
|
|
||||||
void ColorAction();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ LAYOUT(StylerLay, 160, 116)
|
||||||
ITEM(ColorPusher, fgcl, LeftPosZ(48, 28).TopPosZ(24, 20))
|
ITEM(ColorPusher, fgcl, LeftPosZ(48, 28).TopPosZ(24, 20))
|
||||||
ITEM(ColorPusher, bgcl, LeftPosZ(48, 28).TopPosZ(44, 20))
|
ITEM(ColorPusher, bgcl, LeftPosZ(48, 28).TopPosZ(44, 20))
|
||||||
ITEM(Switch, stsw, SetLabel(t_("ClassicSkin\nStdSkin\nStylerSkin")).RightPosZ(4, 76).TopPosZ(4, 60))
|
ITEM(Switch, stsw, SetLabel(t_("ClassicSkin\nStdSkin\nStylerSkin")).RightPosZ(4, 76).TopPosZ(4, 60))
|
||||||
ITEM(Option, inv, SetLabel(t_("inverted")).RightPosZ(4, 76).VSizePosZ(68, 32))
|
ITEM(Button, inv, SetLabel(t_("Invert")).RightPosZ(4, 76).VSizePosZ(68, 32))
|
||||||
ITEM(SliderCtrl, bl, HSizePosZ(4, 4).BottomPosZ(4, 24))
|
ITEM(SliderCtrl, bl, HSizePosZ(4, 4).BottomPosZ(4, 24))
|
||||||
ITEM(StaticText, dv___6, SetText(t_("main:")).LeftPosZ(4, 40).TopPosZ(4, 19))
|
ITEM(StaticText, dv___6, SetText(t_("main:")).LeftPosZ(4, 40).TopPosZ(4, 19))
|
||||||
ITEM(StaticText, dv___7, SetText(t_("fg:")).LeftPosZ(4, 40).TopPosZ(24, 19))
|
ITEM(StaticText, dv___7, SetText(t_("fg:")).LeftPosZ(4, 40).TopPosZ(24, 19))
|
||||||
|
|
|
||||||
|
|
@ -45,5 +45,6 @@ LAYOUT(StylerTestLayout, 768, 640)
|
||||||
ITEM(StatusBar, stbar, LeftPosZ(0, 768).TopPosZ(616, 23))
|
ITEM(StatusBar, stbar, LeftPosZ(0, 768).TopPosZ(616, 23))
|
||||||
ITEM(MenuBar, mbar, LeftPosZ(0, 768).TopPosZ(592, 23))
|
ITEM(MenuBar, mbar, LeftPosZ(0, 768).TopPosZ(592, 23))
|
||||||
ITEM(ToolBar, tool, LeftPosZ(0, 768).TopPosZ(568, 23))
|
ITEM(ToolBar, tool, LeftPosZ(0, 768).TopPosZ(568, 23))
|
||||||
|
ITEM(Option, overdef, SetLabel(t_("Override StyleDefaults with own")).LeftPosZ(544, 216).TopPosZ(168, 16))
|
||||||
END_LAYOUT
|
END_LAYOUT
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ static Color SColorSpinButtonMonoColord = LtYellow;
|
||||||
|
|
||||||
CH_LOCSTYLE(EditField, Style, EditFieldStyleDFM)
|
CH_LOCSTYLE(EditField, Style, EditFieldStyleDFM)
|
||||||
{
|
{
|
||||||
paper = SColorEditPaper;
|
paper = Blend(SColorPaper(), SColorEditPaper);
|
||||||
disabled = SColorFace();
|
disabled = SColorFace();
|
||||||
focus = paper;
|
focus = paper;
|
||||||
invalid = Blend(paper, Color(255, 0, 0), 32);
|
invalid = Blend(paper, Color(255, 0, 0), 32);
|
||||||
|
|
@ -35,7 +35,7 @@ CH_LOCSTYLE(EditField, Style, EditFieldStyleDFM)
|
||||||
|
|
||||||
CH_LOCSTYLE(Button, Style, ButtonStyleDFM)
|
CH_LOCSTYLE(Button, Style, ButtonStyleDFM)
|
||||||
{
|
{
|
||||||
look[0] = SColorButtonFace;
|
look[0] = Blend(SColorFace(), SColorButtonFace);
|
||||||
look[1] = SColorFace();
|
look[1] = SColorFace();
|
||||||
look[2] = LtBlue();
|
look[2] = LtBlue();
|
||||||
look[3] = LtYellow();
|
look[3] = LtYellow();
|
||||||
|
|
@ -84,23 +84,22 @@ void StylerTest::Menu(Bar& bar)
|
||||||
|
|
||||||
void StylerTest::ApplyOwnStyle()
|
void StylerTest::ApplyOwnStyle()
|
||||||
{
|
{
|
||||||
return;
|
if(!overdef.Get()) return;
|
||||||
//recalculate own colors
|
|
||||||
ChFinish();
|
|
||||||
|
|
||||||
EditField::Style& stef = EditField::StyleDefault().Write();
|
|
||||||
stef = EditFieldStyleDFM();
|
|
||||||
|
|
||||||
|
//override default style settings, without changing ref in each ctrl
|
||||||
{
|
{
|
||||||
Button::Style& stbt = Button::StyleNormal().Write();
|
EditField::Style& s = EditField::StyleDefault().Write();
|
||||||
stbt = ButtonStyleDFM();
|
s = EditFieldStyleDFM();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Button::Style& s = Button::StyleNormal().Write();
|
||||||
|
s = ButtonStyleDFM();
|
||||||
}
|
}
|
||||||
|
|
||||||
SpinButtons::Style& stspbt = SpinButtons::StyleDefault().Write();
|
{
|
||||||
stspbt = SpinButtonStyleDFM();
|
SpinButtons::Style& s = SpinButtons::StyleDefault().Write();
|
||||||
|
s = SpinButtonStyleDFM();
|
||||||
RefreshGlobalStyles();
|
}
|
||||||
RefreshLayoutDeepAll();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
StylerTest::StylerTest()
|
StylerTest::StylerTest()
|
||||||
|
|
@ -108,16 +107,20 @@ StylerTest::StylerTest()
|
||||||
CtrlLayout(*this, "Window title");
|
CtrlLayout(*this, "Window title");
|
||||||
Sizeable().Zoomable();
|
Sizeable().Zoomable();
|
||||||
|
|
||||||
sc <<= THISBACK(ReloadChamCB);
|
sc.WhenSkinChange = THISBACK(ReloadChamCB);
|
||||||
Add(sc.LeftPos(0,200).BottomPos(0,200));
|
Add(sc.LeftPos(0,200).BottomPos(0,200));
|
||||||
|
|
||||||
chc <<= THISBACK(ApplyOwnStyle);
|
chc.WhenSColorsChange = THISBACK(ApplyOwnStyle);
|
||||||
Add(chc.RightPos(0,400).BottomPos(0,200));
|
Add(chc.RightPos(0,400).BottomPos(0,200));
|
||||||
|
|
||||||
InitDummys();
|
overdef <<= callback(&sc, &StylerCtrl::OnSkinAction); //emulate a skin change
|
||||||
b.SetStyle(ButtonStyleDFM());
|
|
||||||
|
|
||||||
ApplyOwnStyle();
|
InitDummys();
|
||||||
|
b.SetStyle(ButtonStyleDFM()); //to see statically without change
|
||||||
|
|
||||||
|
overdef.Set(0); //dont override default by default
|
||||||
|
|
||||||
|
sc.OnSkinAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
void StylerTest::InitDummys()
|
void StylerTest::InitDummys()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue