[gnome-builder/wip/chergert/perspective] libide: sketch out core objects for workbench
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/chergert/perspective] libide: sketch out core objects for workbench
- Date: Sat, 31 Oct 2015 06:00:15 +0000 (UTC)
commit c7cde0cb63bb006b5205252dd7bfb3c223946dcb
Author: Christian Hergert <chergert redhat com>
Date: Fri Oct 30 19:02:37 2015 -0700
libide: sketch out core objects for workbench
Lots to think about, just some sketches.
libide/ide-application.h | 57 +++++++++++
libide/ide-perspective.h | 53 ++++++++++
libide/ide-preferences-addin.h | 43 ++++++++
libide/ide-preferences-window.h | 65 ++++++++++++
libide/ide-view.h | 61 ++++++++++++
libide/ide-workbench-addin.h | 45 +++++++++
libide/ide-workbench.c | 208 +++++++++++++++++++++++++++++++++++++++
libide/ide-workbench.h | 62 ++++++++++++
8 files changed, 594 insertions(+), 0 deletions(-)
---
diff --git a/libide/ide-application.h b/libide/ide-application.h
new file mode 100644
index 0000000..1debdd2
--- /dev/null
+++ b/libide/ide-application.h
@@ -0,0 +1,57 @@
+/* ide-application.h
+ *
+ * Copyright (C) 2015 Christian Hergert <chergert redhat com>
+ *
+ * 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 IDE_APPLICATION_H
+#define IDE_APPLICATION_H
+
+#include <gio/gio.h>
+
+#define IDE_TYPE_APPLICATION (ide_application_get_type())
+#define IDE_APPLICATION_DEFAULT (IDE_APPLICATION(g_application_get_default()))
+
+G_DECLARE_FINAL_TYPE (IdeApplication, ide_application, IDE, APPLICATION, GtkApplication)
+
+GDateTime *ide_application_get_startup_time (IdeApplication *self);
+void ide_application_open_project_async (IdeApplication *self,
+ GFile *project_file,
+ GPtrArray *additional_files,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean ide_application_open_project_finish (IdeApplication *self,
+ GAsyncResult *result,
+ GError **error);
+void ide_application_open_files_async (IdeApplication *self,
+ GFile **files,
+ gint n_files,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean ide_application_open_files_finish (IdeApplication *self,
+ GAsyncResult *result,
+ GError **error);
+void ide_application_get_worker_async (IdeApplication *self,
+ const gchar *plugin_name,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GDBusProxy *ide_application_get_worker_finish (IdeApplication *self,
+ GAsyncResult *result,
+ GError **error);
+
+#endif /* IDE_APPLICATION_H */
diff --git a/libide/ide-perspective.h b/libide/ide-perspective.h
new file mode 100644
index 0000000..de8a4da
--- /dev/null
+++ b/libide/ide-perspective.h
@@ -0,0 +1,53 @@
+/* ide-perspective.h
+ *
+ * Copyright (C) 2015 Christian Hergert <chergert redhat com>
+ *
+ * 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 IDE_PERSPECTIVE_H
+#define IDE_PERSPECTIVE_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_PERSPECTIVE (ide_perspective_get_type())
+
+G_DECLARE_INTERFACE (IdePerspective, ide_perspective, IDE, PERSPECTIVE, GtkWidget)
+
+struct _IdePerspectiveInterface
+{
+ GTypeInterface parent;
+
+ const gchar *(*get_icon_name) (IdePerspective *self);
+ const gchar *(*get_title) (IdePerspective *self);
+ gboolean (*get_needs_attention) (IdePerspective *self);
+ void (*views_foreach) (IdePerspective *self,
+ GtkCallback callback,
+ gpointer user_data);
+ GtkWidget *(*get_titlebar) (IdePerspective *self);
+};
+
+const gchar *ide_perspective_get_icon_name (IdePerspective *self);
+const gchar *ide_perspective_get_title (IdePerspective *self);
+GtkWidget *ide_perspective_get_titlebar (IdePerspective *self);
+gboolean ide_perspective_get_needs_attention (IdePerspective *self);
+void ide_perspective_views_foreach (IdePerspective *self,
+ GtkCallback callback,
+ gpointer user_data);
+
+G_END_DECLS
+
+#endif /* IDE_PERSPECTIVE_H */
diff --git a/libide/ide-preferences-addin.h b/libide/ide-preferences-addin.h
new file mode 100644
index 0000000..8094ee7
--- /dev/null
+++ b/libide/ide-preferences-addin.h
@@ -0,0 +1,43 @@
+/* ide-preferences-addin.h
+ *
+ * Copyright (C) 2015 Christian Hergert <chergert redhat com>
+ *
+ * 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 IDE_PREFERENCES_ADDIN_H
+#define IDE_PREFERENCES_ADDIN_H
+
+#include <gtk/gtk.h>
+
+#define IDE_TYPE_PREFERENCES_ADDIN (ide_preferences_addin_get_type())
+
+G_DECLARE_DERIVABLE_TYPE (IdePreferencesAddin, ide_preferences_addin, IDE, PREFERENCES_ADDIN, GObject)
+
+struct _IdePreferencesAddinInterface
+{
+ GTypeInterface parent_interface;
+
+ void (*load) (IdePreferencesAddin *self,
+ IdePreferencesWindow *window);
+ void (*unload) (IdePreferencesAddin *self,
+ IdePreferencesWindow *window);
+};
+
+void ide_preferences_addin_load (IdePreferencesAddin *self,
+ IdePreferencesWindow *window);
+void ide_preferences_addin_unload (IdePreferencesAddin *self,
+ IdePreferencesWindow *window);
+
+#endif /* IDE_PREFERENCES_ADDIN_H */
diff --git a/libide/ide-preferences-window.h b/libide/ide-preferences-window.h
new file mode 100644
index 0000000..d36a967
--- /dev/null
+++ b/libide/ide-preferences-window.h
@@ -0,0 +1,65 @@
+/* ide-preferences-window.h
+ *
+ * Copyright (C) 2015 Christian Hergert <chergert redhat com>
+ *
+ * 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 IDE_PREFERENCES_WINDOW
+#define IDE_PREFERENCES_WINDOW
+
+#include <gtk/gtk.h>
+
+#include "ide-application.h"
+
+#define IDE_TYPE_PREFERENCES_WINDOW (ide_preferences_window_get_type())
+
+G_DECLARE_FINAL_TYPE (IdePreferencesWindow, ide_preferences_window, IDE, PREFERENCES_WINDOW,
GtkApplicationWindow)
+
+GtkWidget *ide_preferences_window_new (IdeApplication *application);
+void ide_preferences_window_add_page (IdePreferencesWindow *self,
+ const gchar *page_name,
+ const gchar *title,
+ gint priority);
+void ide_preferences_window_add_group (IdePreferencesWindow *self,
+ const gchar *page_name,
+ const gchar *group_name,
+ const gchar *title,
+ gint priority);
+guint ide_preferences_window_add_switch (IdePreferencesWindow *self,
+ const gchar *page_name,
+ const gchar *group_name,
+ const gchar *schema_id,
+ const gchar *key,
+ const gchar *title,
+ const gchar *subtitle,
+ const gchar *keywords,
+ gint priority);
+guint ide_preferences_window_add_spinbutton (IdePreferencesWindow *self,
+ const gchar *page_name,
+ const gchar *group_name,
+ const gchar *schema_id,
+ const gchar *key,
+ const gchar *title,
+ const gchar *subtitle,
+ const gchar *keywords,
+ gint priority);
+guint ide_preferences_window_add_custom (IdePreferencesWindow *self,
+ const gchar *page_name,
+ const gchar *group_name,
+ GtkWidget *widget,
+ const gchar *keywords,
+ gint priority);
+
+#endif /* IDE_PREFERENCES_WINDOW */
diff --git a/libide/ide-view.h b/libide/ide-view.h
new file mode 100644
index 0000000..0ab5609
--- /dev/null
+++ b/libide/ide-view.h
@@ -0,0 +1,61 @@
+/* ide-view.h
+ *
+ * Copyright (C) 2015 Christian Hergert <chergert redhat com>
+ *
+ * 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 IDE_VIEW_H
+#define IDE_VIEW_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_VIEW (ide_view_get_type())
+
+G_DECLARE_INTERFACE (IdeView, ide_view, IDE, VIEW, GtkWidget)
+
+struct _IdeViewInterface
+{
+ GTypeInterface parent;
+
+ const gchar *(*get_title) (IdeView *self);
+ const gchar *(*get_icon_name) (IdeView *self);
+ gboolean (*get_can_save) (IdeView *self);
+ gboolean (*get_needs_attention) (IdeView *self);
+ void (*save_async) (IdeView *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+ gboolean (*save_finish) (IdeView *self,
+ GAsyncResult *result,
+ GError **error);
+};
+
+const gchar *ide_view_get_title (IdeView *self);
+const gchar *ide_view_get_icon_name (IdeView *self);
+gboolean ide_view_get_can_save (IdeView *self);
+gboolean ide_view_get_needs_attention (IdeView *self);
+void ide_view_save_async (IdeView *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean ide_view_save_finish (IdeView *self,
+ GAsyncResult *result,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* IDE_VIEW_H */
diff --git a/libide/ide-workbench-addin.h b/libide/ide-workbench-addin.h
new file mode 100644
index 0000000..c48fcd3
--- /dev/null
+++ b/libide/ide-workbench-addin.h
@@ -0,0 +1,45 @@
+/* ide-workbench-addin.h
+ *
+ * Copyright (C) 2015 Christian Hergert <chergert redhat com>
+ *
+ * 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 IDE_WORKBENCH_ADDIN_H
+#define IDE_WORKBENCH_ADDIN_H
+
+#include "ide-workbench.h"
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_WORKBENCH_ADDIN (ide_workbench_addin_get_type())
+
+struct _IdeWorkbenchAddinInterface
+{
+ GTypeInterface parent;
+
+ void (*load) (IdeWorkbenchAddin *self,
+ IdeWorkbench *workbench);
+ void (*unload) (IdeWorkbenchAddin *self,
+ IdeWorkbench *workbench);
+};
+
+void ide_workbench_addin_load (IdeWorkbenchAddin *self,
+ IdeWorkbench *workbench);
+void ide_workbench_addin_unload (IdeWorkbenchAddin *self,
+ IdeWorkbench *workbench);
+
+G_END_DECLS
+
+#endif /* IDE_WORKBENCH_ADDIN_H */
diff --git a/libide/ide-workbench.c b/libide/ide-workbench.c
new file mode 100644
index 0000000..677e8ca
--- /dev/null
+++ b/libide/ide-workbench.c
@@ -0,0 +1,208 @@
+/* ide-workbench.c
+ *
+ * Copyright (C) 2015 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/>.
+ */
+
+#define G_LOG_DOMAIN "ide-workbench"
+
+#include <libpeas/peas.h>
+
+#include "ide-macros.h"
+#include "ide-workbench.h"
+
+struct _IdeWorkbench
+{
+ GtkApplicationWindow parent;
+
+ PeasExtensionSet *perspectives;
+ IdePerspective *perspective;
+
+ GtkHeaderBar *header_bar;
+ GtkStack *perspectives_stack;
+ GtkStackSwitcher *perspectives_stack_switcher;
+};
+
+G_DEFINE_TYPE (IdeWorkbench, ide_workbench, G_TYPE_OBJECT)
+
+enum {
+ PROP_0,
+ PROP_PERSPECTIVE,
+ LAST_PROP
+};
+
+static GParamSpec *gParamSpecs [LAST_PROP];
+
+static void
+ide_workbench_add_perspective (PeasExtensionSet *set,
+ PeasPluginInfo *plugin_info,
+ PeasExtension *extension,
+ gpointer user_data)
+{
+ IdeWorkbench *self = user_data;
+ IdePerspective *perspective = (IdePerspective *)extension;
+ const gchar *title;
+ const gchar *icon_name;
+
+ g_assert (IDE_IS_WORKBENCH (self));
+ g_assert (IDE_IS_PERSPECTIVE (perspective));
+
+ g_object_ref_sink (perspective);
+
+ title = ide_perspective_get_title (perspective);
+ icon_name = ide_perspective_get_icon_name (perspective);
+
+ gtk_container_add_with_properties (GTK_CONTAINER (self->perspectives_stack),
+ GTK_WIDGET (perspective),
+ "icon-name", icon_name,
+ "needs-attention", FALSE,
+ "title", title,
+ NULL);
+}
+
+static void
+ide_workbench_remove_perspective (PeasExtensionSet *set,
+ PeasPluginInfo *plugin_info,
+ PeasExtension *extension,
+ gpointer user_data)
+{
+ IdeWorkbench *self = user_data;
+ IdePerspective *perspective = (IdePerspective *)extension;
+
+ g_assert (IDE_IS_WORKBENCH (self));
+ g_assert (IDE_IS_PERSPECTIVE (perspective));
+
+ gtk_container_remove (GTK_CONTAINER (self->perspectives_stack), GTK_WIDGET (perspective));
+}
+
+static void
+ide_workbench_finalize (GObject *object)
+{
+ IdeWorkbench *self = (IdeWorkbench *)object;
+
+ ide_clear_weak_pointer (&self->perspective);
+
+ G_OBJECT_CLASS (ide_workbench_parent_class)->finalize (object);
+}
+
+static void
+ide_workbench_constructed (GObject *object)
+{
+ IdeWorkbench *self = (IdeWorkbench *)object;
+
+ G_OBJECT_CLASS (ide_workbench_parent_class)->constructed (object);
+
+ self->perspectives = peas_extension_set_new (peas_engine_get_default (),
+ IDE_TYPE_PERSPECTIVE,
+ NULL);
+
+ g_signal_connect_object (self->perspectives,
+ "extension-added",
+ G_CALLBACK (ide_workbench_add_perspective),
+ self);
+
+ g_signal_connect_object (self->perspectives,
+ "extension-removed",
+ G_CALLBACK (ide_workbench_remove_perspective),
+ self);
+
+ peas_extension_set_foreach (self->perspectives,
+ ide_workbench_add_perspective,
+ self);
+}
+
+static void
+ide_workbench_destroy (GtkWidget *widget)
+{
+ IdeWorkbench *self = (IdeWorkbench *)widget;
+
+ g_assert (IDE_IS_WORKBENCH (self));
+
+ g_clear_object (&self->perspectives);
+
+ GTK_WIDGET_CLASS (ide_workbench_parent_class)->destroy (widget);
+}
+
+static void
+ide_workbench_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ IdeWorkbench *self = IDE_WORKBENCH (object);
+
+ switch (prop_id)
+ {
+ case PROP_PERSPECTIVE:
+ g_value_set_object (value, ide_workbench_get_perspective (self));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ide_workbench_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ IdeWorkbench *self = IDE_WORKBENCH (object);
+
+ switch (prop_id)
+ {
+ case PROP_PERSPECTIVE:
+ ide_workbench_set_perspective (self, g_value_get_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ide_workbench_class_init (IdeWorkbenchClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->constructed = ide_workbench_constructed;
+ object_class->destroy = ide_workbench_destroy;
+ object_class->finalize = ide_workbench_finalize;
+ object_class->get_property = ide_workbench_get_property;
+ object_class->set_property = ide_workbench_set_property;
+
+ gParamSpecs [PROP_PERSPECTIVE] =
+ g_param_spec_object ("perspective",
+ "Perspective",
+ "Perspective",
+ IDE_TYPE_PERSPECTIVE,
+ (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
+
+ gtk_widget_class_set_template_from_resource (widget_class,
+ "/org/gnome/builder/ui/ide-workbench.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, IdeWorkbench, perspectives_stack);
+ gtk_widget_class_bind_template_child (widget_class, IdeWorkbench, perspectives_stack_switcher);
+}
+
+static void
+ide_workbench_init (IdeWorkbench *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+}
diff --git a/libide/ide-workbench.h b/libide/ide-workbench.h
new file mode 100644
index 0000000..94b92c5
--- /dev/null
+++ b/libide/ide-workbench.h
@@ -0,0 +1,62 @@
+/* ide-workbench.h
+ *
+ * Copyright (C) 2015 Christian Hergert <chergert redhat com>
+ *
+ * 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 IDE_WORKBENCH_H
+#define IDE_WORKBENCH_H
+
+#include <gtk/gtk.h>
+
+#include "ide-context.h"
+#include "ide-perspective.h"
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_WORKBENCH (ide_workbench_get_type())
+
+G_DECLARE_FINAL_TYPE (IdeWorkbench, ide_workbench, IDE, WORKBENCH, GtkApplicationWindow)
+
+void ide_workbench_open_async (IdeWorkbench *self,
+ GFile **files,
+ gint n_files,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean ide_workbench_open_finish (IdeWorkbench *self,
+ GAsyncResult *result,
+ GError **error);
+void ide_workbench_save_all_async (IdeWorkbench *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean ide_workbench_save_all_finish (IdeWorkbench *self,
+ GAsyncResult *result,
+ GError **error);
+void ide_workbench_focus (IdeWorkbench *self,
+ GtkWidget *widget);
+void ide_workbench_close (IdeWorkbench *self);
+IdeContext *ide_workbench_get_context (IdeWorkbench *self);
+IdePerspective *ide_workbench_get_perspective (IdeWorkbench *self);
+void ide_workbench_set_perspective (IdeWorkbench *self,
+ IdePerspective *perspective);
+gboolean ide_workbench_get_fullscreen (IdeWorkbench *self);
+void ide_workbench_set_fullscreen (IdeWorkbench *self,
+ gboolean fullscreen);
+
+G_END_DECLS
+
+#endif /* IDE_WORKBENCH_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]