Ignore:
File:
1 edited

Legend:

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

    r80d4aea r08499f0  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3333 */
    3434
     35#include <fibril_synch.h>
    3536#include <gfx/bitmap.h>
    3637#include <gfx/coord.h>
     
    4445#include <ui/image.h>
    4546#include <ui/label.h>
     47#include <ui/list.h>
     48#include <ui/menu.h>
    4649#include <ui/menubar.h>
     50#include <ui/menudd.h>
    4751#include <ui/menuentry.h>
    48 #include <ui/menu.h>
    4952#include <ui/msgdialog.h>
    5053#include <ui/pbutton.h>
    5154#include <ui/promptdialog.h>
    5255#include <ui/resource.h>
     56#include <ui/selectdialog.h>
     57#include <ui/tab.h>
     58#include <ui/tabset.h>
    5359#include <ui/ui.h>
    5460#include <ui/window.h>
    5561#include "uidemo.h"
    5662
     63enum {
     64        scrollbar_update_interval_ms = 1000,
     65        ui_demo_progress_step = 17
     66};
     67
    5768static errno_t bitmap_moire(gfx_bitmap_t *, gfx_coord_t, gfx_coord_t);
    5869
     
    8798};
    8899
     100static void scrollbar_up(ui_scrollbar_t *, void *);
     101static void scrollbar_down(ui_scrollbar_t *, void *);
     102static void scrollbar_page_up(ui_scrollbar_t *, void *);
     103static void scrollbar_page_down(ui_scrollbar_t *, void *);
     104static void scrollbar_moved(ui_scrollbar_t *, void *, gfx_coord_t);
     105
     106static ui_scrollbar_cb_t scrollbar_cb = {
     107        .up = scrollbar_up,
     108        .down = scrollbar_down,
     109        .page_up = scrollbar_page_up,
     110        .page_down = scrollbar_page_down,
     111        .moved = scrollbar_moved
     112};
     113
    89114static void uidemo_file_load(ui_menu_entry_t *, void *);
    90115static void uidemo_file_message(ui_menu_entry_t *, void *);
     116static void uidemo_file_confirmation(ui_menu_entry_t *, void *);
    91117static void uidemo_file_exit(ui_menu_entry_t *, void *);
    92118static void uidemo_edit_modify(ui_menu_entry_t *, void *);
     119static void uidemo_edit_insert_character(ui_menu_entry_t *, void *);
    93120
    94121static void file_dialog_bok(ui_file_dialog_t *, void *, const char *);
     
    110137        .bcancel = prompt_dialog_bcancel,
    111138        .close = prompt_dialog_close
     139};
     140
     141static void select_dialog_bok(ui_select_dialog_t *, void *, void *);
     142static void select_dialog_bcancel(ui_select_dialog_t *, void *);
     143static void select_dialog_close(ui_select_dialog_t *, void *);
     144
     145static ui_select_dialog_cb_t select_dialog_cb = {
     146        .bok = select_dialog_bok,
     147        .bcancel = select_dialog_bcancel,
     148        .close = select_dialog_close
    112149};
    113150
     
    215252}
    216253
    217 /** Display a message window.
     254/** Scrollbar up button pressed.
     255 *
     256 * @param scrollbar Scrollbar
     257 * @param arg Argument (demo)
     258 */
     259static void scrollbar_up(ui_scrollbar_t *scrollbar, void *arg)
     260{
     261        gfx_coord_t pos;
     262
     263        pos = ui_scrollbar_get_pos(scrollbar);
     264        ui_scrollbar_set_pos(scrollbar, pos - 1);
     265
     266        pos = ui_scrollbar_get_pos(scrollbar);
     267        scrollbar_moved(scrollbar, arg, pos);
     268}
     269
     270/** Scrollbar down button pressed.
     271 *
     272 * @param scrollbar Scrollbar
     273 * @param arg Argument (demo)
     274 */
     275static void scrollbar_down(ui_scrollbar_t *scrollbar, void *arg)
     276{
     277        gfx_coord_t pos;
     278
     279        pos = ui_scrollbar_get_pos(scrollbar);
     280        ui_scrollbar_set_pos(scrollbar, pos + 1);
     281
     282        pos = ui_scrollbar_get_pos(scrollbar);
     283        scrollbar_moved(scrollbar, arg, pos);
     284}
     285
     286/** Scrollbar page up event.
     287 *
     288 * @param scrollbar Scrollbar
     289 * @param arg Argument (demo)
     290 */
     291static void scrollbar_page_up(ui_scrollbar_t *scrollbar, void *arg)
     292{
     293        gfx_coord_t pos;
     294
     295        pos = ui_scrollbar_get_pos(scrollbar);
     296        ui_scrollbar_set_pos(scrollbar, pos -
     297            ui_scrollbar_trough_length(scrollbar) / 4);
     298
     299        pos = ui_scrollbar_get_pos(scrollbar);
     300        scrollbar_moved(scrollbar, arg, pos);
     301}
     302
     303/** Scrollbar page down event.
     304 *
     305 * @param scrollbar Scrollbar
     306 * @param arg Argument (demo)
     307 */
     308static void scrollbar_page_down(ui_scrollbar_t *scrollbar, void *arg)
     309{
     310        gfx_coord_t pos;
     311
     312        pos = ui_scrollbar_get_pos(scrollbar);
     313        ui_scrollbar_set_pos(scrollbar, pos +
     314            ui_scrollbar_trough_length(scrollbar) / 4);
     315
     316        pos = ui_scrollbar_get_pos(scrollbar);
     317        scrollbar_moved(scrollbar, arg, pos);
     318}
     319
     320/** Scrollbar was moved.
     321 *
     322 * @param scrollbar Scrollbar
     323 * @param arg Argument (demo)
     324 * @param pos Position
     325 */
     326static void scrollbar_moved(ui_scrollbar_t *scrollbar, void *arg,
     327    gfx_coord_t pos)
     328{
     329        ui_demo_t *demo = (ui_demo_t *) arg;
     330        char *str;
     331        errno_t rc;
     332        int rv;
     333
     334        rv = asprintf(&str, "Scrollbar: %d of %d", (int) pos,
     335            ui_scrollbar_move_length(scrollbar));
     336        if (rv < 0) {
     337                printf("Out of memory.\n");
     338                return;
     339        }
     340
     341        rc = ui_entry_set_text(demo->entry, str);
     342        if (rc != EOK)
     343                printf("Error changing entry text.\n");
     344        (void) ui_entry_paint(demo->entry);
     345
     346        free(str);
     347}
     348
     349/** Display a message window with OK button.
    218350 *
    219351 * @param demo UI demo
     
    290422}
    291423
     424/** File / Confirmation menu entry selected.
     425 *
     426 * @param mentry Menu entry
     427 * @param arg Argument (demo)
     428 */
     429static void uidemo_file_confirmation(ui_menu_entry_t *mentry, void *arg)
     430{
     431        ui_demo_t *demo = (ui_demo_t *) arg;
     432        ui_msg_dialog_params_t mdparams;
     433        ui_msg_dialog_t *dialog;
     434        errno_t rc;
     435
     436        ui_msg_dialog_params_init(&mdparams);
     437        mdparams.caption = "Confirmation";
     438        mdparams.text = "This will not actually do anything. Proceed?";
     439        mdparams.choice = umdc_ok_cancel;
     440
     441        rc = ui_msg_dialog_create(demo->ui, &mdparams, &dialog);
     442        if (rc != EOK) {
     443                printf("Error creating message dialog.\n");
     444                return;
     445        }
     446
     447        ui_msg_dialog_set_cb(dialog, &msg_dialog_cb, &demo);
     448}
     449
    292450/** File / Exit menu entry selected.
    293451 *
     
    320478        rc = ui_prompt_dialog_create(demo->ui, &pdparams, &dialog);
    321479        if (rc != EOK) {
    322                 printf("Error creating message dialog.\n");
     480                printf("Error creating prompt dialog.\n");
    323481                return;
    324482        }
    325483
    326484        ui_prompt_dialog_set_cb(dialog, &prompt_dialog_cb, demo);
     485}
     486
     487/** Edit / Insert Character menu entry selected.
     488 *
     489 * @param mentry Menu entry
     490 * @param arg Argument (demo)
     491 */
     492static void uidemo_edit_insert_character(ui_menu_entry_t *mentry, void *arg)
     493{
     494        ui_demo_t *demo = (ui_demo_t *) arg;
     495        ui_select_dialog_params_t sdparams;
     496        ui_select_dialog_t *dialog;
     497        ui_list_entry_attr_t attr;
     498        errno_t rc;
     499
     500        ui_select_dialog_params_init(&sdparams);
     501        sdparams.caption = "Insert Character";
     502        sdparams.prompt = "Select character to insert";
     503
     504        rc = ui_select_dialog_create(demo->ui, &sdparams, &dialog);
     505        if (rc != EOK) {
     506                printf("Error creating select dialog.\n");
     507                return;
     508        }
     509
     510        ui_list_entry_attr_init(&attr);
     511        attr.caption = "Dollar sign ($)";
     512        attr.arg = (void *)'$';
     513        rc = ui_select_dialog_append(dialog, &attr);
     514        if (rc != EOK) {
     515                printf("Error appending entry to list.\n");
     516                return;
     517        }
     518
     519        ui_list_entry_attr_init(&attr);
     520        attr.caption = "Hash sign (#)";
     521        attr.arg = (void *)'#';
     522        rc = ui_select_dialog_append(dialog, &attr);
     523        if (rc != EOK) {
     524                printf("Error appending entry to list.\n");
     525                return;
     526        }
     527
     528        ui_list_entry_attr_init(&attr);
     529        attr.caption = "Question mark (?)";
     530        attr.arg = (void *)'?';
     531        rc = ui_select_dialog_append(dialog, &attr);
     532        if (rc != EOK) {
     533                printf("Error appending entry to list.\n");
     534                return;
     535        }
     536
     537        ui_select_dialog_set_cb(dialog, &select_dialog_cb, demo);
     538
     539        (void) ui_select_dialog_paint(dialog);
    327540}
    328541
     
    413626/** Prompt dialog cancel button press.
    414627 *
    415  * @param dialog File dialog
     628 * @param dialog Prompt dialog
    416629 * @param arg Argument (ui_demo_t *)
    417630 */
     
    426639/** Prompt dialog close request.
    427640 *
    428  * @param dialog File dialog
     641 * @param dialog Prompt dialog
    429642 * @param arg Argument (ui_demo_t *)
    430643 */
     
    435648        (void) demo;
    436649        ui_prompt_dialog_destroy(dialog);
     650}
     651
     652/** Select dialog OK button press.
     653 *
     654 * @param dialog Select dialog
     655 * @param arg Argument (ui_demo_t *)
     656 * @param text Submitted text
     657 */
     658static void select_dialog_bok(ui_select_dialog_t *dialog, void *arg,
     659    void *earg)
     660{
     661        ui_demo_t *demo = (ui_demo_t *) arg;
     662        char str[2];
     663
     664        ui_select_dialog_destroy(dialog);
     665        str[0] = (char)(intptr_t)earg;
     666        str[1] = '\0';
     667        (void) ui_entry_insert_str(demo->entry, str);
     668}
     669
     670/** Select dialog cancel button press.
     671 *
     672 * @param dialog Select dialog
     673 * @param arg Argument (ui_demo_t *)
     674 */
     675static void select_dialog_bcancel(ui_select_dialog_t *dialog, void *arg)
     676{
     677        ui_demo_t *demo = (ui_demo_t *) arg;
     678
     679        (void) demo;
     680        ui_select_dialog_destroy(dialog);
     681}
     682
     683/** Select dialog close request.
     684 *
     685 * @param dialog Select dialog
     686 * @param arg Argument (ui_demo_t *)
     687 */
     688static void select_dialog_close(ui_select_dialog_t *dialog, void *arg)
     689{
     690        ui_demo_t *demo = (ui_demo_t *) arg;
     691
     692        (void) demo;
     693        ui_select_dialog_destroy(dialog);
    437694}
    438695
     
    463720        (void) demo;
    464721        ui_msg_dialog_destroy(dialog);
     722}
     723
     724static void ui_demo_timer_fun(void *arg)
     725{
     726        ui_demo_t *demo = (ui_demo_t *) arg;
     727
     728        if (demo->progress_value < 100) {
     729                demo->progress_value += ui_demo_progress_step;
     730                if (demo->progress_value > 100)
     731                        demo->progress_value = 100;
     732        } else {
     733                demo->progress_value = 0;
     734        }
     735
     736        ui_progress_set_value(demo->progress, demo->progress_value);
     737
     738        if (ui_tab_is_selected(demo->tbars)) {
     739                ui_lock(demo->ui);
     740                ui_progress_paint(demo->progress);
     741                ui_unlock(demo->ui);
     742        }
     743
     744        fibril_timer_set(demo->timer, 1000 * scrollbar_update_interval_ms,
     745            ui_demo_timer_fun, (void *)demo);
    465746}
    466747
     
    486767        ui_menu_entry_t *mexit;
    487768        ui_menu_entry_t *mmodify;
     769        ui_menu_entry_t *minsert_char;
    488770        ui_menu_entry_t *mabout;
     771        ui_list_entry_attr_t eattr;
    489772        errno_t rc;
    490773
     
    500783        ui_wnd_params_init(&params);
    501784        params.caption = "UI Demo";
    502         params.style |= ui_wds_resizable;
     785        params.style |= ui_wds_maximize_btn | ui_wds_resizable;
    503786
    504787        /* FIXME: Auto layout */
     
    506789                params.rect.p0.x = 0;
    507790                params.rect.p0.y = 0;
    508                 params.rect.p1.x = 44;
    509                 params.rect.p1.y = 21;
     791                params.rect.p1.x = 46;
     792                params.rect.p1.y = 25;
    510793        } else {
    511794                params.rect.p0.x = 0;
    512795                params.rect.p0.y = 0;
    513                 params.rect.p1.x = 220;
    514                 params.rect.p1.y = 350;
    515         }
     796                params.rect.p1.x = 255;
     797                params.rect.p1.y = 410;
     798        }
     799
     800        /* Only allow making the window larger */
     801        gfx_rect_dims(&params.rect, &params.min_size);
    516802
    517803        rc = ui_window_create(ui, &params, &window);
     
    539825        }
    540826
    541         rc = ui_menu_create(demo.mbar, "File", &demo.mfile);
     827        rc = ui_menu_dd_create(demo.mbar, "~F~ile", NULL, &demo.mfile);
    542828        if (rc != EOK) {
    543829                printf("Error creating menu.\n");
     
    545831        }
    546832
    547         rc = ui_menu_entry_create(demo.mfile, "Message", "", &mmsg);
     833        rc = ui_menu_entry_create(demo.mfile, "~M~essage", "", &mmsg);
    548834        if (rc != EOK) {
    549835                printf("Error creating menu.\n");
     
    553839        ui_menu_entry_set_cb(mmsg, uidemo_file_message, (void *) &demo);
    554840
    555         rc = ui_menu_entry_create(demo.mfile, "Load", "", &mload);
     841        rc = ui_menu_entry_create(demo.mfile, "~C~onfirmation", "", &mmsg);
    556842        if (rc != EOK) {
    557843                printf("Error creating menu.\n");
     
    559845        }
    560846
     847        ui_menu_entry_set_cb(mmsg, uidemo_file_confirmation, (void *) &demo);
     848
     849        rc = ui_menu_entry_create(demo.mfile, "~L~oad", "", &mload);
     850        if (rc != EOK) {
     851                printf("Error creating menu.\n");
     852                return rc;
     853        }
     854
    561855        ui_menu_entry_set_cb(mload, uidemo_file_load, (void *) &demo);
    562856
    563         rc = ui_menu_entry_create(demo.mfile, "Foo", "Ctrl-Alt-Del", &mfoo);
     857        rc = ui_menu_entry_create(demo.mfile, "~F~oo", "Ctrl-Alt-Del", &mfoo);
    564858        if (rc != EOK) {
    565859                printf("Error creating menu.\n");
     
    567861        }
    568862
    569         rc = ui_menu_entry_create(demo.mfile, "Bar", "", &mbar);
     863        rc = ui_menu_entry_create(demo.mfile, "~B~ar", "", &mbar);
    570864        if (rc != EOK) {
    571865                printf("Error creating menu.\n");
     
    573867        }
    574868
    575         rc = ui_menu_entry_create(demo.mfile, "Foobar", "", &mfoobar);
     869        rc = ui_menu_entry_create(demo.mfile, "F~o~obar", "", &mfoobar);
    576870        if (rc != EOK) {
    577871                printf("Error creating menu.\n");
     
    579873        }
    580874
     875        ui_menu_entry_set_disabled(mfoobar, true);
     876
    581877        rc = ui_menu_entry_sep_create(demo.mfile, &msep);
    582878        if (rc != EOK) {
     
    585881        }
    586882
    587         rc = ui_menu_entry_create(demo.mfile, "Exit", "Alt-F4", &mexit);
     883        rc = ui_menu_entry_create(demo.mfile, "E~x~it", "Alt-F4", &mexit);
    588884        if (rc != EOK) {
    589885                printf("Error creating menu.\n");
     
    593889        ui_menu_entry_set_cb(mexit, uidemo_file_exit, (void *) &demo);
    594890
    595         rc = ui_menu_create(demo.mbar, "Edit", &demo.medit);
     891        rc = ui_menu_dd_create(demo.mbar, "~E~dit", NULL, &demo.medit);
    596892        if (rc != EOK) {
    597893                printf("Error creating menu.\n");
     
    599895        }
    600896
    601         rc = ui_menu_entry_create(demo.medit, "Modify", "", &mmodify);
     897        rc = ui_menu_entry_create(demo.medit, "~M~odify", "", &mmodify);
    602898        if (rc != EOK) {
    603899                printf("Error creating menu.\n");
     
    607903        ui_menu_entry_set_cb(mmodify, uidemo_edit_modify, (void *) &demo);
    608904
    609         rc = ui_menu_create(demo.mbar, "Preferences", &demo.mpreferences);
     905        rc = ui_menu_entry_create(demo.medit, "~I~nsert Character",
     906            "", &minsert_char);
    610907        if (rc != EOK) {
    611908                printf("Error creating menu.\n");
     
    613910        }
    614911
    615         rc = ui_menu_create(demo.mbar, "Help", &demo.mhelp);
     912        ui_menu_entry_set_cb(minsert_char, uidemo_edit_insert_character,
     913            (void *) &demo);
     914
     915        rc = ui_menu_dd_create(demo.mbar, "~P~references", NULL,
     916            &demo.mpreferences);
    616917        if (rc != EOK) {
    617918                printf("Error creating menu.\n");
     
    619920        }
    620921
    621         rc = ui_menu_entry_create(demo.mhelp, "About", "Ctrl-H, F1", &mabout);
     922        rc = ui_menu_dd_create(demo.mbar, "~H~elp", NULL, &demo.mhelp);
     923        if (rc != EOK) {
     924                printf("Error creating menu.\n");
     925                return rc;
     926        }
     927
     928        rc = ui_menu_entry_create(demo.mhelp, "~A~bout", "Ctrl-H, F1", &mabout);
    622929        if (rc != EOK) {
    623930                printf("Error creating menu.\n");
     
    634941                rect.p0.x = 4;
    635942                rect.p0.y = 30;
    636                 rect.p1.x = 216;
     943                rect.p1.x = 251;
    637944                rect.p1.y = 52;
    638945        }
     946
    639947        ui_menu_bar_set_rect(demo.mbar, &rect);
    640948
     
    645953        }
    646954
     955        rc = ui_tab_set_create(ui_res, &demo.tabset);
     956        if (rc != EOK) {
     957                printf("Error creating tab set.\n");
     958                return rc;
     959        }
     960
     961        /* FIXME: Auto layout */
     962        if (ui_is_textmode(ui)) {
     963                rect.p0.x = 2;
     964                rect.p0.y = 2;
     965                rect.p1.x = 44;
     966                rect.p1.y = 24;
     967        } else {
     968                rect.p0.x = 8;
     969                rect.p0.y = 53;
     970                rect.p1.x = 250;
     971                rect.p1.y = 405;
     972        }
     973
     974        ui_tab_set_set_rect(demo.tabset, &rect);
     975
     976        rc = ui_tab_create(demo.tabset, "Basic", &demo.tbasic);
     977        if (rc != EOK) {
     978                printf("Error creating tab.\n");
     979                return rc;
     980        }
     981
     982        rc = ui_tab_create(demo.tabset, "Lists", &demo.tlists);
     983        if (rc != EOK) {
     984                printf("Error creating tab.\n");
     985                return rc;
     986        }
     987
     988        rc = ui_tab_create(demo.tabset, "Bars", &demo.tbars);
     989        if (rc != EOK) {
     990                printf("Error creating tab.\n");
     991                return rc;
     992        }
     993
     994        rc = ui_fixed_add(demo.fixed, ui_tab_set_ctl(demo.tabset));
     995        if (rc != EOK) {
     996                printf("Error adding control to layout.\n");
     997                return rc;
     998        }
     999
     1000        rc = ui_fixed_create(&demo.bfixed);
     1001        if (rc != EOK) {
     1002                printf("Error creating fixed layout.\n");
     1003                return rc;
     1004        }
     1005
    6471006        rc = ui_entry_create(window, "", &demo.entry);
    6481007        if (rc != EOK) {
     
    6531012        /* FIXME: Auto layout */
    6541013        if (ui_is_textmode(ui)) {
    655                 rect.p0.x = 2;
    656                 rect.p0.y = 3;
    657                 rect.p1.x = 42;
    658                 rect.p1.y = 4;
     1014                rect.p0.x = 4;
     1015                rect.p0.y = 5;
     1016                rect.p1.x = 41;
     1017                rect.p1.y = 6;
    6591018        } else {
    6601019                rect.p0.x = 15;
    661                 rect.p0.y = 53;
     1020                rect.p0.y = 88;
    6621021                rect.p1.x = 205;
    663                 rect.p1.y = 78;
     1022                rect.p1.y = 113;
    6641023        }
    6651024
     
    6671026        ui_entry_set_halign(demo.entry, gfx_halign_center);
    6681027
    669         rc = ui_fixed_add(demo.fixed, ui_entry_ctl(demo.entry));
     1028        rc = ui_fixed_add(demo.bfixed, ui_entry_ctl(demo.entry));
    6701029        if (rc != EOK) {
    6711030                printf("Error adding control to layout.\n");
     
    6811040        /* FIXME: Auto layout */
    6821041        if (ui_is_textmode(ui)) {
    683                 rect.p0.x = 2;
    684                 rect.p0.y = 5;
    685                 rect.p1.x = 42;
    686                 rect.p1.y = 6;
     1042                rect.p0.x = 4;
     1043                rect.p0.y = 7;
     1044                rect.p1.x = 41;
     1045                rect.p1.y = 8;
    6871046        } else {
    6881047                rect.p0.x = 60;
    689                 rect.p0.y = 88;
     1048                rect.p0.y = 123;
    6901049                rect.p1.x = 160;
    691                 rect.p1.y = 101;
     1050                rect.p1.y = 136;
    6921051        }
    6931052
     
    6951054        ui_label_set_halign(demo.label, gfx_halign_center);
    6961055
    697         rc = ui_fixed_add(demo.fixed, ui_label_ctl(demo.label));
     1056        rc = ui_fixed_add(demo.bfixed, ui_label_ctl(demo.label));
    6981057        if (rc != EOK) {
    6991058                printf("Error adding control to layout.\n");
     
    7111070        /* FIXME: Auto layout */
    7121071        if (ui_is_textmode(ui)) {
    713                 rect.p0.x = 2;
    714                 rect.p0.y = 7;
    715                 rect.p1.x = 12;
    716                 rect.p1.y = 8;
     1072                rect.p0.x = 4;
     1073                rect.p0.y = 9;
     1074                rect.p1.x = 15;
     1075                rect.p1.y = 10;
    7171076        } else {
    7181077                rect.p0.x = 15;
    719                 rect.p0.y = 111;
     1078                rect.p0.y = 146;
    7201079                rect.p1.x = 105;
    721                 rect.p1.y = 139;
     1080                rect.p1.y = 174;
    7221081        }
    7231082
     
    7261085        ui_pbutton_set_default(demo.pb1, true);
    7271086
    728         rc = ui_fixed_add(demo.fixed, ui_pbutton_ctl(demo.pb1));
     1087        rc = ui_fixed_add(demo.bfixed, ui_pbutton_ctl(demo.pb1));
    7291088        if (rc != EOK) {
    7301089                printf("Error adding control to layout.\n");
     
    7411100
    7421101        if (ui_is_textmode(ui)) {
    743                 rect.p0.x = 32;
    744                 rect.p0.y = 7;
    745                 rect.p1.x = 42;
    746                 rect.p1.y = 8;
     1102                rect.p0.x = 30;
     1103                rect.p0.y = 9;
     1104                rect.p1.x = 41;
     1105                rect.p1.y = 10;
    7471106        } else {
    7481107                rect.p0.x = 115;
    749                 rect.p0.y = 111;
     1108                rect.p0.y = 146;
    7501109                rect.p1.x = 205;
    751                 rect.p1.y = 139;
     1110                rect.p1.y = 174;
    7521111        }
    7531112
    7541113        ui_pbutton_set_rect(demo.pb2, &rect);
    7551114
    756         rc = ui_fixed_add(demo.fixed, ui_pbutton_ctl(demo.pb2));
     1115        rc = ui_fixed_add(demo.bfixed, ui_pbutton_ctl(demo.pb2));
    7571116        if (rc != EOK) {
    7581117                printf("Error adding control to layout.\n");
     
    7641123                bparams.rect.p0.x = 0;
    7651124                bparams.rect.p0.y = 0;
    766                 bparams.rect.p1.x = 40;
     1125                bparams.rect.p1.x = 37;
    7671126                bparams.rect.p1.y = 2;
    7681127        } else {
     
    7881147
    7891148        if (ui_is_textmode(ui)) {
    790                 off.x = 2;
    791                 off.y = 9;
     1149                off.x = 4;
     1150                off.y = 11;
    7921151        } else {
    7931152                off.x = 15;
    794                 off.y = 155;
     1153                off.y = 190;
    7951154        }
    7961155
     
    8061165        ui_image_set_rect(demo.image, &rect);
    8071166
    808         rc = ui_fixed_add(demo.fixed, ui_image_ctl(demo.image));
     1167        rc = ui_fixed_add(demo.bfixed, ui_image_ctl(demo.image));
    8091168        if (rc != EOK) {
    8101169                printf("Error adding control to layout.\n");
     
    8221181        /* FIXME: Auto layout */
    8231182        if (ui_is_textmode(ui)) {
    824                 rect.p0.x = 2;
    825                 rect.p0.y = 12;
    826                 rect.p1.x = 12;
    827                 rect.p1.y = 13;
     1183                rect.p0.x = 4;
     1184                rect.p0.y = 14;
     1185                rect.p1.x = 14;
     1186                rect.p1.y = 15;
    8281187        } else {
    8291188                rect.p0.x = 15;
    830                 rect.p0.y = 190;
     1189                rect.p0.y = 225;
    8311190                rect.p1.x = 140;
    832                 rect.p1.y = 210;
     1191                rect.p1.y = 245;
    8331192        }
    8341193
    8351194        ui_checkbox_set_rect(demo.checkbox, &rect);
    8361195
    837         rc = ui_fixed_add(demo.fixed, ui_checkbox_ctl(demo.checkbox));
     1196        rc = ui_fixed_add(demo.bfixed, ui_checkbox_ctl(demo.checkbox));
    8381197        if (rc != EOK) {
    8391198                printf("Error adding control to layout.\n");
     
    8591218        /* FIXME: Auto layout */
    8601219        if (ui_is_textmode(ui)) {
    861                 rect.p0.x = 2;
    862                 rect.p0.y = 14;
    863                 rect.p1.x = 12;
    864                 rect.p1.y = 15;
     1220                rect.p0.x = 4;
     1221                rect.p0.y = 16;
     1222                rect.p1.x = 14;
     1223                rect.p1.y = 17;
    8651224        } else {
    8661225                rect.p0.x = 15;
    867                 rect.p0.y = 220;
     1226                rect.p0.y = 255;
    8681227                rect.p1.x = 140;
    869                 rect.p1.y = 240;
     1228                rect.p1.y = 275;
    8701229        }
    8711230        ui_rbutton_set_rect(demo.rbleft, &rect);
    8721231
    873         rc = ui_fixed_add(demo.fixed, ui_rbutton_ctl(demo.rbleft));
     1232        rc = ui_fixed_add(demo.bfixed, ui_rbutton_ctl(demo.rbleft));
    8741233        if (rc != EOK) {
    8751234                printf("Error adding control to layout.\n");
     
    8861245        /* FIXME: Auto layout */
    8871246        if (ui_is_textmode(ui)) {
    888                 rect.p0.x = 2;
    889                 rect.p0.y = 15;
    890                 rect.p1.x = 12;
    891                 rect.p1.y = 16;
     1247                rect.p0.x = 4;
     1248                rect.p0.y = 17;
     1249                rect.p1.x = 14;
     1250                rect.p1.y = 18;
    8921251        } else {
    8931252                rect.p0.x = 15;
    894                 rect.p0.y = 250;
     1253                rect.p0.y = 285;
    8951254                rect.p1.x = 140;
    896                 rect.p1.y = 270;
     1255                rect.p1.y = 305;
    8971256        }
    8981257        ui_rbutton_set_rect(demo.rbcenter, &rect);
    8991258        ui_rbutton_select(demo.rbcenter);
    9001259
    901         rc = ui_fixed_add(demo.fixed, ui_rbutton_ctl(demo.rbcenter));
     1260        rc = ui_fixed_add(demo.bfixed, ui_rbutton_ctl(demo.rbcenter));
    9021261        if (rc != EOK) {
    9031262                printf("Error adding control to layout.\n");
     
    9141273        /* FIXME: Auto layout */
    9151274        if (ui_is_textmode(ui)) {
    916                 rect.p0.x = 2;
    917                 rect.p0.y = 16;
    918                 rect.p1.x = 12;
    919                 rect.p1.y = 17;
     1275                rect.p0.x = 4;
     1276                rect.p0.y = 18;
     1277                rect.p1.x = 14;
     1278                rect.p1.y = 19;
    9201279        } else {
    9211280                rect.p0.x = 15;
    922                 rect.p0.y = 280;
     1281                rect.p0.y = 315;
    9231282                rect.p1.x = 140;
    924                 rect.p1.y = 300;
     1283                rect.p1.y = 335;
    9251284        }
    9261285        ui_rbutton_set_rect(demo.rbright, &rect);
    9271286
    928         rc = ui_fixed_add(demo.fixed, ui_rbutton_ctl(demo.rbright));
     1287        rc = ui_fixed_add(demo.bfixed, ui_rbutton_ctl(demo.rbright));
    9291288        if (rc != EOK) {
    9301289                printf("Error adding control to layout.\n");
     
    9321291        }
    9331292
    934         rc = ui_slider_create(ui_res, "Slide!", &demo.slider);
     1293        rc = ui_slider_create(ui_res, &demo.slider);
    9351294        if (rc != EOK) {
    9361295                printf("Error creating button.\n");
     
    9421301        /* FIXME: Auto layout */
    9431302        if (ui_is_textmode(ui)) {
    944                 rect.p0.x = 2;
    945                 rect.p0.y = 18;
    946                 rect.p1.x = 12;
    947                 rect.p1.y = 19;
     1303                rect.p0.x = 4;
     1304                rect.p0.y = 20;
     1305                rect.p1.x = 32;
     1306                rect.p1.y = 21;
    9481307        } else {
    9491308                rect.p0.x = 15;
    950                 rect.p0.y = 310;
     1309                rect.p0.y = 345;
    9511310                rect.p1.x = 130;
    952                 rect.p1.y = 330;
     1311                rect.p1.y = 365;
    9531312        }
    9541313
    9551314        ui_slider_set_rect(demo.slider, &rect);
    9561315
    957         rc = ui_fixed_add(demo.fixed, ui_slider_ctl(demo.slider));
     1316        rc = ui_fixed_add(demo.bfixed, ui_slider_ctl(demo.slider));
    9581317        if (rc != EOK) {
    9591318                printf("Error adding control to layout.\n");
     
    9611320        }
    9621321
     1322        rc = ui_scrollbar_create(ui, window, ui_sbd_horiz, &demo.hscrollbar);
     1323        if (rc != EOK) {
     1324                printf("Error creating scrollbar.\n");
     1325                return rc;
     1326        }
     1327
     1328        ui_scrollbar_set_cb(demo.hscrollbar, &scrollbar_cb, (void *) &demo);
     1329
     1330        /* FIXME: Auto layout */
     1331        if (ui_is_textmode(ui)) {
     1332                rect.p0.x = 4;
     1333                rect.p0.y = 22;
     1334                rect.p1.x = 42;
     1335                rect.p1.y = 23;
     1336        } else {
     1337                rect.p0.x = 15;
     1338                rect.p0.y = 375;
     1339                rect.p1.x = 220;
     1340                rect.p1.y = 398;
     1341        }
     1342
     1343        ui_scrollbar_set_rect(demo.hscrollbar, &rect);
     1344
     1345        ui_scrollbar_set_thumb_length(demo.hscrollbar,
     1346            ui_scrollbar_trough_length(demo.hscrollbar) / 4);
     1347
     1348        rc = ui_fixed_add(demo.bfixed, ui_scrollbar_ctl(demo.hscrollbar));
     1349        if (rc != EOK) {
     1350                printf("Error adding control to layout.\n");
     1351                return rc;
     1352        }
     1353
     1354        rc = ui_scrollbar_create(ui, window, ui_sbd_vert, &demo.vscrollbar);
     1355        if (rc != EOK) {
     1356                printf("Error creating button.\n");
     1357                return rc;
     1358        }
     1359
     1360        ui_scrollbar_set_cb(demo.vscrollbar, &scrollbar_cb, (void *) &demo);
     1361
     1362        /* FIXME: Auto layout */
     1363        if (ui_is_textmode(ui)) {
     1364                rect.p0.x = 42;
     1365                rect.p0.y = 5;
     1366                rect.p1.x = 43;
     1367                rect.p1.y = 22;
     1368        } else {
     1369                rect.p0.x = 220;
     1370                rect.p0.y = 88;
     1371                rect.p1.x = 243;
     1372                rect.p1.y = 375;
     1373        }
     1374
     1375        ui_scrollbar_set_rect(demo.vscrollbar, &rect);
     1376
     1377        ui_scrollbar_set_thumb_length(demo.vscrollbar,
     1378            ui_scrollbar_trough_length(demo.vscrollbar) / 4);
     1379
     1380        rc = ui_fixed_add(demo.bfixed, ui_scrollbar_ctl(demo.vscrollbar));
     1381        if (rc != EOK) {
     1382                printf("Error adding control to layout.\n");
     1383                return rc;
     1384        }
     1385
     1386        ui_tab_add(demo.tbasic, ui_fixed_ctl(demo.bfixed));
     1387
     1388        rc = ui_fixed_create(&demo.lfixed);
     1389        if (rc != EOK) {
     1390                printf("Error creating fixed layout.\n");
     1391                return rc;
     1392        }
     1393
     1394        rc = ui_list_create(window, false, &demo.list);
     1395        if (rc != EOK) {
     1396                printf("Error creating list.\n");
     1397                return rc;
     1398        }
     1399
     1400        ui_list_entry_attr_init(&eattr);
     1401
     1402        eattr.caption = "One";
     1403        rc = ui_list_entry_append(demo.list, &eattr, NULL);
     1404        if (rc != EOK) {
     1405                printf("Error adding list entry.\n");
     1406                return rc;
     1407        }
     1408
     1409        eattr.caption = "Two";
     1410        rc = ui_list_entry_append(demo.list, &eattr, NULL);
     1411        if (rc != EOK) {
     1412                printf("Error adding list entry.\n");
     1413                return rc;
     1414        }
     1415
     1416        eattr.caption = "Three";
     1417        rc = ui_list_entry_append(demo.list, &eattr, NULL);
     1418        if (rc != EOK) {
     1419                printf("Error adding list entry.\n");
     1420                return rc;
     1421        }
     1422
     1423        eattr.caption = "Four";
     1424        rc = ui_list_entry_append(demo.list, &eattr, NULL);
     1425        if (rc != EOK) {
     1426                printf("Error adding list entry.\n");
     1427                return rc;
     1428        }
     1429
     1430        eattr.caption = "Five";
     1431        rc = ui_list_entry_append(demo.list, &eattr, NULL);
     1432        if (rc != EOK) {
     1433                printf("Error adding list entry.\n");
     1434                return rc;
     1435        }
     1436
     1437        eattr.caption = "Six";
     1438        rc = ui_list_entry_append(demo.list, &eattr, NULL);
     1439        if (rc != EOK) {
     1440                printf("Error adding list entry.\n");
     1441                return rc;
     1442        }
     1443
     1444        /* FIXME: Auto layout */
     1445        if (ui_is_textmode(ui)) {
     1446                rect.p0.x = 4;
     1447                rect.p0.y = 5;
     1448                rect.p1.x = 41;
     1449                rect.p1.y = 10;
     1450        } else {
     1451                rect.p0.x = 15;
     1452                rect.p0.y = 88;
     1453                rect.p1.x = 245;
     1454                rect.p1.y = 173;
     1455        }
     1456
     1457        ui_list_set_rect(demo.list, &rect);
     1458
     1459        rc = ui_fixed_add(demo.lfixed, ui_list_ctl(demo.list));
     1460        if (rc != EOK) {
     1461                printf("Error adding control to layout.\n");
     1462                return rc;
     1463        }
     1464
     1465        ui_tab_add(demo.tlists, ui_fixed_ctl(demo.lfixed));
     1466
     1467        rc = ui_fixed_create(&demo.bars_fixed);
     1468        if (rc != EOK) {
     1469                printf("Error creating fixed layout.\n");
     1470                return rc;
     1471        }
     1472
     1473        rc = ui_progress_create(ui_res, 0, &demo.progress);
     1474        if (rc != EOK) {
     1475                printf("Error creating entry.\n");
     1476                return rc;
     1477        }
     1478
     1479        /* FIXME: Auto layout */
     1480        if (ui_is_textmode(ui)) {
     1481                rect.p0.x = 4;
     1482                rect.p0.y = 5;
     1483                rect.p1.x = 42;
     1484                rect.p1.y = 6;
     1485        } else {
     1486                rect.p0.x = 15;
     1487                rect.p0.y = 88;
     1488                rect.p1.x = 243;
     1489                rect.p1.y = 113;
     1490        }
     1491
     1492        ui_progress_set_rect(demo.progress, &rect);
     1493
     1494        rc = ui_fixed_add(demo.bars_fixed, ui_progress_ctl(demo.progress));
     1495        if (rc != EOK) {
     1496                printf("Error adding control to layout.\n");
     1497                return rc;
     1498        }
     1499
     1500        ui_tab_add(demo.tbars, ui_fixed_ctl(demo.bars_fixed));
     1501
    9631502        ui_window_add(window, ui_fixed_ctl(demo.fixed));
    9641503
     1504        demo.timer = fibril_timer_create(NULL);
     1505        if (demo.timer == NULL) {
     1506                printf("Error creating timer.\n");
     1507                return ENOMEM;
     1508        }
     1509
     1510        fibril_timer_set(demo.timer, 1000 * scrollbar_update_interval_ms,
     1511            ui_demo_timer_fun, (void *)&demo);
     1512
    9651513        rc = ui_window_paint(window);
    9661514        if (rc != EOK) {
     
    9701518
    9711519        ui_run(ui);
     1520
     1521        fibril_timer_clear(demo.timer);
     1522        fibril_timer_destroy(demo.timer);
    9721523
    9731524        ui_window_destroy(window);
     
    10191570int main(int argc, char *argv[])
    10201571{
    1021         const char *display_spec = UI_DISPLAY_DEFAULT;
     1572        const char *display_spec = UI_ANY_DEFAULT;
    10221573        errno_t rc;
    10231574        int i;
Note: See TracChangeset for help on using the changeset viewer.