mGNCS API Reference  v1.2.0
A new control set and a new framework for MiniGUI apps
mtextedit.h
Go to the documentation of this file.
1 
42 #ifndef _MGUI_TEXT_EDIT_H
43 #define _MGUI_TEXT_EDIT_H
44 
45 #if defined(_MGNCSCTRL_TEXTEDITOR) || (defined(_MGCTRL_TEXTEDIT) && defined(_MGCTRL_TEXTEDIT_USE_NEW_IMPL))
46 
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50 
51 /* enable ES_TITLE stle of TEXTEDIT control */
52 #define _MGHAVE_TEXTEDITTITLE 0
53 
54 DECLARE_OBJECT(mTextBuffer)
55 DECLARE_OBJECT(mTextIterator)
56 DECLARE_OBJECT(mTextLayout)
57 DECLARE_OBJECT(mTextLayoutNode)
58 DECLARE_OBJECT(mTextRender)
59 
61 // mTextBuffer
62 typedef struct _TextBufferObserverNode {
63  ITextBufferObserver* observer;
64  struct _TextBufferObserverNode* next;
65 }mTextBufferObserverNode;
66 
67 #define mTextBufferHeader(Clss) \
68  mObjectHeader(Clss) \
69  INTERFACE(ITextBuffer) \
70  char * buffer; \
71  int max_size; \
72  int char_len; \
73  mTextBufferObserverNode* observers;
74 
75 #define mTextBufferClassHeader(Clss, Super) \
76  mObjectClassHeader(Clss, Super) \
77  ITextBufferHeader(ITextBuffer, Clss)
78 
79 //mTextBuffer_construct(const char* str = NULL, const char* str_len = 0)
80 
81 DEFINE_OBJECT(mTextBuffer, mObject)
82 
83 // mTextIterator
85 #define mTextIteratorHeader(Clss) \
86  mObjectHeader(Clss) \
87  INTERFACE(ITextIterator) \
88  mTextBuffer* buffer; \
89  int index;
90 
91 #define mTextIteratorClassHeader(Clss, Super) \
92  mObjectClassHeader(Clss, Super) \
93  ITextIteratorHeader(ITextIterator, Clss)
94 
95 //mTextIterator_construct(mTextBuffer*, int index)
96 
97 DEFINE_OBJECT(mTextIterator, mObject)
98 
99 // mTextLayout
101 #define mTextLayoutHeader(Clss) \
102  mCommBTreeHeader(Clss) \
103  INTERFACE(ITextLayout) \
104  ITextBuffer * text_buffer; \
105  int cursor; \
106  int cursor_x, cursor_y; \
107  int cursor_height; \
108  int text_cursor; \
109  int sel_begin; \
110  int sel_begin_x, sel_begin_y;\
111  int sel_begin_height; \
112  int text_sel_begin; \
113  ITextLayoutContext* context; \
114  PCLIPRGN dirty_area; \
115  int old_height, new_height; //height changed include
116 
117 #define mTextLayoutClassHeader(Clss, Super) \
118  mCommBTreeClassHeader(Clss, Super) \
119  ITextLayoutHeader(ITextLayout, Clss)
120 
121 DEFINE_OBJECT(mTextLayout, mCommBTree)
122 
123 //mTextLayoutNode
124 
125 #define mTextLayoutNodeHeader(Clss) \
126  mCommBTreeNodeHeader(Clss) \
127  int str_count; \
128  int text_count; \
129  int width, height;
130 
131 #define mTextLayoutNodeClassHeader(Clss, Super) \
132  mCommBTreeNodeClassHeader(Clss, Super)
133 
134 DEFINE_OBJECT(mTextLayoutNode,mCommBTreeNode)
135 
136 //mTextRender
138 
139 #define mTextRenderHeader(Clss) \
140  mObjectHeader(Clss) \
141  INTERFACE(ITextRender)
142 
143 #define mTextRenderClassHeader(Clss, Super) \
144  mObjectClassHeader(Clss, Super) \
145  ITextRenderHeader(ITextRender, Clss)
146 
147 DEFINE_OBJECT(mTextRender,mObject)
148 
149 enum {
150  NCS_TXTRDR_TEXT = 0
151 };
152 
153 ITextRender* GetTextRender(int type);
154 
155 /* mTextEditor object*/
156 DECLARE_OBJECT(mTextEditor)
157 
158 
163 #ifndef __MINIGUI_LIB__
164 
168 #define NCSCTRL_TEXTEDITOR NCSCLASSNAME("texteditor")
169 #endif
170 
171 /* define the flag of TextEditor */
172 #define NCS_TEF_REPLACE_MODE 0x010000
173 #define NCS_TEF_HAS_PAINTED 0x020000
174 #define mTextEditor_isReplaceMode(self) \
175  ((self)->flags&NCS_TEF_REPLACE_MODE)
176 #define mTextEditor_hasPainted(self) \
177  ((self)->flags&NCS_TEF_HAS_PAINTED)
178 
179 
180 #ifdef _MGHAVE_TEXTEDITTITLE
181 #define TITLE_HEADER \
182  int title_idx, title_text_idx; \
183  int title_x, title_y, title_last_height; \
184  int title_paracount; \
185  int title_last_para_text_index; \
186  int title_linecount; \
187  int title_last_line_text_index;
188 
189 #define TITLE_CLASS_HEADER(Clss) \
190  void (*setTitle)(Clss*, const char* buff, int len); \
191  int (*getTitle)(Clss*, char* buff, int max);
192 
193 
194 #else
195 #define TITLE_HEADER
196 #define TITLE_CLASS_HEADER(Clss)
197 #endif
198 
199 //mTextEditor_construct(HWND hwnd)
228 #define mTextEditorHeader(Clss) \
229  mWidgetHeader(Clss) \
230  INTERFACE(ITextLayoutContext) \
231  mTextBuffer *textBuffer; \
232  mTextLayout *textLayout; \
233  int visWidth, visHeight;\
234  int offX, offY; \
235  int hardLimit; \
236  unsigned int flags; \
237  int caretWidth; \
238  int caretHeight; \
239  unsigned short scrollBarMode; \
240  unsigned int scrollHStep; \
241  unsigned int scrollVStep; \
242  RECT margins; \
243  int oldOffX, oldOffY; \
244  TITLE_HEADER
245 
246 
332 #define mTextEditorClassHeader(Clss, Super) \
333  mWidgetClassHeader(Clss, Super) \
334  ITextLayoutContextHeader(ITextLayoutContext, Clss) \
335  int (*onChar)(Clss*, int asciiCode, DWORD keyFlags); \
336  BOOL (*onFontChanged)(Clss*); \
337  int (*getInvalidBkgnd)(Clss*, RECT *prc); \
338  int (*onLButtonDBClk)(Clss*, int x, int y, DWORD keyFlags); \
339  void (*onCSizeChanged)(Clss*, int cliWidth, int cliHeight); \
340  void (*onSetFocus)(Clss*, HWND oldActiveWnd, int lParam); \
341  void (*onKillFocus)(Clss*, HWND newActiveWnd, int lParam); \
342  void (*onHScroll)(Clss*, int code, int mouseX); \
343  void (*onVScroll)(Clss*, int code, int mouseY); \
344  \
345  int (*getParaText)(Clss*, int index, int start, int len, char* buffer); \
346  int (*getLineText)(Clss*, int index, int start, int len, char* buffer); \
347  int (*getParaLength)(Clss*, int index, int *startPos); \
348  int (*getParaLengthInMChar)(Clss*, int paraNo, int *startPos); \
349  int (*getLineLength)(Clss*, int lineNo, int *startPos, BOOL bMChar); \
350  int (*getParaNum)(Clss*); \
351  int (*setText)(Clss*, const char* text); \
352  int (*insertText)(Clss*, const char* text, int len); \
353  int (*getText)(Clss*, char* text, int len); \
354  int (*getTextLen)(Clss*); \
355  BOOL (*enableCaret)(Clss*, BOOL enable); \
356  int (*setCaretPosByPara)(Clss*, unsigned int paraIdx, unsigned int offChar, \
357  BOOL isSel); \
358  int (*getCaretPosByPara)(Clss*, int *paraIdx, int *offChar, \
359  int *height, BOOL isSel); \
360  int (*setCaretPosByLine)(Clss*, unsigned int lineIdx, unsigned int offChar, \
361  BOOL isSel); \
362  int (*getCaretPosByLine)(Clss*, int *lineIdx, int *offChar, \
363  int *height, BOOL isSel); \
364  int (*getLineCount)(Clss*); \
365  void (*selectAll)(Clss*); \
366  int (*setSel)(Clss*, unsigned int startParaIdx, unsigned int startOffChar, \
367  unsigned int endParaIdx, unsigned int endOffChar); \
368  int (*getSel)(Clss*, char *buffer, int len); \
369  BOOL (*needLineDecorative)(Clss*); \
370  void (*lineDecorative)(Clss*, int x, int y, int w, int h, \
371  int lineNo, HDC hdc); \
372  TITLE_CLASS_HEADER(Clss)
373 
374 #ifndef __MINIGUI_LIB__
375 
380 #define NCSS_TE_READONLY (1<<NCSS_WIDGET_SHIFT)
381 
386 #define NCSS_TE_UPPERCASE (2<<NCSS_WIDGET_SHIFT)
387 
392 #define NCSS_TE_LOWERCASE (4<<NCSS_WIDGET_SHIFT)
393 
398 #define NCSS_TE_NOHIDESEL (8<<NCSS_WIDGET_SHIFT)
399 
404 #define NCSS_TE_AUTOWRAP (0x10<<NCSS_WIDGET_SHIFT)
405 
410 #define NCSS_TE_BASELINE (0x20<<NCSS_WIDGET_SHIFT)
411 
416 #define NCSS_TE_OWNERBKGND (0x40<<NCSS_WIDGET_SHIFT)
417 
418 /*
419  * \def NCSS_TE_TITLE
420  * \brief make the texteditor has title
421  */
422 #define NCSS_TE_TITLE (0x80<<NCSS_WIDGET_SHIFT)
423 
424 /*
425  * \def NCSS_TE_AUTOVSCROLL
426  * \brief make the texteditor has a auto vert scrollbar
427  *
428  * \note: NCSS_TE_AUTOVSCROLL | WS_VSCROLL == AUTO
429  * !(dwStyle & NCSS_TE_AUTOVSCROLL) && (dwStyle & WS_VSCROLL) == Always
430  * !(dwStyle & (NCSS_TE_AUTOVSCROLL | WS_VSCROLL)) == Nerver
431  */
432 #define NCSS_TE_AUTOVSCROLL (0x100<<NCSS_WIDGET_SHIFT)
433 
434 /*
435  * \def NCSS_TE_AUTOHSCROLL
436  * \brief make the texteditor has the auto horz scrollbar
437  *
438  * \note: NCSS_TE_AUTOHSCROLL | WS_HSCROLL == AUTO
439  * !(dwStyle & NCSS_TE_AUTOHSCROLL) && (dwStyle & WS_HSCROLL) == Always
440  * !(dwStyle & (NCSS_TE_AUTOHSCROLL | WS_HSCROLL)) == Nerver
441  */
442 #define NCSS_TE_AUTOHSCROLL (0x200<<NCSS_WIDGET_SHIFT)
443 
444 #define NCSS_TE_SHIFT (NCSS_WIDGET_SHIFT + 10)
445 
446 #endif
447 
452  enum ncsTEScrollMode
453  {
457  NCS_TEF_SCROLLBAR_NEVER = 0,
458 
462  NCS_TEF_SCROLLBAR_AUTO,
463 
467  NCS_TEF_SCROLLBAR_ALWAYS,
468 };
469 
474 enum mTextEditorProp
475 {
479  NCSP_TE_READONLY = NCSP_WIDGET_MAX + 1,
480 
484  NCSP_TE_SCROLL_MODE,
485 
489  NCSP_TE_SCROLL_HSTEP,
490 
494  NCSP_TE_SCROLL_VSTEP,
495 
499  NCSP_TE_TEXTLIMIT,
500 
504  NCSP_TE_LINECOUNT,
505 
509  NCSP_TE_PARAGRAPHCOUNT,
510 
514  NCSP_TE_MARGINRECT,
515 
519  NCSP_TE_MAX,
520 };
521 #define NCSP_TE_NUMOFPARAGRAPHS NCSP_TE_PARAGRAPHCOUNT
522 
523 #ifndef __MINIGUI_LIB__
524 
528 enum mTextEditorNotify
529 {
533  NCSN_TE_CONTENTCHANGED = NCSN_WIDGET_MAX + 1,
534 
538  NCSN_TE_SETFOCUS,
539 
543  NCSN_TE_KILLFOCUS,
544 
548  NCSN_TE_MAXTEXT,
549 
553  NCSN_TE_CHANGE,
554 
559  NCSN_TE_UPDATE,
560 
564  NCSN_TE_SELCHANGED,
565 
569  NCSN_TE_MAX
570 };
571 
572 typedef struct _mTextEditorRenderer mTextEditorRenderer;
573 #endif
574 
575 
576 DEFINE_OBJECT(mTextEditor, mWidget)
577 
578 #ifdef __MINIGUI_LIB__
579 void TextEditorDrawLinesDecorative(mTextEditor * self, HDC hdc, int x, int y, int w, int h);
580 #define mTextEditor_drawLinesDecorative TextEditorDrawLinesDecorative
581 #else
582 void mTextEditor_drawLinesDecorative(mTextEditor * self, HDC hdc, int x, int y, int w, int h);
583 #endif
584 
586 #ifdef __cplusplus
587 }
588 #endif
589 
590 #endif /*_MGNCSCTRL_TEXTEDITOR*/
591 
592 #endif
593 
594 
define the mWidget members, inherit from mComponent
the Object struct