OSDN Git Service

Show "fast forward file" at merged commit
[tortoisegit/TortoiseGitJp.git] / src / Git / GitStatusListCtrl.h
index 28b9125..e119499 100644 (file)
@@ -22,6 +22,7 @@
 #include "GitRev.h"\r
 #include "GitConfig.h"\r
 #include "Colors.h"\r
+#include "XPTheme.h"\r
 \r
 #define SVN_WC_ENTRY_WORKING_SIZE_UNKNOWN (-1)\r
 \r
@@ -35,7 +36,9 @@
 #define        SVNSLC_COLREVISION                      0x000000080\r
 #define        SVNSLC_COLDATE                          0x000000100\r
 #define        SVNSLC_COLMODIFICATIONDATE      0x000000200\r
-#define SVNSLC_NUMCOLUMNS              10\r
+#define SVNSLC_COLADD                          0x000000400\r
+#define SVNSLC_COLDEL                          0x000000800\r
+#define SVNSLC_NUMCOLUMNS                      12\r
 \r
 //#define SVNSLC_COLREMOTESTATUS               0x000000010\r
 //#define SVNSLC_COLREMOTETEXT         0x000000080\r
 //#define SVNSLC_COLSVNNEEDSLOCK               0x000010000\r
 //#define SVNSLC_COLCOPYFROM                   0x000020000\r
 \r
-\r
-#define SVNSLC_SHOWUNVERSIONED 0x000000001\r
-#define SVNSLC_SHOWNORMAL              0x000000002\r
-#define SVNSLC_SHOWMODIFIED            0x000000004\r
-#define SVNSLC_SHOWADDED               0x000000008\r
-#define SVNSLC_SHOWREMOVED             0x000000010\r
-#define SVNSLC_SHOWCONFLICTED  0x000000020\r
-#define SVNSLC_SHOWMISSING             0x000000040\r
-#define SVNSLC_SHOWREPLACED            0x000000080\r
-#define SVNSLC_SHOWMERGED              0x000000100\r
-#define SVNSLC_SHOWIGNORED             0x000000200\r
-#define SVNSLC_SHOWOBSTRUCTED  0x000000400\r
-#define SVNSLC_SHOWEXTERNAL            0x000000800\r
-#define SVNSLC_SHOWINCOMPLETE  0x000001000\r
-#define SVNSLC_SHOWINEXTERNALS 0x000002000\r
-#define SVNSLC_SHOWREMOVEDANDPRESENT 0x000004000\r
-#define SVNSLC_SHOWLOCKS               0x000008000\r
-#define SVNSLC_SHOWDIRECTFILES 0x000010000\r
-#define SVNSLC_SHOWDIRECTFOLDER 0x000020000\r
-#define SVNSLC_SHOWEXTERNALFROMDIFFERENTREPO 0x000040000\r
-#define SVNSLC_SHOWSWITCHED            0x000080000\r
-#define SVNSLC_SHOWINCHANGELIST 0x000100000\r
+               \r
+#define SVNSLC_SHOWUNVERSIONED CTGitPath::LOGACTIONS_UNVER\r
+#define SVNSLC_SHOWNORMAL              0x000000000\r
+#define SVNSLC_SHOWMODIFIED            (CTGitPath::LOGACTIONS_MODIFIED)\r
+#define SVNSLC_SHOWADDED               (CTGitPath::LOGACTIONS_ADDED|CTGitPath::LOGACTIONS_COPY)\r
+#define SVNSLC_SHOWREMOVED             CTGitPath::LOGACTIONS_DELETED\r
+#define SVNSLC_SHOWCONFLICTED  CTGitPath::LOGACTIONS_UNMERGED\r
+#define SVNSLC_SHOWMISSING             0x00000000\r
+#define SVNSLC_SHOWREPLACED            CTGitPath::LOGACTIONS_REPLACED\r
+#define SVNSLC_SHOWMERGED              CTGitPath::LOGACTIONS_MERGED\r
+#define SVNSLC_SHOWIGNORED             CTGitPath::LOGACTIONS_IGNORE\r
+#define SVNSLC_SHOWOBSTRUCTED  0x00000000\r
+#define SVNSLC_SHOWEXTERNAL            0x00000000\r
+#define SVNSLC_SHOWINCOMPLETE  0x00000000\r
+#define SVNSLC_SHOWINEXTERNALS 0x00000000\r
+#define SVNSLC_SHOWREMOVEDANDPRESENT 0x00000000\r
+#define SVNSLC_SHOWLOCKS               0x00000000\r
+#define SVNSLC_SHOWDIRECTFILES 0x00000000\r
+#define SVNSLC_SHOWDIRECTFOLDER 0x00000000\r
+#define SVNSLC_SHOWEXTERNALFROMDIFFERENTREPO 0x00000000\r
+#define SVNSLC_SHOWSWITCHED            0x00000000\r
+#define SVNSLC_SHOWINCHANGELIST 0x00000000\r
 \r
 #define SVNSLC_SHOWDIRECTS             (SVNSLC_SHOWDIRECTFILES | SVNSLC_SHOWDIRECTFOLDER)\r
 \r
 \r
