Changeset 0cf3d5f in mainline for uspace/app/nav


Ignore:
Timestamp:
2025-10-10T08:45:43Z (3 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
c3db721
Parents:
cfd04c4
git-author:
Jiri Svoboda <jiri@…> (2025-10-09 18:45:33)
git-committer:
Jiri Svoboda <jiri@…> (2025-10-10 08:45:43)
Message:

Allow creating sparse files in Navigator and newfile.

Location:
uspace/app/nav
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/nav/dlg/newfiledlg.c

    rcfd04c4 r0cf3d5f  
    3737#include <fmgt.h>
    3838#include <mem.h>
     39#include <stdbool.h>
    3940#include <stdlib.h>
    4041#include <ui/entry.h>
     
    8182        ui_label_t *label = NULL;
    8283        ui_entry_t *entry = NULL;
     84        ui_checkbox_t *checkbox = NULL;
    8385        ui_pbutton_t *bok = NULL;
    8486        ui_pbutton_t *bcancel = NULL;
     
    101103                wparams.rect.p0.y = 0;
    102104                wparams.rect.p1.x = 40;
    103                 wparams.rect.p1.y = 11;
     105                wparams.rect.p1.y = 13;
    104106        } else {
    105107                wparams.rect.p0.x = 0;
    106108                wparams.rect.p0.y = 0;
    107109                wparams.rect.p1.x = 300;
    108                 wparams.rect.p1.y = 135;
     110                wparams.rect.p1.y = 155;
    109111        }
    110112
     
    234236        entry = NULL;
    235237
     238        rc = ui_checkbox_create(ui_res, "Sparse", &checkbox);
     239        if (rc != EOK)
     240                goto error;
     241
     242        /* FIXME: Auto layout */
     243        if (ui_is_textmode(ui)) {
     244                rect.p0.x = 3;
     245                rect.p0.y = 8;
     246                rect.p1.x = 17;
     247                rect.p1.y = 9;
     248        } else {
     249                rect.p0.x = 10;
     250                rect.p0.y = 100;
     251                rect.p1.x = 190;
     252                rect.p1.y = 120;
     253        }
     254
     255        ui_checkbox_set_rect(checkbox, &rect);
     256
     257        rc = ui_fixed_add(fixed, ui_checkbox_ctl(checkbox));
     258        if (rc != EOK)
     259                goto error;
     260
     261        dialog->sparse = checkbox;
     262        checkbox = NULL;
     263
    236264        rc = ui_pbutton_create(ui_res, "OK", &bok);
    237265        if (rc != EOK)
     
    243271        if (ui_is_textmode(ui)) {
    244272                rect.p0.x = 10;
    245                 rect.p0.y = 8;
     273                rect.p0.y = 10;
    246274                rect.p1.x = 20;
    247                 rect.p1.y = 9;
     275                rect.p1.y = 11;
    248276        } else {
    249277                rect.p0.x = 55;
    250                 rect.p0.y = 90;
     278                rect.p0.y = 120;
    251279                rect.p1.x = 145;
    252                 rect.p1.y = 118;
     280                rect.p1.y = 148;
    253281        }
    254282
     
    273301        if (ui_is_textmode(ui)) {
    274302                rect.p0.x = 22;
    275                 rect.p0.y = 8;
     303                rect.p0.y = 10;
    276304                rect.p1.x = 32;
    277                 rect.p1.y = 9;
     305                rect.p1.y = 11;
    278306        } else {
    279307                rect.p0.x = 155;
    280                 rect.p0.y = 90;
     308                rect.p0.y = 120;
    281309                rect.p1.x = 245;
    282                 rect.p1.y = 118;
     310                rect.p1.y = 148;
    283311        }
    284312
     
    307335        if (entry != NULL)
    308336                ui_entry_destroy(entry);
     337        if (checkbox != NULL)
     338                ui_checkbox_destroy(checkbox);
    309339        if (bok != NULL)
    310340                ui_pbutton_destroy(bok);
     
    375405        const char *fname;
    376406        const char *fsize;
     407        bool sparse;
    377408
    378409        if (event->type == KEY_PRESS &&
     
    383414                                fname = ui_entry_get_text(dialog->ename);
    384415                                fsize = ui_entry_get_text(dialog->esize);
     416                                sparse =
     417                                    ui_checkbox_get_checked(dialog->sparse);
    385418                                dialog->cb->bok(dialog, dialog->arg, fname,
    386                                     fsize);
     419                                    fsize, sparse);
    387420                                return;
    388421                        }
     
    409442        const char *fname;
    410443        const char *fsize;
     444        bool sparse;
    411445
    412446        if (dialog->cb != NULL && dialog->cb->bok != NULL) {
    413447                fname = ui_entry_get_text(dialog->ename);
    414448                fsize = ui_entry_get_text(dialog->esize);
    415                 dialog->cb->bok(dialog, dialog->arg, fname, fsize);
     449                sparse = ui_checkbox_get_checked(dialog->sparse);
     450                dialog->cb->bok(dialog, dialog->arg, fname, fsize, sparse);
    416451        }
    417452}
  • uspace/app/nav/newfile.c

    rcfd04c4 r0cf3d5f  
    4444#include <ui/ui.h>
    4545#include <ui/window.h>
     46#include <stdbool.h>
    4647#include <str.h>
    4748#include "dlg/newfiledlg.h"
     
    5253#include "types/newfile.h"
    5354
    54 static void new_file_bok(new_file_dlg_t *, void *, const char *, const char *);
     55static void new_file_bok(new_file_dlg_t *, void *, const char *, const char *,
     56    bool);
    5557static void new_file_bcancel(new_file_dlg_t *, void *);
    5658static void new_file_close(new_file_dlg_t *, void *);
     
    104106        fmgt_set_init_update(fmgt, true);
    105107
    106         rc = fmgt_new_file(fmgt, job->fname, job->nbytes);
     108        rc = fmgt_new_file(fmgt, job->fname, job->nbytes,
     109            job->sparse ? nf_sparse : nf_none);
    107110        if (rc != EOK) {
    108111                rv = asprintf(&msg, "Error creating file (%s).",
     
    137140 * @param fname New file name
    138141 * @param fsize New file size
     142 * @param sparse @c true to create a sparse file
    139143 */
    140144static void new_file_bok(new_file_dlg_t *dlg, void *arg, const char *fname,
    141     const char *fsize)
     145    const char *fsize, bool sparse)
    142146{
    143147        navigator_t *nav = (navigator_t *)arg;
     
    175179        job->fname = fname;
    176180        job->nbytes = nbytes;
     181        job->sparse = sparse;
    177182
    178183        progress_dlg_params_init(&pd_params);
  • uspace/app/nav/types/dlg/newfiledlg.h

    rcfd04c4 r0cf3d5f  
    3838
    3939#include <errno.h>
     40#include <ui/checkbox.h>
    4041#include <ui/entry.h>
    4142#include <ui/pbutton.h>
    4243#include <ui/window.h>
     44#include <stdbool.h>
    4345
    4446/** New File dialog */
     
    5052        /** File size text entry */
    5153        ui_entry_t *esize;
     54        /** Sparse checkbox */
     55        ui_checkbox_t *sparse;
    5256        /** OK button */
    5357        ui_pbutton_t *bok;
     
    6367typedef struct new_file_dlg_cb {
    6468        /** OK button was pressed */
    65         void (*bok)(new_file_dlg_t *, void *, const char *, const char *);
     69        void (*bok)(new_file_dlg_t *, void *, const char *, const char *, bool);
    6670        /** Cancel button was pressed */
    6771        void (*bcancel)(new_file_dlg_t *, void *);
  • uspace/app/nav/types/newfile.h

    rcfd04c4 r0cf3d5f  
    3737#define TYPES_NEWFILE_H
    3838
     39#include <stdbool.h>
    3940#include <stdint.h>
    4041
     
    4748        /** New file size */
    4849        uint64_t nbytes;
     50        /** @c true to create a sparse file */
     51        bool sparse;
    4952} navigator_new_file_job_t;
    5053
Note: See TracChangeset for help on using the changeset viewer.