OSDN Git Service

PATCH: [ 1383120 ] Fix background colors in WinMerge
authorPerry Rapp <elsapo@users.sourceforge.net>
Mon, 19 Dec 2005 00:13:37 +0000 (00:13 +0000)
committerPerry Rapp <elsapo@users.sourceforge.net>
Mon, 19 Dec 2005 00:13:37 +0000 (00:13 +0000)
  Src: SyntaxColors.cpp SyntaxColors.h
  Src/Common: OptionsMgr.cpp OptionsMgr.h

Src/Changes.txt
Src/Common/OptionsMgr.cpp
Src/Common/OptionsMgr.h
Src/SyntaxColors.cpp
Src/SyntaxColors.h

index bf5b29c..33ca678 100644 (file)
@@ -1,9 +1,14 @@
+2005-12-19 Perry
+ PATCH: [ 1383120 ] Fix background colors in WinMerge
+  Src: SyntaxColors.cpp SyntaxColors.h
+  Src/Common: OptionsMgr.cpp OptionsMgr.h
+
 2005-12-17 Kimmo
  BUG: [ 1379277 ] typo fix for docs
   Docs/Developers: Plugins.html
  BUG: [ 1375661 ] Readme incomplete in WinMerge 2.5.0.3
   Docs/Users: ReadMe.txt
- PaTCH: [ 1382966 ] Remove empty CMergeEditView::AddMod() and ResetMod()
+ PATCH: [ 1382966 ] Remove empty CMergeEditView::AddMod() and ResetMod()
   Src: MergeEditView.cpp MergeEditView.h
 
 2005-12-17 Takashi
index 765bc32..36a82fc 100644 (file)
@@ -754,13 +754,16 @@ int CRegOptions::InitOption(CString name, LPCTSTR defaultValue)
  * Adds new option to list of options. Sets value to default value.
  * If option does not exist in registry, saves with default value.
  */
-int CRegOptions::InitOption(CString name, int defaultValue)
+int CRegOptions::InitOption(CString name, int defaultValue, bool serializable)
 {
        varprop::VariantValue defValue;
        int retVal = OPT_OK;
        
        defValue.SetInt(defaultValue);
-       retVal = InitOption(name, defValue);
+       if (serializable)
+               retVal = InitOption(name, defValue);
+       else
+               Add(name, defValue);
        return retVal;
 }
 
index 67e31b7..15889e7 100644 (file)
@@ -87,7 +87,7 @@ public:
        virtual int InitOption(CString name,
                varprop::VariantValue defaultValue) = 0;
        virtual int InitOption(CString name, LPCTSTR defaultValue) = 0;
-       virtual int InitOption(CString name, int defaultValue) = 0;
+       virtual int InitOption(CString name, int defaultValue, bool serializable=true) = 0;
        virtual int InitOption(CString name, bool defaultValue) = 0;
 
        virtual int SaveOption(CString name) = 0;
@@ -116,7 +116,7 @@ public:
 
        virtual int InitOption(CString name, varprop::VariantValue defaultValue);
        virtual int InitOption(CString name, LPCTSTR defaultValue);
-       virtual int InitOption(CString name, int defaultValue);
+       virtual int InitOption(CString name, int defaultValue, bool serializable=true);
        virtual int InitOption(CString name, bool defaultValue);
 
        virtual int SaveOption(CString name);
index 23de954..e32225a 100644 (file)
@@ -46,6 +46,33 @@ void SyntaxColors::Clone(SyntaxColors *pColors)
        m_bolds.Copy(pColors->m_bolds);
 }
 
+bool SyntaxColors::IsThemeableColorIndex(int nColorIndex) const
+{
+       int temp=0;
+       return GetSystemColorIndex(nColorIndex, &temp);
+}
+
+/**
+ * @brief Get system color for this index (if this varies with theme)
+ */
+bool SyntaxColors::GetSystemColorIndex(int nColorIndex, int * pSysIndex) const
+{
+       switch (nColorIndex)
+       {
+               case COLORINDEX_WHITESPACE :
+               case COLORINDEX_BKGND:
+                       *pSysIndex = COLOR_WINDOW;
+                       return true;
+               case COLORINDEX_NORMALTEXT:
+                       *pSysIndex = COLOR_WINDOWTEXT;
+                       return true;
+               case COLORINDEX_SELMARGIN:
+                       *pSysIndex = COLOR_SCROLLBAR;
+                       return true;
+       }
+       return false;
+}
+
 /**
  * @brief Set default color values.
  */
