/********************************************************************* * * _cbCellEdit * * Function description * Callback function of the EDIT widget which is created above a * LISTVIEW cell. */ static void _cbCellEdit(WM_MESSAGE * pMsg) { CELL_EDIT_ORG CellEditOrg; WM_KEY_INFO * pKeyInfo; WM_HWIN hList; char acText[LEN_ITEM_TEXT]; switch (pMsg->MsgId) { case WM_KEY: pKeyInfo = (WM_KEY_INFO *)pMsg->Data.p; if (pKeyInfo->PressedCnt == 0) { if (pKeyInfo->Key == GUI_KEY_ENTER) { WM_SetFocus(WM_GetParent(pMsg->hWin)); WM_DeleteWindow(pMsg->hWin); break; } } EDIT_Callback(pMsg); break; case WM_SET_FOCUS: if (pMsg->Data.v == 0) { WM_DeleteWindow(pMsg->hWin); } else { EDIT_Callback(pMsg); } break; case WM_DELETE: EDIT_GetUserData(pMsg->hWin, &CellEditOrg, sizeof(CELL_EDIT_ORG)); hList = WM_GetParent(pMsg->hWin); EDIT_GetText(pMsg->hWin, acText, LEN_ITEM_TEXT); LISTVIEW_SetItemTextSorted(hList, CellEditOrg.Col, CellEditOrg.Row, acText); break; default: EDIT_Callback(pMsg); } }
int Edit_Get_UserData(WM_HWIN hWin, int editId, char *str, int numBytes) { int rtnValue; WM_HWIN hItem; hItem = WM_GetDialogItem(hWin, editId); rtnValue = EDIT_GetUserData(hItem, str, numBytes); return rtnValue; }
/***************************** Peremaljovuvannja paneli comunicaciji *****************************/ void redraw_panel_Modbus(void) { EDIT_SetText(hEdit, _aBitmapItem_Comm[COMM_MODBUS_ID].pExplanation[sel_language]); char title[256]; title[0] = '\0'; strcat_mal(title, (char *)Modbus_panel_title.ptitle[sel_language]); unsigned int error_data_1 = _CHECK_SET_BIT(diagnostyka, ERROR_SETTINGS_BS_EEPROM_BIT) | _CHECK_SET_BIT(diagnostyka, ERROR_SETTINGS_BS_EEPROM_EMPTY_BIT); if (error_data_1) { //Nalashtuvannja nemaje u tablyci nalashtuvan strcat_mal(title, (char *)ERROR_MES.ptitle[sel_language]); FRAMEWIN_SetText(Modbus_FrameWin, title); FRAMEWIN_SetBarColor(Modbus_FrameWin, 1, GUI_RED); FRAMEWIN_SetTextColor(Modbus_FrameWin, GUI_YELLOW); EDIT_SetText(Modbus_v[0], ""); DROPDOWN_SetSel(Modbus_v[1], 0); DROPDOWN_SetSel(Modbus_v[2], 0); DROPDOWN_SetSel(Modbus_v[3], 0); EDIT_SetText(Modbus_v[4], ""); } else { //Nalashtuvannja realno je u tablyci nalashtuvan if (current_ekran.edition != 0) { strcat_mal(title, (char *)MODE.ptitle[sel_language]); if (current_ekran.edition != 1) { //Помічаємо, що дані змінені strcat_mal(title, "*"); } } FRAMEWIN_SetText(Modbus_FrameWin, title); if (current_ekran.edition == 0) { FRAMEWIN_SetBarColor(Modbus_FrameWin, 1, GUI_GREEN); FRAMEWIN_SetTextColor(Modbus_FrameWin, GUI_BLUE); } else { FRAMEWIN_SetBarColor(Modbus_FrameWin, 1, GUI_YELLOW); FRAMEWIN_SetTextColor(Modbus_FrameWin, GUI_RED); } AuxCfgTbl1Dsc *point_1; if (current_ekran.edition == 0) point_1 = &eeprom_bs_settings_tbl; else point_1 = &edit_settings_1; __info_data info_data; U8 Flags; EDIT_GetUserData(Modbus_v[0], &info_data, sizeof(__info_data)); Flags = GUI_EDIT_SUPPRESS_LEADING_ZEROES; if (current_ekran.edition != 0) { if ((info_data.extra_param & FLAG_SIGNED_FATA) != 0) Flags = GUI_EDIT_SIGNED; else Flags = 0; } EDIT_SetFloatMode(Modbus_v[0], point_1->RS_comm_addres, info_data.min, info_data.max, info_data.shift, Flags); int value_int = point_1->RS_comm_addres; if ((value_int >= KOEF_ADDRESS_MIN) && (value_int <= KOEF_ADDRESS_MAX)) { EDIT_SetTextColor(Modbus_v[0], EDIT_CI_DISABLED, GUI_BLACK); EDIT_SetTextColor(Modbus_v[0], EDIT_CI_ENABLED, GUI_BLACK); } else { EDIT_SetTextColor(Modbus_v[0], EDIT_CI_DISABLED, GUI_RED); EDIT_SetTextColor(Modbus_v[0], EDIT_CI_ENABLED, GUI_RED); } DROPDOWN_SetSel(Modbus_v[1], point_1->chSpeed + 1); DROPDOWN_SetSel(Modbus_v[2], point_1->chParityCheck + 1); DROPDOWN_SetSel(Modbus_v[3], point_1->chAmtStopBit - 1 + 1); EDIT_GetUserData(Modbus_v[4], &info_data, sizeof(__info_data)); Flags = GUI_EDIT_SUPPRESS_LEADING_ZEROES; if (current_ekran.edition != 0) { if ((info_data.extra_param & FLAG_SIGNED_FATA) != 0) Flags = GUI_EDIT_SIGNED; else Flags = 0; } EDIT_SetFloatMode(Modbus_v[4], (float)point_1->chTimeOut_RS/10, info_data.min, info_data.max, info_data.shift, Flags); value_int = point_1->chTimeOut_RS; if ((value_int >= VALUE_TIME_OUT_1_INTERFACE_MIN) && (value_int <= VALUE_TIME_OUT_1_INTERFACE_MAX)) { EDIT_SetTextColor(Modbus_v[4], EDIT_CI_DISABLED, GUI_BLACK); EDIT_SetTextColor(Modbus_v[4], EDIT_CI_ENABLED, GUI_BLACK); } else { EDIT_SetTextColor(Modbus_v[4], EDIT_CI_DISABLED, GUI_RED); EDIT_SetTextColor(Modbus_v[4], EDIT_CI_ENABLED, GUI_RED); } } WM_HWIN FocussedWindow = (Modbus_v[0 + current_ekran.index_position_1]); WM_SetFocus(FocussedWindow); }
static void _cbProtection_FrameWin(WM_MESSAGE * pMsg) { switch (pMsg->MsgId) { case WM_NOTIFY_PARENT: { WM_HWIN hObjSrc = pMsg->hWinSrc; int Id = WM_GetId(hObjSrc); int NCode = pMsg->Data.v; switch (NCode) { case WM_NOTIFICATION_GOT_FOCUS: { if (focus_Modbus_settings != hObjSrc) { /* Визначаємо координати об'єкта, який сфокусований */ WM_SCROLL_STATE ScrollState; WM_GetScrollState(ScrollBar_Modbus, &ScrollState); int y_hWinSrc = _y_cbPickup_Modbus + WM_GetWindowOrgY(pMsg->hWinSrc); int y_hWin = WM_GetWindowOrgY(pMsg->hWin); int y_tmp = y_hWinSrc - y_hWin; int v_scroll; v_scroll = y_tmp/ScrollState.PageSize; v_scroll *= ScrollState.PageSize; if (_y_cbPickup_Modbus != v_scroll) { int dy = _y_cbPickup_Modbus - v_scroll; for (unsigned int i = 0; i < MAX_NUMBER_ITEMS_MODBUS; i++) { WM_MoveWindow(*(Modbus_t + i), 0, dy); WM_MoveWindow(*(Modbus_v + i), 0, dy); } WM_MoveWindow(Modbus_d, 0, dy); } _y_cbPickup_Modbus = v_scroll; focus_Modbus_settings = hObjSrc; SCROLLBAR_SetValue(ScrollBar_Modbus, v_scroll); } break; } case WM_NOTIFICATION_VALUE_CHANGED: { if ( (Id == ID_MODBUS_ADDRESS_VALUE) || (Id == ID_MODBUS_TIMEOUT_VALUE) ) { float value = EDIT_GetFloatValue(hObjSrc); int min = 0, max = 0, value_int; unsigned int changer_was_made = false; switch (Id) { case ID_MODBUS_ADDRESS_VALUE: { min = KOEF_ADDRESS_MIN; max = KOEF_ADDRESS_MAX; value_int = (int)(value); if ( (current_ekran.edition != 0) && (edit_settings_1.RS_comm_addres != value_int) ) { edit_settings_1.RS_comm_addres = value_int; changer_was_made = true; } break; } case ID_MODBUS_TIMEOUT_VALUE: { min = VALUE_TIME_OUT_1_INTERFACE_MIN; max = VALUE_TIME_OUT_1_INTERFACE_MAX; value_int = (int)(round(value*10.0f)); if ( (current_ekran.edition != 0) && (edit_settings_1.chTimeOut_RS != value_int) ) { edit_settings_1.chTimeOut_RS = value_int; changer_was_made = true; } break; } default: break; } if ( (changer_was_made == true) && (current_ekran.edition == 1) ) { //Помічаємо, що дані змінені char title[256]; title[0] = '\0'; strcat_mal(title, (char *)Modbus_panel_title.ptitle[sel_language]); strcat_mal(title, (char *)MODE.ptitle[sel_language]); strcat_mal(title, "*"); FRAMEWIN_SetText(Modbus_FrameWin, title); current_ekran.edition = 2; } __info_data info_data; EDIT_GetUserData(hObjSrc, &info_data, sizeof(__info_data)); if ((info_data.extra_param & FLAG_SIGNED_FATA) != 0) value_int = abs(value_int); if ((value_int >= min) && (value_int <= max)) { EDIT_SetTextColor(hObjSrc, EDIT_CI_DISABLED, GUI_BLACK); EDIT_SetTextColor(hObjSrc, EDIT_CI_ENABLED, GUI_BLACK); } else { EDIT_SetTextColor(hObjSrc, EDIT_CI_DISABLED, GUI_RED); EDIT_SetTextColor(hObjSrc, EDIT_CI_ENABLED, GUI_RED); } } break; } } break; } // case WM_PAINT: // { // // break; // } default: { WM_DefaultProc(pMsg); break; } } }