summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@redhat.com>2011-03-09 17:59:01 +0100
committerJiri Moskovcak <jmoskovc@redhat.com>2011-03-09 17:59:01 +0100
commit62369b1a527e95c72bad4643728e0bed2fe422eb (patch)
tree16de1188d03d0f96c9bd07a6ebb9ed9a0d34942b
parentbd148cd1dbb29052e7e3a49be3c0f60f714e82c7 (diff)
downloadabrt-62369b1a527e95c72bad4643728e0bed2fe422eb.tar.gz
abrt-62369b1a527e95c72bad4643728e0bed2fe422eb.tar.xz
abrt-62369b1a527e95c72bad4643728e0bed2fe422eb.zip
added loading/saving values to/from event config dialog
-rw-r--r--src/gui-gtk/event_config_dialog.c67
1 files changed, 61 insertions, 6 deletions
diff --git a/src/gui-gtk/event_config_dialog.c b/src/gui-gtk/event_config_dialog.c
index 50bdc4f8..960e4fca 100644
--- a/src/gui-gtk/event_config_dialog.c
+++ b/src/gui-gtk/event_config_dialog.c
@@ -3,6 +3,7 @@
static GtkWidget *option_table;
static GtkWidget *parent_dialog;
+static GList *option_widget_list;
static int last_row = 0;
enum
@@ -12,6 +13,12 @@ enum
NUM_COLUMNS
};
+typedef struct
+{
+ event_option_t *option;
+ GtkWidget *widget;
+} option_widget_t;
+
static void show_event_config_dialog(event_config_t* event);
static void show_error_message(const char* message)
@@ -34,6 +41,14 @@ GtkWidget *gtk_label_new_justify_left(const gchar *label_str)
return label;
}
+static void add_option_widget(GtkWidget *widget, event_option_t *option)
+{
+ option_widget_t *ow = (option_widget_t *)xmalloc(sizeof(option_widget_t));
+ ow->widget = widget;
+ ow->option = option;
+ option_widget_list = g_list_prepend(option_widget_list, ow);
+}
+
static void add_option_to_dialog(event_option_t *option)
{
GtkWidget *label;
@@ -50,12 +65,14 @@ static void add_option_to_dialog(event_option_t *option)
GTK_FILL, GTK_FILL,
0,0);
option_input = gtk_entry_new();
+ if(option->value != NULL)
+ gtk_entry_set_text(GTK_ENTRY(option_input), option->value);
gtk_table_attach(GTK_TABLE(option_table), option_input,
1, 2,
last_row, last_row+1,
GTK_FILL, GTK_FILL,
0,0);
-
+ add_option_widget(option_input, option);
break;
case OPTION_TYPE_BOOL:
option_input = gtk_check_button_new_with_label(option->label);
@@ -64,6 +81,10 @@ static void add_option_to_dialog(event_option_t *option)
last_row, last_row+1,
GTK_FILL, GTK_FILL,
0,0);
+ if(option->value != NULL)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(option_input),
+ (strcmp("yes",option->value)==0));
+ add_option_widget(option_input, option);
break;
case OPTION_TYPE_PASSWORD:
label = gtk_label_new_justify_left(option->label);
@@ -73,6 +94,8 @@ static void add_option_to_dialog(event_option_t *option)
GTK_FILL, GTK_FILL,
0,0);
option_input = gtk_entry_new();
+ if(option->value != NULL)
+ gtk_entry_set_text(GTK_ENTRY(option_input), option->value);
gtk_table_attach(GTK_TABLE(option_table), option_input,
1, 2,
last_row, last_row+1,
@@ -80,9 +103,10 @@ static void add_option_to_dialog(event_option_t *option)
0,0);
gtk_entry_set_visibility(GTK_ENTRY(option_input), 0);
+ add_option_widget(option_input, option);
break;
default:
- option_input = gtk_label_new_justify_left("WTF?");
+ //option_input = gtk_label_new_justify_left("WTF?");
g_print("unsupported option type\n");
}
last_row++;
@@ -141,8 +165,8 @@ static void add_event_to_liststore(gpointer key, gpointer value, gpointer user_d
GtkListStore *events_list_store = (GtkListStore *)user_data;
event_config_t *ec = (event_config_t *)value;
char *event_label = NULL;
- if(ec->name != NULL && ec->description != NULL)
- event_label = xasprintf("<b>%s</b>\n%s", ec->name, ec->description);
+ if(ec->screen_name != NULL && ec->description != NULL)
+ event_label = xasprintf("<b>%s</b>\n%s", ec->screen_name, ec->description);
else
//if event has no xml description
event_label = xasprintf("<b>%s</b>\nNo description available", key);
@@ -155,10 +179,41 @@ static void add_event_to_liststore(gpointer key, gpointer value, gpointer user_d
-1);
}
+static void save_value_from_widget(gpointer data, gpointer user_data)
+{
+ option_widget_t *ow = (option_widget_t *)data;
+ switch(ow->option->type)
+ {
+ case OPTION_TYPE_TEXT:
+ case OPTION_TYPE_NUMBER:
+ case OPTION_TYPE_PASSWORD:
+ ow->option->value = (char *)gtk_entry_get_text(GTK_ENTRY(ow->widget));
+ break;
+ case OPTION_TYPE_BOOL:
+ ow->option->value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ow->widget)) ? xstrdup("yes") : xstrdup("no");
+ break;
+ default:
+ g_print("unsupported option type\n");
+ }
+ VERB1 log("saved: %s:%s", ow->option->name, ow->option->value);
+}
+
+static void dehydrate_config_dialog()
+{
+ if(option_widget_list != NULL)
+ g_list_foreach(option_widget_list, &save_value_from_widget, NULL);
+}
+
static void show_event_config_dialog(event_config_t* event)
{
+ if(option_widget_list != NULL)
+ {
+ g_list_free(option_widget_list);
+ option_widget_list = NULL;
+ }
+
GtkWidget *dialog = gtk_dialog_new_with_buttons(
- event->name,
+ event->screen_name,
GTK_WINDOW(parent_dialog),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK,
@@ -180,7 +235,7 @@ static void show_event_config_dialog(event_config_t* event)
gtk_widget_show_all(option_table);
int result = gtk_dialog_run(GTK_DIALOG(dialog));
if(result == GTK_RESPONSE_APPLY)
- g_print("apply\n");
+ dehydrate_config_dialog();
else if(result == GTK_RESPONSE_CANCEL)
g_print("cancel\n");
gtk_widget_destroy(GTK_WIDGET(dialog));