2
3
4
5
6
7
8
19
20
21
22
24#include "ui_ncurses_internal.h"
25int ncurses_input(UiSurface *s, uint w);
27#include "ui_notcurses_internal.h"
28int notcurses_input(UiSurface *s, uint w);
33 char Title[] =
_(
"TEST CURSES KEYS");
39 uint begy = (maxy - lines) / 3;
40 uint begx = (maxx - cols) / 2;
54 ncurses_input(sfc, WIN);
56 notcurses_input(sfc, WIN);
62int ncurses_input(UiSurface *sfc, uint w) {
79 if (c ==
'q' || c == KEY_F(9))
337 _(
"KEY_SEOL shifted clear - to - end - of - line key"),
473 case BUTTON1_PRESSED:
476 case BUTTON1_RELEASED:
479 case BUTTON1_CLICKED:
482 case BUTTON1_DOUBLE_CLICKED:
485 case BUTTON2_PRESSED:
488 case BUTTON2_RELEASED:
491 case BUTTON2_CLICKED:
494 case BUTTON2_DOUBLE_CLICKED:
497 case BUTTON3_PRESSED:
500 case BUTTON3_RELEASED:
503 case BUTTON3_CLICKED:
506 case BUTTON3_DOUBLE_CLICKED:
509 case BUTTON4_PRESSED:
512 case BUTTON4_RELEASED:
515 case BUTTON4_CLICKED:
518 case BUTTON4_DOUBLE_CLICKED:
521 case BUTTON5_PRESSED:
524 case BUTTON5_RELEASED:
527 case BUTTON5_CLICKED:
530 case BUTTON5_DOUBLE_CLICKED:
549 sprintf(tmp,
_(
" Inside Win: y: %3d, x: %3d"),
552 sprintf(tmp,
_(
" stdwin: y: %3d, x: %3d"),
565 sprintf(tmp,
_(
" Octal: %3o"), c);
569 sprintf(tmp,
_(
" Decimal: %3d"), c);
573 sprintf(tmp,
_(
" Hex: %3x"), c);
578 sprintf(tmp,
_(
"Description: %s"), kstr);
580 sprintf(tmp,
_(
" ASCII: %c"), c);
594int notcurses_input(UiSurface *sfc, uint w) {
602 ui_cursor_move(sfc, WIN, 1, 39);
605 c = ui_get_event(sfc, WIN, NULL, &ev, -1);
606 if (sig_received != 0) {
607 if (handle_signal(sig_received))
608 c = ui_display_error(em0, em1, em2, NULL);
609 if (c ==
'q' || c == NCKEY_F09)
616 strcpy(kstr,
"NCKEY_INVALID");
619 strcpy(kstr,
"NCKEY_RESIZE");
622 strcpy(kstr,
"NCKEY_UP");
625 strcpy(kstr,
"NCKEY_RIGHT");
628 strcpy(kstr,
"NCKEY_DOWN");
631 strcpy(kstr,
"NCKEY_LEFT");
634 strcpy(kstr,
"NCKEY_INS");
637 strcpy(kstr,
"NCKEY_DEL");
639 case NCKEY_BACKSPACE:
640 strcpy(kstr,
"NCKEY_BACKSPACE");
643 strcpy(kstr,
"NCKEY_PGDOWN");
646 strcpy(kstr,
"NCKEY_PGUP");
649 strcpy(kstr,
"NCKEY_HOME");
652 strcpy(kstr,
"NCKEY_END");
655 strcpy(kstr,
"NCKEY_F00");
658 strcpy(kstr,
"NCKEY_F01");
661 strcpy(kstr,
"NCKEY_F02");
664 strcpy(kstr,
"NCKEY_F03");
667 strcpy(kstr,
"NCKEY_F04");
670 strcpy(kstr,
"NCKEY_F05");
673 strcpy(kstr,
"NCKEY_F06");
676 strcpy(kstr,
"NCKEY_F07");
679 strcpy(kstr,
"NCKEY_F08");
682 strcpy(kstr,
"NCKEY_F09");
685 strcpy(kstr,
"NCKEY_F10");
688 strcpy(kstr,
"NCKEY_F11");
691 strcpy(kstr,
"NCKEY_F12");
694 strcpy(kstr,
"NCKEY_F13");
697 strcpy(kstr,
"NCKEY_F14");
700 strcpy(kstr,
"NCKEY_F15");
703 strcpy(kstr,
"NCKEY_F16");
706 strcpy(kstr,
"NCKEY_F17");
709 strcpy(kstr,
"NCKEY_F18");
712 strcpy(kstr,
"NCKEY_F19");
715 strcpy(kstr,
"NCKEY_F20");
718 strcpy(kstr,
"NCKEY_F21");
721 strcpy(kstr,
"NCKEY_F22");
724 strcpy(kstr,
"NCKEY_F23");
727 strcpy(kstr,
"NCKEY_F24");
730 strcpy(kstr,
"NCKEY_F25");
733 strcpy(kstr,
"NCKEY_F26");
736 strcpy(kstr,
"NCKEY_F27");
739 strcpy(kstr,
"NCKEY_F28");
742 strcpy(kstr,
"NCKEY_F29");
745 strcpy(kstr,
"NCKEY_F30");
748 strcpy(kstr,
"NCKEY_F31");
751 strcpy(kstr,
"NCKEY_F32");
754 strcpy(kstr,
"NCKEY_F33");
757 strcpy(kstr,
"NCKEY_F34");
760 strcpy(kstr,
"NCKEY_F35");
763 strcpy(kstr,
"NCKEY_F36");
766 strcpy(kstr,
"NCKEY_F37");
769 strcpy(kstr,
"NCKEY_F38");
772 strcpy(kstr,
"NCKEY_F39");
775 strcpy(kstr,
"NCKEY_F40");
778 strcpy(kstr,
"NCKEY_F41");
781 strcpy(kstr,
"NCKEY_F42");
784 strcpy(kstr,
"NCKEY_F43");
787 strcpy(kstr,
"NCKEY_F44");
790 strcpy(kstr,
"NCKEY_F45");
793 strcpy(kstr,
"NCKEY_F46");
796 strcpy(kstr,
"NCKEY_F47");
799 strcpy(kstr,
"NCKEY_F48");
802 strcpy(kstr,
"NCKEY_F49");
805 strcpy(kstr,
"NCKEY_F50");
808 strcpy(kstr,
"NCKEY_F51");
811 strcpy(kstr,
"NCKEY_F52");
814 strcpy(kstr,
"NCKEY_F53");
817 strcpy(kstr,
"NCKEY_F54");
820 strcpy(kstr,
"NCKEY_F55");
823 strcpy(kstr,
"NCKEY_F56");
826 strcpy(kstr,
"NCKEY_F57");
829 strcpy(kstr,
"NCKEY_F58");
832 strcpy(kstr,
"NCKEY_F59");
835 strcpy(kstr,
"NCKEY_F60");
838 strcpy(kstr,
"NCKEY_ENTER");
841 strcpy(kstr,
"NCKEY_CLS");
844 strcpy(kstr,
"NCKEY_DLEFT");
847 strcpy(kstr,
"NCKEY_DRIGHT");
850 strcpy(kstr,
"NCKEY_ULEFT");
853 strcpy(kstr,
"NCKEY_URIGHT");
856 strcpy(kstr,
"NCKEY_CENTER");
859 strcpy(kstr,
"NCKEY_BEGIN");
862 strcpy(kstr,
"NCKEY_CANCEL");
865 strcpy(kstr,
"NCKEY_CLOSE");
868 strcpy(kstr,
"NCKEY_COMMAND");
871 strcpy(kstr,
"NCKEY_COPY");
874 strcpy(kstr,
"NCKEY_EXIT");
877 strcpy(kstr,
"NCKEY_PRINT");
880 strcpy(kstr,
"NCKEY_REFRESH");
882 case NCKEY_SEPARATOR:
883 strcpy(kstr,
"NCKEY_SEPARATOR");
885 case NCKEY_CAPS_LOCK:
886 strcpy(kstr,
"NCKEY_CAPS_LOCK");
888 case NCKEY_SCROLL_LOCK:
889 strcpy(kstr,
"NCKEY_SCROLL_LOCK");
892 strcpy(kstr,
"NCKEY_NUM_LOCK");
894 case NCKEY_PRINT_SCREEN:
895 strcpy(kstr,
"NCKEY_PRINT_SCREEN");
898 strcpy(kstr,
"NCKEY_PAUSE");
901 strcpy(kstr,
"NCKEY_MENU");
903 case NCKEY_MEDIA_PLAY:
904 strcpy(kstr,
"NCKEY_MEDIA_PLAY");
906 case NCKEY_MEDIA_PAUSE:
907 strcpy(kstr,
"NCKEY_MEDIA_PAUSE");
909 case NCKEY_MEDIA_PPAUSE:
910 strcpy(kstr,
"NCKEY_MEDIA_PPAUSE");
912 case NCKEY_MEDIA_REV:
913 strcpy(kstr,
"NCKEY_MEDIA_REV");
915 case NCKEY_MEDIA_STOP:
916 strcpy(kstr,
"NCKEY_MEDIA_STOP");
919 strcpy(kstr,
"NCKEY_MEDIA_FF");
921 case NCKEY_MEDIA_REWIND:
922 strcpy(kstr,
"NCKEY_MEDIA_REWIND");
924 case NCKEY_MEDIA_NEXT:
925 strcpy(kstr,
"NCKEY_MEDIA_NEXT");
927 case NCKEY_MEDIA_PREV:
928 strcpy(kstr,
"NCKEY_MEDIA_PREV");
930 case NCKEY_MEDIA_RECORD:
931 strcpy(kstr,
"NCKEY_MEDIA_RECORD");
933 case NCKEY_MEDIA_LVOL:
934 strcpy(kstr,
"NCKEY_MEDIA_LVOL");
936 case NCKEY_MEDIA_RVOL:
937 strcpy(kstr,
"NCKEY_MEDIA_RVOL");
939 case NCKEY_MEDIA_MUTE:
940 strcpy(kstr,
"NCKEY_MEDIA_MUTE");
943 strcpy(kstr,
"NCKEY_LSHIFT");
946 strcpy(kstr,
"NCKEY_LCTRL");
949 strcpy(kstr,
"NCKEY_LALT");
952 strcpy(kstr,
"NCKEY_LSUPER");
955 strcpy(kstr,
"NCKEY_LHYPER");
958 strcpy(kstr,
"NCKEY_LMETA");
961 strcpy(kstr,
"NCKEY_RSHIFT");
964 strcpy(kstr,
"NCKEY_RCTRL");
967 strcpy(kstr,
"NCKEY_RALT");
970 strcpy(kstr,
"NCKEY_RSUPER");
973 strcpy(kstr,
"NCKEY_RHYPER");
976 strcpy(kstr,
"NCKEY_RMETA");
979 strcpy(kstr,
"NCKEY_L3SHIFT");
982 strcpy(kstr,
"NCKEY_L5SHIFT");
985 strcpy(kstr,
"NCKEY_MOTION");
988 strcpy(kstr,
"NCKEY_BUTTON1");
991 strcpy(kstr,
"NCKEY_BUTTON2");
994 strcpy(kstr,
"NCKEY_BUTTON3");
997 strcpy(kstr,
"NCKEY_BUTTON4");
1000 strcpy(kstr,
"NCKEY_BUTTON5");
1003 strcpy(kstr,
"NCKEY_BUTTON6");
1006 strcpy(kstr,
"NCKEY_BUTTON7");
1009 strcpy(kstr,
"NCKEY_BUTTON8");
1012 strcpy(kstr,
"NCKEY_BUTTON9");
1014 case NCKEY_BUTTON10:
1015 strcpy(kstr,
"NCKEY_BUTTON10");
1017 case NCKEY_BUTTON11:
1018 strcpy(kstr,
"NCKEY_BUTTON11");
1021 strcpy(kstr,
"NCKEY_SIGNAL");
1024 strcpy(kstr,
"NCKEY_EOF");
1027 snprintf(kstr, 32,
"NCKEY_%d", key_id);
1030 ui_mvwaddstr(sfc, w, 6, 3, _(
" Action:"));
1031 ui_mvwaddstr(sfc, w, 6, 16, action);
1032 ui_wclrtoeol(sfc, w);
1034 if (ev.mouse_inside) {
1035 sprintf(tmp, _(
" Inside Win: y: %3d, x: %3d"),
1038 sprintf(tmp, _(
" stdwin: y: %3d, x: %3d"),
1041 ui_mvwaddstr(sfc, w, 4, 4, tmp);
1042 ui_wclrtoeol(sfc, w);
1043 ui_cursor_move(sfc, w, 5, 0);
1044 ui_wclrtoeol(sfc, w);
1045 ui_cursor_move(sfc, w, 7, 0);
1046 ui_wclrtoeol(sfc, w);
1047 if (c != UIKEY_BUTTON1) {
1048 sprintf(tmp, _(
" Octal: %3o"), c);
1049 ui_mvwaddstr(sfc, w, 3, 4, tmp);
1050 ui_wclrtoeol(sfc, w);
1052 sprintf(tmp, _(
" Decimal: %3d"), c);
1053 ui_mvwaddstr(sfc, w, 4, 4, tmp);
1054 ui_wclrtoeol(sfc, w);
1056 sprintf(tmp, _(
" Hex: %3x"), c);
1057 ui_mvwaddstr(sfc, w, 5, 4, tmp);
1058 ui_wclrtoeol(sfc, w);
1061 sprintf(tmp, _(
"Description: %s"), kstr);
1063 sprintf(tmp, _(
" ASCII: %c"), c);
1065 ui_mvwaddstr(sfc, w, 6, 3, tmp);
1066 ui_wclrtoeol(sfc, w);
1069 if (c == UIKEY_END) {
volatile sig_atomic_t sig_received
bool handle_signal(sig_atomic_t)
void ui_render()
Render the UI by updating panels and refreshing the display.
int ui_cursor_move(UiSurface *s, ss_t w, uint y, uint x)
Move the cursor to a specified position within a UiSurface.
void ui_get_screen_size(uint *lines, uint *cols)
Get the current screen size (number of lines and columns).
int ui_tracked_sfc_box(uint wlines, uint wcols, uint wbegy, uint wbegx, const char *wtitle)
Create a new surface with a box window.
int ui_wclrtoeol(UiSurface *s, ss_t w)
Clear to the end of the line in a surface window.
int ui_bkgdset(UiSurface *s, ss_t w, const UiCell *cell)
Set the background for new content to be written to a specific window within a UiSurface.
int ui_keypad(UiSurface *s, ss_t w, bool enable)
Enable or disable the keypad for a UiSurface.
int ui_get_event(UiSurface *s, ss_t w, UiChyron *chyron, UiEvent *ev, int timeout_ms)
Read input events.
UiSurface * ui_surface[UI_SFC_MAX]
int ui_mvwaddstr(UiSurface *s, ss_t w, uint y, uint x, const char *text)
Draw a text string at a specific position in a surface window.
size_t strnz__cpy(char *, const char *, size_t)
safer alternative to strncpy
size_t strnz__cat(char *, const char *, size_t)
safer alternative to strncat
int ui_perror(char *emsg_str)
Display a simple error message window or print to stderr.
int ui_display_error(char *msg0, char *msg1, char *msg2, char *msg3)
Display an error message window or print to stderr.