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

对话框与窗口

开发平台:

Visual C++

  1. // XTPSyntaxEditAutoCompleteWnd.h: interface for the CXTPSyntaxEditAutoCompleteWnd 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(__XTPSYNTAXEDITAUTOCOMPLETEWND_H__)
  22. #define __XTPSYNTAXEDITAUTOCOMPLETEWND_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPSyntaxEditCtrl;
  28. //===========================================================================
  29. // Summary:
  30. //     XTP_EDIT_ACDATA structure defines items displayed data. Provides text and
  31. //     icon for each displayed line in Auto-complete window.
  32. //===========================================================================
  33. struct XTP_EDIT_ACDATA
  34. {
  35. int     m_nIcon;    // The icon ID.
  36. CString m_strText;  // The item text.
  37. //-----------------------------------------------------------------------
  38. // Summary:
  39. //     Default class constructor.
  40. // Parameters:
  41. //     nIcon    - The icon ID.
  42. //     strText  - The item text.
  43. //-----------------------------------------------------------------------
  44. XTP_EDIT_ACDATA(int nIcon, CString strText)
  45. {
  46. m_nIcon = nIcon;
  47. m_strText = strText;
  48. }
  49. };
  50. //===========================================================================
  51. // Summary:
  52. //     CXTPSyntaxEditACDataArray type defines a custom array to store AutoComplete items
  53. //     displayed data.
  54. // See Also:
  55. //     PXTP_EDIT_ACDATA
  56. //===========================================================================
  57. typedef CArray<XTP_EDIT_ACDATA*, XTP_EDIT_ACDATA*> CXTPSyntaxEditACDataArray;
  58. //===========================================================================
  59. // Summary:
  60. //     CXTPSyntaxEditACGrid type defines a custom array to store and manage visible
  61. //     rectangle arrays that represented lines of data in AutoComplete window.
  62. //===========================================================================
  63. typedef CArray<CRect, CRect> CXTPSyntaxEditACGrid;
  64. //===========================================================================
  65. // Summary:
  66. //     This class implements AutoComplete window. It provides facilities
  67. //     to display predefined strings of data in the sorted order. Then
  68. //     user can navigate over list of strings and choose desired text to
  69. //     complete his input. AutoComplete window provides some ways to
  70. //     navigate by using vertical scroll bar, up/down keys, mouse.
  71. //     If user types alphanumeric keys after AutoComplete window was
  72. //     appeared it uses user input as search criteria and tries to find
  73. //     text from its predefined strings of data that are like user input.
  74. //===========================================================================
  75. class _XTP_EXT_CLASS CXTPSyntaxEditAutoCompleteWnd : public CWnd
  76. {
  77. //{{AFX_CODEJOCK_PRIVATE
  78. friend class CXTPSyntaxEditCtrl;
  79. //}}AFX_CODEJOCK_PRIVATE
  80. public:
  81. //-----------------------------------------------------------------------
  82. // Summary:
  83. //     Default class constructor.
  84. //-----------------------------------------------------------------------
  85. CXTPSyntaxEditAutoCompleteWnd();
  86. //-----------------------------------------------------------------------
  87. // Summary:
  88. //     Destroys a CXTPSyntaxEditAutoCompleteWnd object, handles cleanup
  89. //     and de-allocation.
  90. //-----------------------------------------------------------------------
  91. virtual ~CXTPSyntaxEditAutoCompleteWnd();
  92. //-----------------------------------------------------------------------
  93. // Summary:
  94. //     Creates AutoComplete window and sets predefined properties.
  95. // Parameters:
  96. //     pParentWnd: [in] Pointer to the parent window.
  97. // Remarks:
  98. //     Before create Auto-complete window you should construct
  99. //     CXTPSyntaxEditAutoCompleteWnd object by calling constrictor.
  100. // Returns:
  101. //     TRUE if success; FALSE otherwise.
  102. //-----------------------------------------------------------------------
  103. virtual BOOL Create(CWnd* pParentWnd);
  104. //-----------------------------------------------------------------------
  105. // Summary:
  106. //     Sets list of data to be displayed in AutoComplete window.
  107. // Parameters:
  108. //     parrData: [in] reference to array of data.
  109. // Remarks:
  110. //     AutoComplete window displays list of data for user choice.If
  111. //     AutoComplete window has already had a list of displayed data it will
  112. //     be replaced by new one. Before add to the AutoComplete window new
  113. //     data is sorted.
  114. // See Also:
  115. //    CXTPSyntaxEditACDataArray
  116. //-----------------------------------------------------------------------
  117. virtual void SetList(CXTPSyntaxEditACDataArray& parrData);
  118. //-----------------------------------------------------------------------
  119. // Summary:
  120. //     Sets list of open tags for AutoComplete window.
  121. // Parameters:
  122. //     strOpenTags: [in] string with new open tags.
  123. // Remarks:
  124. //     Open Tags are treated by AutoComplete window as command to be
  125. //     displayed and activated. Each tag may consists of one or more symbols.
  126. //     Tags must be separated by "~" sign. If AutoComplete window has
  127. //     already had a list of tags it will be replaced by new one.
  128. //-----------------------------------------------------------------------
  129. virtual void SetOpenTags(CString strOpenTags);
  130. //-----------------------------------------------------------------------
  131. // Summary:
  132. //     Determines if user input is open tag.
  133. // Parameters:
  134. //     strToTest: [in] string to test.
  135. // Remarks:
  136. //     Call this function to determine if user enters open tag.
  137. //     Function uses incremental search and temporary stores input
  138. //     that resembles initial part of open tags that consist of
  139. //     number of symbols.
  140. // Returns:
  141. //     TRUE if open tag detected; FALSE otherwise.
  142. //-----------------------------------------------------------------------
  143. BOOL IsOpenTag(CString strToTest);
  144. //-----------------------------------------------------------------------
  145. // Summary:
  146. //     Sets list of close tags for AutoComplete window.
  147. // Parameters:
  148. //     strCloseTags: [in] string with new close tags.
  149. // Remarks:
  150. //     Close Tags are treated by AutoComplete window as command to be
  151. //     hidden and deactivated. Each tag may consists of one or more symbols.
  152. //     Tags must be separated by "~" sign. If AutoComplete window has
  153. //     already had a list of tags it will be replaced by new one.
  154. //-----------------------------------------------------------------------
  155. virtual void SetCloseTags(CString strCloseTags);
  156. //-----------------------------------------------------------------------
  157. // Summary:
  158. //     Determines if user input is Close tag.
  159. // Parameters:
  160. //      strToTest: [in] String to test.
  161. // Remarks:
  162. //     Call this function to determine if user enters close tag.
  163. //     Function uses incremental search and temporary stores input that
  164. //     resembles initial part of close tags that consist of number of
  165. //     symbols.
  166. // Returns:
  167. //     TRUE if close tag detected; FALSE otherwise.
  168. //-----------------------------------------------------------------------
  169. BOOL IsCloseTag(CString strToTest);
  170. //-----------------------------------------------------------------------
  171. // Summary:
  172. //     Shows AutoComplete window.
  173. // Parameters:
  174. //     pt:        [in] Point where left upper corner of AutoComplete
  175. //                window should appears.
  176. //     strSearch: [in] Search string.
  177. // Remarks:
  178. //     Shows AutoComplete window at specified point and try to filter
  179. //     dataset by previously typed piece of word and highlighted line
  180. //     according search string.
  181. //-----------------------------------------------------------------------
  182. virtual void Show(CPoint pt, CString strSearch = _T(""));
  183. //-----------------------------------------------------------------------
  184. // Summary:
  185. //     Hides AutoComplete window.
  186. //-----------------------------------------------------------------------
  187. virtual void Hide();
  188. //-----------------------------------------------------------------------
  189. // Summary:
  190. //     Returns active flag for AutoComplete window.
  191. // Returns:
  192. //     TRUE if window is visible and active; FALSE otherwise.
  193. //-----------------------------------------------------------------------
  194. BOOL IsActive();
  195. //-----------------------------------------------------------------------
  196. // Summary:
  197. //     Updates display settings from system settings.
  198. //-----------------------------------------------------------------------
  199. virtual void RefreshMetrics();
  200. // Summary:
  201. //     This member function registers the window class if it has not
  202. //     already been registered.
  203. // Parameters:
  204. //     hInstance - Instance of resource where control is located
  205. // Returns:
  206. //     A boolean value that specifies if the window is successfully
  207. //     registered.<p/>
  208. //     TRUE if the window class is successfully registered.<p/>
  209. //     Otherwise FALSE.
  210. // -----------------------------------------------------------------
  211. virtual BOOL RegisterWindowClass(HINSTANCE hInstance = NULL);
  212. //-----------------------------------------------------------------------
  213. // Summary:
  214. //     This member function is used to obtain width of the auto-complete window.
  215. // Returns:
  216. //     A window width in pixels.
  217. //-----------------------------------------------------------------------
  218. int GetWndWidth() const;
  219. //-----------------------------------------------------------------------
  220. // Summary:
  221. //     This member function is used to set width of the auto-complete window.
  222. // Parameters:
  223. //     nWidth - A window width in pixels.
  224. //-----------------------------------------------------------------------
  225. void SetWndWidth(int nWidth);
  226. protected:
  227. //-----------------------------------------------------------------------
  228. // Summary:
  229. //     Returns text line where user click mouse.
  230. // Parameters:
  231. //     ptTest: [in] tested point.
  232. // Returns:
  233. //     Integer identifier of affected text line.
  234. //-----------------------------------------------------------------------
  235. int HitTest(CPoint ptTest);
  236. //{{AFX_CODEJOCK_PRIVATE
  237. // message handlers
  238. void OnLButtonDown(UINT nFlags, CPoint point);
  239. void OnRButtonDown(UINT nFlags, CPoint point);
  240. void OnLButtonDblClk( UINT nFlags, CPoint point );
  241. BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  242. void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  243. void OnChar( UINT nChar, UINT nRepCnt, UINT nFlags );
  244. void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  245. void OnPaint();
  246. BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  247. DECLARE_MESSAGE_MAP()
  248. //}}AFX_CODEJOCK_PRIVATE
  249. protected:
  250. CString     m_strSearch;    // Temporary stores chain of chars from user input to perform
  251.                             // incremental search
  252. CString     m_strCloseTags; // Stores set of closed tags divided by ~
  253.                             // input closed tags lead to close AutoComplete window
  254. CString     m_strTmpCloseTag;// Temporary stores chain of chars from user input to
  255. // recognize close tags
  256. CString     m_strOpenTags;  // Stores open tags
  257. CString     m_strTmpOpenTag;// Temporary stores chain of chars from user input to
  258.                             // recognize Open tags
  259. CXTPSyntaxEditCtrl* m_pParentWnd;   // Pointer to the parent window
  260. CFont m_fontBasic;          // Font to display text
  261. COLORREF m_clrWindow;       // Standard window color
  262. COLORREF m_clrHighLight;    // Standard window highlight color
  263. COLORREF m_clrWindowText;   // Standard windows text color
  264. COLORREF m_clrHighLightText;// Standard windows highlight text color
  265. CXTPSyntaxEditACDataArray m_arrACData;// Stores list of choices (line of text and image)
  266. CXTPSyntaxEditACDataArray m_arrACDataFiltered; // Stores filtered list of choices (line of text and image)
  267. CXTPSyntaxEditACGrid m_arrGrid;     // Stores list of rectangle areas where were
  268. // displayed textimage strings from m_arrACData
  269. int m_nBordersHeight;       // Stores summary thickness of vertical window borders
  270. int m_nLineHeight;          // Stores height of line
  271. int m_nLines;               // Number of visible lines
  272. int m_nWndHeight;           // Height of window
  273. int m_nWndWidth;            // Width of window
  274. int m_nHighLightLine;       // Current highlight line identifier
  275. int m_nFirstDisplayedStr;   // Current first visible (upper) line
  276. BOOL m_bFixedBottom;        // Store autocomplete window position: above or below at the cursor.
  277. BOOL m_bActive;             // Active flag
  278. BOOL m_bFilteredMode;       // Flag to identify is current mode (filtered/full);
  279. BOOL m_bHighLight;          // This flag determines if selected string is highlighted.
  280. int m_nStartReplacePos;     // Position of first char in the Edit Control which will be replaced
  281.                             // by the chosen text
  282. int m_nEndReplacePos;       // Position of last char in the Edit Control which will be replaced
  283.                             // by the chosen text
  284. CImageList m_ilACGlyphs;    // Images for AutoComplete list
  285. CString m_strDelims;        // stores char list that are tag delimiters
  286. private:
  287. BOOL AdjusLayout(int nHeightMax = 0);
  288. void _AdjustWndRect(CRect& rrcWndRect);
  289. void RemoveAll();
  290. BOOL ScrollTo(int nNewLine);
  291. void UpdateFilteredList();
  292. void ReturnSelected(BOOL bAdjust = FALSE);
  293. void Sort();
  294. static int _cdecl CompareACData(const XTP_EDIT_ACDATA** p1, const XTP_EDIT_ACDATA** p2);
  295. int Search(CString strSearch = _T(""));
  296. int Filter(CString strSearch = _T(""));
  297. static int _cdecl CompareACDataToSearch(const XTP_EDIT_ACDATA** ppKey, const XTP_EDIT_ACDATA** ppElem);
  298. };
  299. /////////////////////////////////////////////////////////////////////////////
  300. AFX_INLINE int CXTPSyntaxEditAutoCompleteWnd::GetWndWidth() const {
  301. return m_nWndWidth;
  302. }
  303. #endif // !defined(__XTPSYNTAXEDITAUTOCOMPLETEWND_H__)