[anjuta] project-manager: Use new improvements in ProjectChooser button
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] project-manager: Use new improvements in ProjectChooser button
- Date: Wed, 11 Jan 2012 21:44:26 +0000 (UTC)
commit e6f9c1d48972dff912e1238febff790cca82d061
Author: SÃbastien Granjoux <seb sfo free fr>
Date: Wed Jan 11 21:25:18 2012 +0100
project-manager: Use new improvements in ProjectChooser button
plugins/project-manager/project-chooser.c | 108 ++++++++++++++++++-----------
1 files changed, 68 insertions(+), 40 deletions(-)
---
diff --git a/plugins/project-manager/project-chooser.c b/plugins/project-manager/project-chooser.c
index a76417a..e4ff86a 100644
--- a/plugins/project-manager/project-chooser.c
+++ b/plugins/project-manager/project-chooser.c
@@ -60,6 +60,56 @@ G_DEFINE_TYPE_WITH_CODE (AnjutaPmChooserButton, anjuta_pm_chooser_button, ANJUTA
/* Private functions
*---------------------------------------------------------------------------*/
+static gboolean
+is_node_valid (GtkTreeModel *model, GtkTreeIter *iter, AnjutaPmChooserButton *button)
+{
+ GbfTreeData *data = NULL;
+ gboolean valid = FALSE;
+
+ gtk_tree_model_get (model, iter, GBF_PROJECT_MODEL_COLUMN_DATA, &data, -1);
+ if ((data != NULL) && (data->node != NULL))
+ {
+ AnjutaPmChooserButtonPrivate *priv;
+ gint mask;
+
+ priv = G_TYPE_INSTANCE_GET_PRIVATE (button,
+ ANJUTA_TYPE_PM_CHOOSER_BUTTON,
+ AnjutaPmChooserButtonPrivate);
+
+ switch (priv->child)
+ {
+ case ANJUTA_PROJECT_ROOT:
+ /* Allow all nodes */
+ mask = -1;
+ break;
+ case ANJUTA_PROJECT_MODULE:
+ case ANJUTA_PROJECT_PACKAGE:
+ /* Only package parent */
+ mask = ANJUTA_PROJECT_CAN_ADD_PACKAGE;
+ break;
+ case ANJUTA_PROJECT_SOURCE:
+ /* Only package parent */
+ mask = ANJUTA_PROJECT_CAN_ADD_SOURCE;
+ break;
+ case ANJUTA_PROJECT_TARGET:
+ /* Only package parent */
+ mask = ANJUTA_PROJECT_CAN_ADD_TARGET;
+ break;
+ case ANJUTA_PROJECT_GROUP:
+ /* Only group parent */
+ mask = ANJUTA_PROJECT_CAN_ADD_GROUP;
+ break;
+ default:
+ mask = 0;
+ break;
+ }
+
+ valid = anjuta_project_node_get_state (ANJUTA_PROJECT_NODE (data->node)) & mask ? TRUE : FALSE;
+ }
+
+ return valid;
+}
+
static void
setup_nodes_combo_box (AnjutaPmChooserButton *view,
GbfProjectModel *model,
@@ -201,6 +251,7 @@ anjuta_pm_chooser_set_project_model (IAnjutaProjectChooser *iface, IAnjutaProjec
GtkTreeIter selected;
gboolean found;
GtkTreeModelFilterVisibleFunc func;
+ const gchar *label;
ANJUTA_PM_CHOOSER_BUTTON (iface)->priv->child = child_type & ANJUTA_PROJECT_TYPE_MASK;
@@ -209,34 +260,45 @@ anjuta_pm_chooser_set_project_model (IAnjutaProjectChooser *iface, IAnjutaProjec
case ANJUTA_PROJECT_ROOT:
/* Display all nodes */
func = is_project_node_but_shortcut;
+ label = _("<Select any project node>");
break;
case ANJUTA_PROJECT_MODULE:
/* Display all modules */
func = is_project_module_node;
+ label = _("<Select any module>");
break;
case ANJUTA_PROJECT_PACKAGE:
/* Display all targets */
func = is_project_target_or_group_node;
+ label = _("<Select a target>");
break;
case ANJUTA_PROJECT_SOURCE:
/* Display all targets */
func = is_project_target_or_group_node;
+ label = _("<Select a target>");
break;
case ANJUTA_PROJECT_TARGET:
/* Display all targets */
func = is_project_target_or_group_node;
+ label = _("<Select a target or a folder>");
break;
case ANJUTA_PROJECT_GROUP:
/* Display all groups */
func = is_project_group_node;
+ label = _("<Select a folder>");
break;
default:
/* Invalid type */
return FALSE;
}
+ anjuta_tree_combo_box_set_invalid_text (ANJUTA_TREE_COMBO_BOX (iface), label);
+ anjuta_tree_combo_box_set_valid_function (ANJUTA_TREE_COMBO_BOX (iface), (GtkTreeModelFilterVisibleFunc)is_node_valid, iface, NULL);
+
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),
@@ -256,50 +318,16 @@ anjuta_pm_chooser_get_selected (IAnjutaProjectChooser *iface, GError **error)
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)
+ if (is_node_valid (model, &iter, ANJUTA_PM_CHOOSER_BUTTON (iface)))
{
- 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);
- }
+ GbfTreeData *data;
+
+ gtk_tree_model_get (model, &iter, GBF_PROJECT_MODEL_COLUMN_DATA, &data, -1);
+
+ return anjuta_project_node_get_file (data->node);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]