Changeset accdf882 in mainline
- Timestamp:
- 2025-02-05T21:26:26Z (5 days ago)
- Branches:
- master
- Children:
- 60e9ba9, 74a165cc, b336bfd8
- Parents:
- 832cbe7
- Location:
- uspace
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/nav/menu.c
r832cbe7 raccdf882 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 55 55 ui_menu_t *mfile; 56 56 ui_menu_entry_t *mopen; 57 ui_menu_entry_t *medit; 57 58 ui_menu_entry_t *mfsep; 58 59 ui_menu_entry_t *mexit; … … 82 83 83 84 ui_menu_entry_set_cb(mopen, nav_menu_file_open, (void *) menu); 85 86 rc = ui_menu_entry_create(mfile, "~E~dit", "Ctrl-E", &medit); 87 if (rc != EOK) 88 goto error; 89 90 ui_menu_entry_set_cb(medit, nav_menu_file_edit, (void *) menu); 84 91 85 92 rc = ui_menu_entry_sep_create(mfile, &mfsep); … … 154 161 } 155 162 163 /** File / Edit menu entry selected. 164 * 165 * @param mentry Menu entry 166 * @param arg Argument (navigator_t *) 167 */ 168 void nav_menu_file_edit(ui_menu_entry_t *mentry, void *arg) 169 { 170 nav_menu_t *menu = (nav_menu_t *)arg; 171 172 if (menu->cb != NULL && menu->cb->file_edit != NULL) 173 menu->cb->file_edit(menu->cb_arg); 174 } 175 156 176 /** File / Exit menu entry selected. 157 177 * -
uspace/app/nav/menu.h
r832cbe7 raccdf882 1 1 /* 2 * Copyright (c) 202 1Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 47 47 extern ui_control_t *nav_menu_ctl(nav_menu_t *); 48 48 extern void nav_menu_file_open(ui_menu_entry_t *, void *); 49 extern void nav_menu_file_edit(ui_menu_entry_t *, void *); 49 50 extern void nav_menu_file_exit(ui_menu_entry_t *, void *); 50 51 -
uspace/app/nav/nav.c
r832cbe7 raccdf882 1 1 /* 2 * Copyright (c) 202 2Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 39 39 #include <stdlib.h> 40 40 #include <str.h> 41 #include <task.h> 41 42 #include <ui/fixed.h> 42 43 #include <ui/filelist.h> … … 48 49 #include "panel.h" 49 50 51 #define EDITOR_CMD "/app/edit" 52 50 53 static void wnd_close(ui_window_t *, void *); 51 54 static void wnd_kbd(ui_window_t *, void *, kbd_event_t *); … … 57 60 58 61 static void navigator_file_open(void *); 62 static void navigator_file_edit(void *); 59 63 static void navigator_file_exit(void *); 60 64 61 65 static nav_menu_cb_t navigator_menu_cb = { 62 66 .file_open = navigator_file_open, 67 .file_edit = navigator_file_edit, 63 68 .file_exit = navigator_file_exit 64 69 }; … … 97 102 (event->mods & KM_CTRL) != 0) { 98 103 switch (event->key) { 104 case KC_E: 105 navigator_file_edit((void *)navigator); 106 break; 99 107 case KC_Q: 100 108 ui_quit(navigator->ui); … … 318 326 } 319 327 328 /** Open file in text editor. 329 * 330 * @param panel Panel 331 * @param fname File name 332 * 333 * @return EOK on success or an error code 334 */ 335 static errno_t navigator_edit_file(navigator_t *navigator, const char *fname) 336 { 337 task_id_t id; 338 task_wait_t wait; 339 task_exit_t texit; 340 int retval; 341 errno_t rc; 342 343 /* Free up and clean console for the child task. */ 344 rc = ui_suspend(navigator->ui); 345 if (rc != EOK) 346 return rc; 347 348 rc = task_spawnl(&id, &wait, EDITOR_CMD, EDITOR_CMD, fname, NULL); 349 if (rc != EOK) 350 goto error; 351 352 rc = task_wait(&wait, &texit, &retval); 353 if ((rc != EOK) || (texit != TASK_EXIT_NORMAL)) 354 goto error; 355 356 /* Resume UI operation */ 357 rc = ui_resume(navigator->ui); 358 if (rc != EOK) 359 return rc; 360 361 (void) ui_paint(navigator->ui); 362 return EOK; 363 error: 364 (void) ui_resume(navigator->ui); 365 (void) ui_paint(navigator->ui); 366 return rc; 367 } 368 369 /** File / Edit menu entry selected */ 370 static void navigator_file_edit(void *arg) 371 { 372 navigator_t *navigator = (navigator_t *)arg; 373 ui_file_list_entry_t *entry; 374 ui_file_list_entry_attr_t attr; 375 panel_t *panel; 376 377 panel = navigator_get_active_panel(navigator); 378 entry = ui_file_list_get_cursor(panel->flist); 379 ui_file_list_entry_get_attr(entry, &attr); 380 381 (void)navigator_edit_file(navigator, attr.name); 382 } 383 320 384 /** File / Exit menu entry selected */ 321 385 static void navigator_file_exit(void *arg) -
uspace/app/nav/test/menu.c
r832cbe7 raccdf882 1 1 /* 2 * Copyright (c) 202 1Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 37 37 38 38 static void test_menu_file_open(void *); 39 static void test_menu_file_edit(void *); 39 40 static void test_menu_file_exit(void *); 40 41 … … 42 43 static nav_menu_cb_t test_cb = { 43 44 .file_open = test_menu_file_open, 45 .file_edit = test_menu_file_edit, 44 46 .file_exit = test_menu_file_exit 45 47 }; … … 48 50 typedef struct { 49 51 bool file_open; 52 bool file_edit; 50 53 bool file_exit; 51 54 } test_resp_t; … … 148 151 } 149 152 153 /** File / Edit callback */ 154 PCUT_TEST(file_edit) 155 { 156 ui_t *ui; 157 ui_window_t *window; 158 ui_wnd_params_t params; 159 nav_menu_t *menu; 160 test_resp_t resp; 161 errno_t rc; 162 163 rc = ui_create_disp(NULL, &ui); 164 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 165 166 ui_wnd_params_init(¶ms); 167 params.caption = "Test"; 168 169 rc = ui_window_create(ui, ¶ms, &window); 170 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 171 172 rc = nav_menu_create(window, &menu); 173 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 174 175 /* Call back with no callbacks set */ 176 nav_menu_file_edit(NULL, menu); 177 178 /* Call back with dummy callbacks set */ 179 nav_menu_set_cb(menu, &dummy_cb, &resp); 180 nav_menu_file_edit(NULL, menu); 181 182 /* Call back with test callbacks set */ 183 resp.file_edit = false; 184 nav_menu_set_cb(menu, &test_cb, &resp); 185 nav_menu_file_edit(NULL, menu); 186 PCUT_ASSERT_TRUE(resp.file_edit); 187 188 nav_menu_destroy(menu); 189 ui_window_destroy(window); 190 ui_destroy(ui); 191 } 192 193 /** File / Exit callback */ 194 PCUT_TEST(file_exit) 195 { 196 ui_t *ui; 197 ui_window_t *window; 198 ui_wnd_params_t params; 199 nav_menu_t *menu; 200 test_resp_t resp; 201 errno_t rc; 202 203 rc = ui_create_disp(NULL, &ui); 204 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 205 206 ui_wnd_params_init(¶ms); 207 params.caption = "Test"; 208 209 rc = ui_window_create(ui, ¶ms, &window); 210 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 211 212 rc = nav_menu_create(window, &menu); 213 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 214 215 /* Call back with no callbacks set */ 216 nav_menu_file_exit(NULL, menu); 217 218 /* Call back with dummy callbacks set */ 219 nav_menu_set_cb(menu, &dummy_cb, &resp); 220 nav_menu_file_exit(NULL, menu); 221 222 /* Call back with test callbacks set */ 223 resp.file_exit = false; 224 nav_menu_set_cb(menu, &test_cb, &resp); 225 nav_menu_file_exit(NULL, menu); 226 PCUT_ASSERT_TRUE(resp.file_exit); 227 228 nav_menu_destroy(menu); 229 ui_window_destroy(window); 230 ui_destroy(ui); 231 } 232 150 233 /** Testing File / Open callback */ 151 234 static void test_menu_file_open(void *arg) … … 156 239 } 157 240 241 /** Testing File / Edit callback */ 242 static void test_menu_file_edit(void *arg) 243 { 244 test_resp_t *resp = (test_resp_t *)arg; 245 246 resp->file_edit = true; 247 } 248 158 249 /** Testing File / Exit callback */ 159 250 static void test_menu_file_exit(void *arg) -
uspace/app/nav/types/menu.h
r832cbe7 raccdf882 1 1 /* 2 * Copyright (c) 202 1Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 45 45 /** File / Open */ 46 46 void (*file_open)(void *); 47 /** File / Edit */ 48 void (*file_edit)(void *); 47 49 /** File / Exit */ 48 50 void (*file_exit)(void *); -
uspace/lib/ui/include/types/ui/filelist.h
r832cbe7 raccdf882 1 1 /* 2 * Copyright (c) 202 2Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 37 37 #define _UI_TYPES_FILELIST_H 38 38 39 #include <loc.h> 40 #include <stdbool.h> 41 #include <stdint.h> 42 39 43 struct ui_file_list; 40 44 typedef struct ui_file_list ui_file_list_t; … … 43 47 typedef struct ui_file_list_entry ui_file_list_entry_t; 44 48 45 struct ui_file_list_entry_attr; 46 typedef struct ui_file_list_entry_attr ui_file_list_entry_attr_t; 49 /** File list entry attributes */ 50 typedef struct ui_file_list_entry_attr { 51 /** File name */ 52 const char *name; 53 /** File size */ 54 uint64_t size; 55 /** @c true iff entry is a directory */ 56 bool isdir; 57 /** Service number for service special entries */ 58 service_id_t svc; 59 } ui_file_list_entry_attr_t; 47 60 48 61 /** File list callbacks */ -
uspace/lib/ui/include/ui/filelist.h
r832cbe7 raccdf882 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 54 54 extern errno_t ui_file_list_open(ui_file_list_t *, ui_file_list_entry_t *); 55 55 extern ui_file_list_entry_t *ui_file_list_get_cursor(ui_file_list_t *); 56 extern void ui_file_list_entry_get_attr(ui_file_list_entry_t *, 57 ui_file_list_entry_attr_t *); 56 58 57 59 #endif -
uspace/lib/ui/private/filelist.h
r832cbe7 raccdf882 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 43 43 #include <stdint.h> 44 44 #include <types/ui/filelist.h> 45 46 /** File list entry attributes */47 struct ui_file_list_entry_attr {48 /** File name */49 const char *name;50 /** File size */51 uint64_t size;52 /** @c true iff entry is a directory */53 bool isdir;54 /** Service number for service special entries */55 service_id_t svc;56 };57 45 58 46 /** File list entry */ -
uspace/lib/ui/src/filelist.c
r832cbe7 raccdf882 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 535 535 } 536 536 537 /** Get file list entry attributes. 538 * 539 * @param entry File list entry 540 * @return Current cursor 541 */ 542 void ui_file_list_entry_get_attr(ui_file_list_entry_t *entry, 543 ui_file_list_entry_attr_t *attr) 544 { 545 attr->name = entry->name; 546 attr->size = entry->size; 547 attr->isdir = entry->isdir; 548 attr->svc = entry->svc; 549 } 550 537 551 /** Open file list entry. 538 552 *
Note:
See TracChangeset
for help on using the changeset viewer.