static void ClearText(void) { cursor = 0; memset(edittext, 0, sizeof(TCHAR)*MAX_TEXTENTRY); UpdateTextboxProp(); }
void dlgTextEntryKeyboardShowModal(TCHAR *text, int width, const TCHAR* szFile, const TCHAR* szResource) { first = true; wf = NULL; if (width==0) { width = MAX_TEXTENTRY; } max_width = min(MAX_TEXTENTRY, width); char filename[MAX_PATH]; LocalPathS(filename, szFile); wf = dlgLoadFromXML(CallBackTable, filename, hWndMainWindow, szResource); if (!wf) return; cursor = 0; ClearText(); if (_tcslen(text)>0) { _tcsupr(text); LK_tcsncpy(edittext, text, max_width-1); // show previous test. // this text is replaced by first key down // but used if "OK" is clicked first for don't reset current value. } UpdateTextboxProp(); wf->SetKeyDownNotify(FormKeyDown); wf->ShowModal(); LK_tcsncpy(text, edittext, max_width-1); delete wf; wf=NULL; }
void dlgTextEntryKeyboardShowModal(TCHAR *text, int width, unsigned ResID) { wf = NULL; if (width==0) { width = MAX_TEXTENTRY; } max_width = min(MAX_TEXTENTRY, width); wf = dlgLoadFromXML(CallBackTable, ResID); if (!wf) return; // cursor = _tcslen(text); ClearText(); if (_tcslen(text)>0) { CharUpper(text); LK_tcsncpy(edittext, text, max_width-1); // show previous test. // this text is replaced by first key down // but used if "OK" is clicked first for don't reset current value. } cursor = _tcslen(edittext); UpdateTextboxProp(); WindowControl* pBtHelp = wf->FindByName(TEXT("cmdHelp")); if(pBtHelp) { pBtHelp->SetVisible(wKeyboardPopupWndProperty && wKeyboardPopupWndProperty->HasHelpText()); } wf->SetKeyDownNotify(FormKeyDown); wf->ShowModal(); LK_tcsncpy(text, edittext, max_width-1); // cursor = _tcslen(text); delete wf; wf=NULL; }
void dlgTextEntryKeyboardShowModal(TCHAR *text, int width, const TCHAR* szFile, const TCHAR* szResource) { first = true; wf = NULL; if (width==0) { width = MAX_TEXTENTRY; } max_width = min(MAX_TEXTENTRY, width); char filename[MAX_PATH]; LocalPathS(filename, szFile); wf = dlgLoadFromXML(CallBackTable, filename, hWndMainWindow, szResource); if (!wf) return; cursor = 0; ClearText(); if (_tcslen(text)>0) { _tcsupr(text); LK_tcsncpy(edittext, text, max_width-1); // position cursor at the end of imported text cursor=_tcslen(text); } UpdateTextboxProp(); wf->SetKeyDownNotify(FormKeyDown); wf->ShowModal(); LK_tcsncpy(text, edittext, max_width-1); delete wf; wf=NULL; }
static void ClearText() { cursor = 0; edittext[0] = 0; UpdateTextboxProp(); }
static void OnKey(WindowControl * Sender) { TCHAR *Caption = Sender->GetCaption(); if (cursor < max_width-1) { edittext[cursor++] = Caption[0]; } UpdateTextboxProp(); }
static void OnDel(WndButton* pWnd) { first = false; PlayResource(TEXT("IDR_WAV_CLICK")); if (cursor >0) { edittext[--cursor] = '\0'; } UpdateTextboxProp(); }
static bool DoBackspace() { if (cursor < 1) return false; cursor--; edittext[cursor] = 0; UpdateTextboxProp(); return true; }
static bool DoCharacter(TCHAR character) { if (cursor >= max_width - 1) return false; edittext[cursor++] = character; edittext[cursor] = 0; UpdateTextboxProp(); return true; }
static void OnDel(WindowControl * Sender) { first = false; #ifndef DISABLEAUDIO if (EnableSoundModes) PlayResource(TEXT("IDR_WAV_CLICK")); #endif if (cursor >0) { edittext[--cursor] = '\0'; } UpdateTextboxProp(); }
static int FormKeyDown(WindowControl * Sender, WPARAM wParam, LPARAM lParam) { switch(wParam & 0xffff){ case VK_LEFT: if (cursor<1) return(0); // min width cursor--; edittext[cursor] = 0; UpdateTextboxProp(); return(0); } return(1); }
static bool FormKeyDown(WndForm* pWnd, unsigned KeyCode) { switch(KeyCode & 0xffff){ case KEY_LEFT: if (cursor<1) return true; // min width cursor--; edittext[cursor] = 0; UpdateTextboxProp(); return true; } return false; }
static void OnTime(WndButton* pWnd) { PlayResource(TEXT("IDR_WAV_CLICK")); if ( (cursor+6)<(max_width-1) ) { TCHAR ltime[10]; _stprintf(ltime,_T("%02d%02d%02d"),GPS_INFO.Hour,GPS_INFO.Minute,GPS_INFO.Second); _tcscat(&edittext[cursor],ltime); edittext[cursor+6] = '\0'; cursor+=6; } UpdateTextboxProp(); }
static void OnTime(WindowControl * Sender) { #ifndef DISABLEAUDIO if (EnableSoundModes) PlayResource(TEXT("IDR_WAV_CLICK")); #endif if ( (cursor+6)<(max_width-1) ) { TCHAR ltime[10]; _stprintf(ltime,_T("%02d%02d%02d"),GPS_INFO.Hour,GPS_INFO.Minute,GPS_INFO.Second); _tcscat(&edittext[cursor],ltime); edittext[cursor+6] = '\0'; cursor+=6; } UpdateTextboxProp(); }
static void OnKey(WndButton* pWnd) { LKASSERT(pWnd); if(!pWnd) return; if (first) { ClearText(); first = false; } PlayResource(TEXT("IDR_WAV_CLICK")); const TCHAR *Caption = pWnd->GetWndText(); if (cursor < max_width - 1) { edittext[cursor++] = toupper(Caption[0]); } UpdateTextboxProp(); }
static void OnKey(WindowControl * Sender) { if(first) { ClearText(); first = false; } TCHAR *Caption = Sender->GetCaption(); #ifndef DISABLEAUDIO if (EnableSoundModes) PlayResource(TEXT("IDR_WAV_CLICK")); #endif if (cursor < max_width-1) { edittext[cursor++] = Caption[0]; } UpdateTextboxProp(); }
void dlgNumberEntryKeyboardShowModal(int *value, int width) { wf = NULL; wGrid = NULL; if (width==0) { width = MAX_TEXTENTRY; } max_width = min(MAX_TEXTENTRY, width); char filename[MAX_PATH]; if (InfoBoxLayout::landscape) { LocalPathS(filename, TEXT("frmNumberEntry_Keyboard_L.xml")); wf = dlgLoadFromXML(CallBackTable, filename, hWndMainWindow, TEXT("IDR_XML_NUMBERENTRY_KEYBOARD_L")); if (!wf) return; } else { LocalPathS(filename, TEXT("frmNumberEntry_Keyboard.xml")); wf = dlgLoadFromXML(CallBackTable, filename, hWndMainWindow, TEXT("IDR_XML_NUMBERENTRY_KEYBOARD")); if (!wf) return; } wGrid = (WndOwnerDrawFrame*)wf->FindByName(TEXT("frmGrid")); cursor = 0; ClearText(); TCHAR text[20]; _stprintf(text, TEXT("%ld"), *value); if (_tcslen(text)>0) { _tcsupr(text); _tcsncpy(edittext, text, max_width-1); edittext[max_width-1]= 0; } UpdateTextboxProp(); wf->SetKeyDownNotify(FormKeyDown); wf->ShowModal(); _tcsncpy(text, edittext, max_width); text[max_width-1]=0; *value = _wtoi(text); delete wf; wf=NULL; //@ 101027 just to be sure }
static int FormKeyDown(WindowControl * Sender, WPARAM wParam, LPARAM lParam) { switch(wParam & 0xffff){ case VK_LEFT: if (cursor<1) return(0); // min width cursor--; edittext[cursor] = 0; UpdateTextboxProp(); return(0); /* JMW this prevents cursor buttons from being used to enter case VK_RETURN: wf->SetModalResult(mrOK); return(0); */ } return(1); }
static void OnDate(WndButton* pWnd) { PlayResource(TEXT("IDR_WAV_CLICK")); if ( (cursor+6)<(max_width-1) ) { int nyear=GPS_INFO.Year; if (nyear>2000) // 2011 = 11 nyear-=2000; else // 1998 = 98 nyear-=1900; if (nyear<0||nyear>99) nyear=0; TCHAR ltime[10]; _stprintf(ltime,_T("%02d%02d%02d"),nyear,GPS_INFO.Month,GPS_INFO.Day); _tcscat(&edittext[cursor],ltime); edittext[cursor+6] = '\0'; cursor+=6; } UpdateTextboxProp(); }
static void OnDate(WindowControl * Sender) { #ifndef DISABLEAUDIO if (EnableSoundModes) PlayResource(TEXT("IDR_WAV_CLICK")); #endif if ( (cursor+6)<(max_width-1) ) { int nyear=GPS_INFO.Year; if (nyear>2000) // 2011 = 11 nyear-=2000; else // 1998 = 98 nyear-=1900; if (nyear<0||nyear>99) nyear=0; TCHAR ltime[10]; _stprintf(ltime,_T("%02d%02d%02d"),nyear,GPS_INFO.Month,GPS_INFO.Day); _tcscat(&edittext[cursor],ltime); edittext[cursor+6] = '\0'; cursor+=6; } UpdateTextboxProp(); }
bool TouchTextEntry(TCHAR *text, size_t width, const TCHAR *caption, AllowedCharacters accb, bool default_shift_state) { if (width == 0) width = MAX_TEXTENTRY; max_width = std::min(MAX_TEXTENTRY, width); const DialogLook &look = UIGlobals::GetDialogLook(); WndForm form(look); form.Create(UIGlobals::GetMainWindow(), caption); form.SetKeyDownFunction(FormKeyDown); form.SetCharacterFunction(FormCharacter); ContainerWindow &client_area = form.GetClientAreaWindow(); const PixelRect rc = client_area.GetClientRect(); const int client_height = rc.GetHeight(); const int padding = Layout::Scale(2); const int backspace_width = Layout::Scale(36); const int backspace_left = rc.right - padding - backspace_width; const int editor_height = Layout::Scale(22); const int editor_bottom = padding + editor_height; const int button_height = Layout::Scale(40); constexpr unsigned keyboard_rows = 5; const int keyboard_top = editor_bottom + padding; const int keyboard_height = keyboard_rows * button_height; const int keyboard_bottom = keyboard_top + keyboard_height; const bool vertical = client_height >= keyboard_bottom + button_height; const int button_top = vertical ? rc.bottom - button_height : keyboard_bottom - button_height; const int button_bottom = vertical ? rc.bottom : keyboard_bottom; const int ok_left = vertical ? 0 : padding; const int ok_right = vertical ? rc.right / 3 : ok_left + Layout::Scale(80); const int cancel_left = vertical ? ok_right : Layout::Scale(175); const int cancel_right = vertical ? rc.right * 2 / 3 : cancel_left + Layout::Scale(60); const int clear_left = vertical ? cancel_right : Layout::Scale(235); const int clear_right = vertical ? rc.right : clear_left + Layout::Scale(50); WndProperty _editor(client_area, look, _T(""), { 0, padding, backspace_left - padding, editor_bottom }, 0, WindowStyle()); _editor.SetReadOnly(); editor = &_editor; WindowStyle button_style; button_style.TabStop(); Button ok_button(client_area, look.button, _("OK"), { ok_left, button_top, ok_right, button_bottom }, button_style, form, mrOK); Button cancel_button(client_area, look.button, _("Cancel"), { cancel_left, button_top, cancel_right, button_bottom }, button_style, form, mrCancel); auto clear_listener = MakeLambdaActionListener([](unsigned id){ ClearText(); }); Button clear_button(client_area, look.button, _("Clear"), { clear_left, button_top, clear_right, button_bottom }, button_style, clear_listener, 0); KeyboardWidget keyboard(look.button, FormCharacter, !accb, default_shift_state); const PixelRect keyboard_rc = { padding, keyboard_top, rc.right - padding, keyboard_bottom }; keyboard.Initialise(client_area, keyboard_rc); keyboard.Prepare(client_area, keyboard_rc); keyboard.Show(keyboard_rc); kb = &keyboard; auto backspace_listener = MakeLambdaActionListener([](unsigned id){ OnBackspace(); }); Button backspace_button(client_area, look.button, _T("<-"), { backspace_left, padding, rc.right - padding, editor_bottom }, button_style, backspace_listener, 0); AllowedCharactersCallback = accb; cursor = 0; ClearText(); if (!StringIsEmpty(text)) { CopyTruncateString(edittext, width, text); cursor = _tcslen(text); } UpdateTextboxProp(); bool result = form.ShowModal() == mrOK; keyboard.Hide(); keyboard.Unprepare(); if (result) { CopyTruncateString(text, width, edittext); } return result; }
bool dlgTextEntryKeyboardShowModal(TCHAR *text, size_t width, const TCHAR* caption, AllowedCharacters accb) { if (width == 0) width = MAX_TEXTENTRY; max_width = std::min(MAX_TEXTENTRY, width); const DialogLook &look = UIGlobals::GetDialogLook(); WndForm form(look); form.Create(UIGlobals::GetMainWindow(), caption); form.SetKeyDownFunction(FormKeyDown); form.SetCharacterFunction(FormCharacter); ContainerWindow &client_area = form.GetClientAreaWindow(); const PixelRect rc = client_area.GetClientRect(); const PixelScalar client_height = rc.bottom - rc.top; const PixelScalar padding = Layout::Scale(2); const PixelScalar backspace_width = Layout::Scale(36); const PixelScalar backspace_left = rc.right - padding - backspace_width; const PixelScalar editor_height = Layout::Scale(22); const PixelScalar editor_bottom = padding + editor_height; const PixelScalar button_height = Layout::Scale(40); constexpr unsigned keyboard_rows = 5; const PixelScalar keyboard_top = editor_bottom + padding; const PixelScalar keyboard_height = keyboard_rows * button_height; const PixelScalar keyboard_bottom = keyboard_top + keyboard_height; const bool vertical = client_height >= keyboard_bottom + button_height; const PixelScalar button_top = vertical ? rc.bottom - button_height : keyboard_bottom - button_height; const PixelScalar button_bottom = vertical ? rc.bottom : keyboard_bottom; const PixelScalar ok_left = vertical ? 0 : padding; const PixelScalar ok_right = vertical ? rc.right / 3 : ok_left + Layout::Scale(80); const PixelScalar cancel_left = vertical ? ok_right : Layout::Scale(175); const PixelScalar cancel_right = vertical ? rc.right * 2 / 3 : cancel_left + Layout::Scale(60); const PixelScalar clear_left = vertical ? cancel_right : Layout::Scale(235); const PixelScalar clear_right = vertical ? rc.right : clear_left + Layout::Scale(50); WndProperty _editor(client_area, look, _T(""), { 0, padding, backspace_left - padding, editor_bottom }, 0, WindowStyle()); _editor.SetReadOnly(); editor = &_editor; ButtonWindowStyle button_style; button_style.TabStop(); WndButton backspace_button(client_area, look, _T("<-"), { backspace_left, padding, rc.right - padding, editor_bottom }, button_style, OnBackspace); WndButton ok_button(client_area, look, _("OK"), { ok_left, button_top, ok_right, button_bottom }, button_style, form, mrOK); WndButton cancel_button(client_area, look, _("Cancel"), { cancel_left, button_top, cancel_right, button_bottom }, button_style, form, mrCancel); WndButton clear_button(client_area, look, _("Clear"), { clear_left, button_top, clear_right, button_bottom }, button_style, ClearText); KeyboardControl keyboard(client_area, look, { padding, keyboard_top, rc.right - padding, keyboard_bottom }, OnCharacter); kb = &keyboard; AllowedCharactersCallback = accb; cursor = 0; ClearText(); if (!StringIsEmpty(text)) { CopyString(edittext, text, width); cursor = _tcslen(text); } UpdateTextboxProp(); bool result = form.ShowModal() == mrOK; if (result) { CopyString(text, edittext, width); } return result; }