⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 widget_treeviewtryit.c

📁 ucgu最新版本 4.14
💻 C
📖 第 1 页 / 共 2 页
字号:
* 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 + -