www.pudn.com > uC-GUI-V3-98.zip > Calibration.c
/* ********************************************************************************************************* * uC/GUI * Universal graphic software for embedded applications * * (c) Copyright 2002, Micrium Inc., Weston, FL * (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH * * µC/GUI is protected by international copyright laws. Knowledge of the * source code may not be used to write a similar product. This file may * only be used in accordance with a license and should not be redistributed * in any way. We appreciate your understanding and fairness. * ---------------------------------------------------------------------- File : Calibration.c Purpose : TBD ---------------------------END-OF-HEADER------------------------------ */ #include#include "GUI.h" #include "DIALOG.h" #include "Main.h" /********************************************************************* * * Defines * ********************************************************************** */ /********************************************************************* * * Dialog IDs */ #define ID_FRAMEWIN 1 /********************************************************************* * * Static data * ********************************************************************** */ static char _IsInited; static WM_HWIN _hDlg; static WM_HWIN _hPrevWin; static int _aSlider[4]; static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = { { FRAMEWIN_CreateIndirect, "Calibration", ID_FRAMEWIN, 0, 480, 320, 240, 0}, { TEXT_CreateIndirect, "Horizontal min:",0, 20, 40, 70, 20, TEXT_CF_LEFT | TEXT_CF_VCENTER }, { TEXT_CreateIndirect, "Horizontal max:",0, 20, 70, 70, 20, TEXT_CF_LEFT | TEXT_CF_VCENTER }, { TEXT_CreateIndirect, "Vertical min:",0, 20, 100, 70, 20, TEXT_CF_LEFT | TEXT_CF_VCENTER }, { TEXT_CreateIndirect, "Vertical max:",0, 20, 130, 70, 20, TEXT_CF_LEFT | TEXT_CF_VCENTER }, { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 100, 40, 100, 20 }, { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER1, 100, 70, 100, 20 }, { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER2, 100, 100, 100, 20 }, { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER3, 100, 130, 100, 20 }, { EDIT_CreateIndirect, NULL , GUI_ID_EDIT0, 210, 40, 60, 20, 0, 0}, { EDIT_CreateIndirect, NULL , GUI_ID_EDIT1, 210, 70, 60, 20, 0, 0}, { EDIT_CreateIndirect, NULL , GUI_ID_EDIT2, 210, 100, 60, 20, 0, 0}, { EDIT_CreateIndirect, NULL , GUI_ID_EDIT3, 210, 130, 60, 20, 0, 0}, { BUTTON_CreateIndirect, "OK", GUI_ID_OK, 230, 180, 60, 20 }, }; /********************************************************************* * * Static code * ********************************************************************** */ /********************************************************************* * * _OnValueChanged */ static void _OnValueChanged(WM_HWIN hDlg, int Id) { unsigned Index, v; WM_HWIN hItem; if ((Id >= GUI_ID_SLIDER0) && (Id <= GUI_ID_SLIDER3)) { Index = Id - GUI_ID_SLIDER0; /* SLIDER-widget has changed, update EDIT-widget */ hItem = WM_GetDialogItem(hDlg, GUI_ID_SLIDER0 + Index); v = SLIDER_GetValue(hItem); hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0 + Index); EDIT_SetValue(hItem, v); _aSlider[Index] = v; } } /********************************************************************* * * _cbCallback */ static void _cbCallback(WM_MESSAGE * pMsg) { WM_HWIN hDlg, hWinSrc, hItem; int Id, NCode, i; hWinSrc = pMsg->hWinSrc; hDlg = pMsg->hWin; switch (pMsg->MsgId) { case WM_INIT_DIALOG: WM_MakeModal(hDlg); FRAMEWIN_SetFont(hDlg, &GUI_Font24B_ASCII); FRAMEWIN_SetTextAlign(hDlg, GUI_TA_HCENTER); FRAMEWIN_SetClientColor(hDlg, GUI_YELLOW); for (i = 0; i < 4; i++) { hItem = WM_GetDialogItem(hDlg, GUI_ID_SLIDER0 + i); SLIDER_SetRange(hItem, 0, 999); SLIDER_SetValue(hItem, _aSlider[i]); hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0 + i); EDIT_SetDecMode(hItem, _aSlider[i], 0, 999, 0, 0); WM_DisableWindow(hItem); } break; case WM_NOTIFY_PARENT: Id = WM_GetId(hWinSrc); /* Id of widget */ NCode = pMsg->Data.v; /* Notification code */ if (NCode == WM_NOTIFICATION_RELEASED) { /* React only if released */ if (Id == GUI_ID_OK) { /* OK Button */ GUI_EndDialog(hDlg, 0); WM_SetFocus(_hPrevWin); } } if (NCode == WM_NOTIFICATION_VALUE_CHANGED) { _OnValueChanged(hDlg, Id); } break; default: WM_DefaultProc(pMsg); } } /********************************************************************* * * Public code * ********************************************************************** */ /********************************************************************* * * ExecCalibration */ void ExecCalibration(void) { _hPrevWin = WM_GetFocussedWindow(); GUI_SetOrg(0, 480); TEXT_SetDefaultTextColor(GUI_BLACK); GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0); GUI_SetOrg(0, 0); }