Changeset b1397ab in mainline


Ignore:
Timestamp:
2023-11-09T13:02:16Z (13 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, topic/msim-upgrade, topic/simplify-dev-export
Children:
e0d874b7
Parents:
40eab9f
git-author:
Jiri Svoboda <jiri@…> (2023-11-08 18:01:53)
git-committer:
Jiri Svoboda <jiri@…> (2023-11-09 13:02:16)
Message:

Start menu editor is editing

You can change an entry and it will be saved to the configuration repo.
(Cannot create/delete yet). To see the change in the editor, you need
to restart it. To see the change in the taskbar, you need to restart it.

Location:
uspace
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/taskbar-cfg/smeedit.c

    r40eab9f rb1397ab  
    4848};
    4949
     50static void smeedit_ok_clicked(ui_pbutton_t *, void *);
     51static void smeedit_cancel_clicked(ui_pbutton_t *, void *);
     52
     53/** OK button callbacks */
     54ui_pbutton_cb_t smeedit_ok_button_cb = {
     55        .clicked = smeedit_ok_clicked
     56};
     57
     58/** Cancel button callbacks */
     59ui_pbutton_cb_t smeedit_cancel_button_cb = {
     60        .clicked = smeedit_cancel_clicked
     61};
     62
    5063/** Window close button was clicked.
    5164 *
     
    6477 *
    6578 * @param smenu Start menu
     79 * @param smentry Start menu entry to edit or @c NULL if creating
     80 *                a new entry
    6681 * @param rsmee Place to store pointer to new start menu entry edit window
    6782 * @return EOK on success or an error code
    6883 */
    69 errno_t smeedit_create(startmenu_t *smenu, smeedit_t **rsmee)
     84errno_t smeedit_create(startmenu_t *smenu, startmenu_entry_t *smentry,
     85    smeedit_t **rsmee)
    7086{
    7187        ui_wnd_params_t params;
     
    7591        gfx_rect_t rect;
    7692        ui_resource_t *res;
     93        const char *cmd;
     94        const char *caption;
    7795        errno_t rc;
    7896
    7997        ui = smenu->tbarcfg->ui;
     98
     99        if (smentry != NULL) {
     100                cmd = smenu_entry_get_cmd(smentry->entry);
     101                caption = smenu_entry_get_caption(smentry->entry);
     102        } else {
     103                cmd = "";
     104                caption = "";
     105        }
    80106
    81107        smee = calloc(1, sizeof(smeedit_t));
     
    85111        }
    86112
     113        smee->smentry = smentry;
     114
    87115        ui_wnd_params_init(&params);
    88116        params.caption = "Edit Start Menu Entry";
     
    145173        /* Command entry */
    146174
    147         rc = ui_entry_create(window, "foo", &smee->ecmd);
     175        rc = ui_entry_create(window, cmd, &smee->ecmd);
    148176        if (rc != EOK)
    149177                goto error;
     
    199227        /* Caption entry */
    200228
    201         rc = ui_entry_create(window, "bar", &smee->ecaption);
     229        rc = ui_entry_create(window, caption, &smee->ecaption);
    202230        if (rc != EOK)
    203231                goto error;
     
    243271        }
    244272
     273        ui_pbutton_set_cb(smee->bok, &smeedit_ok_button_cb, (void *)smee);
    245274        ui_pbutton_set_rect(smee->bok, &rect);
    246275        ui_pbutton_set_default(smee->bok, true);
     
    271300        }
    272301
     302        ui_pbutton_set_cb(smee->bcancel, &smeedit_cancel_button_cb,
     303            (void *)smee);
    273304        ui_pbutton_set_rect(smee->bcancel, &rect);
    274305
     
    303334}
    304335
     336/** OK button clicked.
     337 *
     338 * @params bok OK button
     339 * @params arg Argument (smeedit_t *)
     340 */
     341static void smeedit_ok_clicked(ui_pbutton_t *bok, void *arg)
     342{
     343        smeedit_t *smee;
     344        const char *cmd;
     345        const char *caption;
     346        errno_t rc;
     347
     348        (void)bok;
     349        smee = (smeedit_t *)arg;
     350
     351        cmd = ui_entry_get_text(smee->ecmd);
     352        caption = ui_entry_get_text(smee->ecaption);
     353
     354        rc = smenu_entry_set_cmd(smee->smentry->entry, cmd);
     355        if (rc != EOK)
     356                return;
     357
     358        smenu_entry_set_caption(smee->smentry->entry, caption);
     359        if (rc != EOK)
     360                return;
     361
     362        (void)smenu_entry_save(smee->smentry->entry);
     363
     364        smeedit_destroy(smee);
     365}
     366
     367/** Cancel button clicked.
     368 *
     369 * @params bok OK button
     370 * @params arg Argument (smeedit_t *)
     371 */
     372static void smeedit_cancel_clicked(ui_pbutton_t *bcancel, void *arg)
     373{
     374        smeedit_t *smee;
     375
     376        (void)bcancel;
     377        smee = (smeedit_t *)arg;
     378        smeedit_destroy(smee);
     379}
     380
    305381/** @}
    306382 */
  • uspace/app/taskbar-cfg/smeedit.h

    r40eab9f rb1397ab  
    4040#include "types/startmenu.h"
    4141
    42 extern errno_t smeedit_create(startmenu_t *, smeedit_t **);
     42extern errno_t smeedit_create(startmenu_t *, startmenu_entry_t *, smeedit_t **);
    4343extern void smeedit_destroy(smeedit_t *);
    4444
  • uspace/app/taskbar-cfg/startmenu.c

    r40eab9f rb1397ab  
    292292        smenu_entry_t *entry;
    293293        startmenu_entry_t *smentry;
    294         const char *caption;
    295         const char *cmd;
    296294        errno_t rc;
    297295
    298296        entry = tbarcfg_smenu_first(tbarcfg);
    299297        while (entry != NULL) {
    300                 caption = smenu_entry_get_caption(entry);
    301                 cmd = smenu_entry_get_cmd(entry);
    302 
    303                 rc = startmenu_insert(smenu, caption, cmd, &smentry);
     298                rc = startmenu_insert(smenu, entry, &smentry);
    304299                if (rc != EOK)
    305300                        return rc;
     
    323318        while (lentry != NULL) {
    324319                entry = (startmenu_entry_t *)ui_list_entry_get_arg(lentry);
    325                 free(entry->caption);
    326                 free(entry->cmd);
    327320                free(entry);
    328321                ui_list_entry_delete(lentry);
     
    338331 *
    339332 * @param smenu Start menu configuration tab
    340  * @param caption Entry caption
    341  * @param cmd Command to run
    342  * @param rentry Place to store pointer to new entry or NULL
     333 * @param entry Backing entry
     334 * @param rsmentry Place to store pointer to new entry or NULL
    343335 * @return EOK on success or an error code
    344336 */
    345 errno_t startmenu_insert(startmenu_t *smenu, const char *caption,
    346     const char *cmd, startmenu_entry_t **rentry)
    347 {
    348         startmenu_entry_t *entry;
     337errno_t startmenu_insert(startmenu_t *smenu, smenu_entry_t *entry,
     338    startmenu_entry_t **rsmentry)
     339{
     340        startmenu_entry_t *smentry;
    349341        ui_list_entry_attr_t attr;
    350342        errno_t rc;
    351343
    352         entry = calloc(1, sizeof(startmenu_entry_t));
    353         if (entry == NULL)
     344        smentry = calloc(1, sizeof(startmenu_entry_t));
     345        if (smentry == NULL)
    354346                return ENOMEM;
    355347
    356         entry->startmenu = smenu;
    357         entry->caption = str_dup(caption);
    358         if (entry->caption == NULL) {
    359                 free(entry);
    360                 return ENOMEM;
    361         }
    362 
    363         entry->cmd = str_dup(cmd);
    364         if (entry->caption == NULL) {
    365                 free(entry->caption);
    366                 free(entry);
    367                 return ENOMEM;
    368         }
    369 
     348        smentry->startmenu = smenu;
     349        smentry->entry = entry;
     350
     351        printf("startmenu_insert: smentry=%p entry=%p\n",
     352            smentry, entry);
    370353        ui_list_entry_attr_init(&attr);
    371         attr.caption = caption;
    372         attr.arg = (void *)entry;
    373         rc = ui_list_entry_append(smenu->entries_list, &attr, &entry->lentry);
    374         if (rc != EOK) {
    375                 free(entry->caption);
    376                 free(entry->cmd);
    377                 free(entry);
     354        attr.caption = smenu_entry_get_caption(entry);
     355        attr.arg = (void *)smentry;
     356        rc = ui_list_entry_append(smenu->entries_list, &attr, &smentry->lentry);
     357        if (rc != EOK) {
     358                free(smentry);
    378359                return rc;
    379360        }
    380361
    381         if (rentry != NULL)
    382                 *rentry = entry;
     362        if (rsmentry != NULL)
     363                *rsmentry = smentry;
    383364        return EOK;
    384365}
    385366
     367/** Get selected start menu entry.
     368 *
     369 * @param smenu Start menu
     370 * @return Selected entry
     371 */
     372startmenu_entry_t *startmenu_get_selected(startmenu_t *smenu)
     373{
     374        ui_list_entry_t *entry;
     375
     376        entry = ui_list_get_cursor(smenu->entries_list);
     377        return (startmenu_entry_t *)ui_list_entry_get_arg(entry);
     378}
     379
    386380/** Edit selected menu entry.
    387381 *
     
    391385{
    392386        smeedit_t *smee;
     387        startmenu_entry_t *smentry;
    393388        errno_t rc;
    394389
    395         rc = smeedit_create(smenu, &smee);
     390        smentry = startmenu_get_selected(smenu);
     391
     392        printf("smeedit_create:entry=%p\n", smentry);
     393        rc = smeedit_create(smenu, smentry, &smee);
    396394        if (rc != EOK)
    397395                return;
  • uspace/app/taskbar-cfg/startmenu.h

    r40eab9f rb1397ab  
    4444extern errno_t startmenu_populate(startmenu_t *, tbarcfg_t *);
    4545extern void startmenu_destroy(startmenu_t *);
    46 extern errno_t startmenu_insert(startmenu_t *, const char *, const char *,
     46extern errno_t startmenu_insert(startmenu_t *, smenu_entry_t *,
    4747    startmenu_entry_t **);
     48extern startmenu_entry_t *startmenu_get_selected(startmenu_t *);
    4849extern void startmenu_edit(startmenu_t *);
    4950
  • uspace/app/taskbar-cfg/types/smeedit.h

    r40eab9f rb1397ab  
    4747        /** Containing start menu configuration tab */
    4848        struct startmenu *startmenu;
     49        /** Start menu entry or @c NULL if creating a new entry */
     50        struct startmenu_entry *smentry;
    4951        /** Window */
    5052        ui_window_t *window;
  • uspace/app/taskbar-cfg/types/startmenu.h

    r40eab9f rb1397ab  
    3737#define TYPES_STARTMENU_H
    3838
     39#include <tbarcfg/tbarcfg.h>
    3940#include <ui/fixed.h>
    4041#include <ui/label.h>
     
    6465
    6566/** Start menu entry */
    66 typedef struct {
     67typedef struct startmenu_entry {
    6768        /** Containing start menu configuration tab */
    6869        struct startmenu *startmenu;
     70        /** Backing entry */
     71        smenu_entry_t *entry;
    6972        /** List entry */
    7073        ui_list_entry_t *lentry;
    71         /** Caption */
    72         char *caption;
    73         /** Command */
    74         char *cmd;
    7574} startmenu_entry_t;
    7675
  • uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h

    r40eab9f rb1397ab  
    4646extern const char *smenu_entry_get_caption(smenu_entry_t *);
    4747extern const char *smenu_entry_get_cmd(smenu_entry_t *);
     48extern errno_t smenu_entry_set_caption(smenu_entry_t *, const char *);
     49extern errno_t smenu_entry_set_cmd(smenu_entry_t *, const char *);
     50extern errno_t smenu_entry_save(smenu_entry_t *);
    4851
    4952#endif
  • uspace/lib/tbarcfg/private/tbarcfg.h

    r40eab9f rb1397ab  
    4444/** Taskbar configuration */
    4545struct tbarcfg {
     46        /** Repository session */
     47        sif_sess_t *repo;
    4648        /** List of start menu entries (smenu_entry_t) */
    4749        list_t entries;
     
    5456        /** Link to @c smenu->entries */
    5557        link_t lentries;
     58        /** SIF node (persistent storage) */
     59        sif_node_t *nentry;
    5660        /** Entry caption (with accelerator markup) */
    5761        char *caption;
     
    6064};
    6165
    62 extern errno_t smenu_entry_create(tbarcfg_t *, const char *,
     66extern errno_t smenu_entry_create(tbarcfg_t *, sif_node_t *, const char *,
    6367    const char *);
    6468
  • uspace/lib/tbarcfg/src/tbarcfg.c

    r40eab9f rb1397ab  
    7171                goto error;
    7272
     73        tbcfg->repo = repo;
     74
    7375        rnode = sif_get_root(repo);
    7476        nentries = sif_node_first_child(rnode);
     
    99101                }
    100102
    101                 rc = smenu_entry_create(tbcfg, caption, cmd);
     103                rc = smenu_entry_create(tbcfg, nentry, caption, cmd);
    102104                if (rc != EOK)
    103105                        goto error;
     
    122124void tbarcfg_close(tbarcfg_t *tbcfg)
    123125{
     126        (void)sif_close(tbcfg->repo);
    124127}
    125128
     
    176179}
    177180
     181/** Set start menu entry caption.
     182 *
     183 * Note: To make the change visible to others and persistent,
     184 * you must call @c smenu_entry_save()
     185 *
     186 * @param entry Start menu entry
     187 * @param caption New caption
     188 * @return EOK on success, ENOMEM if out of memory
     189 */
     190errno_t smenu_entry_set_caption(smenu_entry_t *entry, const char *caption)
     191{
     192        char *dcap;
     193
     194        dcap = str_dup(caption);
     195        if (dcap == NULL)
     196                return ENOMEM;
     197
     198        free(entry->caption);
     199        entry->caption = dcap;
     200        return EOK;
     201}
     202
     203/** Set start menu entry command.
     204 *
     205 * Note: To make the change visible to others and persistent,
     206 * you must call @c smenu_entry_save()
     207 *
     208 * @param entry Start menu entry
     209 * @param cmd New command
     210 * @return EOK on success, ENOMEM if out of memory
     211 */
     212errno_t smenu_entry_set_cmd(smenu_entry_t *entry, const char *cmd)
     213{
     214        char *dcmd;
     215
     216        dcmd = str_dup(cmd);
     217        if (dcmd == NULL)
     218                return ENOMEM;
     219
     220        free(entry->cmd);
     221        entry->cmd = dcmd;
     222        return EOK;
     223}
     224
     225/** Save any changes to start menu entry.
     226 *
     227 * @param entry Start menu entry
     228 */
     229errno_t smenu_entry_save(smenu_entry_t *entry)
     230{
     231        sif_trans_t *trans;
     232        errno_t rc;
     233
     234        rc = sif_trans_begin(entry->smenu->repo, &trans);
     235        if (rc != EOK)
     236                goto error;
     237
     238        rc = sif_node_set_attr(trans, entry->nentry, "cmd", entry->cmd);
     239        if (rc != EOK)
     240                goto error;
     241
     242        rc = sif_node_set_attr(trans, entry->nentry, "caption", entry->caption);
     243        if (rc != EOK)
     244                goto error;
     245
     246        rc = sif_trans_end(trans);
     247        if (rc != EOK)
     248                goto error;
     249
     250        return EOK;
     251error:
     252        if (trans != NULL)
     253                sif_trans_abort(trans);
     254        return rc;
     255}
     256
    178257/** Create a start menu entry and append it to the start menu (internal).
    179258 *
     
    181260 *
    182261 * @param smenu Start menu
     262 * @param nentry Backing SIF node
    183263 * @param caption Caption
    184264 * @param cmd Command to run
    185265 */
    186 errno_t smenu_entry_create(tbarcfg_t *smenu, const char *caption,
    187     const char *cmd)
     266errno_t smenu_entry_create(tbarcfg_t *smenu, sif_node_t *nentry,
     267    const char *caption, const char *cmd)
    188268{
    189269        smenu_entry_t *entry;
     
    195275                goto error;
    196276        }
     277
     278        entry->nentry = nentry;
    197279
    198280        entry->caption = str_dup(caption);
Note: See TracChangeset for help on using the changeset viewer.