Changeset 46bd63c9 in mainline for uspace/lib/ui/src/menubar.c


Ignore:
Timestamp:
2023-09-08T08:47:30Z (13 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1af103e
Parents:
0b6fad9
git-author:
Jiri Svoboda <jiri@…> (2023-09-07 18:47:09)
git-committer:
Jiri Svoboda <jiri@…> (2023-09-08 08:47:30)
Message:

Split drop-down menu into two classes: drop-down and menu

Naming is clearly the hardest problem in computer science.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/src/menubar.c

    r0b6fad9 r46bd63c9  
    4545#include <ui/control.h>
    4646#include <ui/paint.h>
    47 #include <ui/menu.h>
    4847#include <ui/menubar.h>
     48#include <ui/menudd.h>
    4949#include <ui/window.h>
    5050#include "../private/menubar.h"
     
    9595        mbar->ui = ui;
    9696        mbar->window = window;
    97         list_initialize(&mbar->menus);
     97        list_initialize(&mbar->menudds);
    9898        *rmbar = mbar;
    9999        return EOK;
     
    106106void ui_menu_bar_destroy(ui_menu_bar_t *mbar)
    107107{
    108         ui_menu_t *menu;
     108        ui_menu_dd_t *mdd;
    109109
    110110        if (mbar == NULL)
    111111                return;
    112112
    113         /* Destroy menus */
    114         menu = ui_menu_first(mbar);
    115         while (menu != NULL) {
    116                 ui_menu_destroy(menu);
    117                 menu = ui_menu_first(mbar);
     113        /* Destroy menu drop-downs */
     114        mdd = ui_menu_dd_first(mbar);
     115        while (mdd != NULL) {
     116                ui_menu_dd_destroy(mdd);
     117                mdd = ui_menu_dd_first(mbar);
    118118        }
    119119
     
    155155        gfx_rect_t rect;
    156156        gfx_color_t *bg_color;
    157         ui_menu_t *menu;
     157        ui_menu_dd_t *mdd;
    158158        const char *caption;
    159159        gfx_coord_t width;
     
    189189        fmt.valign = gfx_valign_top;
    190190
    191         menu = ui_menu_first(mbar);
    192         while (menu != NULL) {
    193                 caption = ui_menu_caption(menu);
     191        mdd = ui_menu_dd_first(mbar);
     192        while (mdd != NULL) {
     193                caption = ui_menu_dd_caption(mdd);
    194194                width = ui_text_width(res->font, caption) + 2 * hpad;
    195195                tpos.x = pos.x + hpad;
     
    200200                rect.p1.y = mbar->rect.p1.y;
    201201
    202                 if (menu == mbar->selected) {
     202                if (mdd == mbar->selected) {
    203203                        fmt.color = res->wnd_sel_text_color;
    204204                        fmt.hgl_color = res->wnd_sel_text_hgl_color;
     
    223223
    224224                pos.x += width;
    225                 menu = ui_menu_next(menu);
     225                mdd = ui_menu_dd_next(mdd);
    226226        }
    227227
     
    241241 *
    242242 * @param mbar Menu bar
    243  * @param menu Menu to select (or deselect if selected) or @c NULL
     243 * @param mdd Menu drop-down to select (or deselect if selected) or @c NULL
    244244 * @param openup Open menu even if not currently open
    245245 * @param idev_id Input device ID associated with the selecting seat
    246246 */
    247 void ui_menu_bar_select(ui_menu_bar_t *mbar, ui_menu_t *menu, bool openup,
     247void ui_menu_bar_select(ui_menu_bar_t *mbar, ui_menu_dd_t *mdd, bool openup,
    248248    sysarg_t idev_id)
    249249{
    250         ui_menu_t *old_menu;
     250        ui_menu_dd_t *old_mdd;
    251251        gfx_rect_t rect;
    252252        bool was_open;
    253253
    254         old_menu = mbar->selected;
    255 
    256         mbar->selected = menu;
    257 
    258         /* Close previously open menu */
    259         if (old_menu != NULL && ui_menu_is_open(old_menu)) {
     254        old_mdd = mbar->selected;
     255
     256        mbar->selected = mdd;
     257
     258        /* Close previously open menu drop-down */
     259        if (old_mdd != NULL && ui_menu_dd_is_open(old_mdd)) {
    260260                was_open = true;
    261                 (void) ui_menu_close(old_menu);
     261                (void) ui_menu_dd_close(old_mdd);
    262262        } else {
    263263                was_open = false;
     
    270270                if (openup || was_open) {
    271271                        /*
    272                          * Open the newly selected menu if either
    273                          * the old menu was open or @a openup was
     272                         * Open the newly selected menu drop-down if either
     273                         * the old menu drop-down was open or @a openup was
    274274                         * specified.
    275275                         */
    276                         (void) ui_menu_open(mbar->selected, &rect, idev_id);
     276                        (void) ui_menu_dd_open(mbar->selected, &rect, idev_id);
    277277                }
    278278        }
     
    289289void ui_menu_bar_left(ui_menu_bar_t *mbar, sysarg_t idev_id)
    290290{
    291         ui_menu_t *nmenu;
     291        ui_menu_dd_t *nmdd;
    292292
    293293        if (mbar->selected == NULL)
    294294                return;
    295295
    296         nmenu = ui_menu_prev(mbar->selected);
    297         if (nmenu == NULL)
    298                 nmenu = ui_menu_last(mbar);
    299 
    300         if (nmenu != mbar->selected)
    301                 ui_menu_bar_select(mbar, nmenu, false, idev_id);
     296        nmdd = ui_menu_dd_prev(mbar->selected);
     297        if (nmdd == NULL)
     298                nmdd = ui_menu_dd_last(mbar);
     299
     300        if (nmdd != mbar->selected)
     301                ui_menu_bar_select(mbar, nmdd, false, idev_id);
    302302}
    303303
     
    312312void ui_menu_bar_right(ui_menu_bar_t *mbar, sysarg_t idev_id)
    313313{
    314         ui_menu_t *nmenu;
     314        ui_menu_dd_t *nmdd;
    315315
    316316        if (mbar->selected == NULL)
    317317                return;
    318318
    319         nmenu = ui_menu_next(mbar->selected);
    320         if (nmenu == NULL)
    321                 nmenu = ui_menu_first(mbar);
    322 
    323         if (nmenu != mbar->selected)
    324                 ui_menu_bar_select(mbar, nmenu, false, idev_id);
     319        nmdd = ui_menu_dd_next(mbar->selected);
     320        if (nmdd == NULL)
     321                nmdd = ui_menu_dd_first(mbar);
     322
     323        if (nmdd != mbar->selected)
     324                ui_menu_bar_select(mbar, nmdd, false, idev_id);
    325325}
    326326
     
    355355
    356356        if (event->key == KC_ENTER || event->key == KC_DOWN) {
    357                 if (mbar->selected != NULL && !ui_menu_is_open(mbar->selected)) {
     357                if (mbar->selected != NULL &&
     358                    !ui_menu_dd_is_open(mbar->selected)) {
    358359                        ui_menu_bar_entry_rect(mbar, mbar->selected,
    359360                            &rect);
    360                         ui_menu_open(mbar->selected, &rect, event->kbd_id);
     361                        ui_menu_dd_open(mbar->selected, &rect, event->kbd_id);
    361362                }
    362363
     
    364365        }
    365366
    366         if (event->c != '\0' && !ui_menu_is_open(mbar->selected)) {
     367        if (event->c != '\0' && !ui_menu_dd_is_open(mbar->selected)) {
    367368                /* Check if it is an accelerator. */
    368369                ui_menu_bar_press_accel(mbar, event->c, event->kbd_id);
     
    407408void ui_menu_bar_press_accel(ui_menu_bar_t *mbar, char32_t c, sysarg_t kbd_id)
    408409{
    409         ui_menu_t *menu;
     410        ui_menu_dd_t *mdd;
    410411        char32_t maccel;
    411412
    412         menu = ui_menu_first(mbar);
    413         while (menu != NULL) {
    414                 maccel = ui_menu_get_accel(menu);
     413        mdd = ui_menu_dd_first(mbar);
     414        while (mdd != NULL) {
     415                maccel = ui_menu_dd_get_accel(mdd);
    415416                if (c == maccel) {
    416                         ui_menu_bar_select(mbar, menu, true, kbd_id);
     417                        ui_menu_bar_select(mbar, mdd, true, kbd_id);
    417418                        return;
    418419                }
    419420
    420                 menu = ui_menu_next(menu);
     421                mdd = ui_menu_dd_next(mdd);
    421422        }
    422423}
     
    433434        gfx_coord2_t pos;
    434435        gfx_rect_t rect;
    435         ui_menu_t *menu;
     436        ui_menu_dd_t *mdd;
    436437        const char *caption;
    437438        gfx_coord_t width;
     
    454455        pos_id = event->pos_id;
    455456
    456         menu = ui_menu_first(mbar);
    457         while (menu != NULL) {
    458                 caption = ui_menu_caption(menu);
     457        mdd = ui_menu_dd_first(mbar);
     458        while (mdd != NULL) {
     459                caption = ui_menu_dd_caption(mdd);
    459460                width = ui_text_width(res->font, caption) + 2 * hpad;
    460461
     
    469470
    470471                        /* Open the menu, close if already open. */
    471                         if (menu == mbar->selected)
     472                        if (mdd == mbar->selected)
    472473                                ui_menu_bar_select(mbar, NULL, false, pos_id);
    473474                        else
    474                                 ui_menu_bar_select(mbar, menu, true, pos_id);
     475                                ui_menu_bar_select(mbar, mdd, true, pos_id);
    475476
    476477                        return ui_claimed;
     
    478479
    479480                pos.x += width;
    480                 menu = ui_menu_next(menu);
     481                mdd = ui_menu_dd_next(mdd);
    481482        }
    482483
     
    487488 *
    488489 * @param mbar Menu bar
    489  * @param menu Menu whose entry's rectangle is to be returned
     490 * @param mdd Menu drop-down whose entry's rectangle is to be returned
    490491 * @param rrect Place to store entry rectangle
    491492 */
    492 void ui_menu_bar_entry_rect(ui_menu_bar_t *mbar, ui_menu_t *menu,
     493void ui_menu_bar_entry_rect(ui_menu_bar_t *mbar, ui_menu_dd_t *mdd,
    493494    gfx_rect_t *rrect)
    494495{
     
    496497        gfx_coord2_t pos;
    497498        gfx_rect_t rect;
    498         ui_menu_t *cur;
     499        ui_menu_dd_t *cur;
    499500        const char *caption;
    500501        gfx_coord_t width;
     
    511512        pos = mbar->rect.p0;
    512513
    513         cur = ui_menu_first(mbar);
     514        cur = ui_menu_dd_first(mbar);
    514515        while (cur != NULL) {
    515                 caption = ui_menu_caption(cur);
     516                caption = ui_menu_dd_caption(cur);
    516517                width = ui_text_width(res->font, caption) + 2 * hpad;
    517518
     
    520521                rect.p1.y = mbar->rect.p1.y;
    521522
    522                 if (cur == menu) {
     523                if (cur == mdd) {
    523524                        *rrect = rect;
    524525                        return;
     
    526527
    527528                pos.x += width;
    528                 cur = ui_menu_next(cur);
     529                cur = ui_menu_dd_next(cur);
    529530        }
    530531
     
    544545        mbar->active = true;
    545546        if (mbar->selected == NULL)
    546                 mbar->selected = ui_menu_first(mbar);
     547                mbar->selected = ui_menu_dd_first(mbar);
    547548
    548549        (void) ui_menu_bar_paint(mbar);
Note: See TracChangeset for help on using the changeset viewer.