@@ -55,18 +82,22 @@ void SyntaxColors::SetDefaults()
        {
                COLORREF color;
 
-               switch (i)
+               int nSysIndex = 0;
+               if (GetSystemColorIndex(i, &nSysIndex))
                {
-               case COLORINDEX_WHITESPACE :
-               case COLORINDEX_BKGND:
-                       color = GetSysColor (COLOR_WINDOW);
-                       break;
-               case COLORINDEX_NORMALTEXT:
-                       color = GetSysColor (COLOR_WINDOWTEXT);
-                       break;
-               case COLORINDEX_SELMARGIN:
-                       color = GetSysColor (COLOR_SCROLLBAR);
-                       break;
+                       // Colors that vary with Windows theme
+                       color = GetSysColor(nSysIndex);
+               }
+               else switch (i)
+               {
+                       // Theme colors are handled above by GetSystemColorIndex
+                       //
+                       // COLORINDEX_WHITESPACE
+                       // COLORINDEX_BKGND:
+                       // COLORINDEX_NORMALTEXT:
+                       // COLORINDEX_SELMARGIN:
+
+                       // Hardcoded defaults
                case COLORINDEX_PREPROCESSOR:
                        color = RGB (0, 128, 192);
                        break;
@@ -172,7 +203,11 @@ void SyntaxColors::Initialize(CRegOptions *pOptionsMgr)
                COLORREF ref;
                valuename.Format(_T("%s/Color%02u"), DefColorsPath, i);
                color = m_colors.GetAt(i);
-               m_pOptions->InitOption(valuename, color);
+
+               // Themeable colors are not read from the registry
+               // Currently (2005-12) we have no GUI to specify the themable colors anyway
+               bool serializable = !IsThemeableColorIndex(i);
+               m_pOptions->InitOption(valuename, color, serializable);
                color = m_pOptions->GetInt(valuename);
                ref = color;
                m_colors.SetAt(i, ref);
@@ -213,42 +248,3 @@ void SyntaxColors::SaveToRegistry()
        }
 }
 
-/**
- * @brief Read color values from storage.
- */
-void SyntaxColors::ReadFromRegistry()
-{
-       ASSERT(m_pOptions);
-       CString valuename;
-
-       valuename = DefColorsPath + '/';
-       valuename += _T("Values");
-       int count = m_pOptions->GetInt(valuename);
-
-       // Color count matches we propably have correct set saved
-       // otherwise fallback to default colors
-       if (count == COLORINDEX_COUNT)
-       {
-               for (unsigned int i = COLORINDEX_NONE; i < COLORINDEX_LAST; i++)
-               {
-                       int color = 0;
-                       COLORREF ref;
-                       valuename.Format(_T("%s/Color%02u"), DefColorsPath, i);
-                       color = m_pOptions->GetInt(valuename);
-                       ref = color;
-                       m_colors.SetAt(i, ref);
-
-                       int nBold = 0;
-                       BOOL bBold = FALSE;
-                       valuename.Format(_T("%s/Bold%02u"), DefColorsPath, i);
-                       nBold = m_pOptions->GetInt(valuename);
-                       bBold = nBold ? TRUE : FALSE;
-                       m_bolds.SetAt(i, bBold);
-               }
-       }
-       else
-       {
-               m_colors.SetSize(COLORINDEX_COUNT);
-               SetDefaults();
-       }
-}
index 6751c65..89fb417 100644 (file)
@@ -80,8 +80,13 @@ public:
        void SetDefaults();
        void Initialize(CRegOptions *pOptionsMgr);
        void SaveToRegistry();
-       void ReadFromRegistry();
 
+// Implementation methods
+private:
+       bool IsThemeableColorIndex(int nColorIndex) const;
+       bool GetSystemColorIndex(int nColorIndex, int * pSysIndex) const;
+
+// Implementation data
 private:
        ColorArray m_colors; /**< Syntax highlight colors */
        BoolArray m_bolds; /**< Bold font enable/disable */