application/settings.c

changeset 62
dbde5e038ea9
parent 61
eb63af2f2bdd
child 63
d0eeb2b98dae
equal deleted inserted replaced
61:eb63af2f2bdd 62:dbde5e038ea9
59 if(settings->selected_repo >= 0) { 59 if(settings->selected_repo >= 0) {
60 settings_edit_repository(settings, settings->selected_repo); 60 settings_edit_repository(settings, settings->selected_repo);
61 } 61 }
62 } 62 }
63 63
64 static void repolist_add(UiEvent *event, void *userdata) {
65 SettingsWindow *settings = event->window;
66 settings->repo_new = TRUE;
67 settings->selected_repo = -1;
68 // switch to editing tab
69 ui_set(settings->repo_tabview, 1);
70 }
71
64 static void repolist_remove(UiEvent *event, void *userdata) { 72 static void repolist_remove(UiEvent *event, void *userdata) {
65 // TODO 73 SettingsWindow *settings = event->window;
74 DavCfgRepository *repo = ui_list_get(settings->repos, settings->selected_repo);
75 if(!repo) {
76 fprintf(stderr, "Error: cannot get repository at index %d\n", settings->selected_repo);
77 return;
78 }
79 dav_repository_remove_and_free(settings->config, repo);
80 settings_update_repolist(settings);
81 settings->selected_repo = -1;
82 ui_unset_group(event->obj->ctx, SETTINGS_STATE_REPOLIST_SELECTED);
66 } 83 }
67 84
68 static void editrepo_go_back(UiEvent *event, void *userdata) { 85 static void editrepo_go_back(UiEvent *event, void *userdata) {
69 SettingsWindow *settings = event->window; 86 SettingsWindow *settings = event->window;
70 settings_store_repository(settings); 87 settings_store_repository(settings);
126 143
127 ui_tabview(obj, .value = wdata->repo_tabview, .margin = 10, .tabview = UI_TABVIEW_INVISIBLE) { 144 ui_tabview(obj, .value = wdata->repo_tabview, .margin = 10, .tabview = UI_TABVIEW_INVISIBLE) {
128 ui_tab(obj, "list") { 145 ui_tab(obj, "list") {
129 ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10) { 146 ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10) {
130 ui_hbox(obj, .spacing = 10) { 147 ui_hbox(obj, .spacing = 10) {
131 ui_button(obj, .label = "Add"); 148 ui_button(obj, .label = "Add", .onclick = repolist_add);
132 ui_button(obj, .label = "Edit", .onclick = repolist_edit, .groups = UI_GROUPS(SETTINGS_STATE_REPOLIST_SELECTED)); 149 ui_button(obj, .label = "Edit", .onclick = repolist_edit, .groups = UI_GROUPS(SETTINGS_STATE_REPOLIST_SELECTED));
133 ui_button(obj, .label = "Remove", .groups = UI_GROUPS(SETTINGS_STATE_REPOLIST_SELECTED)); 150 ui_button(obj, .label = "Remove", .onclick = repolist_remove, .groups = UI_GROUPS(SETTINGS_STATE_REPOLIST_SELECTED));
134 } 151 }
135 ui_newline(obj); 152 ui_newline(obj);
136 153
137 UiModel* model = ui_model(obj->ctx, UI_STRING, "Name", UI_STRING, "URL", UI_STRING, "User", UI_STRING, "Encrypted", -1); 154 UiModel* model = ui_model(obj->ctx, UI_STRING, "Name", UI_STRING, "URL", UI_STRING, "User", UI_STRING, "Encrypted", -1);
138 model->getvalue = (ui_getvaluefunc) settings_repolist_getvalue; 155 model->getvalue = (ui_getvaluefunc) settings_repolist_getvalue;
382 return ret; 399 return ret;
383 } 400 }
384 401
385 void settings_store_repository(SettingsWindow *settings) { 402 void settings_store_repository(SettingsWindow *settings) {
386 DavConfig *config = settings->config; 403 DavConfig *config = settings->config;
387 DavCfgRepository *repo = ui_list_get(settings->repos, settings->selected_repo); 404 DavCfgRepository *repo;
388 if(!repo) { 405 if(settings->repo_new) {
389 fprintf(stderr, "Error: cannot get repository at index %d\n", settings->selected_repo); 406 settings->repo_new = FALSE;
390 return; 407 char *name = ui_get(settings->repo_name);
408 if(strlen(name) == 0) {
409 return;
410 }
411 repo = dav_repository_new(config);
412 dav_config_add_repository(config, repo);
413 } else {
414 repo = ui_list_get(settings->repos, settings->selected_repo);
415 if(!repo) {
416 fprintf(stderr, "Error: cannot get repository at index %d\n", settings->selected_repo);
417 return;
418 }
391 } 419 }
392 420
393 // always store name/url nodes 421 // always store name/url nodes
394 dav_cfg_string_set_value(config, &repo->name, repo->node, cx_str(ui_get(settings->repo_name)), "name"); 422 dav_cfg_string_set_value(config, &repo->name, repo->node, cx_str(ui_get(settings->repo_name)), "name");
395 dav_cfg_string_set_value(config, &repo->url, repo->node, cx_str(ui_get(settings->repo_url)), "url"); 423 dav_cfg_string_set_value(config, &repo->url, repo->node, cx_str(ui_get(settings->repo_url)), "url");
443 dav_cfg_int_set_value(config, &repo->ssl_version, repo->node, tlsversion, "ssl-version"); 471 dav_cfg_int_set_value(config, &repo->ssl_version, repo->node, tlsversion, "ssl-version");
444 } else { 472 } else {
445 dav_cfg_int_remove(&repo->ssl_version); 473 dav_cfg_int_remove(&repo->ssl_version);
446 } 474 }
447 475
476 settings_update_repolist(settings);
448 settings->selected_repo = -1; 477 settings->selected_repo = -1;
449 } 478 }
450 479
451 void settings_update_repolist(SettingsWindow *settings) { 480 void settings_update_repolist(SettingsWindow *settings) {
452 DavConfig *config = settings->config; 481 DavConfig *config = settings->config;
453 482
454 ui_list_clear(settings->repos); 483 ui_list_clear(settings->repos);
455 484
456 for (DavCfgRepository *repo = config->repositories; repo; repo = repo->next) { 485 for (DavCfgRepository *repo = config->repositories; repo; repo = repo->next) {
457 ui_list_append(settings->repos, repo); 486 ui_list_append(settings->repos, repo);
487 }
488
489 if(settings->repos->update) {
490 ui_list_update(settings->repos);
458 } 491 }
459 } 492 }
460 493
461 void* settings_repolist_getvalue(DavCfgRepository *repo, int col) { 494 void* settings_repolist_getvalue(DavCfgRepository *repo, int col) {
462 switch(col) { 495 switch(col) {

mercurial