-#define SVNSLC_SHOWVERSIONED (SVNSLC_SHOWNORMAL|SVNSLC_SHOWMODIFIED|\\r
+#define SVNSLC_SHOWVERSIONED (CTGitPath::LOGACTIONS_FORWORD|SVNSLC_SHOWNORMAL|SVNSLC_SHOWMODIFIED|\\r
 SVNSLC_SHOWADDED|SVNSLC_SHOWREMOVED|SVNSLC_SHOWCONFLICTED|SVNSLC_SHOWMISSING|\\r
 SVNSLC_SHOWREPLACED|SVNSLC_SHOWMERGED|SVNSLC_SHOWIGNORED|SVNSLC_SHOWOBSTRUCTED|\\r
 SVNSLC_SHOWEXTERNAL|SVNSLC_SHOWINCOMPLETE|SVNSLC_SHOWINEXTERNALS|\\r
@@ -99,28 +102,28 @@ SVNSLC_SHOWINCOMPLETE|SVNSLC_SHOWEXTERNAL|SVNSLC_SHOWINEXTERNALS)
 \r
 #define SVNSLC_SHOWALL (SVNSLC_SHOWVERSIONED|SVNSLC_SHOWUNVERSIONED)\r
 \r
-#define SVNSLC_POPALL                                  0xFFFFFFFF\r
-#define SVNSLC_POPCOMPAREWITHBASE              0x00000001\r
-#define SVNSLC_POPCOMPARE                              0x00000002\r
-#define SVNSLC_POPGNUDIFF                              0x00000004\r
-#define SVNSLC_POPREVERT                               0x00000008\r
-#define SVNSLC_POPUPDATE                               0x00000010\r
-#define SVNSLC_POPSHOWLOG                              0x00000020\r
-#define SVNSLC_POPOPEN                                 0x00000040\r
-#define SVNSLC_POPDELETE                               0x00000080\r
-#define SVNSLC_POPADD                                  0x00000100\r
-#define SVNSLC_POPIGNORE                               0x00000200\r
-#define SVNSLC_POPCONFLICT                             0x00000400\r
-#define SVNSLC_POPRESOLVE                              0x00000800\r
-#define SVNSLC_POPLOCK                                 0x00001000\r
-#define SVNSLC_POPUNLOCK                               0x00002000\r
-#define SVNSLC_POPUNLOCKFORCE                  0x00004000\r
-#define SVNSLC_POPEXPLORE                              0x00008000\r
-#define SVNSLC_POPCOMMIT                               0x00010000\r
-#define SVNSLC_POPPROPERTIES                   0x00020000\r
-#define SVNSLC_POPREPAIRMOVE                   0x00040000\r
-#define SVNSLC_POPCHANGELISTS                  0x00080000\r
-#define SVNSLC_POPBLAME                                        0x00100000\r
+#define SVNSLC_POPALL                                  0xFFFFFFFFFFFFFFFF\r
+#define SVNSLC_POPCOMPAREWITHBASE              CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_COMPARE) \r
+#define SVNSLC_POPCOMPARE                              CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_COMPAREWC) \r
+#define SVNSLC_POPGNUDIFF                              CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_GNUDIFF1) \r
+#define SVNSLC_POPREVERT                               CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_REVERT) \r
+#define SVNSLC_POPUPDATE                               CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_UPDATE)\r
+#define SVNSLC_POPSHOWLOG                              CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_LOG)\r
+#define SVNSLC_POPOPEN                                 CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_OPEN)\r
+#define SVNSLC_POPDELETE                               CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_DELETE)\r
+#define SVNSLC_POPADD                                  CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_ADD)\r
+#define SVNSLC_POPIGNORE                               CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_IGNORE)\r
+#define SVNSLC_POPCONFLICT                             CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_EDITCONFLICT)\r
+#define SVNSLC_POPRESOLVE                              CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_RESOLVECONFLICT)\r
+#define SVNSLC_POPLOCK                                 CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_LOCK)\r
+#define SVNSLC_POPUNLOCK                               CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_UNLOCK)\r
+#define SVNSLC_POPUNLOCKFORCE                  CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_UNLOCKFORCE)\r
+#define SVNSLC_POPEXPLORE                              CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_EXPLORE)\r
+#define SVNSLC_POPCOMMIT                               CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_COMMIT)\r
+#define SVNSLC_POPPROPERTIES                   CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_PROPERTIES)\r
+#define SVNSLC_POPREPAIRMOVE                   CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_REPAIRMOVE)\r
+#define SVNSLC_POPCHANGELISTS                  CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_CHECKGROUP)\r
+#define SVNSLC_POPBLAME                                        CGitStatusListCtrl::GetContextMenuBit(CGitStatusListCtrl::IDSVNLC_BLAME)\r
 \r
 #define SVNSLC_IGNORECHANGELIST                        _T("ignore-on-commit")\r
 \r
