XTPSyntaxEditLexColorFileReader.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:29k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPSyntaxEditLexColorFileReader.h: interface for the CXTLexColorFileReader class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME SYNTAX EDIT LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. //////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPSYNTAXEDITLEXCOLORFILEREADER_H__)
  22. #define __XTPSYNTAXEDITLEXCOLORFILEREADER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPSyntaxEditColorTheme;
  28. //-----------------------------------------------------------------------
  29. // Summary:
  30. //      This enumeration describes allowable configuration managers flags.
  31. //-----------------------------------------------------------------------
  32. enum XTPSyntaxEditCfgFlags
  33. {
  34. xtpEditCfgFileAdd       = 0x0001, // file should be added
  35. xtpEditCfgFileRemove    = 0x0002, // file should be removed
  36. };
  37. //===========================================================================
  38. // Summary:
  39. //      This storage class is designed to contain information from the color
  40. //      settings file section. It helps easy retrieve color information.
  41. //===========================================================================
  42. class _XTP_EXT_CLASS CXTPSyntaxEditColorInfo
  43. {
  44. public:
  45. //-----------------------------------------------------------------------
  46. // Summary:
  47. //      Object constructor.
  48. // Parameters:
  49. //      pTheme : [in] Pointer to CXTPSyntaxEditColorTheme object (theme
  50. //                      this color information belongs to)
  51. //-----------------------------------------------------------------------
  52. CXTPSyntaxEditColorInfo(CXTPSyntaxEditColorTheme* pTheme);
  53. //-----------------------------------------------------------------------
  54. // Summary:
  55. //      Object constructor.
  56. // Parameters:
  57. //      strClassName : [in] Lex Class name
  58. //      pTheme : [in] Pointer to CXTPSyntaxEditColorTheme object (theme
  59. //                      this color information belongs to)
  60. //-----------------------------------------------------------------------
  61. CXTPSyntaxEditColorInfo(const CString& strClassName, CXTPSyntaxEditColorTheme* pTheme);
  62. //-----------------------------------------------------------------------
  63. // Summary:
  64. //      Destroys a CXTPSyntaxEditColorTheme() object, handles cleanup and
  65. //      de-allocation
  66. //-----------------------------------------------------------------------
  67. virtual ~CXTPSyntaxEditColorInfo ();
  68. //-----------------------------------------------------------------------
  69. // Summary:
  70. //      Adds parameter.
  71. // Parameters:
  72. //      strName     : [in] Parameter name.
  73. //      strValue    : [in] Parameter value.
  74. //-----------------------------------------------------------------------
  75. void AddParam(const CString& strName, const CString& strValue);
  76. //-----------------------------------------------------------------------
  77. // Summary:
  78. //      Returns string of parameter value.
  79. // Parameters:
  80. //      strName     : [in] Parameter name.
  81. //      bDynamic    : [in] If TRUE - search parameter value in parent
  82. //                         themes (dynamically), otherwise it is searched
  83. //                         only in the current theme.
  84. // Returns:
  85. //      CString object with parameter value.
  86. //-----------------------------------------------------------------------
  87. const CString GetParam(const CString& strName, BOOL bDynamic = TRUE);
  88. //-----------------------------------------------------------------------
  89. // Summary:
  90. //      Returns hexadecimal value.
  91. // Parameters:
  92. //      strName     : [in] Parameter name.
  93. //      bDynamic    : [in] If TRUE - search parameter value in parent
  94. //                         themes (dynamically), otherwise it is searched
  95. //                         only in the current theme.
  96. // Returns:
  97. //      DWORD parameter value.
  98. //-----------------------------------------------------------------------
  99. DWORD GetHexParam(const CString& strName, BOOL bDynamic = TRUE);
  100. //-----------------------------------------------------------------------
  101. // Summary:
  102. //      Returns firs parameter position.
  103. // Returns:
  104. //      POSITION value.
  105. //-----------------------------------------------------------------------
  106. POSITION GetFirstParamNamePosition();
  107. //-----------------------------------------------------------------------
  108. // Summary:
  109. //      Returns next parameter position.
  110. // Parameters:
  111. //      pos : [in] position.
  112. // Returns:
  113. //      POSITION value.
  114. //-----------------------------------------------------------------------
  115. const CString GetNextParamName(POSITION& pos);
  116. //-----------------------------------------------------------------------
  117. // Summary:
  118. //      Use this function to get lex class name.
  119. // Returns:
  120. //      A lex class name
  121. //-----------------------------------------------------------------------
  122. const CString GetClassName() const;
  123. private:
  124. CString m_strClassName;     // lex class name
  125. CMapStringToString m_mapParams; // name/value parameters map
  126. CXTPSyntaxEditColorTheme* m_pTheme; // pointer to the theme this color information belongs to
  127. };
  128. //===========================================================================
  129. //===========================================================================
  130. class CXTPSyntaxEditColorInfoArray : public
  131. CArray<CXTPSyntaxEditColorInfo*, CXTPSyntaxEditColorInfo*>
  132. {
  133. typedef CArray<CXTPSyntaxEditColorInfo*, CXTPSyntaxEditColorInfo*> TBase;
  134. public:
  135. CXTPSyntaxEditColorInfoArray(){};
  136. virtual ~CXTPSyntaxEditColorInfoArray(){
  137. RemoveAll();
  138. };
  139. void RemoveAll()
  140. {
  141. for(int i = 0; i < GetSize(); i++) {
  142. if(GetAt(i)) {
  143. delete GetAt(i);
  144. }
  145. }
  146. TBase::RemoveAll();
  147. }
  148. };
  149. class CXTPSyntaxEditColorThemesManager;
  150. class CXTPSyntaxEditPropertiesTheme;
  151. //===========================================================================
  152. // Summary:
  153. //      This class provides functionality to read configuration information
  154. //      from configuration files with predefined structure. Its information
  155. //      describes color settings for corresponding lexical items for given
  156. //      language.
  157. //      You construct instance of CXTPSyntaxEditColorTheme by calling
  158. //      constructor. Then you should call Load() member function
  159. //      to read data from persistent storage (file for this implementation),
  160. //      CXTPSyntaxEditLexColorInfo structures.
  161. //===========================================================================
  162. class _XTP_EXT_CLASS CXTPSyntaxEditColorTheme
  163. {
  164. friend class CXTPSyntaxEditPropertiesTheme;
  165. //===========================================================================
  166. // Summary:
  167. //      Determines custom array type to store CXTPSyntaxEditColorInfo structures.
  168. // See also:
  169. //      CXTPSyntaxEditColorInfo.
  170. //===========================================================================
  171. typedef CMap<CString, LPCTSTR, CXTPSyntaxEditColorInfo *, CXTPSyntaxEditColorInfo *> CXTPSyntaxEditMapLexColorInfo;
  172. public:
  173. //-----------------------------------------------------------------------
  174. // Summary:
  175. //      Default object constructor.
  176. // Parameters:
  177. //      pThemesManager : [in] Pointer to the parent themes manager.
  178. //-----------------------------------------------------------------------
  179. CXTPSyntaxEditColorTheme(CXTPSyntaxEditColorThemesManager* pThemesManager);
  180. //-----------------------------------------------------------------------
  181. // Summary:
  182. //      Destroys a CXTPSyntaxEditColorTheme() object, handles cleanup and
  183. //      de-allocation.
  184. //-----------------------------------------------------------------------
  185. virtual ~CXTPSyntaxEditColorTheme();
  186. //-----------------------------------------------------------------------
  187. // Summary:
  188. //      Parses associated color schema file and fills internal color info
  189. //      structures.
  190. // Parameters:
  191. //      csFileName : [in] configuration file name string.
  192. //-----------------------------------------------------------------------
  193. virtual void Load(const CString& csFileName);
  194. //-----------------------------------------------------------------------
  195. // Summary:
  196. //      Returns name of the parent schema.
  197. // Returns:
  198. //      CString containing name of the parent schema.
  199. //-----------------------------------------------------------------------
  200. const CString GetParentThemeName();
  201. //-----------------------------------------------------------------------
  202. // Summary:
  203. //      Returns parent schema.
  204. // Returns:
  205. //      Pointer to CXTPSyntaxEditColorTheme object if exists;
  206. //      NULL lf parent schema doesn't exist.
  207. //-----------------------------------------------------------------------
  208. CXTPSyntaxEditColorTheme* GetParentTheme();
  209. //-----------------------------------------------------------------------
  210. // Summary:
  211. //      Returns color information.
  212. // Parameters:
  213. //      strLexClass         : [in] Lex Class name string
  214. //      strThemeFilename    : [in] configuration file name string.
  215. //      bDynamic            : [in] If TRUE - search color info in parent
  216. //                                 themes (dynamically), otherwise it is
  217. //                                 searched only in this theme.
  218. // Returns:
  219. //      Pointer to CXTPSyntaxEditColorInfo object.
  220. // Remarks:
  221. //      strThemeFilename is required to avoid calling recursion.
  222. //-----------------------------------------------------------------------
  223. CXTPSyntaxEditColorInfo* GetColorInfo(const CString& strLexClass,
  224. const CString& strThemeFilename,
  225. BOOL bDynamic = TRUE);
  226. //-----------------------------------------------------------------------
  227. // Summary:
  228. //      Returns configuration file name.
  229. // Returns:
  230. //      CString containing file name.
  231. //-----------------------------------------------------------------------
  232. CString GetFileName();
  233. //-----------------------------------------------------------------------
  234. // Summary:
  235. //      Use this method to save colors to configuration file.
  236. // Parameters:
  237. //      strParentThemeName  - The parent theme name.
  238. //      pColorInfoArray_new - Colors information array.
  239. // Returns:
  240. //      TRUE if successful, FALSE otherwise.
  241. // See Also: GetFileName
  242. //-----------------------------------------------------------------------
  243. BOOL WriteCfgFile(CString strParentThemeName,
  244.   CXTPSyntaxEditColorInfoArray* pColorInfoArray_new);
  245. protected:
  246. //-----------------------------------------------------------------------
  247. // Summary:
  248. //      Cleans up collection.
  249. //-----------------------------------------------------------------------
  250. void Cleanup();
  251. //-----------------------------------------------------------------------
  252. // Summary:
  253. //      Parses a single section and creates CXTPSyntaxEditColorInfo
  254. //      object from it.
  255. // Parameters:
  256. //      csSection : [in] section name (in configuration file) string.
  257. // Returns:
  258. //      Pointer to CXTPSyntaxEditColorInfo with resulting colors set.
  259. //-----------------------------------------------------------------------
  260. CXTPSyntaxEditColorInfo * ParseSection(const CString& csSection);
  261. private:
  262. CStringList m_arSections;   // All section names from the theme config file
  263. CString m_csFileName;       // filename of the corresponding theme config file
  264. CXTPSyntaxEditMapLexColorInfo m_mapLexColorInfo;    // internal map - lex class name to color info
  265. CXTPSyntaxEditColorThemesManager* m_pThemesManager; // pointer to the parent themes manager
  266. };
  267. AFX_INLINE CString CXTPSyntaxEditColorTheme::GetFileName() {
  268. return m_csFileName;
  269. }
  270. //===========================================================================
  271. // Summary: This class provides functionality to store set of all color themes
  272. //          that would be written from configuration files. For short it is
  273. //          custom collection class.
  274. //===========================================================================
  275. class _XTP_EXT_CLASS CXTPSyntaxEditColorThemesManager
  276. {
  277. typedef CMap<CString, LPCTSTR, CXTPSyntaxEditColorTheme*, CXTPSyntaxEditColorTheme*> CXTPSyntaxEditMapThemes;
  278. public:
  279. //-----------------------------------------------------------------------
  280. // Summary:
  281. //      Default object constructor.
  282. //-----------------------------------------------------------------------
  283. CXTPSyntaxEditColorThemesManager();
  284. //-----------------------------------------------------------------------
  285. // Summary:
  286. //      Destroys a CXTPSyntaxEditColorThemesManager() object,
  287. //      handles cleanup and de-allocation
  288. //-----------------------------------------------------------------------
  289. virtual ~CXTPSyntaxEditColorThemesManager();
  290. //-----------------------------------------------------------------------
  291. // Summary:
  292. //      Loads theme by given theme name and configuration file.
  293. // Parameters:
  294. //      strThemeName    : [in] theme name string.
  295. //      strThemeFilename: [in] configuration file name.
  296. //-----------------------------------------------------------------------
  297. void LoadTheme(const CString& strThemeName, const CString& strThemeFilename);
  298. //-----------------------------------------------------------------------
  299. // Summary:
  300. //      Adds new entity to "theme name - configuration file" map.
  301. // Parameters:
  302. //      strThemeName    : [in] theme name string.
  303. //      strThemeFilename: [in] configuration file name.
  304. //-----------------------------------------------------------------------
  305. void AddThemeInfo(const CString& strThemeName, const CString& strThemeFilename);
  306. //-----------------------------------------------------------------------
  307. // Summary:
  308. //      Returns color theme by given name.
  309. // Parameters:
  310. //      strThemeName    : [in] theme name string.
  311. // Returns:
  312. //      Pointer to CXTPSyntaxEditColorTheme.
  313. // See also:
  314. //      class CXTPSyntaxEditColorTheme
  315. //-----------------------------------------------------------------------
  316. CXTPSyntaxEditColorTheme* GetTheme(const CString& strThemeName);
  317. //-----------------------------------------------------------------------
  318. // Summary:
  319. //      Returns CStringArray with themes names.
  320. // Returns:
  321. //      CStringArray with themes names.
  322. //-----------------------------------------------------------------------
  323. CStringArray& GetThemes();
  324. //-----------------------------------------------------------------------
  325. // Summary:
  326. //      Reloads configuration settings from the specified configuration file.
  327. // Parameters:
  328. //      csFileName : [in] configuration file name.
  329. //      nCfgFlags   : [in] action flags.
  330. // Returns:
  331. //      Reloaded Theme name if found, or empty string if theme was not found.
  332. // Remarks:
  333. //      Does nothing if specified file is not found in the collection of
  334. //      files from the main configuration file.
  335. // See also:
  336. //      enum XTPSyntaxEditCfgFileRemove.
  337. //-----------------------------------------------------------------------
  338. CString ReloadFile(const CString& csFileName, int nCfgFlags = 0);
  339. //-----------------------------------------------------------------------
  340. // Summary:
  341. //      Remove all loaded data.
  342. //-----------------------------------------------------------------------
  343. void RemoveAll();
  344. private:
  345. CXTPSyntaxEditMapThemes     m_mapThemes;        // Themes map
  346. CStringArray        m_arThemeNames;     // Themes names array
  347. CMapStringToString  m_mapFileToTheme;   // Theme name to configuration file name map
  348. };
  349. typedef CXTPSyntaxEditLexTextSchema CXTPSyntaxEditTextSchema;
  350. typedef CXTPSmartPtrInternalT<CXTPSyntaxEditLexTextSchema> CXTPSyntaxEditLexTextSchemaPtr;
  351. typedef CXTPSyntaxEditLexTextSchemaPtr CXTPSyntaxEditTextSchemaPtr;
  352. //===========================================================================
  353. // Summary:
  354. //      This class provides functionality to store set of all color themes
  355. //      that would be written from configuration files. For short it is
  356. //      custom collection class.
  357. //===========================================================================
  358. class _XTP_EXT_CLASS CXTPSyntaxEditTextSchemesManager
  359. {
  360. typedef CMap<CString, LPCTSTR,
  361. CXTPSyntaxEditTextSchemaPtr,
  362. CXTPSyntaxEditTextSchemaPtr&> CXTPSyntaxEditMapSchemes;
  363. public:
  364. //-----------------------------------------------------------------------
  365. // Summary:
  366. //      Default object constructor.
  367. //-----------------------------------------------------------------------
  368. CXTPSyntaxEditTextSchemesManager();
  369. //-----------------------------------------------------------------------
  370. // Summary:
  371. //      Destroys a CXTPSyntaxEditTextSchemesManager() object,
  372. //      handles cleanup and de-allocation.
  373. //-----------------------------------------------------------------------
  374. virtual ~CXTPSyntaxEditTextSchemesManager();
  375. //-----------------------------------------------------------------------
  376. // Summary:
  377. //      Add information about text scheme.
  378. // Parameters:
  379. //      info : [in] A reference to schema information.
  380. //-----------------------------------------------------------------------
  381. void AddTextSchemeInfo(XTP_EDIT_SCHEMAFILEINFO& info);
  382. //-----------------------------------------------------------------------
  383. // Summary:
  384. //      Implements common logic on creating new text scheme object and
  385. //      loading it from file or resources.
  386. // Parameters:
  387. //      info : [in] A reference to schema information.
  388. //-----------------------------------------------------------------------
  389. void LoadTextScheme(XTP_EDIT_SCHEMAFILEINFO& info);
  390. //-----------------------------------------------------------------------
  391. // Summary:
  392. //      Returns schema by its name.
  393. // Parameters:
  394. //      strSchemeName       : [in] schema name.
  395. // Returns:
  396. //      CXTPSyntaxEditTextSchemaPtr object.
  397. // See also:
  398. //      CXTPSyntaxEditTextSchemaPtr.
  399. //-----------------------------------------------------------------------
  400. CXTPSyntaxEditTextSchemaPtr GetSchema(const CString& strSchemeName);
  401. //-----------------------------------------------------------------------
  402. // Summary:
  403. //      Returns schema name by its file name.
  404. // Parameters:
  405. //      csFileName  : [in] file name.
  406. // Returns:
  407. //      CString object.
  408. //-----------------------------------------------------------------------
  409. const CString GetSchemaName(const CString& csFileName);
  410. //-----------------------------------------------------------------------
  411. // Summary:
  412. //      Returns file name by its schema name.
  413. // Parameters:
  414. //      strSchemeName   : [in] schema name.
  415. // Returns:
  416. //      CString object.
  417. //-----------------------------------------------------------------------
  418. const CString GetSchemaFileName(const CString& strSchemeName);
  419. //-----------------------------------------------------------------------
  420. // Summary:
  421. //      Returns all schemes names
  422. // Returns:
  423. //      Reference to CStringArray.
  424. //-----------------------------------------------------------------------
  425. CStringArray& GetSchemes();
  426. //-----------------------------------------------------------------------
  427. // Summary:
  428. //      Use this member function to get schemas list.
  429. // Returns:
  430. //      A reference to CXTPSyntaxEditSchemaFileInfoList object.
  431. //-----------------------------------------------------------------------
  432. CXTPSyntaxEditSchemaFileInfoList& GetSchemaList();
  433. //-----------------------------------------------------------------------
  434. // Summary:
  435. //      Finds a schema by file extension.
  436. // Parameters:
  437. //      strFileExt : [in] file extension string.
  438. // Returns:
  439. //      CXTPSyntaxEditTextSchemaPtr object.
  440. // See also:
  441. //      CXTPSyntaxEditTextSchemaPtr.
  442. //-----------------------------------------------------------------------
  443. CXTPSyntaxEditTextSchemaPtr FindSchema(const CString& strFileExt);
  444. //-----------------------------------------------------------------------
  445. // Summary:
  446. //      Applys theme to all text schemes.
  447. // Parameters:
  448. //      pTheme : [in] Pointer to theme to be set.
  449. // See also:
  450. //      class CXTPSyntaxEditColorTheme.
  451. //-----------------------------------------------------------------------
  452. void SetTheme(CXTPSyntaxEditColorTheme* pTheme);
  453. //-----------------------------------------------------------------------
  454. // Summary:
  455. //      Reloads configuration settings from the specified configuration file.
  456. // Parameters:
  457. //      csFileName : [in] configuration file name.
  458. //      nCfgFlags  : [in] action flags.
  459. // Does nothing if specified file is not found in the collection of files
  460. // from the main configuration file
  461. //-----------------------------------------------------------------------
  462. BOOL ReloadFile(const CString& csFileName, int nCfgFlags = 0);
  463. //-----------------------------------------------------------------------
  464. // Summary:
  465. // Remove all loaded data.
  466. //-----------------------------------------------------------------------
  467. void RemoveAll();
  468. private:
  469. CXTPSyntaxEditMapSchemes        m_mapSchemes;
  470. CXTPSyntaxEditSchemaFileInfoList    m_listSchemes;
  471. CStringArray                    m_arSchemeNames;
  472. CCriticalSection                m_csReadFile;
  473. };
  474. AFX_INLINE CStringArray& CXTPSyntaxEditTextSchemesManager::GetSchemes() {
  475. return m_arSchemeNames;
  476. }
  477. AFX_INLINE CXTPSyntaxEditSchemaFileInfoList& CXTPSyntaxEditTextSchemesManager::GetSchemaList() {
  478. return m_listSchemes;
  479. }
  480. //===========================================================================
  481. // Summary: This class manages all configuration parameters of the control.
  482. //          It worries about read configuration files from disk when the Edit
  483. //          control is starting, store it in internal structures and refresh
  484. //          parameters in case configuration files are changed after control
  485. //          was started.
  486. // See Also: CXTPSyntaxEditFileChangesMonitor, CXTPSyntaxEditColorThemesManager
  487. //===========================================================================
  488. class _XTP_EXT_CLASS CXTPSyntaxEditConfigurationManager : public CXTPCmdTarget
  489. {
  490. public:
  491. // Configuration manager sub-objects
  492. enum XTPSyntaxEditCfgObjects
  493. {
  494. xtpEditCfgObjSchMan     = 0x0001, // Schemes manager
  495. xtpEditCfgObjThemeMan   = 0x0002, // Themes manager
  496. xtpEditCfgObjMainConfig = 0x0004, // Main configuration file
  497. };
  498. //-----------------------------------------------------------------------
  499. // Summary: Default object constructor.
  500. //-----------------------------------------------------------------------
  501. CXTPSyntaxEditConfigurationManager();
  502. //-----------------------------------------------------------------------
  503. // Summary: Destroys a CXTPSyntaxEditConfigurationManager() object,
  504. //          handles cleanup and de-allocation
  505. //-----------------------------------------------------------------------
  506. virtual ~CXTPSyntaxEditConfigurationManager();
  507. //-----------------------------------------------------------------------
  508. // Summary:
  509. //      Reloads settings from provided file.
  510. // Parameters:
  511. //      strConfigFilePath - string of file's full path.
  512. // Remarks:
  513. //      Reloads configuration settings from the specified new configuration file.
  514. //-----------------------------------------------------------------------
  515. void ReloadConfig(const CString& strConfigFilePath);
  516. //-----------------------------------------------------------------------
  517. // Summary:
  518. //      Reloads configuration settings from the stored main configuration file.
  519. //-----------------------------------------------------------------------
  520. void ReloadConfig();
  521. //-----------------------------------------------------------------------
  522. // Summary:
  523. //      Asynchronously reloads configuration settings from the stored main
  524. //      configuration file.
  525. // Parameters:
  526. //      nAsyncThreadPriority - The priority for the working thread which
  527. //                             reloads configuration.
  528. //-----------------------------------------------------------------------
  529. void ReloadConfigAsync(int nAsyncThreadPriority = THREAD_PRIORITY_NORMAL);
  530. //--------------------------------------------------------------------
  531. // Summary:     Get main configuration file name.
  532. // Remarks:     Return configuration file name previously stored by
  533. //              ReloadConfig(configFile).
  534. // Returns:     Main configuration file name.
  535. // See also:    CXTPSyntaxEditConfigurationManager::ReloadConfig().
  536. //--------------------------------------------------------------------
  537. CString GetConfigFile() const;
  538. //-----------------------------------------------------------------------
  539. // Summary:
  540. //      Reloads configuration settings from the specified configuration file.
  541. // Parameters:
  542. //      csFileName : [in] configuration file name.
  543. //      nCfgFlags   : [in] action flags.
  544. // Returns:
  545. //      Reloaded Theme name if found, or empty string if theme was not found.
  546. // Remarks:
  547. //      Does nothing if specified file is not found in the collection of
  548. //      files from the main configuration file.
  549. // See also:
  550. //      enum XTPSyntaxEditCfgFileRemove.
  551. //-----------------------------------------------------------------------
  552. void ReloadFile(CString csFileName, DWORD dwOwnerFlags, int nCfgFlags = 0);
  553. //-----------------------------------------------------------------------
  554. // Summary:
  555. //      Returns color theme manager.
  556. // Returns:
  557. //      Reference to CXTPSyntaxEditColorThemesManager object.
  558. //-----------------------------------------------------------------------
  559. CXTPSyntaxEditColorThemesManager& GetThemeManager();
  560. //-----------------------------------------------------------------------
  561. // Summary:
  562. //      Returns text theme manager.
  563. // Returns:
  564. //      Reference to CXTPSyntaxEditTextSchemesManager object.
  565. //-----------------------------------------------------------------------
  566. CXTPSyntaxEditTextSchemesManager& GetTextSchemesManager();
  567. //-----------------------------------------------------------------------
  568. // Summary:
  569. //      Use this member function to set current theme.
  570. // Parameters:
  571. //      strThemeName : [in] Theme name.
  572. //      pActiveSch   : [in] A pointer to active schema to apply current theme.
  573. //-----------------------------------------------------------------------
  574. void SetTheme(const CString& strThemeName, CXTPSyntaxEditTextSchema* pActiveSch = NULL);
  575. //-----------------------------------------------------------------------
  576. // Summary:
  577. //      Closes configuration monitor session.
  578. //-----------------------------------------------------------------------
  579. void Close();
  580. //-----------------------------------------------------------------------
  581. // Summary:
  582. //      Returns current theme name.
  583. //-----------------------------------------------------------------------
  584. const CString& GetCurrentTheme();
  585. //-----------------------------------------------------------------------
  586. // Summary:
  587. //      Returns notification connection.
  588. // Returns:
  589. //      CXTPNotifyConnectionPtr pointer.
  590. //-----------------------------------------------------------------------
  591. CXTPNotifyConnection* GetConnection();
  592. private:
  593. static UINT AFX_CDECL ReloadConfigAsync_Proc(LPVOID pThis);
  594. CString m_strMainIniFilename;   // Stores main configuration file name.
  595. CXTPSyntaxEditFileChangesMonitor m_FolderMonitor;   // Stores folder monitor object.
  596. CXTPSyntaxEditColorThemesManager m_ColorThemeManager;   // Stores color theme manager.
  597. CXTPSyntaxEditTextSchemesManager m_TextSchemesManager;  // Stores text theme manager.
  598. CString m_strCurrentThemeName;  // Current theme name
  599. CXTPNotifyConnectionMT*         m_pConnectMT; // Notification connection.
  600. CCriticalSection                m_DataLockerCS; // Critical section
  601. HANDLE  m_hReloadThread;        // Stores handle of monitoring thread.
  602. CEvent* m_pBreakReloadEvent;    // Stores pointer to event.
  603. };
  604. AFX_INLINE const CString CXTPSyntaxEditColorInfo::GetClassName() const {
  605. return m_strClassName;
  606. }
  607. AFX_INLINE CXTPSyntaxEditColorThemesManager& CXTPSyntaxEditConfigurationManager::GetThemeManager() {
  608. return m_ColorThemeManager;
  609. }
  610. AFX_INLINE CXTPSyntaxEditTextSchemesManager& CXTPSyntaxEditConfigurationManager::GetTextSchemesManager() {
  611. return m_TextSchemesManager;
  612. }
  613. AFX_INLINE CXTPNotifyConnection* CXTPSyntaxEditConfigurationManager::GetConnection() {
  614. return m_pConnectMT;
  615. }
  616. AFX_INLINE const CString& CXTPSyntaxEditConfigurationManager::GetCurrentTheme() {
  617. return m_strCurrentThemeName;
  618. }
  619. #endif // !defined(__XTPSYNTAXEDITLEXCOLORFILEREADER_H__)