[gnome-builder/wip/akskil/create-project] create-project: stub out genesis addin for creating a project
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/akskil/create-project] create-project: stub out genesis addin for creating a project
- Date: Tue, 1 Mar 2016 09:42:05 +0000 (UTC)
commit 1546db16f0f40165fe2b48bb6c803b7ca7b91c09
Author: Christian Hergert <christian hergert me>
Date: Tue Mar 1 01:40:51 2016 -0800
create-project: stub out genesis addin for creating a project
plugins/create-project/Makefile.am | 4 +
.../gbp-create-project-genesis-addin.c | 187 ++++++++++++++++++++
.../gbp-create-project-genesis-addin.h | 32 ++++
plugins/create-project/gbp-create-project-plugin.c | 4 +
plugins/create-project/gbp-create-project-widget.c | 41 +++++
plugins/create-project/gbp-create-project-widget.h | 32 ++++
.../create-project/gbp-create-project-widget.ui | 11 ++
.../gbp-create-project.gresource.xml | 1 +
8 files changed, 312 insertions(+), 0 deletions(-)
---
diff --git a/plugins/create-project/Makefile.am b/plugins/create-project/Makefile.am
index f840f31..e115a9b 100644
--- a/plugins/create-project/Makefile.am
+++ b/plugins/create-project/Makefile.am
@@ -10,9 +10,13 @@ plugin_LTLIBRARIES = libcreate-project-plugin.la
dist_plugin_DATA = create-project.plugin
libcreate_project_plugin_la_SOURCES = \
+ gbp-create-project-genesis-addin.c \
+ gbp-create-project-genesis-addin.h \
gbp-create-project-plugin.c \
gbp-create-project-tool.c \
gbp-create-project-tool.h \
+ gbp-create-project-widget.c \
+ gbp-create-project-widget.h \
$(NULL)
nodist_libcreate_project_plugin_la_SOURCES = \
diff --git a/plugins/create-project/gbp-create-project-genesis-addin.c
b/plugins/create-project/gbp-create-project-genesis-addin.c
new file mode 100644
index 0000000..8d51d57
--- /dev/null
+++ b/plugins/create-project/gbp-create-project-genesis-addin.c
@@ -0,0 +1,187 @@
+/* gbp-create-project-genesis-addin.c
+ *
+ * Copyright (C) 2016 Christian Hergert <christian hergert me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glib/gi18n.h>
+
+#include "gbp-create-project-genesis-addin.h"
+#include "gbp-create-project-widget.h"
+
+static void genesis_addin_iface_init (IdeGenesisAddinInterface *iface);
+
+struct _GbpCreateProjectGenesisAddin
+{
+ GObject parent;
+
+ GbpCreateProjectWidget *widget;
+
+ guint is_ready : 1;
+};
+
+G_DEFINE_TYPE_EXTENDED (GbpCreateProjectGenesisAddin,
+ gbp_create_project_genesis_addin,
+ G_TYPE_OBJECT,
+ 0,
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_GENESIS_ADDIN,
+ genesis_addin_iface_init))
+
+enum {
+ PROP_0,
+ PROP_IS_READY,
+ N_PROPS
+};
+
+static GParamSpec *properties [N_PROPS];
+
+static void
+gbp_create_project_genesis_addin_finalize (GObject *object)
+{
+ GbpCreateProjectGenesisAddin *self = (GbpCreateProjectGenesisAddin *)object;
+
+ ide_clear_weak_pointer (&self->widget);
+
+ G_OBJECT_CLASS (gbp_create_project_genesis_addin_parent_class)->finalize (object);
+}
+
+static void
+gbp_create_project_genesis_addin_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GbpCreateProjectGenesisAddin *self = GBP_CREATE_PROJECT_GENESIS_ADDIN (object);
+
+ switch (prop_id)
+ {
+ case PROP_IS_READY:
+ g_value_set_boolean (value, self->is_ready);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gbp_create_project_genesis_addin_class_init (GbpCreateProjectGenesisAddinClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = gbp_create_project_genesis_addin_finalize;
+ object_class->get_property = gbp_create_project_genesis_addin_get_property;
+
+ properties [PROP_IS_READY] =
+ g_param_spec_boolean ("is-ready",
+ "Is Ready",
+ "Is Ready",
+ FALSE,
+ (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_properties (object_class, N_PROPS, properties);
+}
+
+static void
+gbp_create_project_genesis_addin_init (GbpCreateProjectGenesisAddin *self)
+{
+}
+
+static GtkWidget *
+gbp_create_project_genesis_addin_get_widget (IdeGenesisAddin *addin)
+{
+ GbpCreateProjectGenesisAddin *self = (GbpCreateProjectGenesisAddin *)addin;
+
+ g_assert (GBP_IS_CREATE_PROJECT_GENESIS_ADDIN (self));
+
+ if (self->widget == NULL)
+ {
+ GbpCreateProjectWidget *widget;
+
+ widget = g_object_new (GBP_TYPE_CREATE_PROJECT_WIDGET,
+ "visible", TRUE,
+ NULL);
+ ide_set_weak_pointer (&self->widget, widget);
+
+ /*
+ * TODO: You need to watch for changes in the widget's entries, and when
+ * the widget satisfies "valid input", you need to:
+ *
+ * self->is_ready = TRUE;
+ * g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_IS_READY]);
+ *
+ * In the past, i've added an "is-ready" property to the widget
+ * and just g_object_bind_property() to self. That would require
+ * making the GbpCreateProjectGenesisAddin:is-ready property
+ * writable though.
+ */
+ }
+
+ return GTK_WIDGET (self->widget);
+}
+
+static gchar *
+gbp_create_project_genesis_addin_get_icon_name (IdeGenesisAddin *addin)
+{
+ return g_strdup ("gtk-missing");
+}
+
+static gchar *
+gbp_create_project_genesis_addin_get_title (IdeGenesisAddin *addin)
+{
+ return g_strdup (_("From a project template"));
+}
+
+static void
+gbp_create_project_genesis_addin_run_async (IdeGenesisAddin *addin,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GbpCreateProjectGenesisAddin *self = (GbpCreateProjectGenesisAddin *)addin;
+ g_autoptr(GTask) task = NULL;
+
+ g_assert (GBP_IS_CREATE_PROJECT_GENESIS_ADDIN (self));
+
+ task = g_task_new (self, cancellable, callback, user_data);
+
+ /*
+ * TODO: Generate the project from information found in the widget.
+ * See gbp-create-project-tool.c for examples.
+ */
+
+ g_task_return_boolean (task, TRUE);
+}
+
+static gboolean
+gbp_create_project_genesis_addin_run_finish (IdeGenesisAddin *addin,
+ GAsyncResult *result,
+ GError **error)
+{
+ g_assert (GBP_IS_CREATE_PROJECT_GENESIS_ADDIN (addin));
+ g_assert (G_IS_TASK (result));
+
+ return g_task_propagate_boolean (G_TASK (result), error);
+}
+
+static void
+genesis_addin_iface_init (IdeGenesisAddinInterface *iface)
+{
+ iface->get_icon_name = gbp_create_project_genesis_addin_get_icon_name;
+ iface->get_title = gbp_create_project_genesis_addin_get_title;
+ iface->get_widget = gbp_create_project_genesis_addin_get_widget;
+ iface->run_async = gbp_create_project_genesis_addin_run_async;
+ iface->run_finish = gbp_create_project_genesis_addin_run_finish;
+}
diff --git a/plugins/create-project/gbp-create-project-genesis-addin.h
b/plugins/create-project/gbp-create-project-genesis-addin.h
new file mode 100644
index 0000000..11fad87
--- /dev/null
+++ b/plugins/create-project/gbp-create-project-genesis-addin.h
@@ -0,0 +1,32 @@
+/* gbp-create-project-genesis-addin.h
+ *
+ * Copyright (C) 2016 Christian Hergert <christian hergert me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GBP_CREATE_PROJECT_GENESIS_ADDIN_H
+#define GBP_CREATE_PROJECT_GENESIS_ADDIN_H
+
+#include <ide.h>
+
+G_BEGIN_DECLS
+
+#define GBP_TYPE_CREATE_PROJECT_GENESIS_ADDIN (gbp_create_project_genesis_addin_get_type())
+
+G_DECLARE_FINAL_TYPE (GbpCreateProjectGenesisAddin, gbp_create_project_genesis_addin, GBP,
CREATE_PROJECT_GENESIS_ADDIN, GObject)
+
+G_END_DECLS
+
+#endif /* GBP_CREATE_PROJECT_GENESIS_ADDIN_H */
diff --git a/plugins/create-project/gbp-create-project-plugin.c
b/plugins/create-project/gbp-create-project-plugin.c
index 70e02bb..4c5d6b8 100644
--- a/plugins/create-project/gbp-create-project-plugin.c
+++ b/plugins/create-project/gbp-create-project-plugin.c
@@ -19,6 +19,7 @@
#include <ide.h>
#include <libpeas/peas.h>
+#include "gbp-create-project-genesis-addin.h"
#include "gbp-create-project-tool.h"
void
@@ -27,4 +28,7 @@ peas_register_types (PeasObjectModule *module)
peas_object_module_register_extension_type (module,
IDE_TYPE_APPLICATION_TOOL,
GBP_TYPE_CREATE_PROJECT_TOOL);
+ peas_object_module_register_extension_type (module,
+ IDE_TYPE_GENESIS_ADDIN,
+ GBP_TYPE_CREATE_PROJECT_GENESIS_ADDIN);
}
diff --git a/plugins/create-project/gbp-create-project-widget.c
b/plugins/create-project/gbp-create-project-widget.c
new file mode 100644
index 0000000..90b1bff
--- /dev/null
+++ b/plugins/create-project/gbp-create-project-widget.c
@@ -0,0 +1,41 @@
+/* gbp-create-project-widget.c
+ *
+ * Copyright (C) 2016 Christian Hergert <christian hergert me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gbp-create-project-widget.h"
+
+struct _GbpCreateProjectWidget
+{
+ GtkBin parent;
+};
+
+G_DEFINE_TYPE (GbpCreateProjectWidget, gbp_create_project_widget, GTK_TYPE_BIN)
+
+static void
+gbp_create_project_widget_class_init (GbpCreateProjectWidgetClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class,
+
"/org/gnome/builder/plugins/create-project-plugin/gbp-create-project-widget.ui");
+}
+
+static void
+gbp_create_project_widget_init (GbpCreateProjectWidget *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+}
diff --git a/plugins/create-project/gbp-create-project-widget.h
b/plugins/create-project/gbp-create-project-widget.h
new file mode 100644
index 0000000..4809bbc
--- /dev/null
+++ b/plugins/create-project/gbp-create-project-widget.h
@@ -0,0 +1,32 @@
+/* gbp-create-project-widget.h
+ *
+ * Copyright (C) 2016 Christian Hergert <christian hergert me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GBP_CREATE_PROJECT_WIDGET_H
+#define GBP_CREATE_PROJECT_WIDGET_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GBP_TYPE_CREATE_PROJECT_WIDGET (gbp_create_project_widget_get_type())
+
+G_DECLARE_FINAL_TYPE (GbpCreateProjectWidget, gbp_create_project_widget, GBP, CREATE_PROJECT_WIDGET, GtkBin)
+
+G_END_DECLS
+
+#endif /* GBP_CREATE_PROJECT_WIDGET_H */
diff --git a/plugins/create-project/gbp-create-project-widget.ui
b/plugins/create-project/gbp-create-project-widget.ui
new file mode 100644
index 0000000..ca74c32
--- /dev/null
+++ b/plugins/create-project/gbp-create-project-widget.ui
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <template class="GbpCreateProjectWidget" parent="GtkBin">
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="visible">true</property>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/plugins/create-project/gbp-create-project.gresource.xml
b/plugins/create-project/gbp-create-project.gresource.xml
index 7c5c913..c54dfca 100644
--- a/plugins/create-project/gbp-create-project.gresource.xml
+++ b/plugins/create-project/gbp-create-project.gresource.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/builder/plugins/create-project-plugin">
+ <file>gbp-create-project-widget.ui</file>
</gresource>
</gresources>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]