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

对话框与窗口

开发平台:

Visual C++

  1. // XTPSyntaxEditBufferManager.h
  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(__XTPSYNTAXEDITBUFFERMANAGER_H__)
  22. #define __XTPSYNTAXEDITBUFFERMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. namespace XTPSyntaxEditLexAnalyser
  28. {
  29. class CXTPSyntaxEditLexTextSchema;
  30. };
  31. typedef CXTPSyntaxEditLexTextSchema CXTPSyntaxEditTextSchema;
  32. class CXTPSyntaxEditLineMarksManager;
  33. class CXTPSyntaxEditUndoRedoManager;
  34. //===========================================================================
  35. // Summary:
  36. //      This class is the main class for buffer management. One instance
  37. //      of this class is attached with a CXTPSyntaxEditCtrl object. This class
  38. //      contains a list of CBufferIndex class which in turn contains
  39. //      a position in the file (In case of un-modified index) or a CEditBuffer
  40. //      pointer.
  41. //===========================================================================
  42. class _XTP_EXT_CLASS CXTPSyntaxEditBufferManager : public CXTPCmdTarget
  43. {
  44. DECLARE_DYNCREATE(CXTPSyntaxEditBufferManager)
  45. friend class CXTPSyntaxEditCtrl;
  46. public:
  47. //-----------------------------------------------------------------------
  48. // Summary:
  49. //      Default object constructor.
  50. //-----------------------------------------------------------------------
  51. CXTPSyntaxEditBufferManager();
  52. //-----------------------------------------------------------------------
  53. // Summary:
  54. //      Destroys a CXTPSyntaxEditBufferManager object, handles cleanup
  55. //      and de-allocation.
  56. //-----------------------------------------------------------------------
  57. ~CXTPSyntaxEditBufferManager();
  58. //-----------------------------------------------------------------------
  59. // Summary:
  60. //      Determines if the file has been modified or not.
  61. // Returns:
  62. //      TRUE if modified, FALSE otherwise.
  63. //-----------------------------------------------------------------------
  64. BOOL IsModified();
  65. //-----------------------------------------------------------------------
  66. // Summary:
  67. //      Determines if the file has been modified or not.
  68. // Returns:
  69. //      CodePage to be used for conversion.
  70. //-----------------------------------------------------------------------
  71. UINT GetCodePage();
  72. //-----------------------------------------------------------------------
  73. // Summary:
  74. //      Returns the tab size for the current document.
  75. // Returns:
  76. //      Selected tab size.
  77. //-----------------------------------------------------------------------
  78. int GetTabSize() const;
  79. //-----------------------------------------------------------------------
  80. // Summary:
  81. //      Set the tab size between 1-64.
  82. // Parameters:
  83. //      nTabSize   : [in] The tab size to set.
  84. //      bUpdateReg : [in] Set this parameter as TRUE to update this setting
  85. //                        in the registry. It is FALSE by default.
  86. //-----------------------------------------------------------------------
  87. BOOL SetTabSize(int nTabSize, BOOL bUpdateReg = FALSE);
  88. //-----------------------------------------------------------------------
  89. // Summary:
  90. //      Returns the overwrite flag status.
  91. // Returns:
  92. //      TRUE if OVR mode is set, FALSE otherwise.
  93. //-----------------------------------------------------------------------
  94. BOOL GetOverwriteFlag();
  95. //-----------------------------------------------------------------------
  96. // Summary:
  97. //      Sets or resets the OVR flag.
  98. // Parameters:
  99. //      bOverwrite : [in] Pass TRUE to set OVR flag, FALSE to INS flag.
  100. //-----------------------------------------------------------------------
  101. void SetOverwriteFlag(BOOL bOverwrite);
  102. //-----------------------------------------------------------------------
  103. // Summary:
  104. //      Returns the parser status.
  105. // Returns:
  106. //      TRUE if Parser is enabled, FALSE otherwise.
  107. //-----------------------------------------------------------------------
  108. BOOL IsParserEnabled();
  109. //-----------------------------------------------------------------------
  110. // Summary:
  111. //      Enable or disable parser.
  112. // Parameters:
  113. //      bEnable : [in] Pass TRUE to enable parser, FALSE to disable.
  114. //-----------------------------------------------------------------------
  115. void EnableParser(BOOL bEnable);
  116. //-----------------------------------------------------------------------
  117. // Summary:
  118. //      This function converts the supplied text to native CRLF format.
  119. //      It is mainly used in Paste routine where an user can paste DOS
  120. //      formatted text into UNIX formatted document
  121. // Parameters:
  122. //      strText   : [in] The string to convert.
  123. //      iTypeFrom : [in] The type of the source CRLF.
  124. // Returns:
  125. //      TRUE if converted successfully, FALSE otherwise
  126. //-----------------------------------------------------------------------
  127. //BOOL ConvertToNativeCRLFText(CString& strText, int iTypeFrom);
  128. //-----------------------------------------------------------------------
  129. // Summary:
  130. //      Returns the CRLF type of the current document.
  131. // Returns:
  132. //      Current CRLF type.
  133. //-----------------------------------------------------------------------
  134. int GetCurCRLFType();
  135. //-----------------------------------------------------------------------
  136. // Summary:
  137. //      Set the current documents CRLF style.
  138. // Parameters:
  139. //      nStyle : [in] The CRLF style to set
  140. //-----------------------------------------------------------------------
  141. void SetCRLFStyle(int nStyle);
  142. //-----------------------------------------------------------------------
  143. // Summary:
  144. //      Returns the CRLF of the current document.
  145. // Returns:
  146. //      Current CRLF text.
  147. //-----------------------------------------------------------------------
  148. CString GetCurCRLF() const;
  149. private:
  150. //-----------------------------------------------------------------------
  151. // Summary:
  152. //      Internal implementation of getting CRLF of the current document.
  153. // Parameters:
  154. //      nCRLFStyle : [in] Index of the CRLF style string.
  155. // Returns:
  156. //      Current CRLF text.
  157. //-----------------------------------------------------------------------
  158. LPCTSTR GetCRLF(int nCRLFStyle = -1) const;
  159. public:
  160. //-----------------------------------------------------------------------
  161. // Summary:
  162. //      Determines if the supplied text is a CRLF or not
  163. // Parameters:
  164. //      szCompText   : [in] The text to be compared.
  165. //      bFindReverse : [in] Should be match reverse.
  166. // Returns:
  167. //      TRUE if the supplied text is a CRLF, FALSE otherwise.
  168. //-----------------------------------------------------------------------
  169. BOOL IsTextCRLF(LPCTSTR szCompText, BOOL bFindReverse = FALSE);
  170. #ifdef _UNICODE
  171. //-----------------------------------------------------------------------
  172. // Summary:
  173. //      Determines if the supplied text is a CRLF or not of the non-unicode string.
  174. // Parameters:
  175. //      szCompText   : [in] The text to be compared.
  176. //      bFindReverse : [in] Should be match reverse.
  177. // Returns:
  178. //      TRUE if the supplied text is a CRLF, FALSE otherwise.
  179. //-----------------------------------------------------------------------
  180. BOOL IsTextCRLF(LPCSTR szCompText, BOOL bFindReverse = FALSE);
  181. #endif
  182. //-----------------------------------------------------------------------
  183. // Summary:
  184. //      Returns the number of rows in the document.
  185. // Returns:
  186. //      Number of rows in the document.
  187. //-----------------------------------------------------------------------
  188. int GetRowCount() const;
  189. //-----------------------------------------------------------------------
  190. // Summary:
  191. //      Returns pointer to the associated Undo/Redo manager.
  192. // Returns:
  193. //      Pointer to a CXTPSyntaxEditUndoRedoManager object.
  194. //-----------------------------------------------------------------------
  195. CXTPSyntaxEditUndoRedoManager* GetUndoRedoManager();
  196. //-----------------------------------------------------------------------
  197. // Summary:
  198. //      Returns pointer to the associated line marks manager.
  199. // Returns:
  200. //      Pointer to a CXTPSyntaxEditLineMarksManager object.
  201. //-----------------------------------------------------------------------
  202. CXTPSyntaxEditLineMarksManager* GetLineMarksManager();
  203. //-----------------------------------------------------------------------
  204. // Summary:
  205. //      Returns pointer to the associated lexical parser.
  206. // Returns:
  207. //      Pointer to a XTPSyntaxEditLexAnalyser::CXTPSyntaxEditLexParser object.
  208. //-----------------------------------------------------------------------
  209. XTPSyntaxEditLexAnalyser::CXTPSyntaxEditLexParser* GetLexParser();
  210. //-----------------------------------------------------------------------
  211. // Summary: Returns pointer to the associated configuration manager.
  212. //-----------------------------------------------------------------------
  213. CXTPSyntaxEditConfigurationManager* GetLexConfigurationManager();
  214. //-----------------------------------------------------------------------
  215. // Summary:
  216. //      Set pointer to the configuration manager.
  217. // Parameters:
  218. //      pMan : [in] Pointer to CXTPSyntaxEditConfigurationManager.
  219. //-----------------------------------------------------------------------
  220. void SetLexConfigurationManager(CXTPSyntaxEditConfigurationManager* pMan);
  221. //-----------------------------------------------------------------------
  222. // Summary:
  223. //      Returns events connection pointer.
  224. //-----------------------------------------------------------------------
  225. CXTPNotifyConnection* GetConnection();
  226. //-----------------------------------------------------------------------
  227. // Summary:
  228. //      Cleans up all internal objects.
  229. //-----------------------------------------------------------------------
  230. void Close();
  231. //-----------------------------------------------------------------------
  232. // Summary:
  233. //      Serializes actual data.
  234. // Parameters:
  235. //      ar : [in, out] The archive to save/load text.
  236. //-----------------------------------------------------------------------
  237. void Serialize(CArchive& ar);
  238. //-----------------------------------------------------------------------
  239. // Summary:
  240. //      Serializes actual data.
  241. // Parameters:
  242. //      ar                      : [in, out] The archive to save/load text.
  243. //      bUnicode                : [in] Use UNICODE format for text in the archive.
  244. //      bWriteUnicodeFilePrefix : [in] Write Unicode File Prefix.
  245. //      nCodePage               : [in] Text code page (or -1 to use default).
  246. //      pcszFileExt             : [in] File extension to select appropriate parser schema.
  247. //      uDataSizeLimit          : [in] The number of bytes to stop storing text to archive
  248. //                                     (or -1 to store all).
  249. //-----------------------------------------------------------------------
  250. void SerializeEx(CArchive &ar, BOOL bUnicode = -1, BOOL bWriteUnicodeFilePrefix = TRUE,
  251.   UINT nCodePage = (UINT)-1, LPCTSTR pcszFileExt = NULL, int nDataSizeLimit = -1);
  252. //-----------------------------------------------------------------------
  253. // Summary:
  254. //      Set the file pointer for the buffer.
  255. // Parameters:
  256. //      pFile       : [in] The file pointer to set.
  257. //      pcszFileExt : [in] Number of lines (Not used).
  258. // See Also:
  259. //      SetFileExt()
  260. //-----------------------------------------------------------------------
  261. void Load(CFile *pFile, LPCTSTR pcszFileExt = NULL);
  262. //-----------------------------------------------------------------------
  263. // Summary:
  264. //      Sets file extension.
  265. // Parameters:
  266. //      strExt  : [in] string of extension.
  267. // See also:
  268. //      CString GetFileExt()
  269. //-----------------------------------------------------------------------
  270. void SetFileExt(const CString& strExt);
  271. //-----------------------------------------------------------------------
  272. // Summary:
  273. //      Returns file extension.
  274. // Returns:
  275. //      CString object with file extensions.
  276. // See also:
  277. //      void SetFileExt(const CString& strExt);
  278. //-----------------------------------------------------------------------
  279. CString GetFileExt();
  280. //-----------------------------------------------------------------------
  281. // Summary:
  282. //      Gets a line of text either from file or buffer.
  283. // Parameters:
  284. //      iLine       : [in] The line for which to get the text.
  285. //      strText     : [out] A reference to CString object to be filled with text.
  286. //      bAddCRLF    : [in] Pass TRUE to add CRLF (if exists), otherwise .
  287. //      iCRLFStyle  : [in] Specify the CRLF style.
  288. //-----------------------------------------------------------------------
  289. void GetLineText(int iLine, CString& strText, BOOL bAddCRLF = FALSE, int iCRLFStyle = -1);
  290. //-----------------------------------------------------------------------
  291. // Summary:
  292. //      Returns a line of text either from file or buffer.
  293. // Parameters:
  294. //      iLine       : [in] The line for which to get the text.
  295. //      bAddCRLF    : [in] Pass TRUE to add CRLF (if exists), otherwise .
  296. //      iCRLFStyle  : [in] Specify the CRLF style.
  297. // Returns:
  298. //      CString object with text line.
  299. //-----------------------------------------------------------------------
  300. CString GetLineText(int iLine, BOOL bAddCRLF = FALSE, int iCRLFStyle = -1);
  301. //-----------------------------------------------------------------------
  302. // Summary:
  303. //      Returns a length for line of text in TCHARs.
  304. // Parameters:
  305. //      iLine       : [in] The line for which to get the text.
  306. //      bAddCRLF    : [in] Pass TRUE to add CRLF (if exsts), otherwise .
  307. //      iCRLFStyle  : [in] Specify the CRLF style.
  308. // Returns:
  309. //      Text line length as integer value.
  310. //-----------------------------------------------------------------------
  311. int GetLineTextLength(int iLine, BOOL bAddCRLF = FALSE, int iCRLFStyle = -1);
  312. //-----------------------------------------------------------------------
  313. // Summary:
  314. //      Returns a length for line of text in characters.
  315. // Parameters:
  316. //      iLine       : [in] The line for which to get the text.
  317. //      bAddCRLF    : [in] Pass TRUE to add CRLF (if exsts), otherwise .
  318. //      iCRLFStyle  : [in] Specify the CRLF style.
  319. // Returns:
  320. //      Text line length in characters as integer value.
  321. //-----------------------------------------------------------------------
  322. int GetLineTextLengthC(int iLine, BOOL bAddCRLF = FALSE, int iCRLFStyle = -1);
  323. //-----------------------------------------------------------------------
  324. // Summary:
  325. //      Returns the max allowable length for line of text.
  326. // Returns:
  327. //      Text line length as integer value.
  328. //-----------------------------------------------------------------------
  329. int GetMaxLineTextLength() const;
  330. //-----------------------------------------------------------------------
  331. // Summary:
  332. //      Returns a length for line of text either from file or buffer.
  333. // Parameters:
  334. //      nLineFrom   : [in] Start line identifier.
  335. //      nLineTo     : [in] End line identifier.
  336. //      bExpandTabs : [in] Expand tab characters.
  337. // Returns:
  338. //      Text length as integer value.
  339. //-----------------------------------------------------------------------
  340. int CalcMaxLineTextLength(int nLineFrom = -1, int nLineTo = -1, BOOL bExpandTabs = FALSE) const;
  341. //-----------------------------------------------------------------------
  342. // Summary:
  343. //      Retrieve text from the buffer bounded between
  344. //      row1/col1 and row2/col2 (or lcStart and lcEnd) text coordinates.
  345. // Parameters:
  346. //      row1    : [in] Start line number.
  347. //      col1    : [in] Start column number.
  348. //      row2    : [in] End line number.
  349. //      col2    : [in] End column number.
  350. //      lcStart : [in] Start text position.
  351. //      lcEnd   : [in] End text position.
  352. //      file                : [out] A reference to CMemFile object to receive text.
  353. //      bColumnSelection    : [in]  If this parameter TRUE - the text block started
  354. //                                  from col1 and ended on col2 for each line
  355. //                                  between row1 and row2 copied, otherwise full
  356. //                                  row text copied for rows between row1 and row2.
  357. //      bForceDOSStyleCRLF  : [in]  If this parameter TRUE the DOS Style carriage
  358. //                                  return chars will be used to end each line,
  359. //                                  otherwise current carriage return style is used.
  360. // Returns:
  361. //      TRUE if the succeeded, FALSE otherwise.
  362. //-----------------------------------------------------------------------
  363. BOOL GetBuffer(int row1, int col1, int row2, int col2,
  364. CMemFile& file, BOOL bColumnSelection = FALSE,
  365. BOOL bForceDOSStyleCRLF = FALSE);
  366. BOOL GetBuffer(const XTP_EDIT_LINECOL& lcStart, const XTP_EDIT_LINECOL& lcEnd,
  367. CMemFile& file, BOOL bColumnSelection = FALSE,
  368. BOOL bForceDOSStyleCRLF = FALSE);
  369. //-----------------------------------------------------------------------
  370. // Summary:
  371. //      Inserts a text or text block.
  372. // Parameters:
  373. //      szText           : [in] Text to be inserted.
  374. //      iRow             : [in] Start row for delete.
  375. //      iCol             : [in] Start col for delete.
  376. //      bCanUndo         : [in] Pass TRUE if this can be undone.
  377. //      pbRowFlagChanged : [out] Filled with TRUE if row flag has been changed.
  378. //      pFinalLC         : [out] A pointer to XTP_EDIT_LINECOL variable to
  379. //                               receive operation final position in the text
  380. //                               (to set caret).
  381. // Returns:
  382. //      TRUE if the succeeded, FALSE otherwise.
  383. //-----------------------------------------------------------------------
  384. BOOL InsertText(LPCTSTR szText, int iRow, int iCol, BOOL bCanUndo = TRUE,
  385. XTP_EDIT_LINECOL* pFinalLC = NULL);
  386. BOOL InsertTextBlock(LPCTSTR szText, int nRow, int nCol, BOOL bCanUndo = TRUE,
  387. XTP_EDIT_LINECOL* pFinalLC = NULL); // <COMBINE InsertText>
  388. //-----------------------------------------------------------------------
  389. // Summary:
  390. //      Deletes a certain range of text
  391. // Parameters:
  392. //      iRowFrom         : [in] Start row for delete.
  393. //      iColFrom         : [in] Start col for delete.
  394. //      iRowTo           : [in] End row for delete.
  395. //      iColTo           : [in] End col for delete.
  396. //      bCanUndo         : [in] Pass TRUE if this can be undone.
  397. //      bDispCol         : [in] if TRUE iColFrom and iColTo are display cols,
  398. //                                  otherwise they are string cols.
  399. //      pbRowFlagChanged : [out] Filled with TRUE if row flag has been changed.
  400. // Returns:
  401. //      TRUE if the succeeded, FALSE otherwise.
  402. //-----------------------------------------------------------------------
  403. BOOL DeleteText(int iRowFrom, int iColFrom, int iRowTo, int iColTo,
  404. BOOL bCanUndo = TRUE, BOOL bDispCol = FALSE);
  405. //-----------------------------------------------------------------------
  406. // Summary:
  407. //      Deletes a certain range of text
  408. // Parameters:
  409. //      nRow        : [in] Start row for delete.
  410. //      bCanUndo    : [in] Pass TRUE if this can be undone.
  411. //      nRowsCount  : [in] Rows count to delete.
  412. // Returns:
  413. //      TRUE if the succeeded, FALSE otherwise.
  414. //-----------------------------------------------------------------------
  415. BOOL RemoveLine(int nRow, BOOL bCanUndo = TRUE, int nRowsCount = 1);
  416. //--------------------------------------------------------------------
  417. // Summary:
  418. //      Get main configuration file name.
  419. // Remarks:
  420. //      Return configuration file name previously stored by
  421. //      SetConfigFile().
  422. // Returns:
  423. //      Main configuration file name.
  424. // See also:
  425. //      CXTPSyntaxEditBufferManager::SetConfigFile().
  426. //--------------------------------------------------------------------
  427. CString GetConfigFile();
  428. //-----------------------------------------------------------------------
  429. // Summary:
  430. //      Set the path to the main configuration file.
  431. // Parameters:
  432. //      szPath : [in] A valid path for searching the .ini files.
  433. // Remarks:
  434. //      Configuration will be reloaded.
  435. // Returns:
  436. //      TRUE if path is found, FALSE otherwise.
  437. // See also:
  438. //      CXTPSyntaxEditBufferManager::GetConfigFile().
  439. //-----------------------------------------------------------------------
  440. BOOL SetConfigFile(LPCTSTR szPath);
  441. //-----------------------------------------------------------------------
  442. // Summary:
  443. //      Set the path to the main configuration file.
  444. // Parameters:
  445. //      strExt : [in] file extension for for schema definition file.
  446. // Returns:
  447. //      CXTPSyntaxEditTextSchema
  448. //-----------------------------------------------------------------------
  449. CXTPSyntaxEditTextSchema* GetMasterTextSchema(const CString& strExt);
  450. //-----------------------------------------------------------------------
  451. // Summary:
  452. //      Changes the case of the specified characters range in the specified row.
  453. // Parameters:
  454. //      nRow      : [in] A row to change case at.
  455. //      nDispFrom : [in] Begin visible position where to change case at.
  456. //      nDispTo   : [in] End visible position where to change case at.
  457. //      bUpper    : [in] TRUE when changing selection case to Upper,
  458. //                       FALSE when changing selection case to Lower.
  459. //      bCanUndo  : [in] Pass TRUE if this can be undone.
  460. // Remarks:
  461. //      Configuration will be reloaded.
  462. //-----------------------------------------------------------------------
  463. void ChangeCase(int nRow, int nDispFrom, int nDispTo, BOOL bUpper, BOOL bCanUndo = TRUE);
  464. //-----------------------------------------------------------------------
  465. // Summary:
  466. //      Changes the case of the specified characters range in the specified row.
  467. // Parameters:
  468. //      nRow      : [in] A row to change case at.
  469. //      nDispFrom : [in] Begin visible position where to change case at.
  470. //      nDispTo   : [in] End visible position where to change case at.
  471. //      bTabify   : [in] TRUE when changing spaces to tabs,
  472. //                       FALSE when changing tabs to spaces.
  473. //      bCanUndo  : [in] Pass TRUE if this can be undone.
  474. // Remarks:
  475. //      Configuration will be reloaded.
  476. //-----------------------------------------------------------------------
  477. void ChangeTabification(int nRow, int nDispFrom, int nDispTo, BOOL bTabify, BOOL bCanUndo = TRUE);
  478. //-----------------------------------------------------------------------
  479. // Summary:
  480. //      Converts column coordinates of text to string position coordinate.
  481. // Parameters:
  482. //      nLine   : [in] Text line identifier.
  483. //      nDispCol: [in] Column coordinate.
  484. // Returns:
  485. //      String position identifier corresponding to column identifier.
  486. // See also:
  487. //      virtual int StrPosToCol(int nLine, int nStrPos) const;
  488. //-----------------------------------------------------------------------
  489. virtual int ColToStrPos(int nLine, int nDispCol) const;
  490. //-----------------------------------------------------------------------
  491. // Summary:
  492. //      Converts string position of text to column coordinates coordinate.
  493. // Parameters:
  494. //      nLine   : [in] Text line identifier.
  495. //      nStrPos : [in] A string position.
  496. // Returns:
  497. //      Column identifier corresponding to string position identifier.
  498. // See also:
  499. //      virtual int ColToStrPos(int nLine, int nDispCol) const;
  500. //-----------------------------------------------------------------------
  501. virtual int StrPosToCol(int nLine, int nStrPos) const;
  502. protected:
  503. //-----------------------------------------------------------------------
  504. // Summary:
  505. //      Cleans up the buffer and all other allocated memories
  506. //-----------------------------------------------------------------------
  507. void CleanUp();
  508. //-----------------------------------------------------------------------
  509. // Summary:
  510. //      Returns average data size.
  511. // Parameters:
  512. //      nRowStart   : [in] Start row identifier.
  513. //      nRowEnd     : [in] End row identifier.
  514. // Returns:
  515. //      Average data size as integer value.
  516. // Remarks:
  517. //      Call this member function to calculate average data size based
  518. //      on average row length.
  519. //-----------------------------------------------------------------------
  520. virtual UINT CalcAveDataSize(int nRowStart, int nRowEnd);
  521. int m_nAverageLineLen;  // Stores average line length.
  522. CXTPNotifyConnection*   m_pConnect; // Connection object to send notifications.
  523. protected:
  524. int m_nTabSize;     // Tab size
  525. int m_iCRLFStyle;   // CRLF style 0 - DOS, 1 - UNIX, 2 - MAC
  526. UINT m_nCodePage;                   // CodePage for text conversion
  527. BOOL m_bUnicodeFileFormat;          // Determine is file format Unicode or ASCII.
  528. BOOL m_bOverwrite;                  // Overwrite mode status
  529. CXTPSyntaxEditUndoRedoManager* m_pUndoRedoManager;    // Undo / redo manager.
  530. CXTPSyntaxEditLineMarksManager* m_pLineMarksManager; // line marks manager
  531. CXTPSyntaxEditLexParser* m_pLexParser; // Lexical parser
  532. CXTPSyntaxEditConfigurationManagerPtr m_ptrLexConfigurationManager; // Pointer to the Lexical configuration manager
  533. static CXTPSyntaxEditConfigurationManagerPtr s_ptrLexConfigurationManager_Default; // The common default Configuration Manager instance.
  534. static LONG s_dwLexConfigurationManager_DefaultRefs;                               // The reference count for common default Configuration Manager instance.
  535. CString m_strFileExt;   // Stores file extension
  536. BOOL m_bIsParserEnabled; // Stores flag of parser state (enabled/disabled)
  537. //{{AFX_CODEJOCK_PRIVATE
  538. DECLARE_XTP_SINK_MT(CXTPSyntaxEditBufferManager, m_LexConfigManSinkMT)
  539. virtual void OnLexConfigManEventHandler(XTP_NOTIFY_CODE Event,
  540. WPARAM wParam, LPARAM lParam);
  541. //}}AFX_CODEJOCK_PRIVATE
  542. //------------------------------------------------------------------------
  543. // Summary:
  544. //      This is helper class designed to manage a set of strings
  545. //------------------------------------------------------------------------
  546. class _XTP_EXT_CLASS CXTPSyntaxEditStringsManager
  547. {
  548. //{{AFX_CODEJOCK_PRIVATE
  549. friend class CXTPSyntaxEditBufferManager;
  550. //}}AFX_CODEJOCK_PRIVATE
  551. public:
  552. //----------------------------------------------------------------------
  553. // Summary:
  554. //      Default object constructor.
  555. //----------------------------------------------------------------------
  556. CXTPSyntaxEditStringsManager();
  557. //----------------------------------------------------------------------
  558. // Summary:
  559. //      Default object destructor. Handles cleanup and deallocation
  560. //----------------------------------------------------------------------
  561. virtual ~CXTPSyntaxEditStringsManager();
  562. //----------------------------------------------------------------------
  563. // Summary:
  564. //      Returns count of managed strings
  565. //----------------------------------------------------------------------
  566. int GetCount() const;
  567. //----------------------------------------------------------------------
  568. // Summary:
  569. //      Returns string by given index.
  570. // Parameters:
  571. //      nRow : [in] String identifier.
  572. // Returns:
  573. //      CString object.
  574. //----------------------------------------------------------------------
  575. CString GetStr(int nRow) const;
  576. //----------------------------------------------------------------------
  577. // Summary:
  578. //      Returns length of string in TCHARs.
  579. // Parameters:
  580. //      nRow : [in] String identifier.
  581. // Returns:
  582. //      Integer value of length of string.
  583. //----------------------------------------------------------------------
  584. int GetStrLen(int nRow) const;
  585. //----------------------------------------------------------------------
  586. // Summary:
  587. //      Returns length of string in characters.
  588. // Parameters:
  589. //      nRow : [in] String identifier.
  590. // Returns:
  591. //      Integer value of length of string in characters.
  592. //----------------------------------------------------------------------
  593. int GetStrLenC(int nRow) const;
  594. //----------------------------------------------------------------------
  595. // Summary:
  596. //      Sets string at given id.
  597. // Parameters:
  598. //      nRow    : [in] String identifier.
  599. //      strText : [in] Reference to CString object with text to set.
  600. // Remarks:
  601. //      If given string id doesn't exist in collection function does
  602. //      nothing.
  603. // See also:
  604. //      void SetAtGrowStr(int nRow, LPCTSTR pcszText);
  605. //----------------------------------------------------------------------
  606. void SetAtGrowStr(int nRow, const CString& strText);
  607. //----------------------------------------------------------------------
  608. // Summary:
  609. //      Sets string at given id.
  610. // Parameters:
  611. //      nRow    : [in] String identifier.
  612. //      pcszText: [in] Pointer to null terminated string with text to set.
  613. // Remarks:
  614. //      If given string id doesn't exist in collection function does
  615. //      nothing.
  616. // See also:
  617. //      void SetAtGrowStr(int nRow, const CString& strText);
  618. //----------------------------------------------------------------------
  619. void SetAtGrowStr(int nRow, LPCTSTR pcszText);
  620. //----------------------------------------------------------------------
  621. // Summary:
  622. //      Add string.
  623. // Parameters:
  624. //      nRow    : [in] String identifier.
  625. //      strText : [in] Reference to CString object with text to set.
  626. // Remarks:
  627. //      If given string id exists in collection function sets string to
  628. //      given id.
  629. // See also:
  630. //      void SetAtGrowStr(int nRow, const CString& strText);
  631. //----------------------------------------------------------------------
  632. void InsertStr(int nRow, const CString& strText);
  633. //----------------------------------------------------------------------
  634. // Summary:
  635. //      Removes string.
  636. // Parameters:
  637. //      nRow    : [in] String identifier.
  638. // Returns:
  639. //      TRUE if success; FALSE if given id doesn't exist.
  640. //----------------------------------------------------------------------
  641. BOOL RemoveStr(int nRow);
  642. //----------------------------------------------------------------------
  643. // Summary:
  644. //      Removes all strings from collection.
  645. //----------------------------------------------------------------------
  646. void RemoveAllStrs();
  647. //-----------------------------------------------------------------------
  648. // Summary: Inserts text.
  649. // Parameters:
  650. //      nRow - [in] String identifier.
  651. //      nPos - [in] Start position in the string.
  652. //      pcszText          - [in] Text to insert.
  653. //      bGrowArrayIfNeed  - [in] If nRow greater than strings count and this
  654. //                          parameter TRUE the strings array will be grown;
  655. //                          if this parameter FALSE function will do nothing
  656. //                          and return FALSE.
  657. //      chLeftSpaceFiller - [in] if nPos parameter greater than string length
  658. //                          the char specified in this parameter will be added
  659. //                          to string until nPos.
  660. // Returns:
  661. //      TRUE if text successfully inserted, FALSE otherwise.
  662. // See Also: DeleteText
  663. //-----------------------------------------------------------------------
  664. BOOL InsertText(int nRow, int nPos, LPCTSTR pcszText,
  665. BOOL bGrowArrayIfNeed = FALSE,
  666. TCHAR chLeftSpaceFiller = _T(' ') );
  667. //-----------------------------------------------------------------------
  668. // Summary: Deletes text.
  669. // Parameters:
  670. //      nRow    - [in] String identifier.
  671. //      nPos    - [in] Start position in the string.
  672. //      nCount  - [in] Chars count to remove;
  673. // Returns:
  674. //      TRUE if text successfully deleted, FALSE otherwise.
  675. // See Also: InsertText
  676. //-----------------------------------------------------------------------
  677. BOOL DeleteText(int nRow, int nPos, int nCount);
  678. //----------------------------------------------------------------------
  679. // Summary:
  680. //      Gets string by given index.
  681. // Parameters:
  682. //      nRow : [in] id of string.
  683. //      bGrowArrayIfNeed : [in] Flag to grow array of strings.Default is TRUE
  684. // Returns:
  685. //      CString pointer.
  686. //----------------------------------------------------------------------
  687. CString* GetStrData(int nRow, BOOL bGrowArrayIfNeed = TRUE);
  688. //----------------------------------------------------------------------
  689. // Summary:
  690. //      Gets string by given index.
  691. // Parameters:
  692. //      nRow : [in] id of string.
  693. // Returns:
  694. //      CString pointer.
  695. //----------------------------------------------------------------------
  696. CString* GetStrDataC(int nRow) const;
  697. //--------------------------------------------------------------------
  698. // Summary:
  699. //          Internal class, implement collection of strings.
  700. //--------------------------------------------------------------------
  701. class _XTP_EXT_CLASS CStringPtrArray : public CArray<CString*, CString*>
  702. {
  703. //{{AFX_CODEJOCK_PRIVATE
  704. typedef CArray<CString*, CString*> TBase;
  705. //}}AFX_CODEJOCK_PRIVATE
  706. public:
  707. //----------------------------------------------------------------------
  708. // Summary:
  709. //      Default object constructor.
  710. //----------------------------------------------------------------------
  711. CStringPtrArray();
  712. //----------------------------------------------------------------------
  713. // Summary:
  714. //      Default object destructor. Handles cleanup and deallocation
  715. //----------------------------------------------------------------------
  716. virtual ~CStringPtrArray();
  717. //----------------------------------------------------------------------
  718. // Summary:
  719. //      This method used to delete all strings objects and remove them
  720. //      from array.
  721. //----------------------------------------------------------------------
  722. void RemoveAll();
  723. };
  724. CStringPtrArray m_arStrings; // String collection
  725. };
  726. CXTPSyntaxEditStringsManager    m_Strings; // A strings manager helper object
  727. protected:
  728. };
  729. ////////////////////////////////////////////////////////////////////////////
  730. AFX_INLINE CXTPSyntaxEditLineMarksManager* CXTPSyntaxEditBufferManager::GetLineMarksManager() {
  731. return m_pLineMarksManager;
  732. }
  733. AFX_INLINE XTPSyntaxEditLexAnalyser::CXTPSyntaxEditLexParser* CXTPSyntaxEditBufferManager::GetLexParser() {
  734. return m_pLexParser;
  735. }
  736. AFX_INLINE CXTPSyntaxEditConfigurationManager* CXTPSyntaxEditBufferManager::GetLexConfigurationManager() {
  737. return m_ptrLexConfigurationManager;
  738. }
  739. AFX_INLINE CXTPNotifyConnection* CXTPSyntaxEditBufferManager::GetConnection()
  740. {
  741. return m_pConnect;
  742. }
  743. AFX_INLINE CXTPSyntaxEditUndoRedoManager* CXTPSyntaxEditBufferManager::GetUndoRedoManager() {
  744. return m_pUndoRedoManager;
  745. }
  746. AFX_INLINE int CXTPSyntaxEditBufferManager::GetTabSize() const {
  747. return m_nTabSize;
  748. }
  749. AFX_INLINE BOOL CXTPSyntaxEditBufferManager::GetBuffer(const XTP_EDIT_LINECOL& lcStart,
  750. const XTP_EDIT_LINECOL& lcEnd, CMemFile& file, BOOL bColumnSelection,
  751. BOOL bForceDOSStyleCRLF) {
  752. return GetBuffer(lcStart.nLine, lcStart.nCol, lcEnd.nLine, lcEnd.nCol, file, bColumnSelection,
  753.  bForceDOSStyleCRLF);
  754. }
  755. ////////////////////////////////////////////////////////////////////////////
  756. #endif // !defined(__XTPSYNTAXEDITBUFFERMANAGER_H__)