[anjuta/newproject: 184/189] Hide and/or disable unused menu item
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta/newproject: 184/189] Hide and/or disable unused menu item
- Date: Sat, 24 Apr 2010 09:59:29 +0000 (UTC)
commit 2c729c219070d1fcc24c8bebf36f58346e67e4ed
Author: Sébastien Granjoux <seb sfo free fr>
Date: Fri Apr 23 22:08:40 2010 +0200
Hide and/or disable unused menu item
libanjuta/anjuta-project.h | 9 +-
plugins/am-project/am-project.c | 32 ++++-
plugins/project-manager/plugin.c | 245 ++++++++++++++-----------------
plugins/project-manager/project-view.c | 2 +-
4 files changed, 150 insertions(+), 138 deletions(-)
---
diff --git a/libanjuta/anjuta-project.h b/libanjuta/anjuta-project.h
index 3f2294b..df06b16 100644
--- a/libanjuta/anjuta-project.h
+++ b/libanjuta/anjuta-project.h
@@ -69,7 +69,14 @@ typedef enum
ANJUTA_PROJECT_OK = 0,
ANJUTA_PROJECT_MODIFIED = 1 << 0, /* Node has been modified */
ANJUTA_PROJECT_INCOMPLETE = 1 << 1, /* Node is not fully loaded */
- ANJUTA_PROJECT_LOADING = 1 << 2 /* Node is send to the worker thread */
+ ANJUTA_PROJECT_LOADING = 1 << 2, /* Node is send to the worker thread */
+ ANJUTA_PROJECT_CAN_ADD_GROUP = 1 << 8,
+ ANJUTA_PROJECT_CAN_ADD_TARGET = 1 << 9,
+ ANJUTA_PROJECT_CAN_ADD_SOURCE = 1 << 10,
+ ANJUTA_PROJECT_CAN_ADD_MODULE = 1 << 11,
+ ANJUTA_PROJECT_CAN_ADD_PACKAGE = 1 << 12,
+ ANJUTA_PROJECT_CAN_REMOVE = 1 << 16,
+ ANJUTA_PROJECT_CAN_SAVE = 1 << 17
} AnjutaProjectNodeState;
typedef enum
diff --git a/plugins/am-project/am-project.c b/plugins/am-project/am-project.c
index 407bab8..75200a3 100644
--- a/plugins/am-project/am-project.c
+++ b/plugins/am-project/am-project.c
@@ -267,8 +267,22 @@ static AmpNodeInfo AmpNodeInformations[] = {
AM_TOKEN__SCRIPTS,
"_SCRIPTS",
"bin"},
-
- {{ANJUTA_PROJECT_TARGET | ANJUTA_PROJECT_UNKNOWN,
+
+ {{ANJUTA_PROJECT_MODULE,
+ N_("Module"),
+ ""},
+ ANJUTA_TOKEN_NONE,
+ NULL,
+ NULL},
+
+ {{ANJUTA_PROJECT_PACKAGE,
+ N_("Package"),
+ ""},
+ ANJUTA_TOKEN_NONE,
+ NULL,
+ NULL},
+
+ {{ANJUTA_PROJECT_UNKNOWN,
NULL,
NULL},
ANJUTA_TOKEN_NONE,
@@ -612,6 +626,8 @@ amp_root_new (GFile *file)
root->base.type = ANJUTA_PROJECT_ROOT;
root->base.properties = amp_get_project_property_list();
root->base.file = g_file_dup (file);
+ root->base.state = ANJUTA_PROJECT_CAN_ADD_GROUP |
+ ANJUTA_PROJECT_CAN_ADD_MODULE;
return g_node_new (root);
}
@@ -655,6 +671,7 @@ amp_package_new (const gchar *name)
package->base.type = ANJUTA_PROJECT_PACKAGE;
package->base.properties = amp_get_package_property_list();
package->base.name = g_strdup (name);
+ package->base.state = ANJUTA_PROJECT_CAN_REMOVE;
return g_node_new (package);
}
@@ -684,6 +701,8 @@ amp_module_new (AnjutaToken *token)
module->base.type = ANJUTA_PROJECT_MODULE;
module->base.properties = amp_get_module_property_list();
module->base.name = anjuta_token_evaluate (token);
+ module->base.state = ANJUTA_PROJECT_CAN_ADD_PACKAGE |
+ ANJUTA_PROJECT_CAN_REMOVE;
module->module = token;
return g_node_new (module);
@@ -808,6 +827,11 @@ amp_group_new (GFile *file, gboolean dist_only)
group->base.type = ANJUTA_PROJECT_GROUP;
group->base.properties = amp_get_group_property_list();
group->base.file = g_object_ref (file);
+ group->base.state = ANJUTA_PROJECT_CAN_ADD_GROUP |
+ ANJUTA_PROJECT_CAN_ADD_TARGET |
+ ANJUTA_PROJECT_CAN_ADD_SOURCE |
+ ANJUTA_PROJECT_CAN_REMOVE |
+ ANJUTA_PROJECT_CAN_SAVE;
group->dist_only = dist_only;
return g_node_new (group);
@@ -868,6 +892,9 @@ amp_target_new (const gchar *name, AnjutaProjectNodeType type, const gchar *inst
target->base.type = ANJUTA_PROJECT_TARGET | type;
target->base.properties = amp_get_target_property_list(type);
target->base.name = g_strdup (name);
+ target->base.state = ANJUTA_PROJECT_CAN_ADD_MODULE |
+ ANJUTA_PROJECT_CAN_ADD_SOURCE |
+ ANJUTA_PROJECT_CAN_REMOVE;
target->install = g_strdup (install);
target->flags = flags;
@@ -899,6 +926,7 @@ amp_source_new (GFile *file)
source->base.type = ANJUTA_PROJECT_SOURCE;
source->base.properties = amp_get_source_property_list();
source->base.file = g_object_ref (file);
+ source->base.state = ANJUTA_PROJECT_CAN_REMOVE;
return g_node_new (source);
}
diff --git a/plugins/project-manager/plugin.c b/plugins/project-manager/plugin.c
index 44edb67..4fa75da 100644
--- a/plugins/project-manager/plugin.c
+++ b/plugins/project-manager/plugin.c
@@ -43,6 +43,8 @@
#define DEFAULT_PROFILE "file://"PACKAGE_DATA_DIR"/profiles/default.profile"
#define PROJECT_PROFILE_NAME "project"
+#define INT_TO_GBOOLEAN(i) ((i) ? TRUE : FALSE)
+
typedef struct _PmPropertiesDialogInfo PmPropertiesDialogInfo;
typedef enum _PmPropertiesType
@@ -832,14 +834,19 @@ static GtkActionEntry pm_actions[] =
N_("_Project"), NULL, NULL, NULL
},
{
- "ActionProjectProperties", GTK_STOCK_PROPERTIES,
- N_("_Properties"), NULL, N_("Project properties"),
- G_CALLBACK (on_properties)
+ "ActionProjectAddGroup", GTK_STOCK_ADD,
+ N_("Add _Groupâ?¦"), NULL, N_("Add a group to project"),
+ G_CALLBACK (on_add_group)
},
{
- "ActionProjectRefresh", GTK_STOCK_REFRESH,
- N_("_Refresh"), NULL, N_("Refresh project manager tree"),
- G_CALLBACK (on_refresh)
+ "ActionProjectAddTarget", GTK_STOCK_ADD,
+ N_("Add _Targetâ?¦"), NULL, N_("Add a target to project"),
+ G_CALLBACK (on_add_target)
+ },
+ {
+ "ActionProjectAddSource", GTK_STOCK_ADD,
+ N_("Add _Source Fileâ?¦"), NULL, N_("Add a source file to project"),
+ G_CALLBACK (on_add_source)
},
{
"ActionProjectAddModule", GTK_STOCK_ADD,
@@ -852,19 +859,14 @@ static GtkActionEntry pm_actions[] =
G_CALLBACK (on_add_package)
},
{
- "ActionProjectAddGroup", GTK_STOCK_ADD,
- N_("Add _Groupâ?¦"), NULL, N_("Add a group to project"),
- G_CALLBACK (on_add_group)
- },
- {
- "ActionProjectAddTarget", GTK_STOCK_ADD,
- N_("Add _Targetâ?¦"), NULL, N_("Add a target to project"),
- G_CALLBACK (on_add_target)
+ "ActionProjectProperties", GTK_STOCK_PROPERTIES,
+ N_("_Properties"), NULL, N_("Project properties"),
+ G_CALLBACK (on_properties)
},
{
- "ActionProjectAddSource", GTK_STOCK_ADD,
- N_("Add _Source Fileâ?¦"), NULL, N_("Add a source file to project"),
- G_CALLBACK (on_add_source)
+ "ActionProjectRefresh", GTK_STOCK_REFRESH,
+ N_("_Refresh"), NULL, N_("Refresh project manager tree"),
+ G_CALLBACK (on_refresh)
},
{
"ActionFileCloseProject", NULL,
@@ -876,14 +878,19 @@ static GtkActionEntry pm_actions[] =
static GtkActionEntry popup_actions[] =
{
{
- "ActionPopupProjectProperties", GTK_STOCK_PROPERTIES,
- N_("_Properties"), NULL, N_("Properties of group/target/source"),
- G_CALLBACK (on_popup_properties)
+ "ActionPopupProjectAddGroup", GTK_STOCK_ADD,
+ N_("Add _Group"), NULL, N_("Add a group to project"),
+ G_CALLBACK (on_popup_add_group)
},
{
- "ActionPopupProjectAddToProject", GTK_STOCK_ADD,
- N_("_Add to Project"), NULL, N_("Add a source file to project"),
- G_CALLBACK (on_popup_add_to_project)
+ "ActionPopupProjectAddTarget", GTK_STOCK_ADD,
+ N_("Add _Target"), NULL, N_("Add a target to project"),
+ G_CALLBACK (on_popup_add_target)
+ },
+ {
+ "ActionPopupProjectAddSource", GTK_STOCK_ADD,
+ N_("Add _Source File"), NULL, N_("Add a source file to project"),
+ G_CALLBACK (on_popup_add_source)
},
{
"ActionPopupProjectAddModule", GTK_STOCK_ADD,
@@ -896,19 +903,14 @@ static GtkActionEntry popup_actions[] =
G_CALLBACK (on_popup_add_package)
},
{
- "ActionPopupProjectAddGroup", GTK_STOCK_ADD,
- N_("Add _Group"), NULL, N_("Add a group to project"),
- G_CALLBACK (on_popup_add_group)
- },
- {
- "ActionPopupProjectAddTarget", GTK_STOCK_ADD,
- N_("Add _Target"), NULL, N_("Add a target to project"),
- G_CALLBACK (on_popup_add_target)
+ "ActionPopupProjectAddToProject", GTK_STOCK_ADD,
+ N_("_Add to Project"), NULL, N_("Add a source file to project"),
+ G_CALLBACK (on_popup_add_to_project)
},
{
- "ActionPopupProjectAddSource", GTK_STOCK_ADD,
- N_("Add _Source File"), NULL, N_("Add a source file to project"),
- G_CALLBACK (on_popup_add_source)
+ "ActionPopupProjectProperties", GTK_STOCK_PROPERTIES,
+ N_("_Properties"), NULL, N_("Properties of group/target/source"),
+ G_CALLBACK (on_popup_properties)
},
{
"ActionPopupProjectRemove", GTK_STOCK_REMOVE,
@@ -922,54 +924,75 @@ update_ui (ProjectManagerPlugin *plugin)
{
AnjutaUI *ui;
gint j;
- GtkAction *action;
- IAnjutaProjectCapabilities caps;
+ GList *item;
+ gint main_caps;
+ gint popup_caps;
- caps = anjuta_pm_project_get_capabilities (plugin->project);
+ /* Close project is always here */
+ main_caps = 0x101;
+ popup_caps = 0x000;
+ /* Check for supported node */
+ if (anjuta_pm_project_is_open (plugin->project))
+ {
+ for (item = anjuta_pm_project_get_node_info (plugin->project); item != NULL; item = g_list_next (item))
+ {
+ AnjutaProjectNodeInfo *info = (AnjutaProjectNodeInfo *)item->data;
+
+ switch (info->type & ANJUTA_PROJECT_TYPE_MASK)
+ {
+ case ANJUTA_PROJECT_GROUP:
+ main_caps |= 0x2;
+ popup_caps |= 0x21;
+ break;
+ case ANJUTA_PROJECT_TARGET:
+ main_caps |= 0x4;
+ popup_caps |= 0x2;
+ break;
+ case ANJUTA_PROJECT_SOURCE:
+ main_caps |= 0x8;
+ popup_caps |= 0x24;
+ break;
+ case ANJUTA_PROJECT_MODULE:
+ main_caps |= 0x10;
+ popup_caps |= 0x8;
+ break;
+ case ANJUTA_PROJECT_PACKAGE:
+ main_caps |= 0x20;
+ popup_caps |= 0x10;
+ break;
+ default:
+ break;
+ }
+ }
+ /* Keep properties and refresh if a project is opened */
+ main_caps |= 0x0C0;
+ /* Keep properties and remove if a project is opened */
+ popup_caps |= 0x0C0;
+ }
+
ui = anjuta_shell_get_ui (ANJUTA_PLUGIN (plugin)->shell, NULL);
+
+ /* Main menu */
for (j = 0; j < G_N_ELEMENTS (pm_actions); j++)
{
+ GtkAction *action;
+
action = anjuta_ui_get_action (ui, "ActionGroupProjectManager",
- pm_actions[j].name);
- if (pm_actions[j].callback &&
- strcmp (pm_actions[j].name, "ActionFileCloseProject") != 0)
- {
- /* 'close' menuitem is never disabled */
- g_object_set (G_OBJECT (action), "sensitive",
- anjuta_pm_project_is_open (plugin->project), NULL);
- }
+ pm_actions[j].name);
+ g_object_set (G_OBJECT (action), "visible", INT_TO_GBOOLEAN (main_caps & 0x1), NULL);
+ main_caps >>= 1;
}
- /* Main menu */
- action = anjuta_ui_get_action (ui, "ActionGroupProjectManager",
- "ActionProjectAddGroup");
- g_object_set (G_OBJECT (action), "sensitive",
- (anjuta_pm_project_is_open (plugin->project) &&
- (caps & IANJUTA_PROJECT_CAN_ADD_GROUP)), NULL);
-
- action = anjuta_ui_get_action (ui, "ActionGroupProjectManager",
- "ActionProjectAddTarget");
- g_object_set (G_OBJECT (action), "sensitive",
- (anjuta_pm_project_is_open (plugin->project) &&
- (caps & IANJUTA_PROJECT_CAN_ADD_TARGET)), NULL);
-
- action = anjuta_ui_get_action (ui, "ActionGroupProjectManager",
- "ActionProjectAddSource");
- g_object_set (G_OBJECT (action), "sensitive",
- (anjuta_pm_project_is_open (plugin->project) &&
- (caps & IANJUTA_PROJECT_CAN_ADD_SOURCE)), NULL);
-
- /* Popup menus */
+ /* Popup menu */
for (j = 0; j < G_N_ELEMENTS (popup_actions); j++)
{
+ GtkAction *action;
+
action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
- popup_actions[j].name);
- if (popup_actions[j].callback)
- {
- g_object_set (G_OBJECT (action), "sensitive",
- anjuta_pm_project_is_open (plugin->project), NULL);
- }
+ popup_actions[j].name);
+ g_object_set (G_OBJECT (action), "visible", INT_TO_GBOOLEAN (popup_caps & 0x1), NULL);
+ popup_caps >>= 1;
}
}
@@ -980,82 +1003,36 @@ on_treeview_selection_changed (GtkTreeSelection *sel,
AnjutaUI *ui;
GtkAction *action;
AnjutaProjectNode *node;
+ gint state;
GFile *selected_file;
- IAnjutaProjectCapabilities caps;
ui = anjuta_shell_get_ui (ANJUTA_PLUGIN (plugin)->shell, NULL);
+ node = gbf_project_view_find_selected (GBF_PROJECT_VIEW (plugin->view),
+ ANJUTA_PROJECT_UNKNOWN);
+ state = node != NULL ? anjuta_project_node_get_state (node) : 0;
+
+ g_message ("state %x", state);
/* Popup menu */
action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
"ActionPopupProjectAddGroup");
- g_object_set (G_OBJECT (action), "sensitive", FALSE, NULL);
+ g_object_set (G_OBJECT (action), "sensitive", INT_TO_GBOOLEAN (state & ANJUTA_PROJECT_CAN_ADD_GROUP), NULL);
action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
"ActionPopupProjectAddTarget");
- g_object_set (G_OBJECT (action), "sensitive", FALSE, NULL);
+ g_object_set (G_OBJECT (action), "sensitive", INT_TO_GBOOLEAN (state & ANJUTA_PROJECT_CAN_ADD_TARGET), NULL);
action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
"ActionPopupProjectAddSource");
- g_object_set (G_OBJECT (action), "sensitive", FALSE, NULL);
+ g_object_set (G_OBJECT (action), "sensitive", INT_TO_GBOOLEAN (state & ANJUTA_PROJECT_CAN_ADD_SOURCE), NULL);
+ action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
+ "ActionPopupProjectAddModule");
+ g_object_set (G_OBJECT (action), "sensitive", INT_TO_GBOOLEAN (state & ANJUTA_PROJECT_CAN_ADD_MODULE), NULL);
+ action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
+ "ActionPopupProjectAddPackage");
+ g_object_set (G_OBJECT (action), "sensitive", INT_TO_GBOOLEAN (state & ANJUTA_PROJECT_CAN_ADD_PACKAGE), NULL);
action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
"ActionPopupProjectRemove");
- g_object_set (G_OBJECT (action), "sensitive", FALSE, NULL);
-
- caps = anjuta_pm_project_get_capabilities (plugin->project);
- node = gbf_project_view_find_selected (GBF_PROJECT_VIEW (plugin->view),
- ANJUTA_PROJECT_SOURCE);
- if (node && anjuta_project_node_get_type (node) == ANJUTA_PROJECT_SOURCE)
- {
- if (caps & IANJUTA_PROJECT_CAN_ADD_SOURCE)
- {
- action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
- "ActionPopupProjectAddSource");
- g_object_set (G_OBJECT (action), "sensitive", TRUE, NULL);
- }
- action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
- "ActionPopupProjectRemove");
- g_object_set (G_OBJECT (action), "sensitive", TRUE, NULL);
- goto finally;
- }
+ g_object_set (G_OBJECT (action), "sensitive", INT_TO_GBOOLEAN (state & ANJUTA_PROJECT_CAN_REMOVE), NULL);
- node = gbf_project_view_find_selected (GBF_PROJECT_VIEW (plugin->view),
- ANJUTA_PROJECT_TARGET);
- if (node && anjuta_project_node_get_type (node) == ANJUTA_PROJECT_TARGET)
- {
- if (caps & IANJUTA_PROJECT_CAN_ADD_SOURCE)
- {
- action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
- "ActionPopupProjectAddSource");
- g_object_set (G_OBJECT (action), "sensitive", TRUE, NULL);
- }
- action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
- "ActionPopupProjectRemove");
- g_object_set (G_OBJECT (action), "sensitive", TRUE, NULL);
- goto finally;
- }
-
- node = gbf_project_view_find_selected (GBF_PROJECT_VIEW (plugin->view),
- ANJUTA_PROJECT_GROUP);
- if (node && anjuta_project_node_get_type (node) == ANJUTA_PROJECT_GROUP)
- {
- if (caps & IANJUTA_PROJECT_CAN_ADD_GROUP)
- {
- action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
- "ActionPopupProjectAddGroup");
- g_object_set (G_OBJECT (action), "sensitive", TRUE, NULL);
- }
- if (caps & IANJUTA_PROJECT_CAN_ADD_TARGET)
- {
- action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
- "ActionPopupProjectAddTarget");
- g_object_set (G_OBJECT (action), "sensitive", TRUE, NULL);
- }
- action = anjuta_ui_get_action (ui, "ActionGroupProjectManagerPopup",
- "ActionPopupProjectRemove");
- g_object_set (G_OBJECT (action), "sensitive", TRUE, NULL);
- goto finally;
- }
-finally:
- selected_file =
- ianjuta_project_manager_get_selected (IANJUTA_PROJECT_MANAGER (plugin),
- NULL);
+ selected_file = node != NULL ? anjuta_project_node_get_file (node) : NULL;
if (selected_file)
{
GValue *value;
diff --git a/plugins/project-manager/project-view.c b/plugins/project-manager/project-view.c
index ebce808..110a38b 100644
--- a/plugins/project-manager/project-view.c
+++ b/plugins/project-manager/project-view.c
@@ -410,7 +410,7 @@ gbf_project_view_find_selected (GbfProjectView *view, AnjutaProjectNodeType type
node = gbf_project_model_get_node (GBF_PROJECT_MODEL (model), &iter);
/* walk up the hierarchy searching for a node of the given type */
- while ((node != NULL) && (anjuta_project_node_get_type (node) != type))
+ while ((node != NULL) && (type != ANJUTA_PROJECT_UNKNOWN) && (anjuta_project_node_get_type (node) != type))
{
node = anjuta_project_node_parent (node);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]