Changeset 2309891 in mainline for uspace/app


Ignore:
Timestamp:
2025-12-14T17:15:57Z (3 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
79b77ce
Parents:
144fafd
Message:

Copy files (Navigator and command line).

TODO Overwrite query, new I/O error types.

Location:
uspace/app
Files:
10 added
10 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/meson.build

    r144fafd r2309891  
    3535        'blkdump',
    3636        'calculator',
     37        'copy',
    3738        'corecfg',
    3839        'cpptest',
  • uspace/app/nav/menu.c

    r144fafd r2309891  
    5858        ui_menu_entry_t *medit;
    5959        ui_menu_entry_t *mverify;
     60        ui_menu_entry_t *mcopy;
    6061        ui_menu_entry_t *mfsep;
    6162        ui_menu_entry_t *mexit;
     
    104105        ui_menu_entry_set_cb(mverify, nav_menu_file_verify, (void *) menu);
    105106
     107        rc = ui_menu_entry_create(mfile, "~C~opy", "Ctrl-C", &mcopy);
     108        if (rc != EOK)
     109                goto error;
     110
     111        ui_menu_entry_set_cb(mcopy, nav_menu_file_copy, (void *) menu);
     112
    106113        rc = ui_menu_entry_sep_create(mfile, &mfsep);
    107114        if (rc != EOK)
     
    214221}
    215222
     223/** File / Copy menu entry selected.
     224 *
     225 * @param mentry Menu entry
     226 * @param arg Argument (navigator_t *)
     227 */
     228void nav_menu_file_copy(ui_menu_entry_t *mentry, void *arg)
     229{
     230        nav_menu_t *menu = (nav_menu_t *)arg;
     231
     232        if (menu->cb != NULL && menu->cb->file_copy != NULL)
     233                menu->cb->file_copy(menu->cb_arg);
     234}
     235
    216236/** File / Exit menu entry selected.
    217237 *
  • uspace/app/nav/menu.h

    r144fafd r2309891  
    5050extern void nav_menu_file_edit(ui_menu_entry_t *, void *);
    5151extern void nav_menu_file_verify(ui_menu_entry_t *, void *);
     52extern void nav_menu_file_copy(ui_menu_entry_t *, void *);
    5253extern void nav_menu_file_exit(ui_menu_entry_t *, void *);
    5354
  • uspace/app/nav/meson.build

    r144fafd r2309891  
    2929deps = [ 'fmgt', 'ui' ]
    3030src = files(
     31        'dlg/copydlg.c',
    3132        'dlg/ioerrdlg.c',
    3233        'dlg/newfiledlg.c',
    3334        'dlg/progress.c',
    3435        'dlg/verifydlg.c',
     36        'copy.c',
    3537        'main.c',
    3638        'menu.c',
     
    4244
    4345test_src = files(
     46        'dlg/copydlg.c',
    4447        'dlg/ioerrdlg.c',
    4548        'dlg/newfiledlg.c',
    4649        'dlg/progress.c',
    4750        'dlg/verifydlg.c',
     51        'copy.c',
    4852        'menu.c',
    4953        'nav.c',
     
    5155        'panel.c',
    5256        'verify.c',
     57        'test/dlg/copydlg.c',
    5358        'test/dlg/ioerrdlg.c',
    5459        'test/dlg/newfiledlg.c',
  • uspace/app/nav/nav.c

    r144fafd r2309891  
    4848#include <ui/ui.h>
    4949#include <ui/window.h>
     50#include "copy.h"
    5051#include "dlg/ioerrdlg.h"
    5152#include "menu.h"
     
    6970static void navigator_file_edit(void *);
    7071static void navigator_file_verify(void *);
     72static void navigator_file_copy(void *);
    7173static void navigator_file_exit(void *);
    7274
     
    7678        .file_edit = navigator_file_edit,
    7779        .file_verify = navigator_file_verify,
     80        .file_copy = navigator_file_copy,
    7881        .file_exit = navigator_file_exit
    7982};
     
    141144                        navigator_file_verify((void *)navigator);
    142145                        break;
     146                case KC_C:
     147                        navigator_file_copy((void *)navigator);
     148                        break;
    143149                case KC_Q:
    144150                        ui_quit(navigator->ui);
     
    325331        for (i = 0; i < navigator_panels; i++) {
    326332                if (panel_is_active(navigator->panel[i]))
     333                        return navigator->panel[i];
     334        }
     335
     336        /* This should not happen */
     337        assert(false);
     338        return NULL;
     339}
     340
     341/** Get the currently inactive navigator panel.
     342 *
     343 * @param navigator Navigator
     344 * @return Currently inactive panel
     345 */
     346panel_t *navigator_get_inactive_panel(navigator_t *navigator)
     347{
     348        int i;
     349
     350        for (i = 0; i < navigator_panels; i++) {
     351                if (!panel_is_active(navigator->panel[i]))
    327352                        return navigator->panel[i];
    328353        }
     
    561586}
    562587
     588/** File / Copy menu entry selected */
     589static void navigator_file_copy(void *arg)
     590{
     591        navigator_t *navigator = (navigator_t *)arg;
     592
     593        ui_file_list_entry_t *entry;
     594        ui_file_list_entry_attr_t attr;
     595        fmgt_flist_t *flist;
     596        panel_t *panel;
     597        errno_t rc;
     598
     599        panel = navigator_get_active_panel(navigator);
     600        entry = ui_file_list_get_cursor(panel->flist);
     601        ui_file_list_entry_get_attr(entry, &attr);
     602
     603        rc = fmgt_flist_create(&flist);
     604        if (rc != EOK)
     605                return;
     606
     607        rc = fmgt_flist_append(flist, attr.name);
     608        if (rc != EOK) {
     609                fmgt_flist_destroy(flist);
     610                return;
     611        }
     612
     613        /* flist ownership transferred */
     614        navigator_copy_dlg(navigator, flist);
     615}
     616
    563617/** File / Exit menu entry selected */
    564618static void navigator_file_exit(void *arg)
  • uspace/app/nav/nav.h

    r144fafd r2309891  
    4949extern errno_t navigator_run(const char *);
    5050extern panel_t *navigator_get_active_panel(navigator_t *);
     51extern panel_t *navigator_get_inactive_panel(navigator_t *);
    5152extern void navigator_switch_panel(navigator_t *);
    5253extern void navigator_refresh_panels(navigator_t *);
  • uspace/app/nav/panel.c

    r144fafd r2309891  
    365365}
    366366
     367/** Get current directory from panel.
     368 *
     369 * @param panel Panel
     370 * @return Path to current directory or @c NULL if out of memory
     371 */
     372char *panel_get_dir(panel_t *panel)
     373{
     374        return ui_file_list_get_dir(panel->flist);
     375}
     376
    367377/** Refresh panel contents.
    368378 *
  • uspace/app/nav/panel.h

    r144fafd r2309891  
    5858extern void panel_deactivate(panel_t *);
    5959extern errno_t panel_read_dir(panel_t *, const char *);
     60extern char *panel_get_dir(panel_t *);
    6061extern errno_t panel_refresh(panel_t *);
    6162extern void panel_activate_req(panel_t *);
  • uspace/app/nav/test/main.c

    r144fafd r2309891  
    3131PCUT_INIT;
    3232
     33PCUT_IMPORT(copydlg);
    3334PCUT_IMPORT(ioerrdlg);
    3435PCUT_IMPORT(newfiledlg);
  • uspace/app/nav/types/menu.h

    r144fafd r2309891  
    5151        /** File / Verify */
    5252        void (*file_verify)(void *);
     53        /** File / Copy */
     54        void (*file_copy)(void *);
    5355        /** File / Exit */
    5456        void (*file_exit)(void *);
Note: See TracChangeset for help on using the changeset viewer.