/********************************************************************* * * _cbDialog * * Function description * Callback routine of dialog */ static void _cbDialog(WM_MESSAGE * pMsg) { static WM_HWIN hCellEdit = 0; CELL_EDIT_ORG CellEditOrg; WM_KEY_INFO * pKeyInfo; GUI_RECT ItemRect; WM_HWIN hDlg; WM_HWIN hItem; char acItemText[LEN_ITEM_TEXT]; int CheckState; int NCode; int Id; int i; hDlg = pMsg->hWin; switch (pMsg->MsgId) { case WM_INIT_DIALOG: // // Set listview properties // hItem = WM_GetDialogItem(hDlg, GUI_ID_LISTVIEW0); WM_SetCallback(hItem, _cbList); HEADER_SetDragLimit(LISTVIEW_GetHeader(hItem), 1); LISTVIEW_SetAutoScrollV(hItem, 1); LISTVIEW_SetGridVis(hItem, 1); LISTVIEW_SetRBorder(hItem, 5); LISTVIEW_SetLBorder(hItem, 5); for (i = 0; i < 3; i++) { LISTVIEW_AddColumn(hItem, _aColProps[i].Width, _aColProps[i].pText, _aColProps[i].Align); LISTVIEW_SetCompareFunc(hItem, i, _aColProps[i].fpCompare); } LISTVIEW_EnableSort(hItem); for (i = 0; i < 6; i++) { if (_AddRow(hItem, 1)) { break; } } // // Set radio button text // hItem = WM_GetDialogItem(hDlg, GUI_ID_RADIO0); RADIO_SetText(hItem, "Sorted", 0); RADIO_SetText(hItem, "Unsorted", 1); // // Init checkbox text // hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK0); CHECKBOX_SetTextAlign(hItem, GUI_TA_LEFT); CHECKBOX_SetText(hItem, "Cell select"); break; case WM_KEY: hItem = WM_GetDialogItem(hDlg, GUI_ID_LISTVIEW0); if (pMsg->hWinSrc == hItem) { pKeyInfo = (WM_KEY_INFO *)pMsg->Data.p; if (pKeyInfo->PressedCnt == 0) { if (pKeyInfo->Key == GUI_KEY_ENTER) { if (hCellEdit == 0) { CellEditOrg.Row = LISTVIEW_GetSel(hItem); CellEditOrg.Col = LISTVIEW_GetSelCol(hItem); LISTVIEW_GetItemRect(hItem, CellEditOrg.Col, CellEditOrg.Row, &ItemRect); LISTVIEW_GetItemTextSorted(hItem, CellEditOrg.Col, CellEditOrg.Row, acItemText, LEN_ITEM_TEXT); hCellEdit = EDIT_CreateUser(ItemRect.x0, ItemRect.y0, ItemRect.x1 - ItemRect.x0 + 2, ItemRect.y1 - ItemRect.y0 + 1, hItem, WM_CF_SHOW, 0, 0, LEN_ITEM_TEXT, sizeof(CELL_EDIT_ORG)); EDIT_SetUserData(hCellEdit, &CellEditOrg, sizeof(CELL_EDIT_ORG)); WIDGET_SetEffect(hCellEdit, &WIDGET_Effect_Simple); WM_SetCallback(hCellEdit, _cbCellEdit); WM_SetFocus(hCellEdit); EDIT_SetText(hCellEdit, acItemText); } } } } break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch (NCode) { case WM_NOTIFICATION_CHILD_DELETED: if (pMsg->hWinSrc == hCellEdit) { hCellEdit = 0; } break; case WM_NOTIFICATION_VALUE_CHANGED: switch (Id) { case GUI_ID_RADIO0: // // Enable/Disable sorting // hItem = WM_GetDialogItem(hDlg, GUI_ID_LISTVIEW0); switch (RADIO_GetValue(WM_GetDialogItem(hDlg, GUI_ID_RADIO0))) { case 0: LISTVIEW_EnableSort(hItem); break; default: LISTVIEW_DisableSort(hItem); break; } break; } break; case WM_NOTIFICATION_RELEASED: switch (Id) { case GUI_ID_BUTTON0: // // Add new row // hItem = WM_GetDialogItem(hDlg, GUI_ID_LISTVIEW0); _AddRow(hItem, 0); break; case GUI_ID_BUTTON1: // // Insert new row // hItem = WM_GetDialogItem(hDlg, GUI_ID_LISTVIEW0); i = LISTVIEW_GetSelUnsorted(hItem); _AddRow(hItem, 1); if (i >= 0) { LISTVIEW_SetSelUnsorted(hItem, i + 1); } break; case GUI_ID_BUTTON2: // // Delete row // hItem = WM_GetDialogItem(hDlg, GUI_ID_LISTVIEW0); i = LISTVIEW_GetSelUnsorted(hItem); LISTVIEW_DeleteRow(hItem, (i >= 0) ? i : 0); break; case GUI_ID_OK: // // End dialog // GUI_EndDialog(hDlg, 0); break; case GUI_ID_CHECK0: // // Enable/Disable cell selection // hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK0); CheckState = CHECKBOX_GetState(hItem); hItem = WM_GetDialogItem(hDlg, GUI_ID_LISTVIEW0); if (CheckState) { LISTVIEW_EnableCellSelect(hItem, 1); } else { LISTVIEW_EnableCellSelect(hItem, 0); } break; } break; } break; default: WM_DefaultProc(pMsg); } }
/***************************** Initializacija paneli comunikaciji *****************************/ void Modbus_panel_show(void) { if (Modbus_FrameWin == WM_UNATTACHED) { //Stvorjujemo FrameWin Modbus_FrameWin = FRAMEWIN_CreateEx(X0, Y0, X_SIZE, Y_SIZE, 0, WM_CF_HIDE, 0, ID_MODBUS_FRAMEWIN, Modbus_panel_title.ptitle[sel_language], _cbProtection_FrameWin); FRAMEWIN_SetFont(Modbus_FrameWin, &GUI_FontArialBold14_8_Unicode); FRAMEWIN_SetTextAlign(Modbus_FrameWin, GUI_TA_HCENTER); FRAMEWIN_SetBarColor(Modbus_FrameWin, 1, GUI_GREEN); FRAMEWIN_SetBarColor(Modbus_FrameWin, 0, GUI_LIGHTGRAY); FRAMEWIN_SetTextColor(Modbus_FrameWin, GUI_BLUE); #define COL_1_X 5 #define ROW_1_Y 10 #define HIGHT_Y 20 #define SHIFT_Y (ROW_1_Y + HIGHT_Y) #define WIDTH_X_T 165 #define WIDTH_X_V 60 #define SHIFT_X1 (WIDTH_X_T + 10) #define SHIFT_X2 (SHIFT_X1 + WIDTH_X_V + 10) ScrollBar_Modbus = SCROLLBAR_CreateAttached(WM_GetClientWindow(Modbus_FrameWin), SCROLLBAR_CF_VERTICAL); SCROLLBAR_SetNumItems(ScrollBar_Modbus, MAX_NUMBER_ITEMS_MODBUS*SHIFT_Y); SCROLLBAR_SetPageSize(ScrollBar_Modbus, 6*SHIFT_Y); //Address Modbus_t[0] = TEXT_CreateEx(COL_1_X, ROW_1_Y + 0*SHIFT_Y, WIDTH_X_T, HIGHT_Y, WM_GetClientWindow(Modbus_FrameWin), WM_CF_SHOW, TEXT_CF_LEFT | TEXT_CF_VCENTER, ID_MODBUS_ADDRESS_TITLE, Modbus_title[0].ptitle[sel_language]); TEXT_SetFont(Modbus_t[0], &GUI_FontArialStandard14_8_Unicode); Modbus_v[0] = EDIT_CreateUser(COL_1_X + SHIFT_X1, ROW_1_Y + 0*SHIFT_Y, WIDTH_X_V, HIGHT_Y, WM_GetClientWindow(Modbus_FrameWin), WM_CF_SHOW, 0, ID_MODBUS_ADDRESS_VALUE, 3, sizeof(__info_data)); EDIT_SetFont(Modbus_v[0], &GUI_FontArialStandard14_8_Unicode); __info_data info_data; int shift = 0, max = KOEF_ADDRESS_MAX, min = 0; info_data.extra_param = 0; info_data.shift = shift; float _shift = 0.0f; for (int rozrjad = 0; rozrjad < shift; rozrjad++) { _shift /= 10.0f; _shift += 0.9f; } // int max_tmp = max; // float _max = 10; // while ( abs(max_tmp /= 10) >= 1) _max *= 10.0f; // if (max > 0) // { // _max = _max - 1 + _shift; // } // else if (max < 0) // { // _max = -(_max / 10); // } // else _max = 0; // info_data.max = _max; float _max = 255; //maksymalne odnobajtne chyslo, bo adresu ob'javleno jak typ char info_data.max = _max; int min_tmp = min; float _min = 10; while ( abs(min_tmp /= 10) >= 1) _min *= 10.0f; if (min > 0) { _min = (_min / 10); } else if (min < 0) { _min = -(_min - 1 + _shift); } else _min = 0; info_data.min = _min; EDIT_SetUserData(Modbus_v[0], &info_data, sizeof(__info_data)); EDIT_SetFloatMode(Modbus_v[0], 0, _min, _max, shift, GUI_EDIT_SUPPRESS_LEADING_ZEROES); //Baud Rate Modbus_t[1] = TEXT_CreateEx(COL_1_X, ROW_1_Y + 1*SHIFT_Y, WIDTH_X_T, HIGHT_Y, WM_GetClientWindow(Modbus_FrameWin), WM_CF_SHOW, TEXT_CF_LEFT | TEXT_CF_VCENTER, ID_MODBUS_BAUD_RATE_TITLE, Modbus_title[1].ptitle[sel_language]); TEXT_SetFont(Modbus_t[1], &GUI_FontArialStandard14_8_Unicode); Modbus_v[1] = DROPDOWN_CreateEx(COL_1_X + SHIFT_X1, ROW_1_Y + 1*SHIFT_Y, WIDTH_X_V, HIGHT_Y, WM_GetClientWindow(Modbus_FrameWin), WM_CF_SHOW, DROPDOWN_CF_AUTOSCROLLBAR, ID_MODBUS_BAUD_RATE_VALUE); DROPDOWN_SetFont(Modbus_v[1], &GUI_FontArialStandard14_8_Unicode); DROPDOWN_SetBkColor(Modbus_v[1],DROPDOWN_CI_UNSEL, GUI_GRAY); DROPDOWN_SetBkColor(Modbus_v[1],DROPDOWN_CI_SEL, GUI_GRAY); DROPDOWN_SetBkColor(Modbus_v[1],DROPDOWN_CI_SELFOCUS, GUI_BLUE); DROPDOWN_AddString(Modbus_v[1], ""); for (int i = 0; i < 7; i++) DROPDOWN_AddString(Modbus_v[1], Baud_rate_title[i]); //Parity Modbus_t[2] = TEXT_CreateEx(COL_1_X, ROW_1_Y + 2*SHIFT_Y, WIDTH_X_T, HIGHT_Y, WM_GetClientWindow(Modbus_FrameWin), WM_CF_SHOW, TEXT_CF_LEFT | TEXT_CF_VCENTER, ID_MODBUS_PARITY_TITLE, Modbus_title[2].ptitle[sel_language]); TEXT_SetFont(Modbus_t[2], &GUI_FontArialStandard14_8_Unicode); Modbus_v[2] = DROPDOWN_CreateEx(COL_1_X + SHIFT_X1, ROW_1_Y + 2*SHIFT_Y, WIDTH_X_V, HIGHT_Y, WM_GetClientWindow(Modbus_FrameWin), WM_CF_SHOW, DROPDOWN_CF_AUTOSCROLLBAR, ID_MODBUS_PARITY_VALUE); DROPDOWN_SetFont(Modbus_v[2], &GUI_FontArialStandard14_8_Unicode); DROPDOWN_SetBkColor(Modbus_v[2],DROPDOWN_CI_UNSEL, GUI_GRAY); DROPDOWN_SetBkColor(Modbus_v[2],DROPDOWN_CI_SEL, GUI_GRAY); DROPDOWN_SetBkColor(Modbus_v[2],DROPDOWN_CI_SELFOCUS, GUI_BLUE); DROPDOWN_AddString(Modbus_v[2], ""); for (int i = 0; i < 3; i++) DROPDOWN_AddString(Modbus_v[2], Parity_title[i].ptitle[sel_language]); //Stop bits Modbus_t[3] = TEXT_CreateEx(COL_1_X, ROW_1_Y + 3*SHIFT_Y, WIDTH_X_T, HIGHT_Y, WM_GetClientWindow(Modbus_FrameWin), WM_CF_SHOW, TEXT_CF_LEFT | TEXT_CF_VCENTER, ID_MODBUS_STOP_BITS_TITLE, Modbus_title[3].ptitle[sel_language]); TEXT_SetFont(Modbus_t[3], &GUI_FontArialStandard14_8_Unicode); Modbus_v[3] = DROPDOWN_CreateEx(COL_1_X + SHIFT_X1, ROW_1_Y + 3*SHIFT_Y, WIDTH_X_V, HIGHT_Y, WM_GetClientWindow(Modbus_FrameWin), WM_CF_SHOW, DROPDOWN_CF_AUTOSCROLLBAR, ID_MODBUS_STOP_BITS_VALUE); DROPDOWN_SetFont(Modbus_v[3], &GUI_FontArialStandard14_8_Unicode); DROPDOWN_SetBkColor(Modbus_v[3],DROPDOWN_CI_UNSEL, GUI_GRAY); DROPDOWN_SetBkColor(Modbus_v[3],DROPDOWN_CI_SEL, GUI_GRAY); DROPDOWN_SetBkColor(Modbus_v[3],DROPDOWN_CI_SELFOCUS, GUI_BLUE); DROPDOWN_AddString(Modbus_v[3], ""); for (int i = 0; i < 2; i++) DROPDOWN_AddString(Modbus_v[3], Stop_bits_title[i]); //Time-Out Modbus_t[4] = TEXT_CreateEx(COL_1_X, ROW_1_Y + 4*SHIFT_Y, WIDTH_X_T, HIGHT_Y, WM_GetClientWindow(Modbus_FrameWin), WM_CF_SHOW, TEXT_CF_LEFT | TEXT_CF_VCENTER, ID_MODBUS_TIMEOUT_TITLE, Modbus_title[4].ptitle[sel_language]); TEXT_SetFont(Modbus_t[4], &GUI_FontArialStandard14_8_Unicode); Modbus_v[4] = EDIT_CreateUser(COL_1_X + SHIFT_X1, ROW_1_Y + 4*SHIFT_Y, WIDTH_X_V, HIGHT_Y, WM_GetClientWindow(Modbus_FrameWin), WM_CF_SHOW, 0, ID_MODBUS_TIMEOUT_VALUE, 5, sizeof(__info_data)); EDIT_SetFont(Modbus_v[4], &GUI_FontArialStandard14_8_Unicode); shift = 1; max = VALUE_TIME_OUT_1_INTERFACE_MAX/10; min = 0; info_data.extra_param = 0; info_data.shift = shift; _shift = 0.0f; for (int rozrjad = 0; rozrjad < shift; rozrjad++) { _shift /= 10.0f; _shift += 0.9f; } int max_tmp = max; _max = 10; while ( abs(max_tmp /= 10) >= 1) _max *= 10.0f; if (max > 0) { _max = _max - 1 + _shift; } else if (max < 0) { _max = -(_max / 10); } else _max = 0; info_data.max = _max; min_tmp = min; _min = 10; while ( abs(min_tmp /= 10) >= 1) _min *= 10.0f; if (min > 0) { _min = (_min / 10); } else if (min < 0) { _min = -(_min - 1 + _shift); } else _min = 0; info_data.min = _min; EDIT_SetUserData(Modbus_v[4], &info_data, sizeof(__info_data)); EDIT_SetFloatMode(Modbus_v[4], 0, _min, _max, shift, GUI_EDIT_SUPPRESS_LEADING_ZEROES); Modbus_d = TEXT_CreateEx(COL_1_X + SHIFT_X2 , ROW_1_Y + 4*SHIFT_Y, 40, HIGHT_Y, WM_GetClientWindow(Modbus_FrameWin), WM_CF_SHOW, TEXT_CF_LEFT | TEXT_CF_VCENTER, ID_MODBUS_TIMEOUT_DIMENSION, Modbus_Timeout_dimention.ptitle[sel_language]); TEXT_SetFont(Modbus_d, &GUI_FontArialStandard14_8_Unicode); #undef COL_1_X #undef ROW_1_Y #undef HIGHT_Y #undef SHIFT_Y #undef WIDTH_X_T #undef WIDTH_X_V #undef SHIFT_X1 #undef SHIFT_X2 } WM_BringToTop(Modbus_FrameWin); WM_ShowWindow(Modbus_FrameWin); }