54 #ifndef _MGUI_TEXT_EDIT_H
55 #define _MGUI_TEXT_EDIT_H
57 #if defined(_MGNCSCTRL_TEXTEDITOR) || (defined(_MGCTRL_TEXTEDIT) && defined(_MGCTRL_TEXTEDIT_USE_NEW_IMPL))
64 #define _MGHAVE_TEXTEDITTITLE 0
66 DECLARE_OBJECT(mTextBuffer)
67 DECLARE_OBJECT(mTextIterator)
68 DECLARE_OBJECT(mTextLayout)
69 DECLARE_OBJECT(mTextLayoutNode)
70 DECLARE_OBJECT(mTextRender)
74 typedef struct _TextBufferObserverNode {
75 ITextBufferObserver* observer;
76 struct _TextBufferObserverNode* next;
77 }mTextBufferObserverNode;
79 #define mTextBufferHeader(Clss) \
81 INTERFACE(ITextBuffer) \
85 mTextBufferObserverNode* observers;
87 #define mTextBufferClassHeader(Clss, Super) \
88 mObjectClassHeader(Clss, Super) \
89 ITextBufferHeader(ITextBuffer, Clss)
93 DEFINE_OBJECT(mTextBuffer,
mObject)
97 #define mTextIteratorHeader(Clss) \
99 INTERFACE(ITextIterator) \
100 mTextBuffer* buffer; \
103 #define mTextIteratorClassHeader(Clss, Super) \
104 mObjectClassHeader(Clss, Super) \
105 ITextIteratorHeader(ITextIterator, Clss)
109 DEFINE_OBJECT(mTextIterator,
mObject)
113 #define mTextLayoutHeader(Clss) \
114 mCommBTreeHeader(Clss) \
115 INTERFACE(ITextLayout) \
116 ITextBuffer * text_buffer; \
118 int cursor_x, cursor_y; \
122 int sel_begin_x, sel_begin_y;\
123 int sel_begin_height; \
124 int text_sel_begin; \
125 ITextLayoutContext* context; \
126 PCLIPRGN dirty_area; \
127 int old_height, new_height; //height changed include
129 #define mTextLayoutClassHeader(Clss, Super) \
130 mCommBTreeClassHeader(Clss, Super) \
131 ITextLayoutHeader(ITextLayout, Clss)
133 DEFINE_OBJECT(mTextLayout, mCommBTree)
137 #define mTextLayoutNodeHeader(Clss) \
138 mCommBTreeNodeHeader(Clss) \
143 #define mTextLayoutNodeClassHeader(Clss, Super) \
144 mCommBTreeNodeClassHeader(Clss, Super)
146 DEFINE_OBJECT(mTextLayoutNode,mCommBTreeNode)
151 #define mTextRenderHeader(Clss) \
152 mObjectHeader(Clss) \
153 INTERFACE(ITextRender)
155 #define mTextRenderClassHeader(Clss, Super) \
156 mObjectClassHeader(Clss, Super) \
157 ITextRenderHeader(ITextRender, Clss)
159 DEFINE_OBJECT(mTextRender,
mObject)
165 ITextRender* GetTextRender(
int type);
168 DECLARE_OBJECT(mTextEditor)
175 #ifndef __MINIGUI_LIB__
180 #define NCSCTRL_TEXTEDITOR NCSCLASSNAME("texteditor")
184 #define NCS_TEF_REPLACE_MODE 0x010000
185 #define NCS_TEF_HAS_PAINTED 0x020000
186 #define mTextEditor_isReplaceMode(self) \
187 ((self)->flags&NCS_TEF_REPLACE_MODE)
188 #define mTextEditor_hasPainted(self) \
189 ((self)->flags&NCS_TEF_HAS_PAINTED)
192 #ifdef _MGHAVE_TEXTEDITTITLE
193 #define TITLE_HEADER \
194 int title_idx, title_text_idx; \
195 int title_x, title_y, title_last_height; \
196 int title_paracount; \
197 int title_last_para_text_index; \
198 int title_linecount; \
199 int title_last_line_text_index;
201 #define TITLE_CLASS_HEADER(Clss) \
202 void (*setTitle)(Clss*, const char* buff, int len); \
203 int (*getTitle)(Clss*, char* buff, int max);
208 #define TITLE_CLASS_HEADER(Clss)
240 #define mTextEditorHeader(Clss) \
241 mWidgetHeader(Clss) \
242 INTERFACE(ITextLayoutContext) \
243 mTextBuffer *textBuffer; \
244 mTextLayout *textLayout; \
245 int visWidth, visHeight;\
248 unsigned int flags; \
251 unsigned short scrollBarMode; \
252 unsigned int scrollHStep; \
253 unsigned int scrollVStep; \
255 int oldOffX, oldOffY; \
344 #define mTextEditorClassHeader(Clss, Super) \
345 mWidgetClassHeader(Clss, Super) \
346 ITextLayoutContextHeader(ITextLayoutContext, Clss) \
347 int (*onChar)(Clss*, int asciiCode, DWORD keyFlags); \
348 BOOL (*onFontChanged)(Clss*); \
349 int (*getInvalidBkgnd)(Clss*, RECT *prc); \
350 int (*onLButtonDBClk)(Clss*, int x, int y, DWORD keyFlags); \
351 void (*onCSizeChanged)(Clss*, int cliWidth, int cliHeight); \
352 void (*onSetFocus)(Clss*, HWND oldActiveWnd, int lParam); \
353 void (*onKillFocus)(Clss*, HWND newActiveWnd, int lParam); \
354 void (*onHScroll)(Clss*, int code, int mouseX); \
355 void (*onVScroll)(Clss*, int code, int mouseY); \
357 int (*getParaText)(Clss*, int index, int start, int len, char* buffer); \
358 int (*getLineText)(Clss*, int index, int start, int len, char* buffer); \
359 int (*getParaLength)(Clss*, int index, int *startPos); \
360 int (*getParaLengthInMChar)(Clss*, int paraNo, int *startPos); \
361 int (*getLineLength)(Clss*, int lineNo, int *startPos, BOOL bMChar); \
362 int (*getParaNum)(Clss*); \
363 int (*setText)(Clss*, const char* text); \
364 int (*insertText)(Clss*, const char* text, int len); \
365 int (*getText)(Clss*, char* text, int len); \
366 int (*getTextLen)(Clss*); \
367 BOOL (*enableCaret)(Clss*, BOOL enable); \
368 int (*setCaretPosByPara)(Clss*, unsigned int paraIdx, unsigned int offChar, \
370 int (*getCaretPosByPara)(Clss*, int *paraIdx, int *offChar, \
371 int *height, BOOL isSel); \
372 int (*setCaretPosByLine)(Clss*, unsigned int lineIdx, unsigned int offChar, \
374 int (*getCaretPosByLine)(Clss*, int *lineIdx, int *offChar, \
375 int *height, BOOL isSel); \
376 int (*getLineCount)(Clss*); \
377 void (*selectAll)(Clss*); \
378 int (*setSel)(Clss*, unsigned int startParaIdx, unsigned int startOffChar, \
379 unsigned int endParaIdx, unsigned int endOffChar); \
380 int (*getSel)(Clss*, char *buffer, int len); \
381 BOOL (*needLineDecorative)(Clss*); \
382 void (*lineDecorative)(Clss*, int x, int y, int w, int h, \
383 int lineNo, HDC hdc); \
384 TITLE_CLASS_HEADER(Clss)
386 #ifndef __MINIGUI_LIB__
392 #define NCSS_TE_READONLY (1<<NCSS_WIDGET_SHIFT)
398 #define NCSS_TE_UPPERCASE (2<<NCSS_WIDGET_SHIFT)
404 #define NCSS_TE_LOWERCASE (4<<NCSS_WIDGET_SHIFT)
410 #define NCSS_TE_NOHIDESEL (8<<NCSS_WIDGET_SHIFT)
416 #define NCSS_TE_AUTOWRAP (0x10<<NCSS_WIDGET_SHIFT)
422 #define NCSS_TE_BASELINE (0x20<<NCSS_WIDGET_SHIFT)
428 #define NCSS_TE_OWNERBKGND (0x40<<NCSS_WIDGET_SHIFT)
434 #define NCSS_TE_TITLE (0x80<<NCSS_WIDGET_SHIFT)
444 #define NCSS_TE_AUTOVSCROLL (0x100<<NCSS_WIDGET_SHIFT)
454 #define NCSS_TE_AUTOHSCROLL (0x200<<NCSS_WIDGET_SHIFT)
456 #define NCSS_TE_SHIFT (NCSS_WIDGET_SHIFT + 10)
469 NCS_TEF_SCROLLBAR_NEVER = 0,
474 NCS_TEF_SCROLLBAR_AUTO,
479 NCS_TEF_SCROLLBAR_ALWAYS,
491 NCSP_TE_READONLY = NCSP_WIDGET_MAX + 1,
501 NCSP_TE_SCROLL_HSTEP,
506 NCSP_TE_SCROLL_VSTEP,
521 NCSP_TE_PARAGRAPHCOUNT,
533 #define NCSP_TE_NUMOFPARAGRAPHS NCSP_TE_PARAGRAPHCOUNT
535 #ifndef __MINIGUI_LIB__
540 enum mTextEditorNotify
545 NCSN_TE_CONTENTCHANGED = NCSN_WIDGET_MAX + 1,
584 typedef struct _mTextEditorRenderer mTextEditorRenderer;
588 DEFINE_OBJECT(mTextEditor,
mWidget)
590 #ifdef __MINIGUI_LIB__
591 void TextEditorDrawLinesDecorative(mTextEditor *
self, HDC hdc,
int x,
int y,
int w,
int h);
592 #define mTextEditor_drawLinesDecorative TextEditorDrawLinesDecorative
594 void mTextEditor_drawLinesDecorative(mTextEditor *
self, HDC hdc,
int x,
int y,
int w,
int h);