@@ -142,6 +145,7 @@ SVNSLC_SHOWINCOMPLETE|SVNSLC_SHOWEXTERNAL|SVNSLC_SHOWINEXTERNALS)
 typedef int (__cdecl *GENERICCOMPAREFN)(const void * elem1, const void * elem2);\r
 typedef CComCritSecLock<CComCriticalSection> Locker;\r
 \r
+class CGitStatusListCtrlDropTarget;\r
 /**\r
  * \ingroup SVN\r
  * A List control, based on the MFC CListCtrl which shows a list of\r
@@ -155,6 +159,52 @@ class CGitStatusListCtrl :
        public CListCtrl\r
 {\r
 public:\r
+       enum\r
+       {\r
+               IDSVNLC_REVERT = 1,\r
+               IDSVNLC_COMPARE,\r
+               IDSVNLC_OPEN,   \r
+               IDSVNLC_DELETE,\r
+               IDSVNLC_IGNORE,\r
+               IDSVNLC_GNUDIFF1                 ,\r
+               IDSVNLC_UPDATE          ,\r
+               IDSVNLC_LOG              ,\r
+               IDSVNLC_EDITCONFLICT     ,\r
+               IDSVNLC_IGNOREMASK          ,\r
+               IDSVNLC_ADD                         ,\r
+               IDSVNLC_RESOLVECONFLICT ,\r
+               IDSVNLC_LOCK                    ,\r
+               IDSVNLC_LOCKFORCE               ,\r
+               IDSVNLC_UNLOCK                  ,\r
+               IDSVNLC_UNLOCKFORCE             ,\r
+               IDSVNLC_OPENWITH                ,\r
+               IDSVNLC_EXPLORE                 ,\r
+               IDSVNLC_RESOLVETHEIRS   ,\r
+               IDSVNLC_RESOLVEMINE             ,\r
+               IDSVNLC_REMOVE                  ,\r
+               IDSVNLC_COMMIT                  ,\r
+               IDSVNLC_PROPERTIES              ,\r
+               IDSVNLC_COPY                    ,\r
+               IDSVNLC_COPYEXT                 ,\r
+               IDSVNLC_REPAIRMOVE              ,\r
+               IDSVNLC_REMOVEFROMCS    ,\r
+               IDSVNLC_CREATECS                ,\r
+               IDSVNLC_CREATEIGNORECS  ,\r
+               IDSVNLC_CHECKGROUP              ,\r
+               IDSVNLC_UNCHECKGROUP    ,\r
+               IDSVNLC_ADD_RECURSIVE   ,\r
+               IDSVNLC_COMPAREWC               ,\r
+               IDSVNLC_BLAME                   ,\r
+               IDSVNLC_SAVEAS                  ,\r
+               IDSVNLC_REVERTTOREV             ,\r
+               IDSVNLC_VIEWREV                 ,\r
+               IDSVNLC_FINDENTRY       ,\r
+// the IDSVNLC_MOVETOCS *must* be the last index, because it contains a dynamic submenu where \r
+// the submenu items get command ID's sequent to this number\r
+               IDSVNLC_MOVETOCS                ,\r
+       };\r
+       int GetColumnIndex(int colmask);\r
+       static inline unsigned __int64 GetContextMenuBit(int i){ return ((unsigned __int64 )0x1)<<i ;}\r
        /**\r
         * Sent to the parent window (using ::SendMessage) after a context menu\r
         * command has finished if the item count has changed.\r
@@ -189,6 +239,7 @@ public:
         * Helper class for CGitStatusListCtrl which represents\r
         * the data for each file shown.\r
         */\r
