mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
- Added multiple MeterStyle.
- Code cleanup & cosmetics.
This commit is contained in:
parent
46862a033e
commit
25abbc2444
@ -585,7 +585,7 @@ bool CConfigParser::ReplaceMeasures(std::wstring& result)
|
|||||||
**
|
**
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
const std::wstring& CConfigParser::ReadString(LPCTSTR section, LPCTSTR key, LPCTSTR defValue, bool bReplaceMeasures, bool* bReplaced)
|
const std::wstring& CConfigParser::ReadString(LPCTSTR section, LPCTSTR key, LPCTSTR defValue, bool bReplaceMeasures)
|
||||||
{
|
{
|
||||||
static std::wstring result;
|
static std::wstring result;
|
||||||
|
|
||||||
@ -602,19 +602,67 @@ const std::wstring& CConfigParser::ReadString(LPCTSTR section, LPCTSTR key, LPCT
|
|||||||
defValue = L"";
|
defValue = L"";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear last status
|
||||||
|
m_LastUsedStyle.clear();
|
||||||
|
m_LastReplaced = false;
|
||||||
|
m_LastDefaultUsed = false;
|
||||||
|
|
||||||
std::wstring strDefault = defValue;
|
std::wstring strDefault = defValue;
|
||||||
|
|
||||||
// If the template is defined read the value first from there.
|
// If the template is defined read the value first from there.
|
||||||
if (!m_StyleTemplate.empty())
|
if (!m_StyleTemplate.empty())
|
||||||
{
|
{
|
||||||
strDefault = GetValue(m_StyleTemplate, key, strDefault);
|
std::vector<std::wstring>::const_reverse_iterator iter = m_StyleTemplate.rbegin();
|
||||||
|
for ( ; iter != m_StyleTemplate.rend(); ++iter)
|
||||||
|
{
|
||||||
|
if (!(*iter).empty())
|
||||||
|
{
|
||||||
|
std::wstring strSection = (*iter);
|
||||||
|
|
||||||
|
std::wstring::size_type pos = strSection.find_first_not_of(L" \t\r\n");
|
||||||
|
if (pos != std::wstring::npos)
|
||||||
|
{
|
||||||
|
std::wstring::size_type lastPos = strSection.find_last_not_of(L" \t\r\n");
|
||||||
|
if (pos != 0 || lastPos != (strSection.length() - 1))
|
||||||
|
{
|
||||||
|
// Trim white-space
|
||||||
|
strSection.swap(std::wstring(strSection, pos, lastPos - pos + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
result = GetValue(section, key, strDefault);
|
const std::wstring& strStyle = GetValue(strSection, key, strDefault);
|
||||||
if (result == defValue)
|
|
||||||
|
//DebugLog(L"[%s] %s (from [%s]) : strDefault=%s (0x%08X), strStyle=%s (0x%08X)",
|
||||||
|
// section, key, strSection.c_str(), strDefault.c_str(), &strDefault, strStyle.c_str(), &strStyle);
|
||||||
|
|
||||||
|
if (&strStyle != &strDefault)
|
||||||
{
|
{
|
||||||
|
strDefault = strStyle;
|
||||||
|
m_LastUsedStyle = strSection;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::wstring& strValue = GetValue(section, key, strDefault);
|
||||||
|
result = strValue;
|
||||||
|
|
||||||
|
if (!m_LastUsedStyle.empty())
|
||||||
|
{
|
||||||
|
if (&strValue != &strDefault)
|
||||||
|
{
|
||||||
|
m_LastUsedStyle.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (&strValue == &strDefault)
|
||||||
|
{
|
||||||
|
m_LastDefaultUsed = true;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Check Litestep vars
|
// Check Litestep vars
|
||||||
if (Rainmeter && !Rainmeter->GetDummyLitestep())
|
if (Rainmeter && !Rainmeter->GetDummyLitestep())
|
||||||
@ -629,16 +677,14 @@ const std::wstring& CConfigParser::ReadString(LPCTSTR section, LPCTSTR key, LPCT
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool replaced = ReplaceVariables(result);
|
if (ReplaceVariables(result))
|
||||||
|
|
||||||
if (bReplaceMeasures)
|
|
||||||
{
|
{
|
||||||
replaced |= ReplaceMeasures(result);
|
m_LastReplaced = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bReplaced)
|
if (bReplaceMeasures && ReplaceMeasures(result))
|
||||||
{
|
{
|
||||||
*bReplaced = replaced;
|
m_LastReplaced = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -766,11 +812,11 @@ Color CConfigParser::ReadColor(LPCTSTR section, LPCTSTR key, const Color& defVal
|
|||||||
**
|
**
|
||||||
** http://www.digitalpeer.com/id/simple
|
** http://www.digitalpeer.com/id/simple
|
||||||
*/
|
*/
|
||||||
std::vector<std::wstring> CConfigParser::Tokenize(const std::wstring& str, const std::wstring delimiters)
|
std::vector<std::wstring> CConfigParser::Tokenize(const std::wstring& str, const std::wstring& delimiters)
|
||||||
{
|
{
|
||||||
std::vector<std::wstring> tokens;
|
std::vector<std::wstring> tokens;
|
||||||
|
|
||||||
std::wstring::size_type lastPos = str.find_first_not_of(L";", 0); // skip delimiters at beginning.
|
std::wstring::size_type lastPos = str.find_first_not_of(delimiters, 0); // skip delimiters at beginning.
|
||||||
std::wstring::size_type pos = str.find_first_of(delimiters, lastPos); // find first "non-delimiter".
|
std::wstring::size_type pos = str.find_first_of(delimiters, lastPos); // find first "non-delimiter".
|
||||||
|
|
||||||
while (std::wstring::npos != pos || std::wstring::npos != lastPos)
|
while (std::wstring::npos != pos || std::wstring::npos != lastPos)
|
||||||
|
@ -42,12 +42,16 @@ public:
|
|||||||
|
|
||||||
void SetVariable(const std::wstring& strVariable, const std::wstring& strValue) { SetVariable(m_Variables, strVariable, strValue); }
|
void SetVariable(const std::wstring& strVariable, const std::wstring& strValue) { SetVariable(m_Variables, strVariable, strValue); }
|
||||||
|
|
||||||
void SetStyleTemplate(const std::wstring& strStyle) { m_StyleTemplate = strStyle; }
|
void SetStyleTemplate(const std::wstring& strStyle) { m_StyleTemplate = Tokenize(strStyle, L"|"); }
|
||||||
void ClearStyleTemplate() { m_StyleTemplate.clear(); }
|
void ClearStyleTemplate() { m_StyleTemplate.clear(); }
|
||||||
|
|
||||||
|
const std::wstring& GetLastUsedStyle() { return m_LastUsedStyle; }
|
||||||
|
bool GetLastReplaced() { return m_LastReplaced; }
|
||||||
|
bool GetLastDefaultUsed() { return m_LastDefaultUsed; }
|
||||||
|
|
||||||
void ResetMonitorVariables(CMeterWindow* meterWindow = NULL);
|
void ResetMonitorVariables(CMeterWindow* meterWindow = NULL);
|
||||||
|
|
||||||
const std::wstring& ReadString(LPCTSTR section, LPCTSTR key, LPCTSTR defValue, bool bReplaceMeasures = true, bool* bReplaced = NULL);
|
const std::wstring& ReadString(LPCTSTR section, LPCTSTR key, LPCTSTR defValue, bool bReplaceMeasures = true);
|
||||||
double ReadFloat(LPCTSTR section, LPCTSTR key, double defValue);
|
double ReadFloat(LPCTSTR section, LPCTSTR key, double defValue);
|
||||||
double ReadFormula(LPCTSTR section, LPCTSTR key, double defValue);
|
double ReadFormula(LPCTSTR section, LPCTSTR key, double defValue);
|
||||||
int ReadInt(LPCTSTR section, LPCTSTR key, int defValue);
|
int ReadInt(LPCTSTR section, LPCTSTR key, int defValue);
|
||||||
@ -60,7 +64,7 @@ public:
|
|||||||
// Returns an int if the formula was read successfully, -1 for failure.
|
// Returns an int if the formula was read successfully, -1 for failure.
|
||||||
int ReadFormula(const std::wstring& result, double* number);
|
int ReadFormula(const std::wstring& result, double* number);
|
||||||
|
|
||||||
static std::vector<std::wstring> Tokenize(const std::wstring& str, const std::wstring delimiters);
|
static std::vector<std::wstring> Tokenize(const std::wstring& str, const std::wstring& delimiters);
|
||||||
static double ParseDouble(const std::wstring& string, double defValue, bool rejectExp = false);
|
static double ParseDouble(const std::wstring& string, double defValue, bool rejectExp = false);
|
||||||
static Gdiplus::Color ParseColor(LPCTSTR string);
|
static Gdiplus::Color ParseColor(LPCTSTR string);
|
||||||
|
|
||||||
@ -94,7 +98,11 @@ private:
|
|||||||
hqMathParser* m_Parser;
|
hqMathParser* m_Parser;
|
||||||
std::map<std::wstring, CMeasure*> m_Measures;
|
std::map<std::wstring, CMeasure*> m_Measures;
|
||||||
|
|
||||||
std::wstring m_StyleTemplate;
|
std::vector<std::wstring> m_StyleTemplate;
|
||||||
|
|
||||||
|
std::wstring m_LastUsedStyle;
|
||||||
|
bool m_LastReplaced;
|
||||||
|
bool m_LastDefaultUsed;
|
||||||
|
|
||||||
std::vector<std::wstring> m_Sections; // The sections must be an ordered array
|
std::vector<std::wstring> m_Sections; // The sections must be an ordered array
|
||||||
stdext::hash_map<std::wstring, std::vector<std::wstring> > m_Keys;
|
stdext::hash_map<std::wstring, std::vector<std::wstring> > m_Keys;
|
||||||
|
@ -78,26 +78,25 @@ bool CGroup::BelongsToGroup(const std::wstring& group)
|
|||||||
|
|
||||||
std::wstring CGroup::CreateGroup(const std::wstring& str)
|
std::wstring CGroup::CreateGroup(const std::wstring& str)
|
||||||
{
|
{
|
||||||
std::wstring strTmp = str;
|
std::wstring strTmp;
|
||||||
|
|
||||||
// Trim whitespace
|
std::wstring::size_type pos = str.find_first_not_of(L" \t\r\n");
|
||||||
std::wstring::size_type pos = strTmp.find_last_not_of(L' ');
|
|
||||||
if (pos != std::wstring::npos)
|
if (pos != std::wstring::npos)
|
||||||
{
|
{
|
||||||
strTmp.erase(pos + 1);
|
std::wstring::size_type lastPos = str.find_last_not_of(L" \t\r\n");
|
||||||
pos = strTmp.find_first_not_of(' ');
|
if (pos != 0 || lastPos != (str.length() - 1))
|
||||||
if (pos != std::wstring::npos)
|
|
||||||
{
|
{
|
||||||
strTmp.erase(0, pos);
|
// Trim white-space
|
||||||
|
strTmp.swap(std::wstring(str, pos, lastPos - pos + 1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strTmp = str;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert to lower
|
// Convert to lower
|
||||||
std::transform(strTmp.begin(), strTmp.end(), strTmp.begin(), ::towlower);
|
std::transform(strTmp.begin(), strTmp.end(), strTmp.begin(), ::towlower);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
strTmp.erase(strTmp.begin(), strTmp.end());
|
|
||||||
}
|
|
||||||
|
|
||||||
return strTmp;
|
return strTmp;
|
||||||
}
|
}
|
@ -102,8 +102,6 @@ void CMeasure::Initialize()
|
|||||||
*/
|
*/
|
||||||
void CMeasure::ReadConfig(CConfigParser& parser, const WCHAR* section)
|
void CMeasure::ReadConfig(CConfigParser& parser, const WCHAR* section)
|
||||||
{
|
{
|
||||||
bool replaced;
|
|
||||||
|
|
||||||
// Clear substitutes to prevent from being added more than once.
|
// Clear substitutes to prevent from being added more than once.
|
||||||
if (!m_Substitute.empty())
|
if (!m_Substitute.empty())
|
||||||
{
|
{
|
||||||
@ -118,9 +116,8 @@ void CMeasure::ReadConfig(CConfigParser& parser, const WCHAR* section)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
replaced = false;
|
const std::wstring& result = parser.ReadString(section, L"Disabled", L"0");
|
||||||
const std::wstring& result = parser.ReadString(section, L"Disabled", L"0", true, &replaced);
|
if (parser.GetLastReplaced())
|
||||||
if (replaced)
|
|
||||||
{
|
{
|
||||||
m_Disabled = 0!=(int)parser.ParseDouble(result, 0.0, true);
|
m_Disabled = 0!=(int)parser.ParseDouble(result, 0.0, true);
|
||||||
}
|
}
|
||||||
|
@ -269,8 +269,6 @@ void CMeter::Hide()
|
|||||||
*/
|
*/
|
||||||
void CMeter::ReadConfig(const WCHAR* section)
|
void CMeter::ReadConfig(const WCHAR* section)
|
||||||
{
|
{
|
||||||
bool replaced;
|
|
||||||
|
|
||||||
CConfigParser& parser = m_MeterWindow->GetParser();
|
CConfigParser& parser = m_MeterWindow->GetParser();
|
||||||
|
|
||||||
// The MeterStyle defines a template where the values are read if the meter doesn't have it itself
|
// The MeterStyle defines a template where the values are read if the meter doesn't have it itself
|
||||||
@ -280,9 +278,13 @@ void CMeter::ReadConfig(const WCHAR* section)
|
|||||||
parser.SetStyleTemplate(style);
|
parser.SetStyleTemplate(style);
|
||||||
}
|
}
|
||||||
|
|
||||||
replaced = false;
|
std::wstring oldStyleX = m_StyleX;
|
||||||
std::wstring coord = parser.ReadString(section, L"X", L"0", true, &replaced);
|
std::wstring oldStyleY = m_StyleY;
|
||||||
if (!m_Initialized || replaced)
|
std::wstring oldStyleHidden = m_StyleHidden;
|
||||||
|
|
||||||
|
std::wstring coord = parser.ReadString(section, L"X", L"0");
|
||||||
|
m_StyleX = parser.GetLastUsedStyle();
|
||||||
|
if (!m_Initialized || parser.GetLastReplaced() || !parser.GetLastDefaultUsed() && m_StyleX != oldStyleX)
|
||||||
{
|
{
|
||||||
if (!coord.empty())
|
if (!coord.empty())
|
||||||
{
|
{
|
||||||
@ -319,9 +321,9 @@ void CMeter::ReadConfig(const WCHAR* section)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
replaced = false;
|
coord = parser.ReadString(section, L"Y", L"0");
|
||||||
coord = parser.ReadString(section, L"Y", L"0", true, &replaced);
|
m_StyleY = parser.GetLastUsedStyle();
|
||||||
if (!m_Initialized || replaced)
|
if (!m_Initialized || parser.GetLastReplaced() || !parser.GetLastDefaultUsed() && m_StyleY != oldStyleY)
|
||||||
{
|
{
|
||||||
if (!coord.empty())
|
if (!coord.empty())
|
||||||
{
|
{
|
||||||
@ -367,9 +369,9 @@ void CMeter::ReadConfig(const WCHAR* section)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
replaced = false;
|
const std::wstring& result = parser.ReadString(section, L"Hidden", L"0");
|
||||||
const std::wstring& result = parser.ReadString(section, L"Hidden", L"0", true, &replaced);
|
m_StyleHidden = parser.GetLastUsedStyle();
|
||||||
if (replaced)
|
if (parser.GetLastReplaced() || !parser.GetLastDefaultUsed() && m_StyleHidden != oldStyleHidden)
|
||||||
{
|
{
|
||||||
m_Hidden = 0!=(int)parser.ParseDouble(result, 0.0, true);
|
m_Hidden = 0!=(int)parser.ParseDouble(result, 0.0, true);
|
||||||
}
|
}
|
||||||
|
@ -127,6 +127,10 @@ protected:
|
|||||||
CMeter* m_RelativeMeter;
|
CMeter* m_RelativeMeter;
|
||||||
bool m_DynamicVariables; // If true, the measure contains dynamic variables
|
bool m_DynamicVariables; // If true, the measure contains dynamic variables
|
||||||
|
|
||||||
|
std::wstring m_StyleX;
|
||||||
|
std::wstring m_StyleY;
|
||||||
|
std::wstring m_StyleHidden;
|
||||||
|
|
||||||
std::wstring m_ToolTipText;
|
std::wstring m_ToolTipText;
|
||||||
std::wstring m_ToolTipTitle;
|
std::wstring m_ToolTipTitle;
|
||||||
std::wstring m_ToolTipIcon;
|
std::wstring m_ToolTipIcon;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user