/** * @brief Explores disk. * @param hTree: tree view handle * @retval None */ static void ExploreDisks(WM_HWIN hTree) { TREEVIEW_ITEM_Handle hItem = 0; TREEVIEW_ITEM_Handle hUSBItem = 0; TREEVIEW_ITEM_Handle Node = 0; uint32_t Position = 0; Node = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, 0, 0, "Local disks"); if(k_StorageGetStatus(MSD_DISK_UNIT) == 1) { hItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, Node, TREEVIEW_INSERT_FIRST_CHILD, "microSD"); } if(k_StorageGetStatus(USB_DISK_UNIT) == 1) { Position = hItem ? TREEVIEW_INSERT_BELOW : TREEVIEW_INSERT_FIRST_CHILD; hUSBItem = hItem ? hItem : Node; hUSBItem = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, hUSBItem, Position, "USB Disk"); } if(k_StorageGetStatus(MSD_DISK_UNIT) == 1) { ShowNodeContent(hTree, hItem, mSDDISK_Drive, pFileList); } if(k_StorageGetStatus(USB_DISK_UNIT) == 1) { ShowNodeContent(hTree, hUSBItem, USBDISK_Drive, pFileList); } TREEVIEW_SetAutoScrollH(hTree, 1); TREEVIEW_SetAutoScrollV(hTree, 1); TREEVIEW_SetIndent(hTree, 22); hItem = TREEVIEW_GetItem(hTree, 0, TREEVIEW_GET_FIRST); TREEVIEW_ITEM_Expand(hItem); hItem = TREEVIEW_GetItem(hTree, hItem, TREEVIEW_GET_FIRST_CHILD); if(hItem != 0) { TREEVIEW_ITEM_Expand(hItem); hItem = TREEVIEW_GetItem(hTree, hItem, TREEVIEW_GET_NEXT_SIBLING); if(hItem != 0) { TREEVIEW_ITEM_Expand(hItem); } } WM_SetFocus(hTree); }
/********************************************************************* * * MainTask */ void MainTask(void) { WM_HWIN hTree; TREEVIEW_ITEM_Handle hNode; int xSize, ySize; char acBuffer[(TREEVIEW_DEPTH << 1) + 1]; // // Initialize emWin // WM_SetCreateFlags(WM_CF_MEMDEV); GUI_Init(); xSize = LCD_GetXSize(); ySize = LCD_GetYSize(); // // Set defaults for background and widgets // WM_SetCallback(WM_HBKWIN, _cbBk); SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX); SCROLLBAR_SetDefaultWidth(20); SCROLLBAR_SetThumbSizeMin(25); // // // GUI_SetFont(GUI_FONT_24_ASCII); GUI_DispStringHCenterAt("Customized TREEVIEW widget", 160, 5); // // Create TREEVIEW // hTree = TREEVIEW_CreateEx(0, 35, xSize, ySize - 35, WM_HBKWIN, WM_CF_SHOW | WM_CF_HASTRANS, 0, GUI_ID_TREEVIEW0); TREEVIEW_SetAutoScrollV(hTree, 1); TREEVIEW_SetFont(hTree, GUI_FONT_24_ASCII); TREEVIEW_SetIndent(hTree, 30); TREEVIEW_SetTextIndent(hTree, 20); TREEVIEW_SetImage(hTree, TREEVIEW_BI_PLUS, &bmPlus); TREEVIEW_SetImage(hTree, TREEVIEW_BI_MINUS, &bmMinus); TREEVIEW_SetImage(hTree, TREEVIEW_BI_CLOSED, &bmClosed); TREEVIEW_SetImage(hTree, TREEVIEW_BI_OPEN, &bmOpen); TREEVIEW_SetImage(hTree, TREEVIEW_BI_LEAF, &bmLeaf); TREEVIEW_SetBitmapOffset(hTree, TREEVIEW_BI_PM, -21, -6); TREEVIEW_SetOwnerDraw(hTree, _TREEVIEW_OwnerDraw); TREEVIEW_SetBkColor(hTree, TREEVIEW_CI_SEL, USER_COLOR); TREEVIEW_SetBkColor(hTree, TREEVIEW_CI_UNSEL, GUI_BLACK); TREEVIEW_SetTextColor(hTree, TREEVIEW_CI_SEL, GUI_WHITE); TREEVIEW_SetTextColor(hTree, TREEVIEW_CI_UNSEL, GUI_WHITE); WIDGET_SetEffect(hTree, &WIDGET_Effect_None); // // Fill TREEVIEW // hNode = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, 0, 0, "Tree"); _FillNode(hTree, hNode, NUM_CHILD_NODES, NUM_CHILD_ITEMS, TREEVIEW_DEPTH, TREEVIEW_DEPTH, acBuffer, acBuffer); TREEVIEW_ITEM_Expand(hNode); WM_SetFocus(hTree); while (1) { GUI_Delay(100); } }
/********************************************************************* * * _InitTreeview * * Purpose: * Adds some data to the treeview widget */ static int _InitTreeview(WM_HWIN hTree) { TREEVIEW_ITEM_Handle hNode; int r; hNode = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, 0, 0, "Tree"); r = _FillNode(hTree, hNode, NUM_CHILD_NODES, NUM_CHILD_ITEMS, TREEVIEW_DEPTH, TREEVIEW_DEPTH, NULL); if (r) { // // Error message // WM_DeleteWindow(hTree); GUI_MessageBox("Error", "Not enough memory available!", 0); return 1; // Error } TREEVIEW_SetAutoScrollH(hTree, 1); TREEVIEW_SetAutoScrollV(hTree, 1); TREEVIEW_ITEM_Expand(hNode); return 0; }
/********************************************************************* * * _cbDialog */ static void _cbDialogBrowser(WM_MESSAGE * pMsg) { TREEVIEW_ITEM_Handle hNode; //结点句柄 TREEVIEW_ITEM_INFO ItemInfo; WM_HWIN hItem; int NCode; int Id; // USER START (Optionally insert additional variables) SCROLLBAR_Handle hScrollbar; // USER END switch (pMsg->MsgId) { case WM_DELETE: ltk_printf("Browserapp delete\n"); record_file=0; _CreateFrame(&_cbIndex); break; case WM_INIT_DIALOG: // // Initialization of 'Browser' // hItem = pMsg->hWin; FRAMEWIN_SetTextColor(hItem,GUI_WHITE); FRAMEWIN_SetFont(hItem, GUI_FONT_20B_ASCII); FRAMEWIN_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER); FRAMEWIN_AddCloseButton(hItem,FRAMEWIN_BUTTON_RIGHT,0); // FRAMEWIN_AddMaxButton(hItem, FRAMEWIN_BUTTON_RIGHT, 1); // FRAMEWIN_AddMinButton(hItem, FRAMEWIN_BUTTON_RIGHT, 2); FRAMEWIN_SetTitleHeight(hItem, 25); // // Initialization of 'FileTree' // GUI_UC_SetEncodeNone(); hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TREEVIEW0); TREEVIEW_SetFont(hItem,&GUI_FontHZ16); // TREEVIEW_SetAutoScrollH(hItem,1); // TREEVIEW_SetAutoScrollV(hItem,1); hScrollbar = SCROLLBAR_CreateAttached(hItem,SCROLLBAR_CF_VERTICAL); //创建窗口的子控件 SCROLLBAR_SetWidth(hScrollbar,20); //设置滚动条宽度为20 TREEVIEW_SetSelMode(hItem, TREEVIEW_SELMODE_ROW); //使用自动滚动条 hNode = TREEVIEW_InsertItem(hItem, TREEVIEW_ITEM_TYPE_NODE, 0, 0, "SDCard[0:]"); // USER START (Optionally insert additional code for further widget initialization) if( SD_OK != c_sdReader_init()) ltk_printf("sd card init failed\r\n"); Fill_FileList("0:",record_file,hItem,hNode,NULL); TREEVIEW_ITEM_Expand(hNode); // USER END break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch(Id) { case GUI_ID_TREEVIEW0: // Notifications sent by 'FileTree' switch(NCode) { case WM_NOTIFICATION_CLICKED: break; case WM_NOTIFICATION_RELEASED: // USER START (Optionally insert code for reacting on notification message) //printf("\n release\n"); /* 查看选中了哪个项目 */ hNode = TREEVIEW_GetSel(pMsg->hWinSrc); /* 获取该项目的信息 */ TREEVIEW_ITEM_GetInfo(hNode,&ItemInfo); if(ItemInfo.IsNode == 0) //点击的是目录树的叶子(即文件) { //printf("\r\nleaf num =%ld",hNode); OpenFileProcess(hNode,record_file); } // else //结点 // { // printf("\r\nnode num =%ld",hNode); // } // USER END break; case WM_NOTIFICATION_MOVED_OUT: // USER START (Optionally insert code for reacting on notification message) // USER END break; case WM_NOTIFICATION_SEL_CHANGED: // USER START (Optionally insert code for reacting on notification message) // USER END break; // USER START (Optionally insert additional code for further notification handling) // USER END } break; // USER START (Optionally insert additional code for further Ids) // USER END } break; // USER START (Optionally insert additional message handling) // USER END default: WM_DefaultProc(pMsg); break; } }