+#if 0\r
        class FileEntry\r
        {\r
        public:\r
@@ -314,6 +365,7 @@ public:
                friend class CGitStatusListCtrlDropTarget;\r
         friend class CSorter;\r
        };\r
+#endif\r
        /**\r
         * \ingroup TortoiseProc\r
         * Helper class for CGitStatusListCtrl that represents\r
@@ -371,9 +423,9 @@ public:
         /// call these to update the user-prop list\r
         /// (will also auto-insert /-remove new list columns)\r
 \r
-        void UpdateUserPropList (const std::vector<FileEntry*>& files);\r
-        void UpdateRelevance ( const std::vector<FileEntry*>& files\r
-                             , const std::vector<size_t>& visibleFiles);\r
+        //void UpdateUserPropList (const std::vector<FileEntry*>& files);\r
+        //void UpdateRelevance ( const std::vector<FileEntry*>& files\r
+         //                    , const std::vector<size_t>& visibleFiles);\r
 \r
         /// don't clutter the context menu with irrelevant prop info\r
 \r
@@ -480,7 +532,7 @@ public:
         *                       Use the GitSLC_POPxxx defines.\r
         * \param bHasCheckboxes TRUE if the control should show check boxes on the left of each file entry.\r
         */\r
-       void Init(DWORD dwColumns, const CString& sColumnInfoContainer, DWORD dwContextMenus = (SVNSLC_POPALL ^ SVNSLC_POPCOMMIT), bool bHasCheckboxes = true);\r
+       void Init(DWORD dwColumns, const CString& sColumnInfoContainer, unsigned __int64 dwContextMenus = (SVNSLC_POPALL ^ SVNSLC_POPCOMMIT), bool bHasCheckboxes = true);\r
        /**\r
         * Sets a background image for the list control.\r
         * The image is shown in the right bottom corner.\r
@@ -507,9 +559,10 @@ public:
         * \param bUpdate TRUE if the remote status is requested too.\r
         * \return TRUE on success.\r
         */\r
