Ignore:
File:
1 edited

Legend:

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

    re0cf963 rec50d65e  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * Copyright (c) 2012 Martin Sucha
    44 * All rights reserved.
     
    6060#include <ui/menu.h>
    6161#include <ui/menubar.h>
     62#include <ui/menudd.h>
    6263#include <ui/menuentry.h>
    6364#include <ui/promptdialog.h>
     
    237238
    238239static void edit_wnd_close(ui_window_t *, void *);
     240static void edit_wnd_focus(ui_window_t *, void *, unsigned);
    239241static void edit_wnd_kbd_event(ui_window_t *, void *, kbd_event_t *);
     242static void edit_wnd_unfocus(ui_window_t *, void *, unsigned);
    240243
    241244static ui_window_cb_t edit_window_cb = {
    242245        .close = edit_wnd_close,
    243         .kbd = edit_wnd_kbd_event
     246        .focus = edit_wnd_focus,
     247        .kbd = edit_wnd_kbd_event,
     248        .unfocus = edit_wnd_unfocus
     249};
     250
     251static void edit_menubar_activate(ui_menu_bar_t *, void *);
     252static void edit_menubar_deactivate(ui_menu_bar_t *, void *);
     253
     254static ui_menu_bar_cb_t edit_menubar_cb = {
     255        .activate = edit_menubar_activate,
     256        .deactivate = edit_menubar_deactivate
    244257};
    245258
     
    430443        }
    431444
    432         rc = ui_menu_create(edit->menubar, "File", &mfile);
     445        ui_menu_bar_set_cb(edit->menubar, &edit_menubar_cb, (void *) edit);
     446
     447        rc = ui_menu_dd_create(edit->menubar, "~F~ile", NULL, &mfile);
    433448        if (rc != EOK) {
    434449                printf("Error creating menu.\n");
     
    436451        }
    437452
    438         rc = ui_menu_entry_create(mfile, "Save", "Ctrl-S", &msave);
     453        rc = ui_menu_entry_create(mfile, "~S~ave", "Ctrl-S", &msave);
    439454        if (rc != EOK) {
    440455                printf("Error creating menu.\n");
     
    444459        ui_menu_entry_set_cb(msave, edit_file_save, (void *) edit);
    445460
    446         rc = ui_menu_entry_create(mfile, "Save As", "Ctrl-E", &msaveas);
     461        rc = ui_menu_entry_create(mfile, "Save ~A~s", "Ctrl-E", &msaveas);
    447462        if (rc != EOK) {
    448463                printf("Error creating menu.\n");
     
    458473        }
    459474
    460         rc = ui_menu_entry_create(mfile, "Exit", "Ctrl-Q", &mexit);
     475        rc = ui_menu_entry_create(mfile, "E~x~it", "Ctrl-Q", &mexit);
    461476        if (rc != EOK) {
    462477                printf("Error creating menu.\n");
     
    466481        ui_menu_entry_set_cb(mexit, edit_file_exit, (void *) edit);
    467482
    468         rc = ui_menu_create(edit->menubar, "Edit", &medit);
     483        rc = ui_menu_dd_create(edit->menubar, "~E~dit", NULL, &medit);
    469484        if (rc != EOK) {
    470485                printf("Error creating menu.\n");
     
    472487        }
    473488
    474         rc = ui_menu_entry_create(medit, "Cut", "Ctrl-X", &mcut);
     489        rc = ui_menu_entry_create(medit, "Cu~t~", "Ctrl-X", &mcut);
    475490        if (rc != EOK) {
    476491                printf("Error creating menu.\n");
     
    480495        ui_menu_entry_set_cb(mcut, edit_edit_cut, (void *) edit);
    481496
    482         rc = ui_menu_entry_create(medit, "Copy", "Ctrl-C", &mcopy);
     497        rc = ui_menu_entry_create(medit, "~C~opy", "Ctrl-C", &mcopy);
    483498        if (rc != EOK) {
    484499                printf("Error creating menu.\n");
     
    488503        ui_menu_entry_set_cb(mcopy, edit_edit_copy, (void *) edit);
    489504
    490         rc = ui_menu_entry_create(medit, "Paste", "Ctrl-V", &mpaste);
     505        rc = ui_menu_entry_create(medit, "~P~aste", "Ctrl-V", &mpaste);
    491506        if (rc != EOK) {
    492507                printf("Error creating menu.\n");
     
    496511        ui_menu_entry_set_cb(mpaste, edit_edit_paste, (void *) edit);
    497512
    498         rc = ui_menu_entry_create(medit, "Delete", "Del", &mdelete);
     513        rc = ui_menu_entry_create(medit, "~D~elete", "Del", &mdelete);
    499514        if (rc != EOK) {
    500515                printf("Error creating menu.\n");
     
    510525        }
    511526
    512         rc = ui_menu_entry_create(medit, "Select All", "Ctrl-A", &mselall);
     527        rc = ui_menu_entry_create(medit, "Select ~A~ll", "Ctrl-A", &mselall);
    513528        if (rc != EOK) {
    514529                printf("Error creating menu.\n");
     
    518533        ui_menu_entry_set_cb(mselall, edit_edit_select_all, (void *) edit);
    519534
    520         rc = ui_menu_create(edit->menubar, "Search", &msearch);
     535        rc = ui_menu_dd_create(edit->menubar, "~S~earch", NULL, &msearch);
    521536        if (rc != EOK) {
    522537                printf("Error creating menu.\n");
     
    524539        }
    525540
    526         rc = ui_menu_entry_create(msearch, "Find", "Ctrl-F", &mfind);
     541        rc = ui_menu_entry_create(msearch, "~F~ind", "Ctrl-F", &mfind);
    527542        if (rc != EOK) {
    528543                printf("Error creating menu.\n");
     
    532547        ui_menu_entry_set_cb(mfind, edit_search_find, (void *) edit);
    533548
    534         rc = ui_menu_entry_create(msearch, "Reverse Find", "Ctrl-Shift-F", &mfindr);
     549        rc = ui_menu_entry_create(msearch, "~R~everse Find", "Ctrl-Shift-F", &mfindr);
    535550        if (rc != EOK) {
    536551                printf("Error creating menu.\n");
     
    540555        ui_menu_entry_set_cb(mfindr, edit_search_reverse_find, (void *) edit);
    541556
    542         rc = ui_menu_entry_create(msearch, "Find Next", "Ctrl-N", &mfindn);
     557        rc = ui_menu_entry_create(msearch, "Find ~N~ext", "Ctrl-N", &mfindn);
    543558        if (rc != EOK) {
    544559                printf("Error creating menu.\n");
     
    554569        }
    555570
    556         rc = ui_menu_entry_create(msearch, "Go To Line", "Ctrl-L", &mgoto);
     571        rc = ui_menu_entry_create(msearch, "Go To ~L~ine", "Ctrl-L", &mgoto);
    557572        if (rc != EOK) {
    558573                printf("Error creating menu.\n");
     
    978993
    979994                bcnt -= off;
    980                 memcpy(buf, buf + off, bcnt);
     995                memmove(buf, buf + off, bcnt);
    981996
    982997                insert_char(c);
     
    12591274
    12601275        gfx_text_fmt_init(&fmt);
     1276        fmt.font = font;
    12611277        fmt.color = pane->color;
    12621278
     
    13181334                                        return rc;
    13191335
    1320                                 rc = gfx_puttext(font, &tpos, &fmt, cbuf);
     1336                                rc = gfx_puttext(&tpos, &fmt, cbuf);
    13211337                                if (rc != EOK)
    13221338                                        return rc;
     
    14081424         */
    14091425        while (true) {
    1410                 int rc = asprintf(&text, "%d, %d (%d): File '%s'. Ctrl-Q Quit  Ctrl-S Save  "
    1411                     "Ctrl-E Save As", coord.row, coord.column, last_row, fname);
     1426                int rc = asprintf(&text, "%d, %d (%d): File '%s'. Ctrl-Q Quit  "
     1427                    "F10 Menu", coord.row, coord.column, last_row, fname);
    14121428                if (rc < 0) {
    14131429                        n = 0;
     
    22192235}
    22202236
     2237/** Window focus event
     2238 *
     2239 * @param window Window
     2240 * @param arg Argument (edit_t *)
     2241 * @param focus Focus number
     2242 */
     2243static void edit_wnd_focus(ui_window_t *window, void *arg, unsigned focus)
     2244{
     2245        edit_t *edit = (edit_t *)arg;
     2246
     2247        (void)edit;
     2248        pane_caret_display(&pane);
     2249        cursor_setvis(true);
     2250}
     2251
    22212252/** Window keyboard event
    22222253 *
     
    22292260{
    22302261        pane.keymod = event->mods;
     2262
     2263        if (ui_window_def_kbd(window, event) == ui_claimed)
     2264                return;
    22312265
    22322266        if (event->type == KEY_PRESS) {
     
    22372271}
    22382272
     2273/** Window unfocus event
     2274 *
     2275 * @param window Window
     2276 * @param arg Argument (edit_t *)
     2277 * @param focus Focus number
     2278 */
     2279static void edit_wnd_unfocus(ui_window_t *window, void *arg, unsigned focus)
     2280{
     2281        edit_t *edit = (edit_t *) arg;
     2282
     2283        (void)edit;
     2284        cursor_setvis(false);
     2285}
     2286
     2287/** Menu bar activate event
     2288 *
     2289 * @param mbar Menu bar
     2290 * @param arg Argument (edit_t *)
     2291 */
     2292static void edit_menubar_activate(ui_menu_bar_t *mbar, void *arg)
     2293{
     2294        edit_t *edit = (edit_t *)arg;
     2295
     2296        (void)edit;
     2297        cursor_setvis(false);
     2298}
     2299
     2300/** Menu bar deactivate event
     2301 *
     2302 * @param mbar Menu bar
     2303 * @param arg Argument (edit_t *)
     2304 */
     2305static void edit_menubar_deactivate(ui_menu_bar_t *mbar, void *arg)
     2306{
     2307        edit_t *edit = (edit_t *)arg;
     2308
     2309        (void)edit;
     2310        pane_caret_display(&pane);
     2311        cursor_setvis(true);
     2312}
     2313
    22392314/** File / Save menu entry selected.
    22402315 *
     
    24022477{
    24032478        edit_t *edit = (edit_t *)arg;
    2404         gfx_context_t *gc = ui_window_get_gc(edit->window);
    24052479        char *cname;
    24062480        errno_t rc;
    24072481
     2482        (void)edit;
    24082483        ui_file_dialog_destroy(dialog);
    2409         // TODO Smarter cursor management
    2410         pane.rflags |= REDRAW_CARET;
    2411         (void) pane_update(&pane);
    2412         gfx_cursor_set_visible(gc, true);
    24132484
    24142485        cname = str_dup(fname);
     
    24362507{
    24372508        edit_t *edit = (edit_t *)arg;
    2438         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2439 
     2509
     2510        (void)edit;
    24402511        ui_file_dialog_destroy(dialog);
    2441         // TODO Smarter cursor management
    2442         pane.rflags |= REDRAW_CARET;
    2443         (void) pane_update(&pane);
    2444         gfx_cursor_set_visible(gc, true);
    24452512}
    24462513
     
    24532520{
    24542521        edit_t *edit = (edit_t *)arg;
    2455         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2456 
     2522
     2523        (void)edit;
    24572524        ui_file_dialog_destroy(dialog);
    2458         // TODO Smarter cursor management
    2459         pane.rflags |= REDRAW_CARET;
    2460         (void) pane_update(&pane);
    2461         gfx_cursor_set_visible(gc, true);
    24622525}
    24632526
     
    24722535{
    24732536        edit_t *edit = (edit_t *) arg;
    2474         gfx_context_t *gc = ui_window_get_gc(edit->window);
    24752537        char *endptr;
    24762538        int line;
     
    24842546
    24852547        caret_move_absolute(line, pane.ideal_column, dir_before, false);
    2486         // TODO Smarter cursor management
     2548        (void)edit;
    24872549        (void) pane_update(&pane);
    2488         gfx_cursor_set_visible(gc, true);
    2489         (void) gfx_update(gc);
    24902550}
    24912551
     
    24982558{
    24992559        edit_t *edit = (edit_t *) arg;
    2500         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2501 
     2560
     2561        (void)edit;
    25022562        ui_prompt_dialog_destroy(dialog);
    2503         // TODO Smarter cursor management
    2504         pane.rflags |= REDRAW_CARET;
    2505         (void) pane_update(&pane);
    2506         gfx_cursor_set_visible(gc, true);
    25072563}
    25082564
     
    25152571{
    25162572        edit_t *edit = (edit_t *) arg;
    2517         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2518 
     2573
     2574        (void)edit;
    25192575        ui_prompt_dialog_destroy(dialog);
    2520         // TODO Smarter cursor management
    2521         pane.rflags |= REDRAW_CARET;
    2522         (void) pane_update(&pane);
    2523         gfx_cursor_set_visible(gc, true);
    25242576}
    25252577
     
    25342586{
    25352587        edit_t *edit = (edit_t *) arg;
    2536         gfx_context_t *gc = ui_window_get_gc(edit->window);
    25372588        char *pattern;
    25382589        bool reverse;
    25392590
     2591        (void)edit;
    25402592        ui_prompt_dialog_destroy(dialog);
    25412593
     
    25542606        search(pattern, reverse);
    25552607
    2556         // TODO Smarter cursor management
    25572608        (void) pane_update(&pane);
    2558         gfx_cursor_set_visible(gc, true);
    2559         (void) gfx_update(gc);
    25602609}
    25612610
     
    25682617{
    25692618        edit_t *edit = (edit_t *) arg;
    2570         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2571 
     2619
     2620        (void)edit;
    25722621        ui_prompt_dialog_destroy(dialog);
    2573         // TODO Smarter cursor management
    2574         pane.rflags |= REDRAW_CARET;
    2575         (void) pane_update(&pane);
    2576         gfx_cursor_set_visible(gc, true);
    25772622}
    25782623
     
    25852630{
    25862631        edit_t *edit = (edit_t *) arg;
    2587         gfx_context_t *gc = ui_window_get_gc(edit->window);
    2588 
     2632
     2633        (void)edit;
    25892634        ui_prompt_dialog_destroy(dialog);
    2590         // TODO Smarter cursor management
    2591         pane.rflags |= REDRAW_CARET;
    2592         (void) pane_update(&pane);
    2593         gfx_cursor_set_visible(gc, true);
    25942635}
    25952636
Note: See TracChangeset for help on using the changeset viewer.