From 829150ad3d7894f1fe72f8ffbae75da08fdf40d9 Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Sun, 8 May 2011 09:16:34 +0200 Subject: [PATCH] Enabled alias editing for show fields. --- data/libgdaex/gui/libgdaex.ui | 42 ++++-- src/queryeditor.c | 241 +++++++++++++++++++++++++--------- tests/query_editor.c | 17 +-- 3 files changed, 218 insertions(+), 82 deletions(-) diff --git a/data/libgdaex/gui/libgdaex.ui b/data/libgdaex/gui/libgdaex.ui index cbd0925..50f2683 100644 --- a/data/libgdaex/gui/libgdaex.ui +++ b/data/libgdaex/gui/libgdaex.ui @@ -2,16 +2,6 @@ - - - - - - - - - - @@ -56,6 +46,18 @@ + + + + + + + + + + + + @@ -186,7 +188,8 @@ True lstore_show False - 0 + True + 2 Field @@ -198,6 +201,17 @@ + + + Alias + + + + 3 + + + + @@ -316,7 +330,8 @@ True tstore_where False - 0 + True + 2 Field @@ -494,7 +509,8 @@ True lstore_order False - 0 + True + 2 Field diff --git a/src/queryeditor.c b/src/queryeditor.c index dc9045d..00fdb4c 100644 --- a/src/queryeditor.c +++ b/src/queryeditor.c @@ -164,7 +164,8 @@ struct _GdaExQueryEditorPrivate GSList *relations; /* GdaExQueryEditorRelation */ /* for value choosing */ - gboolean where_value; + guint editor_type; /* 1 - show; 2 - where; 3 - order */ + GtkListStore *lstore_where_type; GtkWidget *hbox; GtkWidget *not; @@ -189,7 +190,8 @@ enum { COL_SHOW_TABLE_NAME, COL_SHOW_NAME, - COL_SHOW_VISIBLE_NAME + COL_SHOW_VISIBLE_NAME, + COL_SHOW_ALIAS }; enum @@ -494,6 +496,7 @@ const gchar gchar *table_name; gchar *field_name; + gchar *alias; gchar *asc_desc; GdaExQueryEditorTable *table; @@ -523,6 +526,7 @@ const gchar gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_show), &iter, COL_SHOW_TABLE_NAME, &table_name, COL_SHOW_NAME, &field_name, + COL_SHOW_ALIAS, &alias, -1); table = g_hash_table_lookup (priv->tables, table_name); @@ -542,11 +546,14 @@ const gchar id_join1, id_join2, 0); gda_sql_builder_select_join_targets (sqlbuilder, id_target1, id_target2, GDA_SQL_SELECT_JOIN_INNER, join_cond); - gda_sql_builder_select_add_field (sqlbuilder, field->decode_field_to_show, field->decode_table2, field->decode_field_alias); + gda_sql_builder_select_add_field (sqlbuilder, field->decode_field_to_show, + field->decode_table2, + alias != NULL && g_strcmp0 (alias, "") != 0 ? alias : field->decode_field_alias); } else { - gda_sql_builder_select_add_field (sqlbuilder, field->name, table->name, field->alias); + gda_sql_builder_select_add_field (sqlbuilder, field->name, table->name, + alias != NULL && g_strcmp0 (alias, "") != 0 ? alias : field->alias); gda_sql_builder_select_add_target_id (sqlbuilder, gda_sql_builder_add_id (sqlbuilder, table->name), NULL); @@ -755,6 +762,9 @@ xmlNode gchar *table_name; gchar *field_name; + GdaExQueryEditorTable *table; + GdaExQueryEditorField *field; + xmlNode *node; ret = NULL; @@ -767,6 +777,7 @@ xmlNode if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->lstore_show), &iter)) { + gchar *alias; xmlNode *node_show; node_show = xmlNewNode (NULL, "show"); @@ -777,12 +788,24 @@ xmlNode gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_show), &iter, COL_SHOW_TABLE_NAME, &table_name, COL_SHOW_NAME, &field_name, + COL_SHOW_ALIAS, &alias, -1); + table = g_hash_table_lookup (priv->tables, table_name); + field = g_hash_table_lookup (table->fields, field_name); + node = xmlNewNode (NULL, "field"); xmlAddChild (node_show, node); xmlNewProp (node, "table", table_name); xmlNewProp (node, "field", field_name); + if (alias != NULL && g_strcmp0 (alias, "") != 0) + { + xmlNewProp (node, "alias", alias); + } + else + { + xmlNewProp (node, "alias", field->alias); + } } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->lstore_show), &iter)); } @@ -901,6 +924,7 @@ gdaex_query_editor_load_choices_from_xml (GdaExQueryEditor *qe, xmlNode *root, gchar *table_name; gchar *field_name; gchar *name_visible; + gchar *alias; GValue *v_table_field; GdaExQueryEditorTable *table; @@ -956,11 +980,18 @@ gdaex_query_editor_load_choices_from_xml (GdaExQueryEditor *qe, xmlNode *root, { if (!gdaex_query_editor_model_has_value (GTK_TREE_MODEL (priv->lstore_show), COL_SHOW_VISIBLE_NAME, v_table_field)) { + alias = xmlGetProp (node_field, "alias"); + if (alias == NULL) + { + alias = g_strdup (""); + } + gtk_list_store_append (priv->lstore_show, &iter); gtk_list_store_set (priv->lstore_show, &iter, COL_SHOW_TABLE_NAME, field->table_name, COL_SHOW_NAME, field_name, COL_SHOW_VISIBLE_NAME, name_visible, + COL_SHOW_ALIAS, alias, -1); } } @@ -1545,13 +1576,19 @@ gdaex_query_editor_on_btn_cancel_clicked (GtkButton *button, gdaex_query_editor_remove_child_from_vbx_values (qe); gtk_widget_hide (priv->vbx_values_container); - if (priv->where_value) + switch (priv->editor_type) { - gtk_tree_selection_unselect_all (priv->sel_where); - } - else - { - gtk_tree_selection_unselect_all (priv->sel_order); + case 1: + gtk_tree_selection_unselect_all (priv->sel_show); + break; + + case 2: + gtk_tree_selection_unselect_all (priv->sel_where); + break; + + case 3: + gtk_tree_selection_unselect_all (priv->sel_order); + break; } } @@ -1563,65 +1600,117 @@ gdaex_query_editor_on_btn_save_clicked (GtkButton *button, GdaExQueryEditorPrivate *priv; GtkTreeIter iter; + + gchar *val1; + gchar *val2; gchar *asc_desc; qe = (GdaExQueryEditor *)user_data; priv = GDAEX_QUERY_EDITOR_GET_PRIVATE (qe); - if (priv->where_value) + switch (priv->editor_type) { - if (gtk_tree_selection_get_selected (priv->sel_where, NULL, &iter)) - { - GtkTreeIter iter_val; - guint where_type; + case 1: + if (gtk_tree_selection_get_selected (priv->sel_show, NULL, &iter)) + { + val1 = (gchar *)gtk_entry_get_text (GTK_ENTRY (priv->txt1)); + if (val1 == NULL) + { + val1 = g_strdup (""); + } + else + { + g_strstrip (val1); + } + gtk_list_store_set (priv->lstore_show, &iter, + COL_SHOW_ALIAS, val1, + -1); + + gtk_tree_selection_unselect_all (priv->sel_show); + } + break; + + case 2: + if (gtk_tree_selection_get_selected (priv->sel_where, NULL, &iter)) + { + GtkTreeIter iter_val; + guint where_type; - GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->cb_where_type)); - if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->cb_where_type), &iter_val)) - { - GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (priv->hpaned_main)), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_OK, - "You must select a condition's type before."); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); - return; - } + GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->cb_where_type)); + if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->cb_where_type), &iter_val)) + { + GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (priv->hpaned_main)), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "You must select a condition's type before."); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + return; + } - gtk_tree_model_get (model, &iter_val, - 0, &where_type, - -1); + gtk_tree_model_get (model, &iter_val, + 0, &where_type, + -1); - gtk_tree_store_set (priv->tstore_where, &iter, - COL_WHERE_CONDITION_NOT, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->not)), - COL_WHERE_CONDITION_TYPE, where_type, - COL_WHERE_CONDITION_TYPE_VISIBLE, gdaex_query_editor_get_where_type_str_from_type (where_type), - COL_WHERE_CONDITION_FROM, gtk_entry_get_text (GTK_ENTRY (priv->txt1)), - COL_WHERE_CONDITION_TO, priv->txt2 != NULL ? gtk_entry_get_text (GTK_ENTRY (priv->txt2)) : "", - -1); + val1 = (gchar *)gtk_entry_get_text (GTK_ENTRY (priv->txt1)); + if (val1 == NULL) + { + val1 = g_strdup (""); + } + else + { + g_strstrip (val1); + } - gtk_tree_selection_unselect_all (priv->sel_where); - } - } - else - { - if (gtk_tree_selection_get_selected (priv->sel_order, NULL, &iter)) - { - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->opt_asc))) - { - asc_desc = g_strdup ("ASC"); - } - else - { - asc_desc = g_strdup ("DESC"); - } + if (priv->txt2 != NULL) + { + val2 = (gchar *)gtk_entry_get_text (GTK_ENTRY (priv->txt2)); + if (val2 == NULL) + { + val2 = g_strdup (""); + } + else + { + g_strstrip (val2); + } + } + else + { + val2 = g_strdup (""); + } - gtk_list_store_set (priv->lstore_order, &iter, - COL_ORDER_ORDER, asc_desc, - -1); + gtk_tree_store_set (priv->tstore_where, &iter, + COL_WHERE_CONDITION_NOT, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->not)), + COL_WHERE_CONDITION_TYPE, where_type, + COL_WHERE_CONDITION_TYPE_VISIBLE, gdaex_query_editor_get_where_type_str_from_type (where_type), + COL_WHERE_CONDITION_FROM, val1, + COL_WHERE_CONDITION_TO, val2, + -1); - gtk_tree_selection_unselect_all (priv->sel_order); - } + gtk_tree_selection_unselect_all (priv->sel_where); + } + break; + + case 3: + if (gtk_tree_selection_get_selected (priv->sel_order, NULL, &iter)) + { + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->opt_asc))) + { + asc_desc = g_strdup ("ASC"); + } + else + { + asc_desc = g_strdup ("DESC"); + } + + gtk_list_store_set (priv->lstore_order, &iter, + COL_ORDER_ORDER, asc_desc, + -1); + + gtk_tree_selection_unselect_all (priv->sel_order); + } + break; } gtk_widget_hide (priv->vbx_values_container); @@ -1742,16 +1831,23 @@ gdaex_query_editor_on_sel_show_changed (GtkTreeSelection *treeselection, gchar *table_name; gchar *field_name; + gchar *alias; + GdaExQueryEditorTable *table; GdaExQueryEditorField *field; + GtkWidget *tbl; + GtkWidget *lbl; + GdaExQueryEditor *qe = (GdaExQueryEditor *)user_data; GdaExQueryEditorPrivate *priv = GDAEX_QUERY_EDITOR_GET_PRIVATE (qe); + gtk_widget_hide (priv->vbx_values_container); + gdaex_query_editor_remove_child_from_vbx_values (qe); + if (gtk_tree_selection_get_selected (priv->sel_show, NULL, &iter)) { - gdaex_query_editor_remove_child_from_vbx_values (qe); - gtk_widget_hide (priv->vbx_values_container); + priv->editor_type = 1; gtk_tree_selection_unselect_all (priv->sel_where); gtk_tree_selection_unselect_all (priv->sel_order); @@ -1759,12 +1855,35 @@ gdaex_query_editor_on_sel_show_changed (GtkTreeSelection *treeselection, gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_show), &iter, COL_SHOW_TABLE_NAME, &table_name, COL_SHOW_NAME, &field_name, + COL_SHOW_ALIAS, &alias, -1); table = g_hash_table_lookup (priv->tables, table_name); field = g_hash_table_lookup (table->fields, field_name); gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (priv->gtkbuilder, "button4")), !field->always_showed); + + priv->hbox = gtk_hbox_new (TRUE, 0); + + tbl = gtk_table_new (2, 2, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (tbl), 5); + gtk_table_set_col_spacings (GTK_TABLE (tbl), 5); + gtk_box_pack_start (GTK_BOX (priv->hbox), tbl, TRUE, TRUE, 0); + + lbl = gtk_label_new ("Alias"); + gtk_table_attach (GTK_TABLE (tbl), lbl, 1, 2, 0, 1, 0, 0, 0, 0); + + lbl = gtk_label_new (g_strconcat (table->name_visible, " - ", field->name_visible, NULL)); + gtk_table_attach (GTK_TABLE (tbl), lbl, 0, 1, 1, 2, 0, 0, 0, 0); + + priv->txt1 = gtk_entry_new (); + gtk_entry_set_text (GTK_ENTRY (priv->txt1), alias); + gtk_table_attach (GTK_TABLE (tbl), priv->txt1, 1, 2, 1, 2, 0, 0, 0, 0); + + gtk_box_pack_start (GTK_BOX (priv->vbx_values), priv->hbox, FALSE, FALSE, 0); + + gtk_widget_show_all (priv->vbx_values); + gtk_widget_show (priv->vbx_values_container); } } @@ -1894,7 +2013,7 @@ gdaex_query_editor_on_sel_where_changed (GtkTreeSelection *treeselection, if (gtk_tree_selection_get_selected (priv->sel_where, NULL, &iter)) { - priv->where_value = TRUE; + priv->editor_type = 2; gtk_tree_selection_unselect_all (priv->sel_show); gtk_tree_selection_unselect_all (priv->sel_order); @@ -2225,7 +2344,7 @@ gdaex_query_editor_on_sel_order_changed (GtkTreeSelection *treeselection, if (gtk_tree_selection_get_selected (priv->sel_order, NULL, &iter)) { - priv->where_value = FALSE; + priv->editor_type = 3; gtk_tree_selection_unselect_all (priv->sel_show); gtk_tree_selection_unselect_all (priv->sel_where); diff --git a/tests/query_editor.c b/tests/query_editor.c index 1d4879c..9631a00 100644 --- a/tests/query_editor.c +++ b/tests/query_editor.c @@ -98,10 +98,10 @@ on_btn_get_sql_clicked (GtkButton *button, gint size; GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW (w), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_INFO, - GTK_BUTTONS_OK, - gdaex_query_editor_get_sql ((GdaExQueryEditor *)user_data)); + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, + GTK_BUTTONS_OK, + gdaex_query_editor_get_sql ((GdaExQueryEditor *)user_data)); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog);; @@ -111,10 +111,10 @@ on_btn_get_sql_clicked (GtkButton *button, xmlDocDumpMemory (doc, &buf, &size); dialog = gtk_message_dialog_new (GTK_WINDOW (w), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_INFO, - GTK_BUTTONS_OK, - buf); + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, + GTK_BUTTONS_OK, + buf); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog);; } @@ -201,6 +201,7 @@ main (int argc, char *argv[]) field->name = g_strdup ("age"); field->name_visible = g_strdup ("Age"); field->description = g_strdup ("The client's age"); + field->alias = g_strdup ("client_age"); field->type = GDAEX_QE_FIELD_TYPE_INTEGER; field->for_show = TRUE; field->for_where = TRUE; -- 2.49.0