From d2790f7f7e2c5687d7078f42d14ac9deb1702eea Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Fri, 26 Jul 2019 21:42:18 +0200 Subject: [PATCH] Make comment field editable --- client/glade/cartItem.glade | 25 +++++++++++++------ client/src/cart_item.c | 48 ++++++++++++++++++++++++++++++------- 2 files changed, 57 insertions(+), 16 deletions(-) diff --git a/client/glade/cartItem.glade b/client/glade/cartItem.glade index 1b89da1..35f2a89 100644 --- a/client/glade/cartItem.glade +++ b/client/glade/cartItem.glade @@ -59,6 +59,8 @@ True False + 2 + 1 Title True @@ -102,6 +104,8 @@ True False + 2 + 1 Description True @@ -123,16 +127,22 @@ True False - + True - False - Comment - - - + True + Click here to add a comment. + False + 128 + False + Click here to add a comment. + GTK_INPUT_HINT_SPELLCHECK | GTK_INPUT_HINT_NONE + True + - False + True True 0 @@ -181,6 +191,7 @@ gtk-properties True + False True True 4 diff --git a/client/src/cart_item.c b/client/src/cart_item.c index 07ff474..ef179ce 100644 --- a/client/src/cart_item.c +++ b/client/src/cart_item.c @@ -6,7 +6,7 @@ typedef struct _YacosCartItemPriv { GtkWidget *label_title; GtkWidget *label_description; - GtkWidget *label_comment; + GtkWidget *entry_comment; GtkWidget *label_id; GtkWidget *button_properties; @@ -66,7 +66,7 @@ static void yacos_cart_item_class_init(YacosCartItemClass *klass) oclass->finalize = yacos_cart_item_finalize; } -static void yacos_ceart_item_button_delete_cb(GtkWidget *widget, gpointer user_data) +static void yacos_cart_item_button_delete_cb(GtkWidget *widget, gpointer user_data) { YacosCartItem *self = (YacosCartItem *)user_data; @@ -75,6 +75,18 @@ static void yacos_ceart_item_button_delete_cb(GtkWidget *widget, gpointer user_d gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(list_box_row)), list_box_row); } +static void yacos_cart_item_button_properties_cb(GtkWidget *widget, gpointer user_data) +{ + YacosCartItem *self = (YacosCartItem *)user_data; + + if (self->priv.status != YACOS_CART_ITEM_STATUS_VALID) { + g_warning("Comments can only be set on valid entries."); + return; + } + + +} + static void yacos_cart_item_init(YacosCartItem *self) { GtkBuilder *builder; @@ -84,7 +96,7 @@ static void yacos_cart_item_init(YacosCartItem *self) self->priv.label_id = GTK_WIDGET(gtk_builder_get_object(builder, "label_id")); self->priv.label_title = GTK_WIDGET(gtk_builder_get_object(builder, "label_title")); - self->priv.label_comment = GTK_WIDGET(gtk_builder_get_object(builder, "label_comment")); + self->priv.entry_comment = GTK_WIDGET(gtk_builder_get_object(builder, "entry_comment")); self->priv.label_description = GTK_WIDGET(gtk_builder_get_object(builder, "label_description")); self->priv.button_delete = GTK_WIDGET(gtk_builder_get_object(builder, "button_delete")); @@ -101,13 +113,30 @@ static void yacos_cart_item_init(YacosCartItem *self) g_signal_connect(self->priv.button_delete, "clicked", - (GCallback) yacos_ceart_item_button_delete_cb, + (GCallback) yacos_cart_item_button_delete_cb, + self); + g_signal_connect(self->priv.button_properties, + "clicked", + (GCallback) yacos_cart_item_button_properties_cb, self); - gtk_container_add(GTK_CONTAINER(self), self->priv.box); g_object_unref(builder); + + GtkStyleContext *context; + GtkCssProvider *provider; + + context = gtk_widget_get_style_context (self->priv.entry_comment); + provider = gtk_css_provider_new (); + gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (provider), + ".entry_comment {\n" + " font-style: italic;\n" + "}\n", -1, NULL); + gtk_style_context_add_provider (context, + GTK_STYLE_PROVIDER (provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + g_object_unref (provider); } GtkWidget *yacos_cart_item_new(void) @@ -144,7 +173,7 @@ static void yacos_cart_item_fetch_meta_cb (SoupSession *session, SoupMessage *ms gtk_label_set_text(GTK_LABEL(self->priv.label_title), "Unknown article"); gtk_widget_override_color(self->priv.label_title, GTK_STATE_FLAG_NORMAL, &color_error); gtk_label_set_text(GTK_LABEL(self->priv.label_description), "This article will be ignored on checkout."); - gtk_label_set_text(GTK_LABEL(self->priv.label_comment), "If you think this is an error, please contact a member of staff."); + gtk_entry_set_text(GTK_ENTRY(self->priv.entry_comment), "If you think this is an error, please contact a member of staff."); self->priv.status = YACOS_CART_ITEM_STATUS_INVALID; return; } @@ -169,12 +198,14 @@ static void yacos_cart_item_fetch_meta_cb (SoupSession *session, SoupMessage *ms json_reader_read_member (reader, "comment"); temp = json_reader_get_string_value (reader); - gtk_label_set_text(GTK_LABEL(self->priv.label_comment), temp); + gtk_entry_set_text(GTK_ENTRY(self->priv.entry_comment), temp); json_reader_end_member (reader); g_object_unref (reader); g_object_unref (parser); + gtk_editable_set_editable(GTK_EDITABLE(self->priv.entry_comment), TRUE); + gtk_widget_set_sensitive(self->priv.button_properties, TRUE); self->priv.status = YACOS_CART_ITEM_STATUS_VALID; } @@ -186,8 +217,7 @@ void yacos_cart_item_fetch_meta(YacosCartItem *self) gtk_label_set_text(GTK_LABEL(self->priv.label_title), "Loading ..."); gtk_label_set_text(GTK_LABEL(self->priv.label_description), ""); - gtk_label_set_text(GTK_LABEL(self->priv.label_comment), ""); - + gtk_entry_set_text(GTK_LABEL(self->priv.entry_comment), " "); id_str = yacos_tag_id_to_str(self->priv.tag_id);