Theme.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #include "stdafx.h"
  2. #include ".\theme.h"
  3. #include "TextConvert.h"
  4. #include "Misc.h"
  5. #include "Options.h"
  6. CTheme::CTheme(void)
  7. {
  8. m_lFileVersion = 0;
  9. m_LastWriteTime = 0;
  10. m_CaptionLeft = RGB(0, 84, 195);
  11. m_CaptionRight = RGB(61, 149, 255);
  12. m_CaptionLeftTopMost = RGB(122, 150, 223);
  13. m_CaptionRightTopMost = RGB(157, 185, 235);
  14. m_CaptionLeftNotConnected = RGB(255, 0, 0);
  15. m_CaptionRightNotConnected = RGB(255, 0, 0);
  16. m_CaptionTextColor = RGB(255, 255, 255);
  17. m_ListBoxOddRowsBG = RGB(255, 255, 255);
  18. m_ListBoxEvenRowsBG = RGB(240, 240, 240);
  19. m_ListBoxOddRowsText = RGB(0, 0, 0);
  20. m_ListBoxEvenRowsText = RGB(0, 0, 0);
  21. m_ListBoxSelectedBG = RGB(30, 116, 211);
  22. m_ListBoxSelectedNoFocusBG = RGB(236, 233, 216);
  23. m_ListBoxSelectedText = RGB(255, 255, 255);
  24. m_ListBoxSelectedNoFocusText = RGB(0, 0, 0);
  25. }
  26. CTheme::~CTheme(void)
  27. {
  28. }
  29. bool CTheme::Load(CString csTheme, bool bHeaderOnly, bool bCheckLastWriteTime)
  30. {
  31. if(csTheme.IsEmpty())
  32. return false;
  33. CString csPath = CGetSetOptions::GetPath(PATH_THEMES);
  34. csPath += csTheme;
  35. csPath += ".xml";
  36. __int64 LastWrite = GetLastWriteTime(csPath);
  37. if(bCheckLastWriteTime)
  38. {
  39. if(LastWrite == m_LastWriteTime)
  40. {
  41. return true;
  42. }
  43. }
  44. m_LastWriteTime = LastWrite;
  45. Log(StrF(_T("Loading Theme %s"), csPath));
  46. CStringA csPathA = CTextConvert::ConvertToChar(csPath);
  47. TiXmlDocument doc(csPathA);
  48. if(!doc.LoadFile())
  49. {
  50. m_csLastError.Format(_T("Error loading Theme %s - reason = %s"), csPath, doc.ErrorDesc());
  51. ASSERT(!m_csLastError);
  52. Log(m_csLastError);
  53. return false;
  54. }
  55. TiXmlElement *ItemHeader = doc.FirstChildElement("Ditto_Theme_File");
  56. if(!ItemHeader)
  57. {
  58. m_csLastError.Format(_T("Error finding the section Ditto_Theme_File"));
  59. ASSERT(!m_csLastError);
  60. Log(m_csLastError);
  61. return false;
  62. }
  63. CString csVersion = ItemHeader->Attribute("Version");
  64. m_lFileVersion = ATOI(csVersion);
  65. m_csAuthor = ItemHeader->Attribute("Author");
  66. m_csNotes = ItemHeader->Attribute("Notes");
  67. if(bHeaderOnly)
  68. return true;
  69. LoadElement(ItemHeader, "CaptionLeft", m_CaptionLeft);
  70. LoadElement(ItemHeader, "CaptionRight", m_CaptionRight);
  71. LoadElement(ItemHeader, "CaptionLeftTopMost", m_CaptionLeftTopMost);
  72. LoadElement(ItemHeader, "CaptionRightTopMost", m_CaptionRightTopMost);
  73. LoadElement(ItemHeader, "CaptionLeftNotConnected", m_CaptionLeftNotConnected);
  74. LoadElement(ItemHeader, "CaptionRightNotConnected", m_CaptionRightNotConnected);
  75. LoadElement(ItemHeader, "CaptionTextColor", m_CaptionTextColor);
  76. LoadElement(ItemHeader, "ListBoxOddRowsBG", m_ListBoxOddRowsBG);
  77. LoadElement(ItemHeader, "ListBoxEvenRowsBG", m_ListBoxEvenRowsBG);
  78. LoadElement(ItemHeader, "ListBoxOddRowsText", m_ListBoxOddRowsText);
  79. LoadElement(ItemHeader, "ListBoxEvenRowsText", m_ListBoxEvenRowsText);
  80. LoadElement(ItemHeader, "ListBoxSelectedBG", m_ListBoxSelectedBG);
  81. LoadElement(ItemHeader, "ListBoxSelectedNoFocusBG", m_ListBoxSelectedNoFocusBG);
  82. LoadElement(ItemHeader, "ListBoxSelectedText", m_ListBoxSelectedText);
  83. LoadElement(ItemHeader, "ListBoxSelectedNoFocusText", m_ListBoxSelectedNoFocusText);
  84. return true;
  85. }
  86. bool CTheme::LoadElement(TiXmlElement *pParent, CStringA csNode, COLORREF &Color)
  87. {
  88. TiXmlElement *pColorNode = pParent->FirstChildElement(csNode);
  89. if(pColorNode == NULL)
  90. {
  91. m_csLastError.Format(_T("Theme Load, error loading Node = %s"), csNode);
  92. Log(m_csLastError);
  93. return false;
  94. }
  95. TiXmlNode *pColor = pColorNode->FirstChild();
  96. if(pColor == NULL)
  97. {
  98. m_csLastError.Format(_T("Theme Load, error getting node text for = %s"), csNode);
  99. Log(m_csLastError);
  100. return false;
  101. }
  102. CString csColor = pColor->Value();
  103. csColor = csColor.Trim();
  104. csColor.Replace(_T("RGB("), _T(""));
  105. csColor.Replace(_T(")"), _T(""));
  106. CTokenizer token(csColor, _T(","));
  107. CString csR;
  108. CString csG;
  109. CString csB;
  110. token.Next(csR);
  111. token.Next(csG);
  112. token.Next(csB);
  113. csR = csR.Trim();
  114. csG = csG.Trim();
  115. csB = csB.Trim();
  116. //Only the first is valid they entered the RGB value as a single number
  117. if(csR != "" && csG == "" && csB == "")
  118. {
  119. Color = ATOI(csR);
  120. }
  121. else
  122. {
  123. Color = RGB(ATOI(csR), ATOI(csG), ATOI(csB));
  124. }
  125. return true;
  126. }