/** * @brief Callback routine of dialog * @param pMsg: pointer to data structure of type WM_MESSAGE * @retval None */ static void _cbDialog(WM_MESSAGE * pMsg) { WM_HWIN hItem; int Id, NCode; TREEVIEW_ITEM_Handle hTreeView; TREEVIEW_ITEM_INFO Info; GUI_PID_STATE State; switch (pMsg->MsgId) { case WM_INIT_DIALOG: pFileList = (FILELIST_FileTypeDef *)k_malloc(sizeof(FILELIST_FileTypeDef)); pFileList->ptr = 0; hPopUp = WM_CreateWindowAsChild(0, 26, LCD_GetXSize(), LCD_GetYSize()-26, pMsg->hWin, WM_CF_SHOW | WM_CF_HASTRANS , _cbPopup, 0); WM_BringToBottom(hPopUp); hItem = pMsg->hWin; FRAMEWIN_AddCloseButton(hItem, FRAMEWIN_BUTTON_RIGHT, 0); WM_CreateWindowAsChild(240, 320, 1, 1, pMsg->hWin, WM_CF_SHOW | WM_CF_HASTRANS, _cbMediaConnection , 0); _RefreshBrowser(pMsg->hWin); break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */ NCode = pMsg->Data.v; /* Notification code */ switch (NCode) { case WM_NOTIFICATION_CHILD_DELETED: k_free(pFileList); if(hFileInfo != 0) { hFileInfo = 0; } break; case WM_NOTIFICATION_CLICKED: /* React only if released */ switch (Id) { case ID_TREEVIEW: hTreeView = TREEVIEW_GetSel(pMsg->hWinSrc); TREEVIEW_ITEM_GetInfo(hTreeView, &Info); if(Info.IsNode == 0) { GUI_TOUCH_GetState(&State); State.x += 20; if(State.x > 175) { State.x = 175; } State.y-= 50; if(State.y > 150) { State.y -= 70; } _FindFullPath(pMsg->hWinSrc, hTreeView, SelectedFileName); /* Create popup menu after touching the display */ _OpenPopup(hPopUp, _aMenuItems, GUI_COUNTOF(_aMenuItems), State.x, State.y); } break; case ID_BUTTON_REFRESH: _RefreshBrowser (pMsg->hWin); break; } break; } break; default: WM_DefaultProc(pMsg); break; } }
/** * @brief Callback routine of popup menu. * @param pMsg: pointer to data structure of type WM_MESSAGE * @retval None */ static void _cbPopup(WM_MESSAGE * pMsg) { K_GET_DIRECT_OPEN_FUNC * pfOpen; MENU_MSG_DATA* pData; TREEVIEW_ITEM_Handle hTreeView; TREEVIEW_ITEM_INFO Info; WM_HWIN hItem; char ext[4]; switch (pMsg->MsgId) { case WM_INIT_DIALOG: break; case WM_MENU: /* Process the menu message */ pData = (MENU_MSG_DATA*)pMsg->Data.p; switch (pData->MsgType) { case MENU_ON_ITEMSELECT: /* Menu item has been selected */ switch (pData->ItemId) { case ID_MENU_OPENFILE: k_GetExtOnly(SelectedFileName, ext); pfOpen = k_ModuleCheckLink(ext); if(pfOpen != NULL) { pfOpen(SelectedFileName); } else { _ShowMessageBox(hExplorerWin, "File Browser", "No external module is linked to\n this extension!", 0); } break; case ID_MENU_DELETE: if (_ShowMessageBox(hExplorerWin, "File Browser", "Are you sure you want to\ndelete selected file?", 1)) { f_unlink (SelectedFileName); _RefreshBrowser(hExplorerWin); } break; case ID_MENU_PROPRIETIES: if(hFileInfo == 0) { hFileInfo = GUI_CreateDialogBox(_aFileInfoDialogCreate, GUI_COUNTOF(_aFileInfoDialogCreate), _cbFileInfoDialog, hExplorerWin, 5, 75); } break; case ID_MENU_EXIT: break; } hItem = WM_GetDialogItem(hExplorerWin, ID_TREEVIEW); hTreeView = TREEVIEW_GetSel(hItem); TREEVIEW_ITEM_GetInfo(hTreeView, &Info); if(Info.IsNode == 0) { /*Force Deselect item */ hTreeView = TREEVIEW_GetItem(hItem, hTreeView, TREEVIEW_GET_PARENT); TREEVIEW_SetSel(hItem, hTreeView); } } break; default: WM_DefaultProc(pMsg); break; } }
void _cbHBKWIN(WM_MESSAGE * pMsg) { int NCode; TREEVIEW_ITEM_Handle Sel; int Id; char pBuffer[128]; switch (pMsg->MsgId) { case WM_NOTIFY_PARENT: NCode = pMsg->Data.v; Id = WM_GetId(pMsg->hWinSrc); if (Id == GUI_ID_TREEVIEW0) { switch (NCode) { case WM_NOTIFICATION_CLICKED: //printf("switching focus to treeview\n"); WM_SetFocus(pMsg->hWinSrc); break; case WM_NOTIFICATION_RELEASED: Sel = TREEVIEW_GetSel(pMsg->hWinSrc); TREEVIEW_ITEM_GetText(Sel, (U8*)pBuffer, 128); printf("Selecting \"%s\"\n", pBuffer); myfd_t * selfd = (myfd_t *) TREEVIEW_ITEM_GetUserData(Sel); printf("Path to selection : %s\n", selfd->path); if (selfd->type == 0) { printf("is a directory\n"); } else { printf("is a file\n"); char * file_str = file2string(selfd->path); db = string2database(file_str); if (db) { run_db(); } else { printf("Error loading database\n"); } } break; case WM_NOTIFICATION_SEL_CHANGED: printf("Selection changed\n"); break; } } else if (Id == GUI_ID_MULTIEDIT0) { switch (NCode) { case WM_NOTIFICATION_CLICKED: //printf("switching focus to terminal\n"); WM_SetFocus(pMsg->hWinSrc); break; case WM_NOTIFICATION_VALUE_CHANGED: //printf("WM_NOTIFICATION_VALUE_CHANGED\n"); break; } } else if (Id == GUI_ID_USER+0) { switch (NCode) { case WM_NOTIFICATION_CLICKED: WM_SetFocus(pMsg->hWinSrc); break; } } break; case WM_PAINT: GUI_SetColor(GUI_WHITE); GUI_Clear(); break; default: WM_DefaultProc(pMsg); } }
/********************************************************************* * * _TREEVIEW_OwnerDraw */ static int _TREEVIEW_OwnerDraw(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo) { TREEVIEW_ITEM_DRAW_INFO * pDrawInfo; TREEVIEW_ITEM_INFO ItemInfo; TREEVIEW_ITEM_Handle hItem; int i; GUI_COLOR * pColor; pDrawInfo = (TREEVIEW_ITEM_DRAW_INFO *)pDrawItemInfo->p; switch (pDrawItemInfo->Cmd) { case WIDGET_ITEM_DRAW_BACKGROUND: hItem = TREEVIEW_GetSel(pDrawItemInfo->hWin); TREEVIEW_OwnerDraw(pDrawItemInfo); if (hItem == pDrawInfo->hItem) { GUI_DrawGradientRoundedV(pDrawInfo->rText.x0 - 25, pDrawItemInfo->y0, pDrawInfo->rText.x1 + 10, pDrawItemInfo->y1, 3, GUI_RED, GUI_DARKRED); GUI_SetColor(GUI_RED); GUI_DrawRoundedFrame(pDrawInfo->rText.x0 - 25, pDrawItemInfo->y0, pDrawInfo->rText.x1 + 10, pDrawItemInfo->y1, 3, 2); } break; case WIDGET_ITEM_DRAW_BITMAP: // // Invert colors of bitmap in case of drawing a selected item // hItem = TREEVIEW_GetSel(pDrawItemInfo->hWin); TREEVIEW_ITEM_GetInfo(pDrawInfo->hItem, &ItemInfo); if (ItemInfo.Level >= 1) { if ((hItem == pDrawInfo->hItem) && ((pDrawItemInfo->ItemIndex == TREEVIEW_BI_CLOSED) || (pDrawItemInfo->ItemIndex == TREEVIEW_BI_OPEN) || (pDrawItemInfo->ItemIndex == TREEVIEW_BI_LEAF))) { pColor = (GUI_COLOR *)pDrawInfo->pBmOCL->pPal->pPalEntries; _SwapColors(pColor); TREEVIEW_OwnerDraw(pDrawItemInfo); _SwapColors(pColor); } else { TREEVIEW_OwnerDraw(pDrawItemInfo); } } break; case WIDGET_ITEM_DRAW_TEXT: // // Make sure text is transparent // GUI_SetTextMode(GUI_TM_TRANS); TREEVIEW_OwnerDraw(pDrawItemInfo); break; case WIDGET_ITEM_DRAW_TICKS: TREEVIEW_ITEM_GetInfo(pDrawInfo->hItem, &ItemInfo); // // Draw lines // for (i = 0; i < pDrawInfo->NumLines; i++) { if (ItemInfo.IsNode) { // // Extend horizontal line in case of a node // if (pDrawInfo->ay0[i] == pDrawInfo->ay1[i]) { pDrawInfo->ax1[i] += 10; } } _DrawLine(pDrawInfo->ax0[i], pDrawInfo->ay0[i], pDrawInfo->ax1[i], pDrawInfo->ay1[i]); } // // Draw connectors // for (i = 0; i < pDrawInfo->NumConnectors; i++) { _DrawLine(pDrawInfo->axc[i], pDrawItemInfo->y0, pDrawInfo->axc[i], pDrawItemInfo->y1); } break; default: return TREEVIEW_OwnerDraw(pDrawItemInfo); } return 0; }
/********************************************************************* * * _cbPage1 * * 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: /* Detach */ 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: /* Attach */ 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_ABOVE); } 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); } }
/********************************************************************* * * _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; } }