Changeset 5e109e1 in mainline for uspace/app/uidemo/uidemo.c


Ignore:
Timestamp:
2021-08-10T09:49:21Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
307d4d2, 3a4a944f
Parents:
edeee9f
git-author:
Jiri Svoboda <jiri@…> (2021-08-09 18:49:14)
git-committer:
Jiri Svoboda <jiri@…> (2021-08-10 09:49:21)
Message:

File dialog prototype

This only contains a text entry for entering the file path and
OK / Cancel buttons.

File:
1 edited

Legend:

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

    redeee9f r5e109e1  
    4040#include <str.h>
    4141#include <ui/entry.h>
     42#include <ui/filedialog.h>
    4243#include <ui/fixed.h>
    4344#include <ui/image.h>
     
    8586};
    8687
     88static void uidemo_file_load(ui_menu_entry_t *, void *);
    8789static void uidemo_file_message(ui_menu_entry_t *, void *);
    8890static void uidemo_file_exit(ui_menu_entry_t *, void *);
     91
     92static void file_dialog_bok(ui_file_dialog_t *, void *, const char *);
     93static void file_dialog_bcancel(ui_file_dialog_t *, void *);
     94static void file_dialog_close(ui_file_dialog_t *, void *);
     95
     96static ui_file_dialog_cb_t file_dialog_cb = {
     97        .bok = file_dialog_bok,
     98        .bcancel = file_dialog_bcancel,
     99        .close = file_dialog_close
     100};
    89101
    90102static void msg_dialog_button(ui_msg_dialog_t *, void *, unsigned);
     
    191203}
    192204
    193 /** File/message menu entry selected.
    194  *
    195  * @param mentry Menu entry
    196  * @param arg Argument (demo)
    197  */
    198 static void uidemo_file_message(ui_menu_entry_t *mentry, void *arg)
    199 {
    200         ui_demo_t *demo = (ui_demo_t *) arg;
     205/** Display a message window.
     206 *
     207 * @param demo UI demo
     208 * @param caption Window caption
     209 * @param text Message text
     210 */
     211static void uidemo_show_message(ui_demo_t *demo, const char *caption,
     212    const char *text)
     213{
    201214        ui_msg_dialog_params_t mdparams;
    202215        ui_msg_dialog_t *dialog;
     
    204217
    205218        ui_msg_dialog_params_init(&mdparams);
     219        mdparams.caption = caption;
     220        mdparams.text = text;
     221
     222        rc = ui_msg_dialog_create(demo->ui, &mdparams, &dialog);
     223        if (rc != EOK) {
     224                printf("Error creating message dialog.\n");
     225                return;
     226        }
     227
     228        ui_msg_dialog_set_cb(dialog, &msg_dialog_cb, &demo);
     229}
     230
     231
     232/** File/load menu entry selected.
     233 *
     234 * @param mentry Menu entry
     235 * @param arg Argument (demo)
     236 */
     237static void uidemo_file_load(ui_menu_entry_t *mentry, void *arg)
     238{
     239        ui_demo_t *demo = (ui_demo_t *) arg;
     240        ui_file_dialog_params_t fdparams;
     241        ui_file_dialog_t *dialog;
     242        errno_t rc;
     243
     244        ui_file_dialog_params_init(&fdparams);
     245        fdparams.caption = "Load File";
     246
     247        rc = ui_file_dialog_create(demo->ui, &fdparams, &dialog);
     248        if (rc != EOK) {
     249                printf("Error creating message dialog.\n");
     250                return;
     251        }
     252
     253        ui_file_dialog_set_cb(dialog, &file_dialog_cb, demo);
     254}
     255
     256/** File/message menu entry selected.
     257 *
     258 * @param mentry Menu entry
     259 * @param arg Argument (demo)
     260 */
     261static void uidemo_file_message(ui_menu_entry_t *mentry, void *arg)
     262{
     263        ui_demo_t *demo = (ui_demo_t *) arg;
     264        ui_msg_dialog_params_t mdparams;
     265        ui_msg_dialog_t *dialog;
     266        errno_t rc;
     267
     268        ui_msg_dialog_params_init(&mdparams);
    206269        mdparams.caption = "Message For You";
    207270        mdparams.text = "Hello, world!";
     
    214277
    215278        ui_msg_dialog_set_cb(dialog, &msg_dialog_cb, &demo);
    216 
    217279}
    218280
     
    227289
    228290        ui_quit(demo->ui);
     291}
     292
     293/** File dialog OK button press.
     294 *
     295 * @param dialog File dialog
     296 * @param arg Argument (ui_demo_t *)
     297 * @param fname File name
     298 */
     299static void file_dialog_bok(ui_file_dialog_t *dialog, void *arg,
     300    const char *fname)
     301{
     302        ui_demo_t *demo = (ui_demo_t *) arg;
     303        char buf[128];
     304        char *p;
     305        FILE *f;
     306
     307        ui_file_dialog_destroy(dialog);
     308
     309        f = fopen(fname, "rt");
     310        if (f == NULL) {
     311                uidemo_show_message(demo, "Error", "Error opening file.");
     312                return;
     313        }
     314
     315        p = fgets(buf, sizeof(buf), f);
     316        if (p == NULL) {
     317                uidemo_show_message(demo, "Error", "Error reading file.");
     318                fclose(f);
     319                return;
     320        }
     321
     322        /* Cut string off at the first non-printable character */
     323        p = buf;
     324        while (*p != '\0') {
     325                if (*p < ' ') {
     326                        *p = '\0';
     327                        break;
     328                }
     329                ++p;
     330        }
     331
     332        ui_entry_set_text(demo->entry, buf);
     333        fclose(f);
     334}
     335
     336/** File dialog cancel button press.
     337 *
     338 * @param dialog File dialog
     339 * @param arg Argument (ui_demo_t *)
     340 */
     341static void file_dialog_bcancel(ui_file_dialog_t *dialog, void *arg)
     342{
     343        ui_demo_t *demo = (ui_demo_t *) arg;
     344
     345        (void) demo;
     346        ui_file_dialog_destroy(dialog);
     347}
     348
     349/** Message dialog close request.
     350 *
     351 * @param dialog File dialog
     352 * @param arg Argument (ui_demo_t *)
     353 */
     354static void file_dialog_close(ui_file_dialog_t *dialog, void *arg)
     355{
     356        ui_demo_t *demo = (ui_demo_t *) arg;
     357
     358        (void) demo;
     359        ui_file_dialog_destroy(dialog);
    229360}
    230361
     
    271402        gfx_coord2_t off;
    272403        ui_menu_entry_t *mmsg;
     404        ui_menu_entry_t *mload;
    273405        ui_menu_entry_t *mfoo;
    274406        ui_menu_entry_t *mbar;
     
    342474        ui_menu_entry_set_cb(mmsg, uidemo_file_message, (void *) &demo);
    343475
     476        rc = ui_menu_entry_create(demo.mfile, "Load", "", &mload);
     477        if (rc != EOK) {
     478                printf("Error creating menu.\n");
     479                return rc;
     480        }
     481
     482        ui_menu_entry_set_cb(mload, uidemo_file_load, (void *) &demo);
     483
    344484        rc = ui_menu_entry_create(demo.mfile, "Foo", "Ctrl-Alt-Del", &mfoo);
    345485        if (rc != EOK) {
Note: See TracChangeset for help on using the changeset viewer.