Changeset d942ca4 in mainline


Ignore:
Timestamp:
2020-11-10T09:46:07Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
66a2becf
Parents:
03145ee
git-author:
Jiri Svoboda <jiri@…> (2020-11-09 20:45:53)
git-committer:
Jiri Svoboda <jiri@…> (2020-11-10 09:46:07)
Message:

Calculator should respond to keyboard control

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/calculator/calculator.c

    r03145ee rd942ca4  
    3838
    3939#include <ctype.h>
     40#include <io/kbd_event.h>
    4041#include <stdbool.h>
    4142#include <stdio.h>
     
    9697typedef struct {
    9798        ui_t *ui;
     99        ui_pbutton_t *btn_eval;
     100        ui_pbutton_t *btn_clear;
     101        ui_pbutton_t *btn_add;
     102        ui_pbutton_t *btn_sub;
     103        ui_pbutton_t *btn_mul;
     104        ui_pbutton_t *btn_div;
     105        ui_pbutton_t *btn_0;
     106        ui_pbutton_t *btn_1;
     107        ui_pbutton_t *btn_2;
     108        ui_pbutton_t *btn_3;
     109        ui_pbutton_t *btn_4;
     110        ui_pbutton_t *btn_5;
     111        ui_pbutton_t *btn_6;
     112        ui_pbutton_t *btn_7;
     113        ui_pbutton_t *btn_8;
     114        ui_pbutton_t *btn_9;
    98115} calc_t;
    99116
     
    115132
    116133static void wnd_close(ui_window_t *, void *);
     134static void wnd_kbd_event(ui_window_t *, void *, kbd_event_t *);
    117135
    118136static ui_window_cb_t window_cb = {
    119         .close = wnd_close
     137        .close = wnd_close,
     138        .kbd = wnd_kbd_event
    120139};
    121140
    122 /** Window close button was clicked.
     141/** Window close request
    123142 *
    124143 * @param window Window
     
    130149
    131150        ui_quit(calc->ui);
     151}
     152
     153/** Window keyboard event
     154 *
     155 * @param window Window
     156 * @param arg Argument (calc_t *)
     157 * @param event Keyboard event
     158 */
     159static void wnd_kbd_event(ui_window_t *window, void *arg, kbd_event_t *event)
     160{
     161        calc_t *calc = (calc_t *) arg;
     162
     163        switch (event->key) {
     164        case KC_ENTER:
     165                if (event->type == KEY_PRESS)
     166                        ui_pbutton_press(calc->btn_eval);
     167                else
     168                        ui_pbutton_release(calc->btn_eval);
     169                break;
     170        case KC_BACKSPACE:
     171                if (event->type == KEY_PRESS)
     172                        ui_pbutton_press(calc->btn_clear);
     173                else
     174                        ui_pbutton_release(calc->btn_clear);
     175                break;
     176        case KC_MINUS:
     177                if (event->type == KEY_PRESS)
     178                        ui_pbutton_press(calc->btn_sub);
     179                else
     180                        ui_pbutton_release(calc->btn_sub);
     181                break;
     182        case KC_EQUALS:
     183                if (event->type == KEY_PRESS)
     184                        ui_pbutton_press(calc->btn_add);
     185                else
     186                        ui_pbutton_release(calc->btn_add);
     187                break;
     188        case KC_SLASH:
     189                if (event->type == KEY_PRESS)
     190                        ui_pbutton_press(calc->btn_div);
     191                else
     192                        ui_pbutton_release(calc->btn_div);
     193                break;
     194        case KC_0:
     195                if (event->type == KEY_PRESS)
     196                        ui_pbutton_press(calc->btn_0);
     197                else
     198                        ui_pbutton_release(calc->btn_0);
     199                break;
     200        case KC_1:
     201                if (event->type == KEY_PRESS)
     202                        ui_pbutton_press(calc->btn_1);
     203                else
     204                        ui_pbutton_release(calc->btn_1);
     205                break;
     206        case KC_2:
     207                if (event->type == KEY_PRESS)
     208                        ui_pbutton_press(calc->btn_2);
     209                else
     210                        ui_pbutton_release(calc->btn_2);
     211                break;
     212        case KC_3:
     213                if (event->type == KEY_PRESS)
     214                        ui_pbutton_press(calc->btn_3);
     215                else
     216                        ui_pbutton_release(calc->btn_3);
     217                break;
     218        case KC_4:
     219                if (event->type == KEY_PRESS)
     220                        ui_pbutton_press(calc->btn_4);
     221                else
     222                        ui_pbutton_release(calc->btn_4);
     223                break;
     224        case KC_5:
     225                if (event->type == KEY_PRESS)
     226                        ui_pbutton_press(calc->btn_5);
     227                else
     228                        ui_pbutton_release(calc->btn_5);
     229                break;
     230        case KC_6:
     231                if (event->type == KEY_PRESS)
     232                        ui_pbutton_press(calc->btn_6);
     233                else
     234                        ui_pbutton_release(calc->btn_6);
     235                break;
     236        case KC_7:
     237                if (event->type == KEY_PRESS)
     238                        ui_pbutton_press(calc->btn_7);
     239                else
     240                        ui_pbutton_release(calc->btn_7);
     241                break;
     242        case KC_8:
     243                if ((event->mods & KM_SHIFT) != 0) {
     244                        if (event->type == KEY_PRESS)
     245                                ui_pbutton_press(calc->btn_mul);
     246                        else
     247                                ui_pbutton_release(calc->btn_mul);
     248                } else {
     249                        if (event->type == KEY_PRESS)
     250                                ui_pbutton_press(calc->btn_8);
     251                        else
     252                                ui_pbutton_release(calc->btn_8);
     253                }
     254                break;
     255        case KC_9:
     256                if (event->type == KEY_PRESS)
     257                        ui_pbutton_press(calc->btn_9);
     258                else
     259                        ui_pbutton_release(calc->btn_9);
     260                break;
     261        default:
     262                break;
     263        }
    132264}
    133265
     
    564696        ui_wnd_params_t params;
    565697        ui_window_t *window;
    566         ui_pbutton_t *pb_eval;
    567698        gfx_rect_t rect;
    568699        calc_t calc;
     
    638769
    639770        rc = calc_button_create(ui_res, fixed, 0, 0, "7", &calc_pbutton_cb,
    640             (void *) "7", NULL);
     771            (void *) "7", &calc.btn_7);
    641772        if (rc != EOK)
    642773                return rc;
    643774
    644775        rc = calc_button_create(ui_res, fixed, 1, 0, "8", &calc_pbutton_cb,
    645             (void *) "8", NULL);
     776            (void *) "8", &calc.btn_8);
    646777        if (rc != EOK)
    647778                return rc;
    648779
    649780        rc = calc_button_create(ui_res, fixed, 2, 0, "9", &calc_pbutton_cb,
    650             (void *) "9", NULL);
     781            (void *) "9", &calc.btn_9);
    651782        if (rc != EOK)
    652783                return rc;
    653784
    654785        rc = calc_button_create(ui_res, fixed, 3, 0, "/", &calc_pbutton_cb,
    655             (void *) "/", NULL);
     786            (void *) "/", &calc.btn_div);
    656787        if (rc != EOK)
    657788                return rc;
    658789
    659790        rc = calc_button_create(ui_res, fixed, 0, 1, "4", &calc_pbutton_cb,
    660             (void *) "4", NULL);
     791            (void *) "4", &calc.btn_4);
    661792        if (rc != EOK)
    662793                return rc;
    663794
    664795        rc = calc_button_create(ui_res, fixed, 1, 1, "5", &calc_pbutton_cb,
    665             (void *) "5", NULL);
     796            (void *) "5", &calc.btn_5);
    666797        if (rc != EOK)
    667798                return rc;
    668799
    669800        rc = calc_button_create(ui_res, fixed, 2, 1, "6", &calc_pbutton_cb,
    670             (void *) "6", NULL);
     801            (void *) "6", &calc.btn_6);
    671802        if (rc != EOK)
    672803                return rc;
    673804
    674805        rc = calc_button_create(ui_res, fixed, 3, 1, "*", &calc_pbutton_cb,
    675             (void *) "*", NULL);
     806            (void *) "*", &calc.btn_mul);
    676807        if (rc != EOK)
    677808                return rc;
    678809
    679810        rc = calc_button_create(ui_res, fixed, 0, 2, "1", &calc_pbutton_cb,
    680             (void *) "1", NULL);
     811            (void *) "1", &calc.btn_1);
    681812        if (rc != EOK)
    682813                return rc;
    683814
    684815        rc = calc_button_create(ui_res, fixed, 1, 2, "2", &calc_pbutton_cb,
    685             (void *) "2", NULL);
     816            (void *) "2", &calc.btn_2);
    686817        if (rc != EOK)
    687818                return rc;
    688819
    689820        rc = calc_button_create(ui_res, fixed, 2, 2, "3", &calc_pbutton_cb,
    690             (void *) "3", NULL);
     821            (void *) "3", &calc.btn_3);
    691822        if (rc != EOK)
    692823                return rc;
    693824
    694825        rc = calc_button_create(ui_res, fixed, 3, 2, "-", &calc_pbutton_cb,
    695             (void *) "-", NULL);
     826            (void *) "-", &calc.btn_sub);
    696827        if (rc != EOK)
    697828                return rc;
    698829
    699830        rc = calc_button_create(ui_res, fixed, 0, 3, "0", &calc_pbutton_cb,
    700             (void *) "0", NULL);
     831            (void *) "0", &calc.btn_0);
    701832        if (rc != EOK)
    702833                return rc;
    703834
    704835        rc = calc_button_create(ui_res, fixed, 1, 3, "C", &calc_clear_cb,
    705             (void *) "C", NULL);
     836            (void *) "C", &calc.btn_clear);
    706837        if (rc != EOK)
    707838                return rc;
    708839
    709840        rc = calc_button_create(ui_res, fixed, 2, 3, "=", &calc_eval_cb,
    710             (void *) "=", &pb_eval);
     841            (void *) "=", &calc.btn_eval);
    711842        if (rc != EOK)
    712843                return rc;
    713844
    714845        rc = calc_button_create(ui_res, fixed, 3, 3, "+", &calc_pbutton_cb,
    715             (void *) "+", NULL);
    716         if (rc != EOK)
    717                 return rc;
    718 
    719         ui_pbutton_set_default(pb_eval, true);
     846            (void *) "+", &calc.btn_add);
     847        if (rc != EOK)
     848                return rc;
     849
     850        ui_pbutton_set_default(calc.btn_eval, true);
    720851
    721852        ui_window_add(window, ui_fixed_ctl(fixed));
Note: See TracChangeset for help on using the changeset viewer.