[gnome-builder] plugins/buildui: add tweak for configuration runtime



commit b2eccb46d1be92c97794061186a61e8534d96aca
Author: Christian Hergert <chergert redhat com>
Date:   Sat Aug 27 03:45:59 2022 -0700

    plugins/buildui: add tweak for configuration runtime

 po/POTFILES.in                                 |  1 +
 src/plugins/buildui/gbp-buildui-tweaks-addin.c | 69 ++++++++++++++++++++++++++
 src/plugins/buildui/tweaks.ui                  | 23 +++++++++
 3 files changed, 93 insertions(+)
---
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 7949c8294..7633841c3 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -116,6 +116,7 @@ src/plugins/buildui/gbp-buildui-preferences-addin.c
 src/plugins/buildui/gbp-buildui-status-popover.c
 src/plugins/buildui/gbp-buildui-targets-dialog.c
 src/plugins/buildui/gbp-buildui-targets-dialog.ui
+src/plugins/buildui/gbp-buildui-tweaks-addin.c
 src/plugins/buildui/gbp-buildui-workspace-addin.c
 src/plugins/buildui/gtk/menus.ui
 src/plugins/buildui/gtk/preferences.ui
diff --git a/src/plugins/buildui/gbp-buildui-tweaks-addin.c b/src/plugins/buildui/gbp-buildui-tweaks-addin.c
index 44a858976..350501f8c 100644
--- a/src/plugins/buildui/gbp-buildui-tweaks-addin.c
+++ b/src/plugins/buildui/gbp-buildui-tweaks-addin.c
@@ -22,6 +22,8 @@
 
 #include "config.h"
 
+#include <glib/gi18n.h>
+
 #include <libide-foundry.h>
 
 #include "gbp-buildui-tweaks-addin.h"
@@ -34,6 +36,72 @@ struct _GbpBuilduiTweaksAddin
 
 G_DEFINE_FINAL_TYPE (GbpBuilduiTweaksAddin, gbp_buildui_tweaks_addin, IDE_TYPE_TWEAKS_ADDIN)
 
+static gpointer
+map_item_cb (gpointer item,
+             gpointer user_data)
+{
+  g_autoptr(IdeRuntime) runtime = item;
+
+  return g_object_new (IDE_TYPE_TWEAKS_CHOICE,
+                       "title", ide_runtime_get_display_name (runtime),
+                       "value", g_variant_new_string (ide_runtime_get_id (runtime)),
+                       NULL);
+}
+
+static GtkWidget *
+create_runtime_list_cb (GbpBuilduiTweaksAddin *self,
+                        IdeTweaksItem         *item,
+                        IdeTweaksWidget       *instance)
+{
+  g_autoptr(GtkMapListModel) mapped = NULL;
+  g_autoptr(GListModel) model = NULL;
+  g_autoptr(IdeConfig) config = NULL;
+  IdeTweaksComboRow *row;
+  IdeTweaksBinding *binding;
+  const char *runtime_id;
+  guint selected = 0;
+  guint n_items;
+
+  g_assert (GBP_IS_BUILDUI_TWEAKS_ADDIN (self));
+  g_assert (IDE_IS_TWEAKS_WIDGET (item));
+  g_assert (IDE_IS_TWEAKS_WIDGET (instance));
+
+  if (!(binding = ide_tweaks_widget_get_binding (IDE_TWEAKS_WIDGET (item))))
+    return NULL;
+
+  config = IDE_CONFIG (ide_tweaks_property_dup_object (IDE_TWEAKS_PROPERTY (binding)));
+  g_object_get (config, "supported-runtimes", &model, NULL);
+  mapped = gtk_map_list_model_new (g_object_ref (model), map_item_cb, NULL, NULL);
+  n_items = g_list_model_get_n_items (model);
+  runtime_id = ide_config_get_runtime_id (config);
+
+  for (guint i = 0; i < n_items; i++)
+    {
+      g_autoptr(IdeRuntime) runtime = g_list_model_get_item (model, i);
+
+      if (ide_str_equal0 (runtime_id, ide_runtime_get_id (runtime)))
+        {
+          selected = i;
+          break;
+        }
+    }
+
+  /* TODO: It would be nice to show an error here if we don't find
+   * the runtime. Currently, we would just select the first item which
+   * would modify the existing configuration.
+   */
+
+  row = g_object_new (IDE_TYPE_TWEAKS_COMBO_ROW,
+                      "title", _("Runtime"),
+                      "subtitle", _("The container used to build and run your application"),
+                      "binding", binding,
+                      "model", mapped,
+                      "selected", selected,
+                      NULL);
+
+  return GTK_WIDGET (row);
+}
+
 static void
 gbp_buildui_tweaks_addin_load (IdeTweaksAddin *addin,
                                IdeTweaks      *tweaks)
@@ -59,6 +127,7 @@ gbp_buildui_tweaks_addin_load (IdeTweaksAddin *addin,
       ide_tweaks_expose_object (tweaks, "RunCommands", G_OBJECT (store));
     }
 
+  ide_tweaks_addin_bind_callback (IDE_TWEAKS_ADDIN (self), create_runtime_list_cb);
   ide_tweaks_addin_set_resource_paths (IDE_TWEAKS_ADDIN (self),
                                        IDE_STRV_INIT ("/plugins/buildui/tweaks.ui"));
 
diff --git a/src/plugins/buildui/tweaks.ui b/src/plugins/buildui/tweaks.ui
index 26a6ce33f..eceee8be4 100644
--- a/src/plugins/buildui/tweaks.ui
+++ b/src/plugins/buildui/tweaks.ui
@@ -357,6 +357,29 @@
                         </child>
                       </object>
                     </child>
+                    <child>
+                      <object class="IdeTweaksGroup">
+                        <property name="title" translatable="yes">SDK</property>
+                        <child>
+                          <object class="IdeTweaksWidget">
+                            <signal name="create-for-item" handler="create_runtime_list_cb" swapped="true" 
object="GbpBuilduiTweaksAddin"/>
+                            <property name="binding">
+                              <object class="IdeTweaksProperty">
+                                <property name="name">runtime-id</property>
+                                <binding name="object">
+                                  <lookup name="item">config_factory</lookup>
+                                </binding>
+                              </object>
+                            </property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="IdeTweaksCaption">
+                            <property name="text" translatable="yes">The SDK used to build your application 
is automatically determined from the runtime.</property>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
                   </object>
                 </child>
               </object>


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