Changeset 59768c7 in mainline for uspace/lib/ui/src/menuentry.c


Ignore:
Timestamp:
2022-01-10T19:29:00Z (4 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5de852c
Parents:
9754ed2
git-author:
Jiri Svoboda <jiri@…> (2022-01-10 19:27:55)
git-committer:
Jiri Svoboda <jiri@…> (2022-01-10 19:29:00)
Message:

Menu control using F10, cursor keys, Enter, Escape

File:
1 edited

Legend:

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

    r9754ed2 r59768c7  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2022 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4545#include <ui/control.h>
    4646#include <ui/paint.h>
     47#include <ui/menubar.h>
    4748#include <ui/menuentry.h>
    4849#include <ui/window.h>
     
    177178}
    178179
     180/** Get last menu entry in menu.
     181 *
     182 * @param menu Menu
     183 * @return Last menu entry or @c NULL if there is none
     184 */
     185ui_menu_entry_t *ui_menu_entry_last(ui_menu_t *menu)
     186{
     187        link_t *link;
     188
     189        link = list_last(&menu->entries);
     190        if (link == NULL)
     191                return NULL;
     192
     193        return list_get_instance(link, ui_menu_entry_t, lentries);
     194}
     195
    179196/** Get next menu entry in menu.
    180197 *
     
    187204
    188205        link = list_next(&cur->lentries, &cur->menu->entries);
     206        if (link == NULL)
     207                return NULL;
     208
     209        return list_get_instance(link, ui_menu_entry_t, lentries);
     210}
     211
     212/** Get previous menu entry in menu.
     213 *
     214 * @param cur Current menu entry
     215 * @return Next menu entry or @c NULL if @a cur is the last one
     216 */
     217ui_menu_entry_t *ui_menu_entry_prev(ui_menu_entry_t *cur)
     218{
     219        link_t *link;
     220
     221        link = list_prev(&cur->lentries, &cur->menu->entries);
    189222        if (link == NULL)
    190223                return NULL;
     
    378411}
    379412
     413/** Determine if entry is selectable.
     414 *
     415 * @return @c true iff entry is selectable
     416 */
     417bool ui_menu_entry_selectable(ui_menu_entry_t *mentry)
     418{
     419        return !mentry->separator;
     420}
     421
    380422/** Handle button press in menu entry.
    381423 *
     
    407449        mentry->held = false;
    408450
    409         if (mentry->inside) {
    410                 /* Close menu */
    411                 ui_menu_bar_select(mentry->menu->mbar, NULL, NULL);
    412 
    413                 /* Call back */
    414                 ui_menu_entry_cb(mentry);
    415         }
     451        ui_menu_entry_activate(mentry);
     452}
     453
     454/** Activate menu entry.
     455 *
     456 * @param mentry Menu entry
     457 */
     458void ui_menu_entry_activate(ui_menu_entry_t *mentry)
     459{
     460        /* Deactivate menu bar, close menu */
     461        ui_menu_bar_deactivate(mentry->menu->mbar);
     462
     463        /* Call back */
     464        ui_menu_entry_cb(mentry);
    416465}
    417466
Note: See TracChangeset for help on using the changeset viewer.