📄 widget_treeviewtryit.c
字号:
* Purpose:
* Callback routine for the second page of the multipage widget
*/
static void _cbPage1(WM_MESSAGE * pMsg) {
TREEVIEW_ITEM_Handle hTVI0, hTVI1;
TREEVIEW_ITEM_INFO ItemInfo;
WM_HWIN hItem, hDlg, hTree0, hTree1;
int i, NCode, Id;
hDlg = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_NOTIFY_PARENT:
hTree0= WM_GetDialogItem(WM_GetFirstChild(WM_HBKWIN), GUI_ID_TREEVIEW0);
hTree1= WM_GetDialogItem(WM_GetFirstChild(WM_HBKWIN), GUI_ID_TREEVIEW1);
Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */
NCode = pMsg->Data.v; /* Notification code */
hItem = WM_GetDialogItem(hDlg, Id);
switch (Id) {
case GUI_ID_BUTTON0: /* Delete */
switch (NCode) {
case WM_NOTIFICATION_RELEASED:
hTVI0 = TREEVIEW_GetSel(hTree0);
if (hTVI0) {
TREEVIEW_ITEM_Delete(hTVI0);
} else {
GUI_MessageBox("No item selected!", "Info", GUI_MESSAGEBOX_CF_MODAL);
WM_SetFocus(hTree0);
}
break;
}
break;
case GUI_ID_BUTTON1: /* Unlink */
switch (NCode) {
case WM_NOTIFICATION_RELEASED:
hTVI1 = TREEVIEW_GetItem(hTree1, 0, TREEVIEW_GET_FIRST);
if (hTVI1) {
TREEVIEW_ITEM_Delete(hTVI1);
}
hTVI0 = TREEVIEW_GetSel(hTree0);
TREEVIEW_ITEM_Detach(hTVI0);
TREEVIEW_AttachItem(hTree1, hTVI0, 0, TREEVIEW_GET_FIRST);
break;
}
break;
case GUI_ID_BUTTON2: /* Link */
switch (NCode) {
case WM_NOTIFICATION_RELEASED:
hTVI1 = TREEVIEW_GetItem(hTree1, 0, TREEVIEW_GET_FIRST);
if (hTVI1) {
hTVI0 = TREEVIEW_GetSel(hTree0);
TREEVIEW_ITEM_Detach(hTVI1);
if (hTVI0) {
TREEVIEW_AttachItem(hTree0, hTVI1, hTVI0, TREEVIEW_INSERT_BELOW);
} else {
TREEVIEW_AttachItem(hTree0, hTVI1, 0, 0);
}
} else {
GUI_MessageBox("No item in buffer!", "Info", GUI_MESSAGEBOX_CF_MODAL);
WM_SetFocus(hTree0);
}
break;
}
break;
case GUI_ID_BUTTON3: /* Move up */
switch (NCode) {
case WM_NOTIFICATION_RELEASED:
hTVI0 = TREEVIEW_GetSel(hTree0);
if (hTVI0) {
hTVI1 = TREEVIEW_GetItem(hTree0, hTVI0, TREEVIEW_GET_PREV_SIBLING);
if (hTVI1) {
TREEVIEW_ITEM_Detach(hTVI0);
TREEVIEW_AttachItem(hTree0, hTVI0, hTVI1, TREEVIEW_INSERT_ABOVE);
TREEVIEW_SetSel(hTree0, hTVI0);
} else {
GUI_MessageBox("Item is already on top!", "Info", GUI_MESSAGEBOX_CF_MODAL);
WM_SetFocus(hTree0);
}
}
break;
}
break;
case GUI_ID_BUTTON4: /* Move down */
switch (NCode) {
case WM_NOTIFICATION_RELEASED:
hTVI0 = TREEVIEW_GetSel(hTree0);
if (hTVI0) {
hTVI1 = TREEVIEW_GetItem(hTree0, hTVI0, TREEVIEW_GET_NEXT_SIBLING);
if (hTVI1) {
TREEVIEW_ITEM_Detach(hTVI0);
TREEVIEW_AttachItem(hTree0, hTVI0, hTVI1, TREEVIEW_INSERT_BELOW);
TREEVIEW_SetSel(hTree0, hTVI0);
} else {
GUI_MessageBox("Item is already on bottom!", "Info", GUI_MESSAGEBOX_CF_MODAL);
WM_SetFocus(hTree0);
}
}
break;
}
break;
case GUI_ID_BUTTON5: /* New node */
switch (NCode) {
case WM_NOTIFICATION_RELEASED:
hTVI0 = TREEVIEW_GetSel(hTree0);
if (hTVI0) {
TREEVIEW_ITEM_GetInfo(hTVI0, &ItemInfo);
if (ItemInfo.IsNode) {
hTVI0 = TREEVIEW_InsertItem(hTree0, TREEVIEW_ITEM_TYPE_NODE, hTVI0, TREEVIEW_INSERT_BELOW, "New node");
} else {
hTVI0 = TREEVIEW_InsertItem(hTree0, TREEVIEW_ITEM_TYPE_NODE, hTVI0, TREEVIEW_INSERT_ABOVE, "New node");
}
} else {
hTVI0 = TREEVIEW_InsertItem(hTree0, TREEVIEW_ITEM_TYPE_NODE, 0, 0, "New node");
}
hTVI0 = TREEVIEW_InsertItem(hTree0, TREEVIEW_ITEM_TYPE_LEAF, hTVI0, TREEVIEW_INSERT_FIRST_CHILD, "New.A");
hTVI0 = TREEVIEW_InsertItem(hTree0, TREEVIEW_ITEM_TYPE_LEAF, hTVI0, TREEVIEW_INSERT_BELOW, "New.B");
hTVI0 = TREEVIEW_InsertItem(hTree0, TREEVIEW_ITEM_TYPE_LEAF, hTVI0, TREEVIEW_INSERT_BELOW, "New.C");
hTVI0 = TREEVIEW_InsertItem(hTree0, TREEVIEW_ITEM_TYPE_LEAF, hTVI0, TREEVIEW_INSERT_BELOW, "New.D");
break;
}
break;
case GUI_ID_BUTTON6: /* New leaf */
switch (NCode) {
case WM_NOTIFICATION_RELEASED:
hTVI0 = TREEVIEW_GetSel(hTree0);
if (hTVI0) {
TREEVIEW_ITEM_GetInfo(hTVI0, &ItemInfo);
hTVI0 = TREEVIEW_InsertItem(hTree0, TREEVIEW_ITEM_TYPE_LEAF, hTVI0, TREEVIEW_INSERT_BELOW, "New leaf");
} else {
hTVI0 = TREEVIEW_InsertItem(hTree0, TREEVIEW_ITEM_TYPE_LEAF, 0, 0, "New leaf");
}
break;
}
break;
case GUI_ID_BUTTON7: /* Leaf bitmap */
switch (NCode) {
case WM_NOTIFICATION_RELEASED:
hTVI0 = TREEVIEW_GetSel(hTree0);
if (hTVI0) {
TREEVIEW_ITEM_GetInfo(hTVI0, &ItemInfo);
if (ItemInfo.IsNode == 0) {
TREEVIEW_ITEM_SetImage(hTVI0, TREEVIEW_BI_LEAF, &_bmSmilie);
} else {
GUI_MessageBox("Item is not a leaf!", "Info", GUI_MESSAGEBOX_CF_MODAL);
WM_SetFocus(hTree0);
}
} else {
GUI_MessageBox("No item selected!", "Info", GUI_MESSAGEBOX_CF_MODAL);
WM_SetFocus(hTree0);
}
break;
}
break;
case GUI_ID_BUTTON8: /* Open bitmap */
switch (NCode) {
case WM_NOTIFICATION_RELEASED:
hTVI0 = TREEVIEW_GetSel(hTree0);
if (hTVI0) {
TREEVIEW_ITEM_GetInfo(hTVI0, &ItemInfo);
if (ItemInfo.IsNode) {
TREEVIEW_ITEM_SetImage(hTVI0, TREEVIEW_BI_OPEN, &_bmBookOpen);
} else {
GUI_MessageBox("Item is not a node!", "Info", GUI_MESSAGEBOX_CF_MODAL);
WM_SetFocus(hTree0);
}
} else {
GUI_MessageBox("No item selected!", "Info", GUI_MESSAGEBOX_CF_MODAL);
WM_SetFocus(hTree0);
}
break;
}
break;
case GUI_ID_BUTTON9: /* Closed bitmap */
switch (NCode) {
case WM_NOTIFICATION_RELEASED:
hTVI0 = TREEVIEW_GetSel(hTree0);
if (hTVI0) {
TREEVIEW_ITEM_GetInfo(hTVI0, &ItemInfo);
if (ItemInfo.IsNode) {
TREEVIEW_ITEM_SetImage(hTVI0, TREEVIEW_BI_CLOSED, &_bmBookClosed);
} else {
GUI_MessageBox("Item is not a node!", "Info", GUI_MESSAGEBOX_CF_MODAL);
WM_SetFocus(hTree0);
}
} else {
GUI_MessageBox("No item selected!", "Info", GUI_MESSAGEBOX_CF_MODAL);
WM_SetFocus(hTree0);
}
break;
}
break;
}
break;
case WM_INIT_DIALOG: /* Initialize the items of the dialog */
for (i = GUI_ID_BUTTON0; i <= GUI_ID_BUTTON9; i++) {
hItem = WM_GetDialogItem(hDlg, i);
if (hItem) {
BUTTON_SetFocussable(hItem, 0); /* So the focus remains on the treeview after pressing the buttons */
}
}
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* _InitMultipage
*
* Purpose:
* Creates the pages of the multipage widget
*/
static void _InitMultipage(WM_HWIN hWin) {
WM_HWIN hPage0, hPage1;
hPage0 = GUI_CreateDialogBox(_aPage0, GUI_COUNTOF(_aPage0), &_cbPage0, WM_UNATTACHED, 0, 0);
MULTIPAGE_AddPage(hWin, hPage0, "Properties");
hPage1 = GUI_CreateDialogBox(_aPage1, GUI_COUNTOF(_aPage1), &_cbPage1, WM_UNATTACHED, 0, 0);
MULTIPAGE_AddPage(hWin, hPage1, "Data");
}
/*********************************************************************
*
* _InitTreeview
*
* Purpose:
* Adds some data to the treeview widget
*/
static void _InitTreeview(WM_HWIN hWin) {
TREEVIEW_ITEM_Handle hItem, hNode0, hNode1, hNode2, hNode3;
hNode0 = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_NODE, 0 , 0 , "1");
hNode1 = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_NODE, hNode0, TREEVIEW_INSERT_FIRST_CHILD, "1.1");
hNode2 = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_NODE, hNode1, TREEVIEW_INSERT_FIRST_CHILD, "1.1.1");
hNode3 = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_NODE, hNode2, TREEVIEW_INSERT_FIRST_CHILD, "1.1.1.1");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hNode3, TREEVIEW_INSERT_FIRST_CHILD, "1.1.1.1.1");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.1.1.1.2");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.1.1.1.3");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.1.1.1.4");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hNode3, TREEVIEW_INSERT_BELOW , "1.1.1.2");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.1.1.3");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.1.1.4");
hNode1 = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_NODE, hNode1, TREEVIEW_INSERT_BELOW , "1.2");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hNode1, TREEVIEW_INSERT_FIRST_CHILD, "1.2.1");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.2.2");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.2.3");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.2.4");
hNode1 = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_NODE, hNode1, TREEVIEW_INSERT_BELOW , "1.3");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hNode1, TREEVIEW_INSERT_FIRST_CHILD, "1.3.1");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.3.2");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.3.3");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.3.4");
hNode1 = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_NODE, hNode1, TREEVIEW_INSERT_BELOW , "1.4");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hNode1, TREEVIEW_INSERT_FIRST_CHILD, "1.4.1");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.4.2");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.4.3");
hItem = TREEVIEW_InsertItem(hWin, TREEVIEW_ITEM_TYPE_LEAF, hItem , TREEVIEW_INSERT_BELOW , "1.4.4");
TREEVIEW_SetAutoScrollH(hWin, 1);
TREEVIEW_SetAutoScrollV(hWin, 1);
TREEVIEW_ITEM_Expand(TREEVIEW_GetItem(hWin, 0, TREEVIEW_GET_FIRST));
WM_SetFocus(hWin);
}
/*********************************************************************
*
* _cbMain
*
* Purpose:
* Callback routine of main window
*/
static void _cbMain(WM_MESSAGE * pMsg) {
WM_HWIN hItem, hDlg;
hDlg = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
hItem = WM_GetDialogItem(hDlg, GUI_ID_TEXT0);
TEXT_SetFont(hItem, &GUI_Font20B_ASCII);
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER);
hItem = WM_GetDialogItem(hDlg, GUI_ID_MULTIPAGE0);
_InitMultipage(hItem);
hItem = WM_GetDialogItem(hDlg, GUI_ID_TREEVIEW0);
_InitTreeview(hItem);
hItem = WM_GetDialogItem(hDlg, GUI_ID_TREEVIEW1);
WM_DisableWindow(hItem);
break;
case WM_PAINT:
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* MainTask
*/
void MainTask(void);
void MainTask(void) {
GUI_Init();
#if GUI_SUPPORT_CURSOR
GUI_CURSOR_Show();
#endif
#if GUI_SUPPORT_MEMDEV
WM_SetCreateFlags(WM_CF_MEMDEV);
#endif
GUI_CreateDialogBox(_aMain, GUI_COUNTOF(_aMain), &_cbMain, 0, 0, 0);
while (1) {
GUI_Delay(100);
}
}
/*************************** End of file ****************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -