[gtranslator/dl-integration: 7/18] dl-integration: Load actual teams, refactor combo



commit 832df2c1b8d483e882abb86947185d042636225e
Author: Teja Cetinski <teja cetinski eu>
Date:   Wed Jan 9 10:43:11 2019 +0100

    dl-integration: Load actual teams, refactor combo
    
    Load teams from DL API into combo box, refactor combo box code.

 src/gtr-dl-teams.c | 118 ++++++++++++++++++-----------------------------------
 1 file changed, 39 insertions(+), 79 deletions(-)
---
diff --git a/src/gtr-dl-teams.c b/src/gtr-dl-teams.c
index 2df41e26..ef228d99 100644
--- a/src/gtr-dl-teams.c
+++ b/src/gtr-dl-teams.c
@@ -35,6 +35,9 @@ typedef struct
   GtkWidget *main_box;
   GtkWidget *open_button;
   GtkWidget *dl_button;
+  GtkWidget *teams_combobox;
+
+  GtkListStore *teams_store;
 
   GtrWindow *main_window;
 } GtrDlTeamsPrivate;
@@ -48,68 +51,6 @@ G_DEFINE_TYPE_WITH_PRIVATE (GtrDlTeams, gtr_dl_teams, GTK_TYPE_BIN)
 
 static void team_add_cb (GtkButton *btn, GtrDlTeams *self);
 
-static GtkTreeModel *
-create_combo_store (void)
-{
-  const gchar *labels[4] = {
-    "Adding",
-    "Items",
-    "As I",
-    "Go",
-  };
-
-  //GtkTreeIter iter;
-  GtkListStore *store;
-  gint i;
-
-  store = gtk_list_store_new (1, G_TYPE_STRING);
-
-  for (i = 0; i < G_N_ELEMENTS (labels); i++)
-    {
-      //printf( labels[i]);printf("\n");
-      gtk_list_store_insert_with_values(store, NULL, -1,
-        0, labels[i],
-        -1);
-      /*
-      gtk_list_store_append (store, &iter);
-      gtk_list_store_set (store, &iter,
-                          0, "Test",
-                          -1);*/
-    }
-
-  return GTK_TREE_MODEL (store);
-}
-
-static void
-add_dl_teams_combo (GtkButton *btn,
-                    GtrDlTeams *self)
-{
-  GtkWidget *combo_box;
-  GtkTreeModel *model;
-  GtkCellRenderer *column;
-
-  GtrDlTeamsPrivate *priv = gtr_dl_teams_get_instance_private (self);
-
-  combo_box = gtk_combo_box_new ();
-  //model = create_combo_model_from_json (teams_json_array);
-  model = create_combo_store ();
-  //combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (model));
-  gtk_combo_box_set_model (GTK_COMBO_BOX (combo_box), GTK_TREE_MODEL (model));
-  g_object_unref (model);
-
-  column = gtk_cell_renderer_text_new();
-  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo_box), column, TRUE);
-
-  gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo_box), column,
-                                 "text", 0,
-                                 //"text", 1,
-                                 NULL);
-
-  gtk_container_add (GTK_CONTAINER (priv->main_box), combo_box);
-  gtk_widget_show (combo_box);
-
-}
-
 static void
 element_cb (JsonArray *array,
             guint      index,
@@ -117,22 +58,28 @@ element_cb (JsonArray *array,
             gpointer   data)
 {
   JsonObject *object = json_node_get_object (element);
+
+  gtk_list_store_insert_with_values(data, NULL, -1,
+        0, json_object_get_string_member (object, "description"),
+        -1);
   /*printf ("%s: %s\n",
           json_object_get_string_member (object, "id"),
           json_object_get_string_member (object, "description")
-          );
-   * */
+          );*/
 }
 
 static void
-load_and_parse (GObject *object, GAsyncResult *result, gpointer user_data)
+gtr_dl_teams_parse_json (GObject *object,
+                         GAsyncResult *result,
+                         gpointer user_data)
 {
   g_autoptr(JsonParser) parser = json_parser_new ();
   g_autoptr(GInputStream) stream;
   JsonNode *node = NULL;
   JsonArray *array = NULL;
 
-  printf("load and parse\n");
+  GtrDlTeams *widget = GTR_DL_TEAMS (user_data);
+  GtrDlTeamsPrivate *priv = gtr_dl_teams_get_instance_private (widget);
 
   /* Parse JSON */
   stream = soup_session_send_finish (SOUP_SESSION (object), result, NULL);
@@ -141,25 +88,20 @@ load_and_parse (GObject *object, GAsyncResult *result, gpointer user_data)
   node = json_parser_get_root (parser);
   array = json_node_get_array (node);
 
-  printf("array length: %d\n", json_array_get_length(array));
-
-  // create combo and fill it with options from JSON
-  //json_array_foreach_element (array, element_cb, NULL);
-
-  //g_object_unref (session);
-  //g_object_unref (message);
-  //g_object_unref (parser);
+  /* Fill teams list store with values from JSON and set store as combo box model */
+  json_array_foreach_element (array, element_cb, GTK_TREE_MODEL (priv->teams_store));
 
+  gtk_combo_box_set_model (GTK_COMBO_BOX (priv->teams_combobox), GTK_TREE_MODEL (priv->teams_store));
 }
 
 static void
-gtr_dl_teams_load_json ()
+gtr_dl_teams_load_json (GtkButton *btn,
+                        GtrDlTeams *self)
 {
   /* Get team list JSON from DL */
-  printf("get JSON\n");
   g_autoptr(SoupSession) session = soup_session_new ();
   g_autoptr(SoupMessage) message = soup_message_new ("GET", "https://l10n.gnome.org/teams/json";);
-  soup_session_send_async (session, message, NULL, load_and_parse, NULL);
+  soup_session_send_async (session, message, NULL, gtr_dl_teams_parse_json, self);
 }
 
 static void
@@ -197,19 +139,37 @@ gtr_dl_teams_class_init (GtrDlTeamsClass *klass)
 static void
 gtr_dl_teams_init (GtrDlTeams *self)
 {
-  //GtkWidget *box, *combo, *entry;
+  GtkCellRenderer *column;
   GtrDlTeamsPrivate *priv = gtr_dl_teams_get_instance_private (self);
   gtk_widget_init_template (GTK_WIDGET (self));
 
   priv->main_window = NULL;
 
+  /* Init teams list store */
+  priv->teams_store = gtk_list_store_new (1, G_TYPE_STRING);
+
+  /* Add a combo box for DL teams */
+  priv->teams_combobox = gtk_combo_box_new ();
+
+  column = gtk_cell_renderer_text_new();
+  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(priv->teams_combobox), column, TRUE);
+
+  gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(priv->teams_combobox), column,
+                                 "text", 0,
+                                 //"text", 1,
+                                 NULL);
+
+  gtk_container_add (GTK_CONTAINER (priv->main_box), priv->teams_combobox);
+  gtk_widget_show (priv->teams_combobox);
+
   g_signal_connect (priv->open_button,
                     "clicked",
                     G_CALLBACK (team_add_cb),
                     self);
+  /* Load JSON on click */
   g_signal_connect (priv->dl_button,
                     "clicked",
-                    G_CALLBACK (add_dl_teams_combo),
+                    G_CALLBACK (gtr_dl_teams_load_json),
                     self);
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]