mGNCS API Reference  v1.5.0
A new control set and a new framework for MiniGUI apps
mnode.h
Go to the documentation of this file.
1 //
3 // IMPORTANT NOTICE
4 //
5 // The following open source license statement does not apply to any
6 // entity in the Exception List published by FMSoft.
7 //
8 // For more information, please visit:
9 //
10 // https://www.fmsoft.cn/exception-list
11 //
13 
54 #ifndef _MGUI_WIDGET_NODE_H
55 #define _MGUI_WIDGET_NODE_H
56 
57 
58 #ifdef __cplusplus
59 extern "C" {
60 #endif /* __cplusplus */
61 
67 typedef struct _mNode mNode;
68 typedef struct _mNodeClass mNodeClass;
69 
74 #define NCSS_NODE_LTEXTRS 0x0000
75 
81 #define NCSS_NODE_SMALLICON 0x0001
82 
87 #define NCSS_NODE_LTEXTBS 0x0002
88 
93 #define NCSS_NODE_TICTACTOEMIDLET 0x0004
94 
95 #define NCSS_NODE_LAYOUT_MASK 0x00FF
96 
101 #define NCSS_NODE_HIDETEXT 0x0010
102 
107 #define NCSS_NODE_HIDEIMAGE 0x0020
108 
113 #define NCSS_NODE_DISABLED 0x0040
114 
119 #define NCSS_NODE_SHIFT 7
120 
126 typedef int (*NCS_CB_CMPNODE) (mNode *node1, mNode *node2);
127 
128 #define mNodeDataInfoHeader \
129  int style; \
130  char *text; \
131  PBITMAP image; \
132  int height; \
133  DWORD addData; \
134  mObject *parent; \
135 
136 
137 typedef struct _NCS_NODE_DATA
138 {
139  mNodeDataInfoHeader
140 }NCS_NODE_DATA;
141 
142 //status flags
143 #define NCSF_NODE_MASK 0xFFFF
144 #define NCSF_NODE_NORMAL 0x0000
145 #define NCSF_NODE_SELECTED 0x0001
146 #define NCSF_NODE_DISABLED 0x0002
147 #define NCSF_NODE_INVISIBLE 0x0004
148 #define NCSF_NODE_DEFHEIGHT 0x0008
149 
150 #define NCSF_NODE_HIDETEXT 0x0010
151 #define NCSF_NODE_HIDEIMAGE 0x0020
152 
153 typedef struct _NCS_NODE_LAYOUTOPS
154 {
155  const char name[16];
156  int style;
157  void (*paint)(mNode *self, HDC hdc, const RECT *rect, mObject *owner);
158 }NCS_NODE_LAYOUTOPS;
159 
160 #define mNodeHeader(className) \
161  mObjectHeader(className) \
162  NCS_NODE_LAYOUTOPS *layout; \
163  list_t children; \
164  list_t sibling; \
165  Uint16 flags; \
166  Uint16 count; \
167  mNodeDataInfoHeader
168 
200 struct _mNode
201 {
202  mNodeHeader(mNode)
203 };
204 
205 typedef struct _NCS_MENU_DATA
206 {
207  int nr_child;
208  struct _NCS_MENU_DATA *child;
209 
210  mNodeDataInfoHeader
211 }NCS_MENU_DATA;
212 MGNCS_EXPORT void ncsSetMenuData(mObject *self, NCS_MENU_DATA *pMenuData, int count);
213 
214 typedef struct _NCS_MENU_INFO
215 {
216  int count;
217  char *caption;
218  NCS_MENU_DATA *data;
219 }NCS_MENU_INFO;
220 MGNCS_EXPORT void ncsSetMenu(mObject *self, NCS_MENU_INFO *pMenuInfo);
221 
237 MGNCS_EXPORT mNode* ncsCreateNode(mObject *parent, const char* text,
238  PBITMAP image, int height, int style, DWORD addData);
239 
259 MGNCS_EXPORT mNode* ncsAddNode(mObject *parent, const char* text,
260  PBITMAP image, int height, int style, DWORD addData);
261 
267 {
272 
277 
282 
283  NCS_NODE_FTOTHER,
284 };
285 
286 #define mNodeClassHeader(clsName, superCls) \
287  mObjectClassHeader(clsName, superCls) \
288  BOOL (*setProperty)(clsName*, int id, DWORD value); \
289  DWORD (*getProperty)(clsName*, int id); \
290  BOOL (*computeSize)(clsName*, HDC hdc, SIZE *size); \
291  BOOL (*canAsRoot)(clsName*); \
292  int (*addNode)(clsName*, mNode *node); \
293  int (*removeNode)(clsName*, mNode *node); \
294  int (*insertNode)(clsName*, mNode *node, mNode *prev, mNode *next, int index);\
295  int (*moveNode)(clsName*, mNode *curNode, int count, mNode *prevNode); \
296  mNode* (*findNode)(mNode *self, DWORD info, int type, BOOL recursion, int startIndex);\
297  mNode* (*findNodeEx)(mNode *self, DWORD info, int type, BOOL recursion, int startIndex, \
298  int (*cb)(mNode *node, DWORD info)); \
299  void (*removeAll)(clsName*); \
300  void (*sendEvent)(clsName*, int eventId); \
301  mNode* (*getNode)(clsName*, int index); \
302  int (*indexOf)(clsName*); \
303  mNode* (*getPrev)(clsName*); \
304  mNode* (*getNext)(clsName*); \
305  BOOL (*isEnabled)(clsName*); \
306  BOOL (*isSelected)(clsName*); \
307  BOOL (*hasChildren)(clsName*); \
308  BOOL (*setText)(clsName*, const char* text); \
309  BOOL (*setImage)(clsName*, const PBITMAP image); \
310  const char* (*getText)(clsName*); \
311  PBITMAP (*getImage)(clsName*); \
312  void (*paint)(clsName*, HDC hdc, const RECT *rect, mObject *owner); \
313  int (*msgHandler)(clsName*, int msg, WPARAM wParam, LPARAM lParam, mObject *owner);
314 
415 struct _mNodeClass
416 {
417  mNodeClassHeader(mNode, mObject)
418 };
419 
420 typedef struct _mNodeEventData
421 {
422  mNode *source;
423  DWORD data;
424 }mNodeEventData;
430 {
436 
442 
448 
454 
460 };
461 
467 {
472 
477 
482 
487 
492 
497 
502 
507 
512 
517 
522 
527 
532 
537 };
538 
545 MGNCS_EXPORT extern mNodeClass g_stmNodeCls;
546 
547 /*============================================*/
548 typedef struct _mGroupNode mGroupNode;
549 typedef struct _mGroupNodeClass mGroupNodeClass;
550 
551 typedef struct _NCS_GROUPNODE_DATA
552 {
553  mNodeDataInfoHeader
554  int id;
555 }NCS_GROUPNODE_DATA;
556 
557 #define mGroupNodeHeader(className) \
558  mNodeHeader(className) \
559  int id;
560 struct _mGroupNode
561 {
562  mGroupNodeHeader(mGroupNode)
563 };
564 
565 #define mGroupNodeClassHeader(clsName, superCls) \
566  mNodeClassHeader(clsName, superCls)
567 struct _mGroupNodeClass
568 {
569  mGroupNodeClassHeader(mGroupNode, mNode)
570 };
571 
578 MGNCS_EXPORT extern mGroupNodeClass g_stmGroupNodeCls;
579 
580 MGNCS_EXPORT mNode* ncsAddGroupNode(mObject *parent, const char* text,
581  PBITMAP image, int height, int style, DWORD addData, int id);
582 
583 
584 #define NCS_CREATE_NODE(_retnode, _clstype, _parent, _text, _image, _height, _style, _add_data)\
585 do{\
586  NCS_NODE_DATA data; \
587  if (!_parent || (!INSTANCEOF(_parent, mNode) && !INSTANCEOF(_parent, mAbstractList))){ \
588  _retnode = NULL; \
589  }\
590  data.text = (char*)_text; \
591  data.image = _image; \
592  data.height = _height; \
593  data.style = _style; \
594  data.addData = _add_data; \
595  data.parent = _parent; \
596  _retnode = NEWEX(_clstype, (DWORD)&data); \
597 }while(0)
598 
599 #define NCS_ADD_NODE(_retnode, _clstype, _parent, text, image, height, style, _add_data)\
600 do {\
601  NCS_CREATE_NODE(_retnode, _clstype, _parent, text, image, height, style, _add_data);\
602  int ret = -1; \
603  if (_retnode && _parent && INSTANCEOF(_parent, mAbstractList)) {\
604  mAbstractList *list = (mAbstractList*)_parent; \
605  if (_c(list)->addNode) \
606  ret = _c(list)->addNode(list, (mNode*)_retnode); \
607  } \
608  else if (_retnode && _parent && INSTANCEOF(_parent, mNode)) { \
609  mNode *list = (mNode *)_parent; \
610  if (_c(list)->addNode) \
611  ret = _c(list)->addNode(list, (mNode*)_retnode); \
612  } \
613  if (ret < 0) { \
614  DELETE(_retnode); \
615  _retnode = NULL; \
616  }\
617 }while(0)
618 
621 #ifdef __cplusplus
622 }
623 #endif /* __cplusplus */
624 
625 #endif /* _MGUI_WIDGET_NODE_H */
626 
mNodeProp
mNodeProp
The properties id of mNode.
Definition: mnode.h:466
mObject
the Object struct
NCSP_NODE_ADDDATA
@ NCSP_NODE_ADDDATA
Definition: mnode.h:486
NCSE_NODE_NODEDELETED
@ NCSE_NODE_NODEDELETED
Definition: mnode.h:459
NCSE_NODE_HEIGHTCHANGED
@ NCSE_NODE_HEIGHTCHANGED
Definition: mnode.h:441
NCS_CB_CMPNODE
int(* NCS_CB_CMPNODE)(mNode *node1, mNode *node2)
The callback of node comparison function.
Definition: mnode.h:126
NCSP_NODE_IMAGE
@ NCSP_NODE_IMAGE
Definition: mnode.h:481
ncsNodeFindType
ncsNodeFindType
The found information type used by findNode.
Definition: mnode.h:266
NCSP_NODE_LASTCHILD
@ NCSP_NODE_LASTCHILD
Definition: mnode.h:511
NCSE_NODE_CONTENTCHANGED
@ NCSE_NODE_CONTENTCHANGED
Definition: mnode.h:435
g_stmGroupNodeCls
MGNCS_EXPORT mGroupNodeClass g_stmGroupNodeCls
The instance of mGroupNodeClass.
NCS_NODE_FTDATA
@ NCS_NODE_FTDATA
Definition: mnode.h:276
mNode
The structure of mNode. It is the basic class of all nodes occur within specific controls....
NCSP_NODE_FIRSTCHILD
@ NCSP_NODE_FIRSTCHILD
Definition: mnode.h:506
NCSE_NODE_NODEADDED
@ NCSE_NODE_NODEADDED
Definition: mnode.h:453
NCSP_NODE_TEXT
@ NCSP_NODE_TEXT
Definition: mnode.h:476
NCSP_NODE_HIDETEXT
@ NCSP_NODE_HIDETEXT
Definition: mnode.h:526
NCS_NODE_FTIMAGE
@ NCS_NODE_FTIMAGE
Definition: mnode.h:281
NCSP_NODE_ENABLED
@ NCSP_NODE_ENABLED
Definition: mnode.h:491
NCSP_NODE_MAX
@ NCSP_NODE_MAX
Definition: mnode.h:536
g_stmNodeCls
MGNCS_EXPORT mNodeClass g_stmNodeCls
The instance of mNodeClass.
NCSP_NODE_CHILDRENCOUNT
@ NCSP_NODE_CHILDRENCOUNT
Definition: mnode.h:516
NCS_NODE_FTSTRING
@ NCS_NODE_FTSTRING
Definition: mnode.h:271
NCSP_NODE_PARENTNODE
@ NCSP_NODE_PARENTNODE
Definition: mnode.h:501
mNodeEvent
mNodeEvent
The event id of mNode.
Definition: mnode.h:429
NCSE_NODE_REFRESH
@ NCSE_NODE_REFRESH
Definition: mnode.h:447
NCSP_NODE_SELECTED
@ NCSP_NODE_SELECTED
Definition: mnode.h:496
NCSP_NODE_HEIGHT
@ NCSP_NODE_HEIGHT
Definition: mnode.h:471
mNodeClass
The virtual function table of mNodeClass.
NCSP_NODE_HIDEIMAGE
@ NCSP_NODE_HIDEIMAGE
Definition: mnode.h:531
NCSP_NODE_LAYOUT
@ NCSP_NODE_LAYOUT
Definition: mnode.h:521