[anjuta] project-manager: Implement a project node chooser
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] project-manager: Implement a project node chooser
- Date: Sat, 7 Jan 2012 11:28:42 +0000 (UTC)
commit 4aeabf77d2a9014f99c20a31cb425236ffece1c2
Author: SÃbastien Granjoux <seb sfo free fr>
Date: Fri Jan 6 22:26:54 2012 +0100
project-manager: Implement a project node chooser
libanjuta/anjuta-glade.xml | 12 +-
plugins/project-manager/Makefile.am | 2 +
plugins/project-manager/dialogs.c | 80 ++------
plugins/project-manager/pm_dialogs.ui | 2 +-
plugins/project-manager/project-chooser.c | 354 +++++++++++++++++++++++++++++
plugins/project-manager/project-chooser.h | 67 ++++++
6 files changed, 450 insertions(+), 67 deletions(-)
---
diff --git a/libanjuta/anjuta-glade.xml b/libanjuta/anjuta-glade.xml
index b162935..c434b36 100644
--- a/libanjuta/anjuta-glade.xml
+++ b/libanjuta/anjuta-glade.xml
@@ -57,7 +57,7 @@
<glade-widget-class name="AnjutaEnvironmentEditor" title="Environment editor"
generic-name="environment_editor" />
- <glade-widget-class name="AnjutaTreeComboBox" title="Tree combo box"
+ <glade-widget-class name="AnjutaTreeComboBox" title="Tree combo box"
generic-name="combo">
<properties>
<property id="glade-type" disabled="True"/>
@@ -66,6 +66,15 @@
<property id="stock" disabled="True"/>
</properties>
</glade-widget-class>
+ <glade-widget-class name="AnjutaPmChooserButton" title="Project node chooser"
+ generic-name="button" parent="AnjutaTreeComboBox">
+ <properties>
+ <property id="glade-type" disabled="True"/>
+ <property id="label" disabled="True"/>
+ <property id="use-underline" disabled="True"/>
+ <property id="stock" disabled="True"/>
+ </properties>
+ </glade-widget-class>
</glade-widget-classes>
@@ -79,5 +88,6 @@
<glade-widget-class-ref name="AnjutaEntry" />
<glade-widget-class-ref name="AnjutaEnvironmentEditor" />
<glade-widget-class-ref name="AnjutaTreeComboBox" />
+ <glade-widget-class-ref name="AnjutaPmChooserButton" />
</glade-widget-group>
</glade-catalog>
diff --git a/plugins/project-manager/Makefile.am b/plugins/project-manager/Makefile.am
index 9c29c19..3adb855 100644
--- a/plugins/project-manager/Makefile.am
+++ b/plugins/project-manager/Makefile.am
@@ -61,6 +61,8 @@ libanjuta_project_manager_la_SOURCES = \
project-model.c \
project-view.h \
project-view.c \
+ project-chooser.c \
+ project-chooser.h \
project-util.h \
project-util.c \
project.h \
diff --git a/plugins/project-manager/dialogs.c b/plugins/project-manager/dialogs.c
index 2a97e14..cf33d98 100644
--- a/plugins/project-manager/dialogs.c
+++ b/plugins/project-manager/dialogs.c
@@ -35,6 +35,7 @@
#include <libanjuta/anjuta-utils.h>
#include <libanjuta/anjuta-pkg-config-chooser.h>
#include <libanjuta/anjuta-tree-combo.h>
+#include <libanjuta/interfaces/ianjuta-project-chooser.h>
#define ICON_SIZE 16
@@ -250,47 +251,6 @@ setup_nodes_treeview (GbfProjectView *view,
}
static void
-setup_nodes_combo_box (AnjutaTreeComboBox *view,
- GbfProjectModel *model,
- GtkTreePath *root,
- GtkTreeModelFilterVisibleFunc func,
- gpointer data,
- GtkTreeIter *selected)
-{
- GtkTreeIter iter;
-
- g_return_if_fail (view != NULL);
- g_return_if_fail (model != NULL);
-
- pm_setup_project_renderer (GTK_CELL_LAYOUT (view));
-
- if ((func != NULL) || (root != NULL))
- {
- GtkTreeModel *filter;
-
- filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (model), root);
- if (func != NULL)
- {
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter), func, data, NULL);
- }
- anjuta_tree_combo_box_set_model (view, filter);
- g_object_unref (filter);
- if (pm_convert_project_iter_to_model_iter (filter, &iter, selected))
- {
- anjuta_tree_combo_box_set_active_iter (view, &iter);
- }
- }
- else
- {
- anjuta_tree_combo_box_set_model (view, GTK_TREE_MODEL (model));
- if (selected)
- {
- anjuta_tree_combo_box_set_active_iter (view, selected);
- }
- }
-}
-
-static void
entry_changed_cb (GtkEditable *editable, gpointer user_data)
{
GtkWidget *button = user_data;
@@ -566,18 +526,6 @@ add_label (const gchar *display_name, const gchar *value, GtkWidget *table, gint
*position = *position + 1;
}
-static gboolean
-is_project_node_but_shortcut (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
-{
- GbfTreeData *data;
-
- gtk_tree_model_get (GTK_TREE_MODEL (model), iter,
- GBF_PROJECT_MODEL_COLUMN_DATA, &data,
- -1);
-
- return (data != NULL) && (data->shortcut == NULL) && (gbf_tree_data_get_node (data) != NULL);
-}
-
static void
update_properties (PropertiesTable *table)
{
@@ -842,6 +790,7 @@ pm_project_create_properties_dialog (AnjutaPmProject *project, GtkWindow *parent
GtkWidget *dialog = NULL;
GtkBuilder *bxml;
GtkWidget *node_combo;
+ GtkTreeIter iter;
g_return_val_if_fail (data != NULL, NULL);
@@ -864,13 +813,15 @@ pm_project_create_properties_dialog (AnjutaPmProject *project, GtkWindow *parent
g_object_unref (bxml);
/* Add combo node selection */
- setup_nodes_combo_box (ANJUTA_TREE_COMBO_BOX (node_combo),
- gbf_project_view_get_model(ANJUTA_PLUGIN_PROJECT_MANAGER (table->project->plugin)->view),
- NULL,
- is_project_node_but_shortcut,
- NULL,
- selected);
-
+ ianjuta_project_chooser_set_project_model (IANJUTA_PROJECT_CHOOSER (node_combo),
+ IANJUTA_PROJECT_MANAGER (table->project->plugin),
+ ANJUTA_PROJECT_ROOT,
+ NULL);
+ if (pm_convert_project_iter_to_model_iter (GTK_TREE_MODEL (anjuta_tree_combo_box_get_model (ANJUTA_TREE_COMBO_BOX (node_combo))),
+ &iter, selected))
+ {
+ anjuta_tree_combo_box_set_active_iter (ANJUTA_TREE_COMBO_BOX (node_combo), &iter);
+ }
g_signal_connect (node_combo, "changed",
G_CALLBACK (on_node_changed),
table);
@@ -922,14 +873,13 @@ anjuta_pm_project_show_properties_dialog (ProjectManagerPlugin *plugin, GtkTreeI
{
selected = &iter;
}
- }
+ }
if (selected)
{
GbfTreeData *data;
gtk_tree_model_get (GTK_TREE_MODEL (gbf_project_view_get_model (plugin->view)), selected, GBF_PROJECT_MODEL_COLUMN_DATA, &data, -1);
-
dialog_ptr = &data->properties_dialog;
if (*dialog_ptr != NULL)
@@ -942,9 +892,9 @@ anjuta_pm_project_show_properties_dialog (ProjectManagerPlugin *plugin, GtkTreeI
*dialog_ptr = pm_project_create_properties_dialog (
plugin->project,
GTK_WINDOW (plugin->project->plugin->shell),
- plugin->view,
- data,
- selected);
+ plugin->view,
+ data,
+ selected);
if (*dialog_ptr != NULL)
{
g_object_add_weak_pointer (G_OBJECT (*dialog_ptr), (gpointer *)dialog_ptr);
diff --git a/plugins/project-manager/pm_dialogs.ui b/plugins/project-manager/pm_dialogs.ui
index 3210399..b1c4716 100644
--- a/plugins/project-manager/pm_dialogs.ui
+++ b/plugins/project-manager/pm_dialogs.ui
@@ -992,7 +992,7 @@
<property name="border_width">6</property>
<property name="spacing">12</property>
<child>
- <object class="AnjutaTreeComboBox" id="nodes_combo">
+ <object class="AnjutaPmChooserButton" id="nodes_combo">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
diff --git a/plugins/project-manager/project-chooser.c b/plugins/project-manager/project-chooser.c
new file mode 100644
index 0000000..a76417a
--- /dev/null
+++ b/plugins/project-manager/project-chooser.c
@@ -0,0 +1,354 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4; coding: utf-8 -*- */
+
+/* project-chooser.c
+ *
+ * Copyright (C) 2012 SÃbastien Granjoux
+ *
+ * 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 2 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, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ */
+
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "project-chooser.h"
+
+#include <glib/gi18n.h>
+
+#include <libanjuta/interfaces/ianjuta-project-chooser.h>
+
+#include "project-model.h"
+#include "project-view.h"
+#include "tree-data.h"
+#include "plugin.h"
+
+
+/* Types
+ *---------------------------------------------------------------------------*/
+
+struct _AnjutaPmChooserButtonPrivate
+{
+ AnjutaProjectNodeType child;
+};
+
+static void ianjuta_project_chooser_init (IAnjutaProjectChooserIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (AnjutaPmChooserButton, anjuta_pm_chooser_button, ANJUTA_TYPE_TREE_COMBO_BOX,
+ G_IMPLEMENT_INTERFACE (IANJUTA_TYPE_PROJECT_CHOOSER,
+ ianjuta_project_chooser_init))
+
+/* Helpers functions
+ *---------------------------------------------------------------------------*/
+
+
+/* Private functions
+ *---------------------------------------------------------------------------*/
+
+static void
+setup_nodes_combo_box (AnjutaPmChooserButton *view,
+ GbfProjectModel *model,
+ GtkTreePath *root,
+ GtkTreeModelFilterVisibleFunc func,
+ gpointer data,
+ GtkTreeIter *selected)
+{
+ GtkTreeIter iter;
+
+ g_return_if_fail (view != NULL);
+ g_return_if_fail (model != NULL);
+
+ if ((func != NULL) || (root != NULL))
+ {
+ GtkTreeModel *filter;
+
+ filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (model), root);
+ if (func != NULL)
+ {
+ gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filter), func, data, NULL);
+ }
+ anjuta_tree_combo_box_set_model (ANJUTA_TREE_COMBO_BOX (view), filter);
+ g_object_unref (filter);
+ if (pm_convert_project_iter_to_model_iter (filter, &iter, selected))
+ {
+ anjuta_tree_combo_box_set_active_iter (ANJUTA_TREE_COMBO_BOX (view), &iter);
+ }
+ }
+ else
+ {
+ anjuta_tree_combo_box_set_model (ANJUTA_TREE_COMBO_BOX (view), GTK_TREE_MODEL (model));
+ if (selected)
+ {
+ anjuta_tree_combo_box_set_active_iter (ANJUTA_TREE_COMBO_BOX (view), selected);
+ }
+ }
+}
+
+/* Callbacks functions
+ *---------------------------------------------------------------------------*/
+
+static gboolean
+is_project_node_but_shortcut (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+{
+ GbfTreeData *data;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (model), iter,
+ GBF_PROJECT_MODEL_COLUMN_DATA, &data,
+ -1);
+
+ return (data != NULL) && (data->shortcut == NULL) && (gbf_tree_data_get_node (data) != NULL);
+}
+
+static gboolean
+is_project_module_node (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+{
+ GbfTreeData *data;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (model), iter,
+ GBF_PROJECT_MODEL_COLUMN_DATA, &data,
+ -1);
+ if ((data != NULL) && (data->shortcut == NULL))
+ {
+ AnjutaProjectNode *node = gbf_tree_data_get_node (data);
+
+ if ((node != NULL) && ((anjuta_project_node_get_node_type (node) & ANJUTA_PROJECT_TYPE_MASK) == ANJUTA_PROJECT_MODULE))
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static gboolean
+is_project_target_or_group_node (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+{
+ GbfTreeData *data;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (model), iter,
+ GBF_PROJECT_MODEL_COLUMN_DATA, &data,
+ -1);
+ if ((data != NULL) && (data->shortcut == NULL))
+ {
+ AnjutaProjectNode *node = gbf_tree_data_get_node (data);
+
+ if (node != NULL)
+ {
+ AnjutaProjectNodeType type = anjuta_project_node_get_node_type (node) & ANJUTA_PROJECT_TYPE_MASK;
+
+ return (type == ANJUTA_PROJECT_TARGET) || (type == ANJUTA_PROJECT_GROUP);
+ }
+ }
+
+ return FALSE;
+}
+
+static gboolean
+is_project_group_node (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+{
+ GbfTreeData *data;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (model), iter,
+ GBF_PROJECT_MODEL_COLUMN_DATA, &data,
+ -1);
+ if ((data != NULL) && (data->shortcut == NULL))
+ {
+ AnjutaProjectNode *node = gbf_tree_data_get_node (data);
+
+ if (node != NULL)
+ {
+ AnjutaProjectNodeType type = anjuta_project_node_get_node_type (node) & ANJUTA_PROJECT_TYPE_MASK;
+
+ return type == ANJUTA_PROJECT_GROUP;
+ }
+ }
+
+ return FALSE;
+}
+
+
+/* Public functions
+ *---------------------------------------------------------------------------*/
+
+GtkWidget *
+anjuta_pm_chooser_button_new (void)
+{
+ return g_object_new (ANJUTA_TYPE_PM_CHOOSER_BUTTON, NULL);
+}
+
+
+/* Implement IAnjutaProjectChooser interface
+ *---------------------------------------------------------------------------*/
+
+static gboolean
+anjuta_pm_chooser_set_project_model (IAnjutaProjectChooser *iface, IAnjutaProjectManager *manager, AnjutaProjectNodeType child_type, GError **error)
+{
+ GtkTreeIter selected;
+ gboolean found;
+ GtkTreeModelFilterVisibleFunc func;
+
+ ANJUTA_PM_CHOOSER_BUTTON (iface)->priv->child = child_type & ANJUTA_PROJECT_TYPE_MASK;
+
+ switch (child_type & ANJUTA_PROJECT_TYPE_MASK)
+ {
+ case ANJUTA_PROJECT_ROOT:
+ /* Display all nodes */
+ func = is_project_node_but_shortcut;
+ break;
+ case ANJUTA_PROJECT_MODULE:
+ /* Display all modules */
+ func = is_project_module_node;
+ break;
+ case ANJUTA_PROJECT_PACKAGE:
+ /* Display all targets */
+ func = is_project_target_or_group_node;
+ break;
+ case ANJUTA_PROJECT_SOURCE:
+ /* Display all targets */
+ func = is_project_target_or_group_node;
+ break;
+ case ANJUTA_PROJECT_TARGET:
+ /* Display all targets */
+ func = is_project_target_or_group_node;
+ break;
+ case ANJUTA_PROJECT_GROUP:
+ /* Display all groups */
+ func = is_project_group_node;
+ break;
+ default:
+ /* Invalid type */
+ return FALSE;
+ }
+
+ found = gbf_project_view_get_first_selected (ANJUTA_PLUGIN_PROJECT_MANAGER (manager)->view, &selected) != NULL;
+
+ /* Add combo node selection */
+ setup_nodes_combo_box (ANJUTA_PM_CHOOSER_BUTTON (iface),
+ gbf_project_view_get_model(ANJUTA_PLUGIN_PROJECT_MANAGER (manager)->view),
+ NULL,
+ func,
+ NULL,
+ found ? &selected : NULL);
+
+ return TRUE;
+}
+
+static GFile *
+anjuta_pm_chooser_get_selected (IAnjutaProjectChooser *iface, GError **error)
+{
+ GtkTreeIter iter;
+
+ if (anjuta_tree_combo_box_get_active_iter (ANJUTA_TREE_COMBO_BOX (iface), &iter))
+ {
+ GtkTreeModel *model;
+ GbfTreeData *data = NULL;
+
+ model = anjuta_tree_combo_box_get_model (ANJUTA_TREE_COMBO_BOX (iface));
+
+ gtk_tree_model_get (model, &iter, GBF_PROJECT_MODEL_COLUMN_DATA, &data, -1);
+ g_return_val_if_fail (data != NULL, NULL);
+
+ if (data->node != NULL)
+ {
+ AnjutaProjectNode *node = data->node;
+ gint valid;
+
+ switch (ANJUTA_PM_CHOOSER_BUTTON (iface)->priv->child)
+ {
+ case ANJUTA_PROJECT_ROOT:
+ /* Allow all nodes */
+ valid = -1;
+ break;
+ case ANJUTA_PROJECT_MODULE:
+ case ANJUTA_PROJECT_PACKAGE:
+ /* Only package parent */
+ valid = ANJUTA_PROJECT_CAN_ADD_PACKAGE;
+ break;
+ case ANJUTA_PROJECT_SOURCE:
+ /* Only package parent */
+ valid = ANJUTA_PROJECT_CAN_ADD_SOURCE;
+ break;
+ case ANJUTA_PROJECT_TARGET:
+ /* Only package parent */
+ valid = ANJUTA_PROJECT_CAN_ADD_TARGET;
+ break;
+ case ANJUTA_PROJECT_GROUP:
+ /* Only group parent */
+ valid = ANJUTA_PROJECT_CAN_ADD_GROUP;
+ break;
+ default:
+ valid = 0;
+ break;
+ }
+
+ if (anjuta_project_node_get_state (node) & valid)
+ {
+ return anjuta_project_node_get_file (data->node);
+ }
+ }
+ }
+
+ return NULL;
+}
+
+static void
+ianjuta_project_chooser_init (IAnjutaProjectChooserIface *iface)
+{
+ iface->set_project_model = anjuta_pm_chooser_set_project_model;
+ iface->get_selected = anjuta_pm_chooser_get_selected;
+}
+
+/* Implement GObject functions
+ *---------------------------------------------------------------------------*/
+
+static GObject *
+anjuta_pm_chooser_button_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties)
+{
+ GObject *object;
+
+ object = G_OBJECT_CLASS (anjuta_pm_chooser_button_parent_class)->constructor
+ (type, n_construct_properties, construct_properties);
+
+ pm_setup_project_renderer (GTK_CELL_LAYOUT (object));
+
+ return object;
+}
+
+static void
+anjuta_pm_chooser_button_init (AnjutaPmChooserButton *button)
+{
+ AnjutaPmChooserButtonPrivate *priv;
+
+ priv = G_TYPE_INSTANCE_GET_PRIVATE (button,
+ ANJUTA_TYPE_PM_CHOOSER_BUTTON,
+ AnjutaPmChooserButtonPrivate);
+ button->priv = priv;
+}
+
+static void
+anjuta_pm_chooser_button_class_init (AnjutaPmChooserButtonClass * klass)
+{
+ GObjectClass *object_class;
+
+ object_class = (GObjectClass *)klass;
+ object_class->constructor = anjuta_pm_chooser_button_constructor;
+
+ g_type_class_add_private (klass, sizeof (AnjutaPmChooserButtonPrivate));
+}
diff --git a/plugins/project-manager/project-chooser.h b/plugins/project-manager/project-chooser.h
new file mode 100644
index 0000000..c3d3657
--- /dev/null
+++ b/plugins/project-manager/project-chooser.h
@@ -0,0 +1,67 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4; coding: utf-8 -*- */
+
+/* project-chooser.h
+ *
+ * Copyright (C) 2011 SÃbastien Granjoux
+ *
+ * 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 2 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, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _PM_CHOOSER_H_
+#define _PM_CHOOSER_H_
+
+#include <gtk/gtk.h>
+
+#include "libanjuta/anjuta-tree-combo.h"
+
+G_BEGIN_DECLS
+
+#define ANJUTA_TYPE_PM_CHOOSER_BUTTON (anjuta_pm_chooser_button_get_type ())
+#define ANJUTA_PM_CHOOSER_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ANJUTA_TYPE_PM_CHOOSER_BUTTON, AnjutaPmChooserButton))
+#define ANJUTA_PM_CHOOSER_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ANJUTA_TYPE_PM_CHOOSER_BUTTON, AnjutaPmChooserButtonClass))
+#define ANJUTA_IS_PM_CHOOSER_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ANJUTA_TYPE_PM_CHOOSER_BUTTON))
+#define ANJUTA_IS_PM_CHOOSER_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ANJUTA_TYPE_PM_CHOOSER_BUTTON))
+#define ANJUTA_PM_CHOOSER_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ANJUTA_TYPE_PM_CHOOSER_BUTTON, AnjutaPmChooserButtonClass))
+
+typedef struct _AnjutaPmChooserButton AnjutaPmChooserButton;
+typedef struct _AnjutaPmChooserButtonPrivate AnjutaPmChooserButtonPrivate;
+typedef struct _AnjutaPmChooserButtonClass AnjutaPmChooserButtonClass;
+
+struct _AnjutaPmChooserButton
+{
+ AnjutaTreeComboBox parent;
+
+ /*< private >*/
+ AnjutaPmChooserButtonPrivate *priv;
+};
+
+struct _AnjutaPmChooserButtonClass
+{
+ /*< private >*/
+ AnjutaTreeComboBoxClass parent_class;
+};
+
+
+GType anjuta_pm_chooser_button_get_type (void) G_GNUC_CONST;
+
+
+GtkWidget * anjuta_pm_chooser_button_new (void);
+
+
+G_END_DECLS
+
+#endif /* _ANJUTA_PM_CHOOSER_BUTTON_H_ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]