Changes in uspace/lib/ui/src/filedialog.c [b979ffb:e0cf963] in mainline
- File:
-
- 1 edited
-
uspace/lib/ui/src/filedialog.c (modified) (19 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/filedialog.c
rb979ffb re0cf963 1 1 /* 2 * Copyright (c) 202 6Jiri Svoboda2 * Copyright (c) 2021 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>44 43 #include <ui/pbutton.h> 45 44 #include <ui/resource.h> … … 48 47 #include "../private/filedialog.h" 49 48 50 static void ui_file_dialog_wnd_resize(ui_window_t *, void *);51 49 static void ui_file_dialog_wnd_close(ui_window_t *, void *); 52 50 static void ui_file_dialog_wnd_kbd(ui_window_t *, void *, kbd_event_t *); 53 51 54 52 ui_window_cb_t ui_file_dialog_wnd_cb = { 55 .resize = ui_file_dialog_wnd_resize,56 53 .close = ui_file_dialog_wnd_close, 57 54 .kbd = ui_file_dialog_wnd_kbd 58 55 }; 59 56 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_selected67 };68 69 57 static void ui_file_dialog_bok_clicked(ui_pbutton_t *, void *); 70 58 static void ui_file_dialog_bcancel_clicked(ui_pbutton_t *, void *); … … 89 77 memset(params, 0, sizeof(ui_file_dialog_params_t)); 90 78 params->ifname = ""; 91 }92 93 /** Compute file dialog geometry.94 *95 * @param ui User interface96 * @param wrect Window interior rectangle97 * @param geom Place to store geometry98 */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 }183 79 } 184 80 … … 200 96 ui_label_t *label = NULL; 201 97 ui_entry_t *entry = NULL; 202 ui_file_list_t *flist = NULL;203 98 ui_pbutton_t *bok = NULL; 204 99 ui_pbutton_t *bcancel = NULL; 205 ui_file_dialog_geom_t geom; 206 gfx_rect_t arect; 100 gfx_rect_t rect; 207 101 ui_resource_t *ui_res; 208 102 … … 215 109 ui_wnd_params_init(&wparams); 216 110 wparams.caption = params->caption; 217 wparams.style |= ui_wds_maximize_btn | ui_wds_resizable;218 111 219 112 /* FIXME: Auto layout */ … … 222 115 wparams.rect.p0.y = 0; 223 116 wparams.rect.p1.x = 40; 224 wparams.rect.p1.y = 20; 225 226 wparams.min_size.x = 30; 227 wparams.min_size.y = 10; 117 wparams.rect.p1.y = 9; 228 118 } else { 229 119 wparams.rect.p0.x = 0; 230 120 wparams.rect.p0.y = 0; 231 121 wparams.rect.p1.x = 300; 232 wparams.rect.p1.y = 335; 233 234 wparams.min_size.x = 240; 235 wparams.min_size.y = 260; 122 wparams.rect.p1.y = 135; 236 123 } 237 124 … … 242 129 ui_window_set_cb(window, &ui_file_dialog_wnd_cb, dialog); 243 130 244 ui_window_get_app_rect(window, &arect);245 131 ui_res = ui_window_get_res(window); 246 132 247 /* Compute geometry. */248 ui_file_dialog_get_geom(ui, &arect, &geom);249 250 133 rc = ui_fixed_create(&fixed); 251 134 if (rc != EOK) … … 256 139 goto error; 257 140 258 ui_label_set_rect(label, &geom.fname_label_rect); 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); 259 155 260 156 rc = ui_fixed_add(fixed, ui_label_ctl(label)); … … 268 164 goto error; 269 165 270 ui_entry_set_rect(entry, &geom.entry_rect); 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); 271 180 272 181 rc = ui_fixed_add(fixed, ui_entry_ctl(entry)); … … 283 192 entry = NULL; 284 193 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 320 194 rc = ui_pbutton_create(ui_res, "OK", &bok); 321 195 if (rc != EOK) … … 323 197 324 198 ui_pbutton_set_cb(bok, &ui_file_dialog_bok_cb, dialog); 325 ui_pbutton_set_rect(bok, &geom.bok_rect); 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 326 215 ui_pbutton_set_default(bok, true); 327 216 … … 333 222 bok = NULL; 334 223 335 /* Cancel button */336 337 224 rc = ui_pbutton_create(ui_res, "Cancel", &bcancel); 338 225 if (rc != EOK) … … 340 227 341 228 ui_pbutton_set_cb(bcancel, &ui_file_dialog_bcancel_cb, dialog); 342 ui_pbutton_set_rect(bcancel, &geom.bcancel_rect); 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); 343 244 344 245 rc = ui_fixed_add(fixed, ui_pbutton_ctl(bcancel)); … … 362 263 if (entry != NULL) 363 264 ui_entry_destroy(entry); 364 if (flist != NULL)365 ui_file_list_destroy(flist);366 265 if (bok != NULL) 367 266 ui_pbutton_destroy(bok); … … 405 304 } 406 305 407 /** File dialog window resize handler.306 /** File dialog window close handler. 408 307 * 409 308 * @param window Window 410 309 * @param arg Argument (ui_file_dialog_t *) 411 310 */ 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 Window435 * @param arg Argument (ui_file_dialog_t *)436 */437 311 static void ui_file_dialog_wnd_close(ui_window_t *window, void *arg) 438 312 { … … 446 320 * 447 321 * @param window Window 448 * @param arg Argument (ui_ file_dialog_t *)322 * @param arg Argument (ui_prompt_dialog_t *) 449 323 * @param event Keyboard event 450 324 */ … … 454 328 ui_file_dialog_t *dialog = (ui_file_dialog_t *) arg; 455 329 const char *fname; 456 ui_evclaim_t claim;457 458 claim = ui_window_def_kbd(window, event);459 if (claim == ui_claimed)460 return;461 330 462 331 if (event->type == KEY_PRESS && … … 477 346 } 478 347 } 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); 348 349 ui_window_def_kbd(window, event); 495 350 } 496 351
Note:
See TracChangeset
for help on using the changeset viewer.