-       BOOL GetStatus ( const CTGitPathList& pathList\r
+       BOOL GetStatus ( const CTGitPathList* pathList=NULL\r
                    , bool bUpdate = false\r
                    , bool bShowIgnores = false\r
+                                  , bool bShowUnRev=false\r
                    , bool bShowUserProps = false);\r
 \r
        /**\r
@@ -517,7 +570,7 @@ public:
         * \param dwShow mask of file types to show. Use the GitSLC_SHOWxxx defines.\r
         * \param dwCheck mask of file types to check. Use GitLC_SHOWxxx defines. Default (0) means 'use the entry's stored check status'\r
         */\r
-       void Show(DWORD dwShow, DWORD dwCheck = 0, bool bShowFolders = true);\r
+       void Show(DWORD dwShow, DWORD dwCheck = 0, bool bShowFolders = true,BOOL updateStatusList=FALSE);\r
        void Show(DWORD dwShow, const CTGitPathList& checkedList, bool bShowFolders = true);\r
 \r
        /**\r
@@ -556,13 +609,13 @@ public:
        /**\r
         * Returns the file entry data for the list control index.\r
         */\r
-       CGitStatusListCtrl::FileEntry * GetListEntry(UINT_PTR index);\r
+       //CGitStatusListCtrl::FileEntry * GetListEntry(UINT_PTR index);\r
 \r
        /**\r
         * Returns the file entry data for the specified path.\r
         * \note The entry might not be shown in the list control.\r
         */\r
-       CGitStatusListCtrl::FileEntry * GetListEntry(const CTGitPath& path);\r
+       //CGitStatusListCtrl::FileEntry * GetListEntry(const CTGitPath& path);\r
 \r
        /**\r
         * Returns the index of the list control entry with the specified path,\r
@@ -573,7 +626,7 @@ public:
        /**\r
         * Returns the file entry data for the specified path in the list control.\r
         */\r
-       CGitStatusListCtrl::FileEntry * GetVisibleListEntry(const CTGitPath& path);\r
+       //CGitStatusListCtrl::FileEntry * GetVisibleListEntry(const CTGitPath& path);\r
 \r
        /**\r
         * Returns a String containing some statistics like number of modified, normal, deleted,...\r
@@ -630,7 +683,7 @@ public:
         * if \a bStrict is set to false, then the paths passed to the control\r
         * to fetch the status (in GetStatus()) are used if possible.\r
         */\r
-       CTGitPath GetCommonDirectory(bool bStrict);\r
+       CString GetCommonDirectory(bool bStrict);\r
 \r
        /**\r
         * Returns the parent url of all entries in the control.\r
@@ -723,10 +776,19 @@ public:
 private:\r
        void SaveColumnWidths(bool bSaveToRegistry = false);\r
        void Sort();    ///< Sorts the control by columns\r
-       void AddEntry(FileEntry * entry, WORD langID, int listIndex);   ///< add an entry to the control\r
+       //void AddEntry(FileEntry * entry, WORD langID, int listIndex); ///< add an entry to the control\r
        void RemoveListEntry(int index);        ///< removes an entry from the listcontrol and both arrays\r
        bool BuildStatistics(); ///< build the statistics and correct the case of files/folders\r
        void StartDiff(int fileindex);  ///< start the external diff program\r
+       void StartDiffWC(int fileindex);        ///< start the external diff program\r
+       \r
+       enum\r
+       {\r
+               NOTEPAD2,\r
+               OPEN,\r
+               OPEN_WITH,\r
+       };\r
+       void OpenFile(CTGitPath *path,int mode);\r
 \r
     /// fetch all user properties for all items\r
     void FetchUserProperties();\r
@@ -746,26 +808,26 @@ private:
        void ClearStatusArray();\r
 \r
        /// Sort predicate function - Compare the paths of two entries without regard to case\r
-       static bool EntryPathCompareNoCase(const FileEntry* pEntry1, const FileEntry* pEntry2);\r
+       //static bool EntryPathCompareNoCase(const FileEntry* pEntry1, const FileEntry* pEntry2);\r
 \r
        /// Predicate used to build a list of only the versioned entries of the FileEntry array\r
-       static bool IsEntryVersioned(const FileEntry* pEntry1);\r
+       //static bool IsEntryVersioned(const FileEntry* pEntry1);\r
 \r
        /// Look up the relevant show flags for a particular Git status value\r
        DWORD GetShowFlagsFromGitStatus(git_wc_status_kind status);\r
 \r
        /// Build a FileEntry item and add it to the FileEntry array\r
-       const FileEntry* AddNewFileEntry(\r
-               const git_wc_status2_t* pGitStatus,  // The return from the Git GetStatus functions\r
-               const CTGitPath& path,                          // The path of the item we're adding\r
-               const CTGitPath& basePath,                      // The base directory for this status build\r
-               bool bDirectItem,                                       // Was this item the first found by GetFirstFileStatus or by a subsequent GetNextFileStatus call\r
-               bool bInExternal,                                       // Are we in an 'external' folder\r
-               bool bEntryfromDifferentRepo            // if the entry is from a different repository\r
-               );\r
+       //const FileEntry* AddNewFileEntry(\r
+       //      const git_wc_status2_t* pGitStatus,  // The return from the Git GetStatus functions\r
+       //      const CTGitPath& path,                          // The path of the item we're adding\r
+       //      const CTGitPath& basePath,                      // The base directory for this status build\r
+       //      bool bDirectItem,                                       // Was this item the first found by GetFirstFileStatus or by a subsequent GetNextFileStatus call\r
+       //      bool bInExternal,                                       // Are we in an 'external' folder\r
+       //      bool bEntryfromDifferentRepo            // if the entry is from a different repository\r
+       //      );\r
 \r
        /// Adjust the checkbox-state on all descendants of a specific item\r
-       void SetCheckOnAllDescendentsOf(const FileEntry* parentEntry, bool bCheck);\r
+       //void SetCheckOnAllDescendentsOf(const FileEntry* parentEntry, bool bCheck);\r
 \r
        /// Build a path list of all the selected items in the list (NOTE - SELECTED, not CHECKED)\r
        void FillListOfSelectedItemPaths(CTGitPathList& pathList, bool bNoIgnored = false);\r
@@ -820,6 +882,10 @@ private:
        afx_msg void OnHdnItemchanging(NMHDR *pNMHDR, LRESULT *pResult);\r
        afx_msg void OnDestroy();\r
 \r
+\r
+       void FileSaveAs(CTGitPath *path);\r
+       int RevertSelectedItemToVersion();\r
+\r
 private:\r
        bool *                                          m_pbCanceled;\r
        bool                                        m_bAscending;               ///< sort direction\r
@@ -858,7 +924,7 @@ private:
        bool                                            m_bShowFolders;\r
        bool                                            m_bShowIgnores;\r
        bool                                            m_bUpdate;\r
-       DWORD                                           m_dwContextMenus;\r
+       unsigned __int64                        m_dwContextMenus;\r
        BOOL                                            m_bBlock;\r
        BOOL                                            m_bBlockUI;\r
        bool                                            m_bBusy;\r
@@ -898,12 +964,19 @@ public:
                FILELIST_IGNORE =0x4\r
        };\r
 public:\r
-       int UpdateFileList(git_revnum_t hash);\r
-       int UpdateFileList(int mask, bool once=true);\r
-       int UpdateUnRevFileList();\r
-       int UpdateIgnoreFileList();\r
+       int UpdateFileList(git_revnum_t hash,CTGitPathList *List=NULL);\r
+       int UpdateFileList(int mask, bool once=true,CTGitPathList *List=NULL);\r
+       int UpdateUnRevFileList(CTGitPathList *List=NULL);\r
+       int UpdateIgnoreFileList(CTGitPathList *List=NULL);\r
+       \r
+       int UpdateWithGitPathList(CTGitPathList &list);\r
+\r
        void AddEntry(CTGitPath* path, WORD langID, int ListIndex);\r
+       void Clear();\r
        int m_FileLoaded;\r
+       git_revnum_t m_CurrentVersion;\r
+public:\r
+       CXPTheme        m_Theme;\r
 };\r
 \r
 #if 0\r