Changes in uspace/lib/ui/src/filedialog.c [e0cf963:b979ffb] in mainline
- File:
-
- 1 edited
-
uspace/lib/ui/src/filedialog.c (modified) (19 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/filedialog.c
re0cf963 rb979ffb 1 1 /* 2 * Copyright (c) 202 1Jiri Svoboda2 * Copyright (c) 2026 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 41 41 #include <ui/label.h> 42 42 #include <ui/filedialog.h> 43 #include <ui/filelist.h> 43 44 #include <ui/pbutton.h> 44 45 #include <ui/resource.h> … … 47 48 #include "../private/filedialog.h" 48 49 50 static void ui_file_dialog_wnd_resize(ui_window_t *, void *); 49 51 static void ui_file_dialog_wnd_close(ui_window_t *, void *); 50 52 static void ui_file_dialog_wnd_kbd(ui_window_t *, void *, kbd_event_t *); 51 53 52 54 ui_window_cb_t ui_file_dialog_wnd_cb = { 55 .resize = ui_file_dialog_wnd_resize, 53 56 .close = ui_file_dialog_wnd_close, 54 57 .kbd = ui_file_dialog_wnd_kbd 55 58 }; 56 59 60 static void ui_file_dialog_flist_activate_req(ui_file_list_t *, void *); 61 static void ui_file_dialog_flist_selected(ui_file_list_t *, void *, 62 const char *); 63 64 ui_file_list_cb_t ui_file_dialog_flist_cb = { 65 .activate_req = ui_file_dialog_flist_activate_req, 66 .selected = ui_file_dialog_flist_selected 67 }; 68 57 69 static void ui_file_dialog_bok_clicked(ui_pbutton_t *, void *); 58 70 static void ui_file_dialog_bcancel_clicked(ui_pbutton_t *, void *); … … 77 89 memset(params, 0, sizeof(ui_file_dialog_params_t)); 78 90 params->ifname = ""; 91 } 92 93 /** Compute file dialog geometry. 94 * 95 * @param ui User interface 96 * @param wrect Window interior rectangle 97 * @param geom Place to store geometry 98 */ 99 static void ui_file_dialog_get_geom(ui_t *ui, gfx_rect_t *wrect, 100 ui_file_dialog_geom_t *geom) 101 { 102 gfx_coord_t cx; 103 104 /* FIXME: Auto layout */ 105 if (ui_is_textmode(ui)) { 106 geom->fname_label_rect.p0.x = 3; 107 geom->fname_label_rect.p0.y = 2; 108 geom->fname_label_rect.p1.x = 17; 109 geom->fname_label_rect.p1.y = 3; 110 } else { 111 geom->fname_label_rect.p0.x = 10; 112 geom->fname_label_rect.p0.y = 35; 113 geom->fname_label_rect.p1.x = 190; 114 geom->fname_label_rect.p1.y = 50; 115 } 116 117 /* FIXME: Auto layout */ 118 if (ui_is_textmode(ui)) { 119 geom->entry_rect.p0.x = 3; 120 geom->entry_rect.p0.y = 3; 121 geom->entry_rect.p1.x = wrect->p1.x - 3; 122 geom->entry_rect.p1.y = 4; 123 } else { 124 geom->entry_rect.p0.x = 10; 125 geom->entry_rect.p0.y = 55; 126 geom->entry_rect.p1.x = wrect->p1.x - 10; 127 geom->entry_rect.p1.y = 80; 128 } 129 130 /* FIXME: Auto layout */ 131 if (ui_is_textmode(ui)) { 132 geom->files_label_rect.p0.x = 3; 133 geom->files_label_rect.p0.y = 5; 134 geom->files_label_rect.p1.x = 17; 135 geom->files_label_rect.p1.y = 6; 136 } else { 137 geom->files_label_rect.p0.x = 10; 138 geom->files_label_rect.p0.y = 90; 139 geom->files_label_rect.p1.x = 190; 140 geom->files_label_rect.p1.y = 105; 141 } 142 143 /* FIXME: Auto layout */ 144 if (ui_is_textmode(ui)) { 145 geom->flist_rect.p0.x = 3; 146 geom->flist_rect.p0.y = 6; 147 geom->flist_rect.p1.x = wrect->p1.x - 3; 148 geom->flist_rect.p1.y = wrect->p1.y - 4; 149 } else { 150 geom->flist_rect.p0.x = 10; 151 geom->flist_rect.p0.y = 110; 152 geom->flist_rect.p1.x = wrect->p1.x - 10; 153 geom->flist_rect.p1.y = wrect->p1.y - 55; 154 } 155 156 cx = (wrect->p0.x + wrect->p1.x) / 2; 157 158 /* FIXME: Auto layout */ 159 if (ui_is_textmode(ui)) { 160 geom->bok_rect.p0.x = cx - 10; 161 geom->bok_rect.p0.y = wrect->p1.y - 3; 162 geom->bok_rect.p1.x = cx; 163 geom->bok_rect.p1.y = wrect->p1.y - 2; 164 } else { 165 geom->bok_rect.p0.x = cx - 95; 166 geom->bok_rect.p0.y = wrect->p1.y - 45; 167 geom->bok_rect.p1.x = cx - 5; 168 geom->bok_rect.p1.y = wrect->p1.y - 17; 169 } 170 171 /* FIXME: Auto layout */ 172 if (ui_is_textmode(ui)) { 173 geom->bcancel_rect.p0.x = cx + 2; 174 geom->bcancel_rect.p0.y = wrect->p1.y - 3; 175 geom->bcancel_rect.p1.x = cx + 12; 176 geom->bcancel_rect.p1.y = wrect->p1.y - 2; 177 } else { 178 geom->bcancel_rect.p0.x = cx + 5; 179 geom->bcancel_rect.p0.y = wrect->p1.y - 45; 180 geom->bcancel_rect.p1.x = cx + 95; 181 geom->bcancel_rect.p1.y = wrect->p1.y - 17; 182 } 79 183 } 80 184 … … 96 200 ui_label_t *label = NULL; 97 201 ui_entry_t *entry = NULL; 202 ui_file_list_t *flist = NULL; 98 203 ui_pbutton_t *bok = NULL; 99 204 ui_pbutton_t *bcancel = NULL; 100 gfx_rect_t rect; 205 ui_file_dialog_geom_t geom; 206 gfx_rect_t arect; 101 207 ui_resource_t *ui_res; 102 208 … … 109 215 ui_wnd_params_init(&wparams); 110 216 wparams.caption = params->caption; 217 wparams.style |= ui_wds_maximize_btn | ui_wds_resizable; 111 218 112 219 /* FIXME: Auto layout */ … … 115 222 wparams.rect.p0.y = 0; 116 223 wparams.rect.p1.x = 40; 117 wparams.rect.p1.y = 9; 224 wparams.rect.p1.y = 20; 225 226 wparams.min_size.x = 30; 227 wparams.min_size.y = 10; 118 228 } else { 119 229 wparams.rect.p0.x = 0; 120 230 wparams.rect.p0.y = 0; 121 231 wparams.rect.p1.x = 300; 122 wparams.rect.p1.y = 135; 232 wparams.rect.p1.y = 335; 233 234 wparams.min_size.x = 240; 235 wparams.min_size.y = 260; 123 236 } 124 237 … … 129 242 ui_window_set_cb(window, &ui_file_dialog_wnd_cb, dialog); 130 243 244 ui_window_get_app_rect(window, &arect); 131 245 ui_res = ui_window_get_res(window); 132 246 247 /* Compute geometry. */ 248 ui_file_dialog_get_geom(ui, &arect, &geom); 249 133 250 rc = ui_fixed_create(&fixed); 134 251 if (rc != EOK) … … 139 256 goto error; 140 257 141 /* FIXME: Auto layout */ 142 if (ui_is_textmode(ui)) { 143 rect.p0.x = 3; 144 rect.p0.y = 2; 145 rect.p1.x = 17; 146 rect.p1.y = 3; 147 } else { 148 rect.p0.x = 10; 149 rect.p0.y = 35; 150 rect.p1.x = 190; 151 rect.p1.y = 50; 152 } 153 154 ui_label_set_rect(label, &rect); 258 ui_label_set_rect(label, &geom.fname_label_rect); 155 259 156 260 rc = ui_fixed_add(fixed, ui_label_ctl(label)); … … 164 268 goto error; 165 269 166 /* FIXME: Auto layout */ 167 if (ui_is_textmode(ui)) { 168 rect.p0.x = 3; 169 rect.p0.y = 4; 170 rect.p1.x = 37; 171 rect.p1.y = 5; 172 } else { 173 rect.p0.x = 10; 174 rect.p0.y = 55; 175 rect.p1.x = 290; 176 rect.p1.y = 80; 177 } 178 179 ui_entry_set_rect(entry, &rect); 270 ui_entry_set_rect(entry, &geom.entry_rect); 180 271 181 272 rc = ui_fixed_add(fixed, ui_entry_ctl(entry)); … … 192 283 entry = NULL; 193 284 285 /* Files label */ 286 rc = ui_label_create(ui_res, "Files:", &label); 287 if (rc != EOK) 288 goto error; 289 290 ui_label_set_rect(label, &geom.files_label_rect); 291 292 rc = ui_fixed_add(fixed, ui_label_ctl(label)); 293 if (rc != EOK) 294 goto error; 295 296 label = NULL; 297 298 /* File list */ 299 300 rc = ui_file_list_create(window, false, &flist); 301 if (rc != EOK) 302 goto error; 303 304 ui_file_list_set_rect(flist, &geom.flist_rect); 305 ui_file_list_set_cb(flist, &ui_file_dialog_flist_cb, dialog); 306 307 rc = ui_fixed_add(fixed, ui_file_list_ctl(flist)); 308 if (rc != EOK) 309 goto error; 310 311 dialog->flist = flist; 312 flist = NULL; 313 314 rc = ui_file_list_read_dir(dialog->flist, "."); 315 if (rc != EOK) 316 goto error; 317 318 /* OK button */ 319 194 320 rc = ui_pbutton_create(ui_res, "OK", &bok); 195 321 if (rc != EOK) … … 197 323 198 324 ui_pbutton_set_cb(bok, &ui_file_dialog_bok_cb, dialog); 199 200 /* FIXME: Auto layout */ 201 if (ui_is_textmode(ui)) { 202 rect.p0.x = 10; 203 rect.p0.y = 6; 204 rect.p1.x = 20; 205 rect.p1.y = 7; 206 } else { 207 rect.p0.x = 55; 208 rect.p0.y = 90; 209 rect.p1.x = 145; 210 rect.p1.y = 118; 211 } 212 213 ui_pbutton_set_rect(bok, &rect); 214 325 ui_pbutton_set_rect(bok, &geom.bok_rect); 215 326 ui_pbutton_set_default(bok, true); 216 327 … … 222 333 bok = NULL; 223 334 335 /* Cancel button */ 336 224 337 rc = ui_pbutton_create(ui_res, "Cancel", &bcancel); 225 338 if (rc != EOK) … … 227 340 228 341 ui_pbutton_set_cb(bcancel, &ui_file_dialog_bcancel_cb, dialog); 229 230 /* FIXME: Auto layout */ 231 if (ui_is_textmode(ui)) { 232 rect.p0.x = 22; 233 rect.p0.y = 6; 234 rect.p1.x = 32; 235 rect.p1.y = 7; 236 } else { 237 rect.p0.x = 155; 238 rect.p0.y = 90; 239 rect.p1.x = 245; 240 rect.p1.y = 118; 241 } 242 243 ui_pbutton_set_rect(bcancel, &rect); 342 ui_pbutton_set_rect(bcancel, &geom.bcancel_rect); 244 343 245 344 rc = ui_fixed_add(fixed, ui_pbutton_ctl(bcancel)); … … 263 362 if (entry != NULL) 264 363 ui_entry_destroy(entry); 364 if (flist != NULL) 365 ui_file_list_destroy(flist); 265 366 if (bok != NULL) 266 367 ui_pbutton_destroy(bok); … … 304 405 } 305 406 306 /** File dialog window close handler.407 /** File dialog window resize handler. 307 408 * 308 409 * @param window Window 309 410 * @param arg Argument (ui_file_dialog_t *) 310 411 */ 412 static void ui_file_dialog_wnd_resize(ui_window_t *window, void *arg) 413 { 414 ui_file_dialog_t *dialog = (ui_file_dialog_t *) arg; 415 gfx_rect_t arect; 416 ui_file_dialog_geom_t geom; 417 418 /* Get new window application rectangle. */ 419 ui_window_get_app_rect(window, &arect); 420 421 /* Compute geometry. */ 422 ui_file_dialog_get_geom(ui_window_get_ui(window), &arect, &geom); 423 424 ui_entry_set_rect(dialog->ename, &geom.entry_rect); 425 ui_file_list_set_rect(dialog->flist, &geom.flist_rect); 426 ui_pbutton_set_rect(dialog->bok, &geom.bok_rect); 427 ui_pbutton_set_rect(dialog->bcancel, &geom.bcancel_rect); 428 429 (void)ui_window_paint(window); 430 } 431 432 /** File dialog window close handler. 433 * 434 * @param window Window 435 * @param arg Argument (ui_file_dialog_t *) 436 */ 311 437 static void ui_file_dialog_wnd_close(ui_window_t *window, void *arg) 312 438 { … … 320 446 * 321 447 * @param window Window 322 * @param arg Argument (ui_ prompt_dialog_t *)448 * @param arg Argument (ui_file_dialog_t *) 323 449 * @param event Keyboard event 324 450 */ … … 328 454 ui_file_dialog_t *dialog = (ui_file_dialog_t *) arg; 329 455 const char *fname; 456 ui_evclaim_t claim; 457 458 claim = ui_window_def_kbd(window, event); 459 if (claim == ui_claimed) 460 return; 330 461 331 462 if (event->type == KEY_PRESS && … … 346 477 } 347 478 } 348 349 ui_window_def_kbd(window, event); 479 } 480 481 static void ui_file_dialog_flist_activate_req(ui_file_list_t *flist, void *arg) 482 { 483 ui_file_dialog_t *dialog = (ui_file_dialog_t *) arg; 484 485 ui_file_list_activate(dialog->flist); 486 ui_entry_deactivate(dialog->ename); 487 } 488 489 static void ui_file_dialog_flist_selected(ui_file_list_t *flist, void *arg, 490 const char *fname) 491 { 492 ui_file_dialog_t *dialog = (ui_file_dialog_t *) arg; 493 494 dialog->cb->bok(dialog, dialog->arg, fname); 350 495 } 351 496
Note:
See TracChangeset
for help on using the changeset viewer.
