config_dialog_t *create_workflow_config_dialog(const char *workflow_name, GtkWindow *parent) { workflow_t *workflow = get_workflow(workflow_name); GList *events = wf_get_event_list(workflow); GtkWindow *parent_window = parent ? parent : g_parent_window; GtkWidget *dialog = gtk_dialog_new_with_buttons( /*title:*/ wf_get_screen_name(workflow) ? wf_get_screen_name(workflow) : workflow_name, parent_window, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_APPLY, NULL); gtk_window_set_resizable(GTK_WINDOW(dialog), true); gtk_window_set_default_size(GTK_WINDOW(dialog), 450, 450); if (parent_window != NULL) { gtk_window_set_icon_name(GTK_WINDOW(dialog), gtk_window_get_icon_name(parent_window)); } GtkWidget *scrolled = gtk_scrolled_window_new(NULL, NULL); GtkWidget *content = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); #if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 7) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 7 && GTK_MICRO_VERSION < 8)) /* http://developer.gnome.org/gtk3/unstable/GtkScrolledWindow.html#gtk-scrolled-window-add-with-viewport */ /* gtk_scrolled_window_add_with_viewport has been deprecated since version 3.8 and should not be used in newly-written code. */ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled), content); #else /* gtk_container_add() will now automatically add a GtkViewport if the child doesn't implement GtkScrollable. */ gtk_container_add(GTK_CONTAINER(scrolled), content); #endif GtkWidget *dialog_box = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); gtk_box_pack_start(GTK_BOX(dialog_box), scrolled, false, true, 0); g_events_options = NULL; g_list_foreach(events, (GFunc)create_event_config_dialog_content_cb, content); gtk_widget_show_all(GTK_WIDGET(scrolled)); config_dialog_t *cdialog = new_config_dialog(dialog, g_events_options, (config_save_fun_t)save_data_from_worfklow_dialog); return cdialog; }
GHashTable *load_workflow_config_data(const char *path) { if (g_workflow_list) return g_workflow_list; if (g_workflow_list == NULL) { g_workflow_list = g_hash_table_new_full( g_str_hash, g_str_equal, g_free, (GDestroyNotify) free_workflow ); } if (path == NULL) path = WORKFLOWS_DIR; GList *workflow_files = get_file_list(path, "xml"); while (workflow_files) { file_obj_t *file = (file_obj_t *)workflow_files->data; workflow_t *workflow = get_workflow(file->filename); bool nw_workflow = (!workflow); if (nw_workflow) workflow = new_workflow(file->filename); load_workflow_description_from_file(workflow, file->fullpath); if (nw_workflow) g_hash_table_replace(g_workflow_list, xstrdup(wf_get_name(workflow)), workflow); free_file_obj(file); workflow_files = g_list_delete_link(workflow_files, workflow_files); } return g_workflow_list; }
config_dialog_t *create_workflow_config_dialog(const char *workflow_name, GtkWindow *parent) { workflow_t *workflow = get_workflow(workflow_name); GList *events = wf_get_event_list(workflow); GtkWindow *parent_window = parent ? parent : g_parent_window; GtkWidget *dialog = gtk_dialog_new_with_buttons( /*title:*/ wf_get_screen_name(workflow) ? wf_get_screen_name(workflow) : workflow_name, parent_window, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_APPLY, NULL); 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)); g_events_options = NULL; g_list_foreach(events, (GFunc)create_event_config_dialog_content_cb, content); config_dialog_t *cdialog = new_config_dialog(dialog, g_events_options, (config_save_fun_t)save_data_from_worfklow_dialog); return cdialog; }