[gnome-builder/wip/gtk4-port: 1192/1774] libide/projects: move licenses to IdeTemplateInput
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/gtk4-port: 1192/1774] libide/projects: move licenses to IdeTemplateInput
- Date: Mon, 11 Jul 2022 22:31:38 +0000 (UTC)
commit 53280b83696595220cc118638f0a53eeeebf098b
Author: Christian Hergert <chergert redhat com>
Date: Thu May 26 19:25:47 2022 -0700
libide/projects: move licenses to IdeTemplateInput
src/libide/projects/ide-template-input.c | 46 ++++++++++++++-
src/libide/projects/ide-template-input.h | 2 +
src/libide/projects/libide-projects.gresource.xml | 19 ++++++
.../projects/licenses}/agpl_3_full | 0
.../projects/licenses}/agpl_3_short | 0
.../projects/licenses}/apache_2_full | 0
.../projects/licenses}/apache_2_short | 0
.../projects/licenses}/gpl_2_full | 0
.../projects/licenses}/gpl_2_short | 0
.../projects/licenses}/gpl_3_full | 0
.../projects/licenses}/gpl_3_short | 0
.../projects/licenses}/lgpl_2_1_full | 0
.../projects/licenses}/lgpl_2_1_short | 0
.../projects/licenses}/lgpl_3_full | 0
.../projects/licenses}/lgpl_3_short | 0
.../projects/licenses}/mit_x11_full | 0
.../projects/licenses}/mit_x11_short | 0
.../create-project/create-project.gresource.xml | 20 -------
.../create-project/gbp-create-project-widget.c | 23 ++++++++
.../create-project/gbp-create-project-widget.ui | 68 +++++++++++++++++++++-
20 files changed, 155 insertions(+), 23 deletions(-)
---
diff --git a/src/libide/projects/ide-template-input.c b/src/libide/projects/ide-template-input.c
index 4ebf96b3c..d7af3c35c 100644
--- a/src/libide/projects/ide-template-input.c
+++ b/src/libide/projects/ide-template-input.c
@@ -23,6 +23,7 @@
#include "config.h"
#include <libpeas/peas.h>
+#include <glib/gi18n.h>
#include "ide-projects-global.h"
#include "ide-template-input.h"
@@ -31,7 +32,7 @@
#define DEFAULT_USE_VERSION_CONTROL TRUE
#define DEFAULT_PROJECT_VERSION "0.1.0"
#define DEFAULT_LANGUAGE "C"
-#define DEFAULT_LICECNSE_NAME "gpl_3"
+#define DEFAULT_LICECNSE_NAME "GPL-3.0-or-later"
struct _IdeTemplateInput
{
@@ -39,6 +40,7 @@ struct _IdeTemplateInput
GListStore *templates;
GtkStringList *languages;
+ GtkStringList *licenses;
GFile *directory;
@@ -61,6 +63,7 @@ enum {
PROP_LANGUAGE,
PROP_LANGUAGES_MODEL,
PROP_LICENSE_NAME,
+ PROP_LICENSES_MODEL,
PROP_NAME,
PROP_PROJECT_VERSION,
PROP_TEMPLATE,
@@ -73,6 +76,20 @@ enum {
G_DEFINE_FINAL_TYPE (IdeTemplateInput, ide_template_input, G_TYPE_OBJECT)
static GParamSpec *properties [N_PROPS];
+static const struct {
+ const char *spdx;
+ const char *short_path;
+ const char *full_path;
+} licenses[] = {
+ { N_("AGPL-3.0-or-later"), "agpl_3_short", "agpl_3_full" },
+ { N_("Apache-2.0"), "apache_2_short", "apache_2_full" },
+ { N_("GPL-2.0-or-later"), "gpl_2_short", "gpl_2_full" },
+ { N_("GPL-3.0-or-later"), "gpl_3_short", "gpl_3_full" },
+ { N_("LGPL-2.1-or-later"), "lgpl_2_1_short", "lgpl_2_1_full" },
+ { N_("LGPL-3.0-or-later"), "lgpl_3_full", "lgpl_3_short" },
+ { N_("MIT"), "mit_x11_short", "mit_x11_full" },
+ { N_("No License"), NULL, NULL },
+};
static char *
get_template_name (IdeTemplateInput *self)
@@ -210,6 +227,7 @@ ide_template_input_dispose (GObject *object)
g_clear_object (&self->directory);
g_clear_object (&self->templates);
g_clear_object (&self->languages);
+ g_clear_object (&self->licenses);
g_clear_pointer (&self->author, g_free);
g_clear_pointer (&self->language, g_free);
@@ -275,6 +293,10 @@ ide_template_input_get_property (GObject *object,
g_value_set_object (value, self->languages);
break;
+ case PROP_LICENSES_MODEL:
+ g_value_set_object (value, self->licenses);
+ break;
+
case PROP_USE_VERSION_CONTROL:
g_value_set_boolean (value, self->use_version_control);
break;
@@ -390,6 +412,10 @@ ide_template_input_class_init (IdeTemplateInputClass *klass)
g_param_spec_object ("languages-model", NULL, NULL, G_TYPE_LIST_MODEL,
(G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+ properties [PROP_LICENSES_MODEL] =
+ g_param_spec_object ("licenses-model", NULL, NULL, G_TYPE_LIST_MODEL,
+ (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
properties [PROP_USE_VERSION_CONTROL] =
g_param_spec_boolean ("use-version-control", NULL, NULL, DEFAULT_USE_VERSION_CONTROL,
(G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
@@ -410,6 +436,10 @@ ide_template_input_init (IdeTemplateInput *self)
self->use_version_control = DEFAULT_USE_VERSION_CONTROL;
self->templates = g_list_store_new (IDE_TYPE_PROJECT_TEMPLATE);
self->languages = gtk_string_list_new (NULL);
+ self->licenses = gtk_string_list_new (NULL);
+
+ for (guint i = 0; i < G_N_ELEMENTS (licenses); i++)
+ gtk_string_list_append (self->licenses, g_dgettext (GETTEXT_PACKAGE, licenses[i].spdx));
}
const char *
@@ -826,3 +856,17 @@ ide_template_input_get_languages_model (IdeTemplateInput *self)
return G_LIST_MODEL (self->languages);
}
+
+/**
+ * ide_template_input_get_licenses_model:
+ * @self: a #IdeTemplateInput
+ *
+ * Returns: (transfer none): A #GListModel
+ */
+GListModel *
+ide_template_input_get_licenses_model (IdeTemplateInput *self)
+{
+ g_return_val_if_fail (IDE_IS_TEMPLATE_INPUT (self), NULL);
+
+ return G_LIST_MODEL (self->licenses);
+}
diff --git a/src/libide/projects/ide-template-input.h b/src/libide/projects/ide-template-input.h
index 352c6ad28..b4d150497 100644
--- a/src/libide/projects/ide-template-input.h
+++ b/src/libide/projects/ide-template-input.h
@@ -87,6 +87,8 @@ GListModel *ide_template_input_get_templates_model (IdeTemplateInput *
IDE_AVAILABLE_IN_ALL
GListModel *ide_template_input_get_languages_model (IdeTemplateInput *self);
IDE_AVAILABLE_IN_ALL
+GListModel *ide_template_input_get_licenses_model (IdeTemplateInput *self);
+IDE_AVAILABLE_IN_ALL
TmplScope *ide_template_input_to_scope (IdeTemplateInput *self);
G_END_DECLS
diff --git a/src/libide/projects/libide-projects.gresource.xml
b/src/libide/projects/libide-projects.gresource.xml
new file mode 100644
index 000000000..95815521a
--- /dev/null
+++ b/src/libide/projects/libide-projects.gresource.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/gnome/libide-projects">
+ <file>licenses/agpl_3_full</file>
+ <file>licenses/agpl_3_short</file>
+ <file>licenses/apache_2_full</file>
+ <file>licenses/apache_2_short</file>
+ <file>licenses/gpl_2_full</file>
+ <file>licenses/gpl_2_short</file>
+ <file>licenses/gpl_3_full</file>
+ <file>licenses/gpl_3_short</file>
+ <file>licenses/lgpl_2_1_full</file>
+ <file>licenses/lgpl_2_1_short</file>
+ <file>licenses/lgpl_3_full</file>
+ <file>licenses/lgpl_3_short</file>
+ <file>licenses/mit_x11_full</file>
+ <file>licenses/mit_x11_short</file>
+ </gresource>
+</gresources>
diff --git a/src/plugins/create-project/resources/agpl_3_full b/src/libide/projects/licenses/agpl_3_full
similarity index 100%
rename from src/plugins/create-project/resources/agpl_3_full
rename to src/libide/projects/licenses/agpl_3_full
diff --git a/src/plugins/create-project/resources/agpl_3_short b/src/libide/projects/licenses/agpl_3_short
similarity index 100%
rename from src/plugins/create-project/resources/agpl_3_short
rename to src/libide/projects/licenses/agpl_3_short
diff --git a/src/plugins/create-project/resources/apache_2_full b/src/libide/projects/licenses/apache_2_full
similarity index 100%
rename from src/plugins/create-project/resources/apache_2_full
rename to src/libide/projects/licenses/apache_2_full
diff --git a/src/plugins/create-project/resources/apache_2_short b/src/libide/projects/licenses/apache_2_short
similarity index 100%
rename from src/plugins/create-project/resources/apache_2_short
rename to src/libide/projects/licenses/apache_2_short
diff --git a/src/plugins/create-project/resources/gpl_2_full b/src/libide/projects/licenses/gpl_2_full
similarity index 100%
rename from src/plugins/create-project/resources/gpl_2_full
rename to src/libide/projects/licenses/gpl_2_full
diff --git a/src/plugins/create-project/resources/gpl_2_short b/src/libide/projects/licenses/gpl_2_short
similarity index 100%
rename from src/plugins/create-project/resources/gpl_2_short
rename to src/libide/projects/licenses/gpl_2_short
diff --git a/src/plugins/create-project/resources/gpl_3_full b/src/libide/projects/licenses/gpl_3_full
similarity index 100%
rename from src/plugins/create-project/resources/gpl_3_full
rename to src/libide/projects/licenses/gpl_3_full
diff --git a/src/plugins/create-project/resources/gpl_3_short b/src/libide/projects/licenses/gpl_3_short
similarity index 100%
rename from src/plugins/create-project/resources/gpl_3_short
rename to src/libide/projects/licenses/gpl_3_short
diff --git a/src/plugins/create-project/resources/lgpl_2_1_full b/src/libide/projects/licenses/lgpl_2_1_full
similarity index 100%
rename from src/plugins/create-project/resources/lgpl_2_1_full
rename to src/libide/projects/licenses/lgpl_2_1_full
diff --git a/src/plugins/create-project/resources/lgpl_2_1_short b/src/libide/projects/licenses/lgpl_2_1_short
similarity index 100%
rename from src/plugins/create-project/resources/lgpl_2_1_short
rename to src/libide/projects/licenses/lgpl_2_1_short
diff --git a/src/plugins/create-project/resources/lgpl_3_full b/src/libide/projects/licenses/lgpl_3_full
similarity index 100%
rename from src/plugins/create-project/resources/lgpl_3_full
rename to src/libide/projects/licenses/lgpl_3_full
diff --git a/src/plugins/create-project/resources/lgpl_3_short b/src/libide/projects/licenses/lgpl_3_short
similarity index 100%
rename from src/plugins/create-project/resources/lgpl_3_short
rename to src/libide/projects/licenses/lgpl_3_short
diff --git a/src/plugins/create-project/resources/mit_x11_full b/src/libide/projects/licenses/mit_x11_full
similarity index 100%
rename from src/plugins/create-project/resources/mit_x11_full
rename to src/libide/projects/licenses/mit_x11_full
diff --git a/src/plugins/create-project/resources/mit_x11_short b/src/libide/projects/licenses/mit_x11_short
similarity index 100%
rename from src/plugins/create-project/resources/mit_x11_short
rename to src/libide/projects/licenses/mit_x11_short
diff --git a/src/plugins/create-project/create-project.gresource.xml
b/src/plugins/create-project/create-project.gresource.xml
index 65f7c7f82..a886a1cf6 100644
--- a/src/plugins/create-project/create-project.gresource.xml
+++ b/src/plugins/create-project/create-project.gresource.xml
@@ -7,24 +7,4 @@
<file>create-project.plugin</file>
<file>themes/shared.css</file>
</gresource>
-
- <gresource prefix="/plugins/create-project/license/full">
- <file compressed="true" alias="agpl_3">resources/agpl_3_full</file>
- <file compressed="true" alias="apache_2">resources/apache_2_full</file>
- <file compressed="true" alias="gpl_2">resources/gpl_2_full</file>
- <file compressed="true" alias="gpl_3">resources/gpl_3_full</file>
- <file compressed="true" alias="lgpl_2_1">resources/lgpl_2_1_full</file>
- <file compressed="true" alias="lgpl_3">resources/lgpl_3_full</file>
- <file compressed="true" alias="mit_x11">resources/mit_x11_full</file>
- </gresource>
-
- <gresource prefix="/plugins/create-project/license/short">
- <file compressed="true" alias="agpl_3">resources/agpl_3_short</file>
- <file compressed="true" alias="apache_2">resources/apache_2_short</file>
- <file compressed="true" alias="gpl_2">resources/gpl_2_short</file>
- <file compressed="true" alias="gpl_3">resources/gpl_3_short</file>
- <file compressed="true" alias="lgpl_2_1">resources/lgpl_2_1_short</file>
- <file compressed="true" alias="lgpl_3">resources/lgpl_3_short</file>
- <file compressed="true" alias="mit_x11">resources/mit_x11_short</file>
- </gresource>
</gresources>
diff --git a/src/plugins/create-project/gbp-create-project-widget.c
b/src/plugins/create-project/gbp-create-project-widget.c
index 15e9b18d5..ade18f44c 100644
--- a/src/plugins/create-project/gbp-create-project-widget.c
+++ b/src/plugins/create-project/gbp-create-project-widget.c
@@ -41,6 +41,7 @@ struct _GbpCreateProjectWidget
AdwEntryRow *location;
GtkMenuButton *template_button;
GtkMenuButton *language_button;
+ GtkMenuButton *licenses_button;
};
enum {
@@ -102,6 +103,26 @@ language_activated_cb (GbpCreateProjectWidget *self,
gtk_string_object_get_string (string));
}
+static void
+license_activated_cb (GbpCreateProjectWidget *self,
+ guint position,
+ GtkListView *list_view)
+{
+ g_autoptr(GtkStringObject) string = NULL;
+ GListModel *model;
+
+ g_assert (GBP_IS_CREATE_PROJECT_WIDGET (self));
+ g_assert (GTK_IS_LIST_VIEW (list_view));
+
+ model = G_LIST_MODEL (gtk_list_view_get_model (list_view));
+ string = g_list_model_get_item (model, position);
+
+ gtk_menu_button_popdown (self->licenses_button);
+
+ ide_template_input_set_license_name (self->input,
+ gtk_string_object_get_string (string));
+}
+
static void
on_location_changed_cb (GbpCreateProjectWidget *self,
GtkEditable *editable)
@@ -217,10 +238,12 @@ gbp_create_project_widget_class_init (GbpCreateProjectWidgetClass *klass)
gtk_widget_class_bind_template_child (widget_class, GbpCreateProjectWidget, location);
gtk_widget_class_bind_template_child (widget_class, GbpCreateProjectWidget, main);
gtk_widget_class_bind_template_child (widget_class, GbpCreateProjectWidget, language_button);
+ gtk_widget_class_bind_template_child (widget_class, GbpCreateProjectWidget, licenses_button);
gtk_widget_class_bind_template_child (widget_class, GbpCreateProjectWidget, template_button);
gtk_widget_class_bind_template_callback (widget_class, template_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, language_activated_cb);
+ gtk_widget_class_bind_template_callback (widget_class, license_activated_cb);
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
diff --git a/src/plugins/create-project/gbp-create-project-widget.ui
b/src/plugins/create-project/gbp-create-project-widget.ui
index 35761723d..98d82782d 100644
--- a/src/plugins/create-project/gbp-create-project-widget.ui
+++ b/src/plugins/create-project/gbp-create-project-widget.ui
@@ -171,12 +171,76 @@
<object class="AdwActionRow">
<property name="title" translatable="yes">License</property>
<child type="suffix">
- <object class="GtkMenuButton">
+ <object class="GtkMenuButton" id="licenses_button">
<property name="valign">center</property>
- <property name="label">GPLv3+</property>
+ <property name="label" bind-source="input" bind-property="license-name"
bind-flags="sync-create"/>
<style>
<class name="flat"/>
</style>
+ <property name="popover">
+ <object class="GtkPopover">
+ <child>
+ <object class="GtkFrame">
+ <property name="margin-bottom">6</property>
+ <property name="margin-end">6</property>
+ <property name="margin-start">6</property>
+ <property name="margin-top">6</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="propagate-natural-height">true</property>
+ <property name="propagate-natural-width">true</property>
+ <property name="min-content-width">200</property>
+ <property name="min-content-height">200</property>
+ <child>
+ <object class="GtkListView">
+ <signal name="activate" handler="license_activated_cb"
swapped="true" object="GbpCreateProjectWidget"/>
+ <property name="model">
+ <object class="GtkSingleSelection">
+ <property name="model" bind-source="input"
bind-property="licenses-model" bind-flags="sync-create"/>
+ </object>
+ </property>
+ <property name="orientation">vertical</property>
+ <property name="single-click-activate">true</property>
+ <property name="factory">
+ <object class="GtkBuilderListItemFactory">
+ <property name="bytes"><![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <template class="GtkListItem">
+ <property name="child">
+ <object class="GtkBox">
+ <property name="spacing">6</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="xalign">0</property>
+ <property name="hexpand">true</property>
+ <binding name="label">
+ <lookup name="string" type="GtkStringObject">
+ <lookup name="item">GtkListItem</lookup>
+ </lookup>
+ </binding>
+ </object>
+ </child>
+ </object>
+ </property>
+ </template>
+</interface>
+]]>
+ </property>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
</object>
</child>
</object>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]