int show_event_config_dialog(const char *event_name, GtkWindow *parent) { event_config_t *event = get_event_config(event_name); GtkWindow *parent_window = parent ? parent : g_event_list_window; GtkWidget *dialog = gtk_dialog_new_with_buttons( /*title:*/ec_get_screen_name(event) ? ec_get_screen_name(event) : event_name, parent_window, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_APPLY, NULL); /* Allow resize? * W/o resize, e.g. upload configuration hint looks awfully * line wrapped. * With resize, there are some somewhat not nice effects: * for one, opening an expander will enlarge window, * but won't contract it back when expander is closed. */ gtk_window_set_resizable(GTK_WINDOW(dialog), true); gtk_window_set_default_size(GTK_WINDOW(dialog), 450, -1); if (parent_window != NULL) { gtk_window_set_icon_name(GTK_WINDOW(dialog), gtk_window_get_icon_name(parent_window)); } GtkWidget *content = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); content = cdialog_get_widget(create_event_config_dialog_content(event, content)); gtk_widget_show_all(content); int result = gtk_dialog_run(GTK_DIALOG(dialog)); if (result == GTK_RESPONSE_APPLY) { dehydrate_config_dialog(g_option_list); const char *const store_passwords_s = get_user_setting("store_passwords"); save_event_config_data_to_user_storage(event_name, get_event_config(event_name), !(store_passwords_s && !strcmp(store_passwords_s, "no"))); } //else if (result == GTK_RESPONSE_CANCEL) // log("log"); gtk_widget_destroy(dialog); return result; }
config_dialog_t *create_event_config_dialog(const char *event_name, GtkWindow *parent) { event_config_t *event = get_event_config(event_name); if(!ec_is_configurable(event)) return NULL; GtkWindow *parent_window = parent ? parent : g_event_list_window; GtkWidget *dialog = gtk_dialog_new_with_buttons( /*title:*/ec_get_screen_name(event) ? ec_get_screen_name(event) : event_name, parent_window, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_APPLY, NULL); /* Allow resize? * W/o resize, e.g. upload configuration hint looks awfully * line wrapped. * With resize, there are some somewhat not nice effects: * for one, opening an expander will enlarge window, * but won't contract it back when expander is closed. */ gtk_window_set_resizable(GTK_WINDOW(dialog), true); gtk_window_set_default_size(GTK_WINDOW(dialog), 450, -1); if (parent_window != NULL) { gtk_window_set_icon_name(GTK_WINDOW(dialog), gtk_window_get_icon_name(parent_window)); } GtkWidget *content = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); config_dialog_t *cdialog = create_event_config_dialog_content(event, content); cdialog_set_widget(cdialog, dialog); return cdialog; }
static void create_event_config_dialog_content_cb(event_config_t *ec, gpointer content) { if (ec->options) { GtkWidget *ev_lbl = gtk_label_new(ec_get_screen_name(ec)); gtk_box_pack_start(GTK_BOX(content), ev_lbl, false, false, 0); } config_dialog_t *cdialog = create_event_config_dialog_content(ec, (GtkWidget *)content); if (g_events_options == NULL) { g_events_options = g_hash_table_new_full( /*hash_func*/ g_str_hash, /*key_equal_func:*/ g_str_equal, /*key_destroy_func:*/ g_free, /*value_destroy_func:*/ NULL); } g_hash_table_insert(g_events_options, ec, cdialog); }
void wf_add_event(workflow_t *w, event_config_t *ec) { w->events = g_list_append(w->events, ec); VERB2 log("added to ev list: '%s'", ec_get_screen_name(ec)); }
// Called for character data // text is not nul-terminated static void text(GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { struct my_parse_data *parse_data = user_data; workflow_t *workflow = parse_data->workflow; const gchar *inner_element = g_markup_parse_context_get_element(context); if(parse_data->in_event_list && strcmp(inner_element, EVENT_ELEMENT) == 0) { event_config_t *ec = new_event_config(text); char *subevent_filename = xasprintf(EVENTS_DIR"/%s.xml", text); load_event_description_from_file(ec, subevent_filename); if (ec_get_screen_name(ec)) wf_add_event(workflow, ec); else free_event_config(ec); free(subevent_filename); } if(strcmp(inner_element, NAME_ELEMENT) == 0) { log_debug("workflow name:'%s'", text); if (parse_data->attribute_lang != NULL) /* if it isn't for other locale */ { /* set the value only if we found a value for the current locale * OR the description is still not set and we found the default value */ if (parse_data->attribute_lang[0] != '\0' || !wf_get_screen_name(workflow) /* && parse_data->attribute_lang is "" - always true */ ) { if (!parse_data->exact_name) { parse_data->exact_name = (strcmp(parse_data->cur_locale, parse_data->attribute_lang) == 0); wf_set_screen_name(workflow, text); } } } } else if(strcmp(inner_element, DESCRIPTION_ELEMENT) == 0) { log_debug("workflow description:'%s'", text); if (parse_data->attribute_lang != NULL) /* if it isn't for other locale */ { /* set the value only if we found a value for the current locale * OR the description is still not set and we found the default value */ if (parse_data->attribute_lang[0] != '\0' || !wf_get_description(workflow) /* && parse_data->attribute_lang is "" - always true */ ) { if (!parse_data->exact_description) { parse_data->exact_description = (strcmp(parse_data->cur_locale, parse_data->attribute_lang) == 0); wf_set_description(workflow, text); } } } } else if(strcmp(inner_element, PRIORITY_ELEMENT) == 0) { log_debug("workflow priority:'%s'", text); char *end = NULL; long long val = strtoll(text, &end, 10); if (text == end || end[0] != '\0' || (errno == ERANGE && (val == LLONG_MAX || val == LLONG_MIN)) || (val > INT_MAX || val < INT_MIN) || (errno != 0 && val == 0)) { error_msg("Workflow's priority is not a number in range <%d,%d>", INT_MIN, INT_MAX); return; } wf_set_priority(workflow, (int)val); } }