[gtranslator/gtk4: 36/52] Implement DL modules selection with GtkDropDown
- From: Daniel Garcia Moreno <danigm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtranslator/gtk4: 36/52] Implement DL modules selection with GtkDropDown
- Date: Mon, 5 Sep 2022 15:17:51 +0000 (UTC)
commit 75603705ba68d2c3ac408ac0c39d27bbd0fe32ea
Author: Daniel GarcĂa Moreno <dani danigm net>
Date: Fri Jul 22 12:40:58 2022 +0200
Implement DL modules selection with GtkDropDown
src/gtr-dl-teams.c | 55 +++++++++++++++++++++++++++++++++---------------------
1 file changed, 34 insertions(+), 21 deletions(-)
---
diff --git a/src/gtr-dl-teams.c b/src/gtr-dl-teams.c
index 2858c375..7589a528 100644
--- a/src/gtr-dl-teams.c
+++ b/src/gtr-dl-teams.c
@@ -180,6 +180,7 @@ typedef struct
GtkWidget *teams_combobox;
GListStore *teams_model;
GtkWidget *modules_combobox;
+ GListStore *modules_model;
GtkWidget *domains_combobox;
GtkWidget *branches_combobox;
@@ -201,7 +202,7 @@ struct _GtrDlTeams
G_DEFINE_TYPE_WITH_PRIVATE (GtrDlTeams, gtr_dl_teams, ADW_TYPE_BIN)
static void team_add_cb (GtkButton *btn, GtrDlTeams *self);
-static void gtr_dl_teams_save_combo_selected (GtkWidget *widget, GtrDlTeams *self);
+static void gtr_dl_teams_save_combo_selected (GtkWidget *widget, GParamSpec *spec, GtrDlTeams *self);
static void gtr_dl_teams_load_po_file (GtkButton *button, GtrDlTeams *self);
static void gtr_dl_teams_get_file_info (GtrDlTeams *self);
static gboolean gtr_dl_teams_reserve_for_translation (GtkWidget *button, GtrDlTeams *self);
@@ -230,17 +231,19 @@ gtr_dl_teams_combobox_add (JsonArray *array,
}
static void
-gtr_dl_modules_list_add (JsonArray *array,
- guint index,
- JsonNode *element,
- gpointer data)
+gtr_dl_modules_combobox_add (JsonArray *array,
+ int index,
+ JsonNode *element,
+ GtkDropDown *combo)
{
JsonObject *object = json_node_get_object (element);
- GSList **list = data;
- const char *name = json_object_get_string_member (object, "name");
- GtrFilterOption *opt = gtr_filter_option_new (name, name);
+ GListStore *model = G_LIST_STORE (gtk_drop_down_get_model (GTK_DROP_DOWN (combo)));
+ GtrDropDownOption *option = NULL;
- *list = g_slist_append (*list, opt);
+ const char *name = json_object_get_string_member (object, "name");
+ option = gtr_drop_down_option_new (name, NULL);
+ g_list_store_append (model, option);
+ g_object_unref (option);
}
static void
@@ -436,7 +439,7 @@ gtr_dl_teams_parse_modules_json (GObject *object,
{
g_autoptr(JsonParser) parser = json_parser_new ();
g_autoptr(GInputStream) stream = NULL;
- GError *error = NULL;
+ GError *error = NULL;
JsonNode *node = NULL;
JsonArray *array = NULL;
@@ -446,8 +449,6 @@ gtr_dl_teams_parse_modules_json (GObject *object,
GtkWidget *dialog;
- GSList *options = NULL;
-
/* Parse JSON */
stream = soup_session_send_finish (SOUP_SESSION (object), result, &error);
if (error)
@@ -468,9 +469,11 @@ gtr_dl_teams_parse_modules_json (GObject *object,
node = json_parser_get_root (parser);
array = json_node_get_array (node);
- /* Fill modules list store with values from JSON and set store as combo box model */
- json_array_foreach_element (array, gtr_dl_modules_list_add, &options);
- gtr_filter_selection_set_options_full (GTR_FILTER_SELECTION (priv->modules_combobox), options);
+ json_array_foreach_element (
+ array,
+ (JsonArrayForeach)gtr_dl_modules_combobox_add,
+ priv->modules_combobox
+ );
gtk_widget_set_sensitive (priv->modules_combobox, TRUE);
}
@@ -881,6 +884,7 @@ gtr_dl_teams_reserve_for_translation (GtkWidget *button, GtrDlTeams *self)
static void
gtr_dl_teams_save_combo_selected (GtkWidget *widget,
+ GParamSpec *spec,
GtrDlTeams *self)
{
GtrDlTeamsPrivate *priv = gtr_dl_teams_get_instance_private (self);
@@ -891,10 +895,13 @@ gtr_dl_teams_save_combo_selected (GtkWidget *widget,
if (strcmp(name, "combo_modules") == 0)
{
- const GtrFilterOption *opt = NULL;
+ const GtrDropDownOption *opt = GTR_DROP_DOWN_OPTION (
+ gtk_drop_down_get_selected_item (GTK_DROP_DOWN (priv->modules_combobox))
+ );
+ if (!opt)
+ return;
if (priv->selected_module)
g_free (priv->selected_module);
- opt = gtr_filter_selection_get_option (GTR_FILTER_SELECTION (priv->modules_combobox));
priv->selected_module = g_strdup (opt->name);
/* Reload module details on module change */
@@ -905,6 +912,8 @@ gtr_dl_teams_save_combo_selected (GtkWidget *widget,
const GtrDropDownOption *opt = GTR_DROP_DOWN_OPTION (
gtk_drop_down_get_selected_item (GTK_DROP_DOWN (priv->teams_combobox))
);
+ if (!opt)
+ return;
if (priv->selected_team)
g_free (priv->selected_team);
priv->selected_team = g_strdup (opt->name);
@@ -1026,9 +1035,13 @@ gtr_dl_teams_init (GtrDlTeams *self)
gtk_box_append (GTK_BOX (priv->select_box), priv->teams_combobox);
gtk_widget_set_sensitive (priv->teams_combobox, FALSE);
- priv->modules_combobox = GTK_WIDGET (gtr_filter_selection_new ());
+ expression = gtk_property_expression_new (GTR_TYPE_DROP_DOWN_OPTION, NULL, "name");
+ priv->modules_model = g_list_store_new (GTR_TYPE_DROP_DOWN_OPTION);
+ priv->modules_combobox = GTK_WIDGET (
+ gtk_drop_down_new (G_LIST_MODEL (priv->modules_model), expression)
+ );
gtk_widget_set_name (priv->modules_combobox, "combo_modules");
- gtr_filter_selection_set_text (GTR_FILTER_SELECTION (priv->modules_combobox), _("Module"));
+ gtk_drop_down_set_enable_search (GTK_DROP_DOWN (priv->modules_combobox), TRUE);
gtk_box_append (GTK_BOX (priv->select_box), priv->modules_combobox);
gtk_widget_set_sensitive (priv->modules_combobox, FALSE);
@@ -1052,11 +1065,11 @@ gtr_dl_teams_init (GtrDlTeams *self)
/* Connect "changed" to all combo boxes */
g_signal_connect (priv->teams_combobox,
- "changed",
+ "notify::selected",
G_CALLBACK (gtr_dl_teams_save_combo_selected),
self);
g_signal_connect (priv->modules_combobox,
- "changed",
+ "notify::selected",
G_CALLBACK (gtr_dl_teams_save_combo_selected),
self);
g_signal_connect (priv->domains_combobox,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]