[libgda] Added the GdauiDataProxyInfo:ui-manager property
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] Added the GdauiDataProxyInfo:ui-manager property
- Date: Wed, 20 Jul 2011 20:37:44 +0000 (UTC)
commit bfefbf0a24adc9da873bfeeefe00f41e08d0ed36
Author: Vivien Malerba <malerba gnome-db org>
Date: Wed Jul 20 22:35:26 2011 +0200
Added the GdauiDataProxyInfo:ui-manager property
libgda-ui/gdaui-data-proxy-info.c | 146 +++++++++++++++++++++++++++----------
1 files changed, 107 insertions(+), 39 deletions(-)
---
diff --git a/libgda-ui/gdaui-data-proxy-info.c b/libgda-ui/gdaui-data-proxy-info.c
index 1db4175..e28abe2 100644
--- a/libgda-ui/gdaui-data-proxy-info.c
+++ b/libgda-ui/gdaui-data-proxy-info.c
@@ -58,8 +58,13 @@ struct _GdauiDataProxyInfoPriv
GdauiDataProxyInfoFlag flags; /* ORed values. */
GtkUIManager *uimanager;
+ GtkActionGroup *agroup; /* no ref held! */
+ guint merge_id_row_modif;
+ guint merge_id_row_move;
+ guint merge_id_chunck_change;
GtkWidget *buttons_bar;
+ GtkWidget *tool_item;
GtkWidget *current_sample;
GtkWidget *row_spin;
@@ -74,7 +79,8 @@ static GtkCssProvider *css_provider = NULL;
enum {
PROP_0,
PROP_DATA_PROXY,
- PROP_FLAGS
+ PROP_FLAGS,
+ PROP_UI_MANAGER
};
GType
@@ -122,6 +128,17 @@ gdaui_data_proxy_info_class_init (GdauiDataProxyInfoClass *klass)
g_param_spec_flags ("flags", NULL, NULL, GDAUI_TYPE_DATA_PROXY_INFO_FLAG,
GDAUI_DATA_PROXY_INFO_CURRENT_ROW,
G_PARAM_READABLE | G_PARAM_WRITABLE));
+ /**
+ * GdauiDataProxyInfo:ui-manager:
+ *
+ * Use this property to obtain the #GtkUIManager object internally used (to add new actions
+ * for example).
+ *
+ * Since: 4.2.9
+ */
+ g_object_class_install_property (object_class, PROP_UI_MANAGER,
+ g_param_spec_object ("ui-manager", NULL, NULL, GTK_TYPE_UI_MANAGER,
+ G_PARAM_READABLE));
}
static void
@@ -222,6 +239,19 @@ gdaui_data_proxy_info_dispose (GObject *object)
if (info->priv->idle_id)
g_source_remove (info->priv->idle_id);
+ if (info->priv->uimanager) {
+ if (info->priv->merge_id_row_modif)
+ gtk_ui_manager_remove_ui (info->priv->uimanager,
+ info->priv->merge_id_row_modif);
+ if (info->priv->merge_id_row_move)
+ gtk_ui_manager_remove_ui (info->priv->uimanager,
+ info->priv->merge_id_row_move);
+ if (info->priv->merge_id_chunck_change)
+ gtk_ui_manager_remove_ui (info->priv->uimanager,
+ info->priv->merge_id_chunck_change);
+ g_object_unref (info->priv->uimanager);
+ }
+
/* the private area itself */
g_free (info->priv);
info->priv = NULL;
@@ -293,17 +323,6 @@ gdaui_data_proxy_info_set_property (GObject *object,
break;
case PROP_FLAGS:
info->priv->flags = g_value_get_flags (value);
- if (info->priv->row_spin) {
- gtk_widget_destroy (info->priv->row_spin);
- info->priv->row_spin = NULL;
- }
- if (info->priv->buttons_bar) {
- gtk_widget_destroy (info->priv->buttons_bar);
- info->priv->buttons_bar = NULL;
- }
- if (info->priv->current_sample)
- info->priv->current_sample = NULL;
-
modif_buttons_make (info);
modif_buttons_update (info);
break;
@@ -326,11 +345,14 @@ gdaui_data_proxy_info_get_property (GObject *object,
if (info->priv) {
switch (param_id) {
case PROP_DATA_PROXY:
- g_value_set_pointer (value, info->priv->data_proxy);
+ g_value_set_object (value, info->priv->data_proxy);
break;
case PROP_FLAGS:
g_value_set_flags (value, info->priv->flags);
break;
+ case PROP_UI_MANAGER:
+ g_value_set_object (value, info->priv->uimanager);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
@@ -377,7 +399,7 @@ raw_grid_selection_changed_cb (G_GNUC_UNUSED GdauiRawGrid *grid, GdauiDataProxyI
*/
static const gchar *ui_row_modif =
"<ui>"
- " <toolbar name='ToolBar'>"
+ " <toolbar name='ToolBar'>"
" <toolitem action='ActionNew'/>"
" <toolitem action='ActionDelete'/>"
" <toolitem action='ActionUndelete'/>"
@@ -387,7 +409,7 @@ static const gchar *ui_row_modif =
"</ui>";
static const gchar *ui_row_move =
"<ui>"
- " <toolbar name='ToolBar'>"
+ " <toolbar name='ToolBar'>"
" <toolitem action='ActionFirstRecord'/>"
" <toolitem action='ActionPrevRecord'/>"
" <toolitem action='ActionNextRecord'/>"
@@ -397,7 +419,7 @@ static const gchar *ui_row_move =
"</ui>";
static const gchar *ui_chunck_change =
"<ui>"
- " <toolbar name='ToolBar'>"
+ " <toolbar name='ToolBar'>"
" <toolitem action='ActionFirstChunck'/>"
" <toolitem action='ActionPrevChunck'/>"
" <toolitem action='ActionNextChunck'/>"
@@ -417,7 +439,8 @@ modif_buttons_make (GdauiDataProxyInfo *info)
css_provider = gtk_css_provider_new ();
gtk_css_provider_load_from_data (css_provider,
"* {\n"
- "-GtkToolbar-shadow-type : GTK_SHADOW_NONE;\n"
+ "-GtkToolbar-shadow-type : none;\n"
+ "-GtkSpinButton-shadow-type : none;\n"
"xthickness : 0;\n"
"ythickness : 0}",
-1, NULL);
@@ -426,44 +449,90 @@ modif_buttons_make (GdauiDataProxyInfo *info)
if (! info->priv->data_proxy)
return;
+ if (info->priv->uimanager) {
+ if (info->priv->merge_id_row_modif) {
+ gtk_ui_manager_remove_ui (info->priv->uimanager, info->priv->merge_id_row_modif);
+ info->priv->merge_id_row_modif = 0;
+ }
+ if (info->priv->merge_id_row_move) {
+ gtk_ui_manager_remove_ui (info->priv->uimanager, info->priv->merge_id_row_move);
+ info->priv->merge_id_row_move = 0;
+ }
+ if (info->priv->merge_id_chunck_change) {
+ gtk_ui_manager_remove_ui (info->priv->uimanager, info->priv->merge_id_chunck_change);
+ info->priv->merge_id_chunck_change = 0;
+ }
+ gtk_ui_manager_remove_action_group (info->priv->uimanager, info->priv->agroup);
+ info->priv->agroup = NULL;
+ gtk_ui_manager_ensure_update (info->priv->uimanager);
+ }
+ else
+ info->priv->uimanager = gtk_ui_manager_new ();
+
+ info->priv->agroup = gdaui_data_proxy_get_actions_group (info->priv->data_proxy);
+ gtk_ui_manager_insert_action_group (info->priv->uimanager, info->priv->agroup, 0);
+
if (flags & (GDAUI_DATA_PROXY_INFO_ROW_MODIFY_BUTTONS |
GDAUI_DATA_PROXY_INFO_ROW_MOVE_BUTTONS |
GDAUI_DATA_PROXY_INFO_CHUNCK_CHANGE_BUTTONS)) {
- GtkActionGroup *actions;
GtkUIManager *ui;
-
- actions = gdaui_data_proxy_get_actions_group (info->priv->data_proxy);
- ui = gtk_ui_manager_new ();
- gtk_ui_manager_insert_action_group (ui, actions, 0);
+ ui = info->priv->uimanager;
if (flags & GDAUI_DATA_PROXY_INFO_ROW_MODIFY_BUTTONS)
- gtk_ui_manager_add_ui_from_string (ui, ui_row_modif, -1, NULL);
+ info->priv->merge_id_row_modif = gtk_ui_manager_add_ui_from_string (ui, ui_row_modif,
+ -1, NULL);
if (flags & GDAUI_DATA_PROXY_INFO_ROW_MOVE_BUTTONS)
- gtk_ui_manager_add_ui_from_string (ui, ui_row_move, -1, NULL);
+ info->priv->merge_id_row_move = gtk_ui_manager_add_ui_from_string (ui, ui_row_move,
+ -1, NULL);
if (flags & GDAUI_DATA_PROXY_INFO_CHUNCK_CHANGE_BUTTONS)
- gtk_ui_manager_add_ui_from_string (ui, ui_chunck_change, -1, NULL);
+ info->priv->merge_id_chunck_change = gtk_ui_manager_add_ui_from_string (ui, ui_chunck_change,
+ -1, NULL);
+ }
- info->priv->uimanager = ui;
+ if (! info->priv->buttons_bar) {
+ GtkUIManager *ui;
+ ui = info->priv->uimanager;
info->priv->buttons_bar = gtk_ui_manager_get_widget (ui, "/ToolBar");
- gtk_toolbar_set_icon_size (GTK_TOOLBAR (info->priv->buttons_bar), GTK_ICON_SIZE_SMALL_TOOLBAR);
+ gtk_toolbar_set_icon_size (GTK_TOOLBAR (info->priv->buttons_bar), GTK_ICON_SIZE_MENU);
g_object_set (G_OBJECT (info->priv->buttons_bar), "toolbar-style", GTK_TOOLBAR_ICONS, NULL);
gtk_style_context_add_provider (gtk_widget_get_style_context (info->priv->buttons_bar),
GTK_STYLE_PROVIDER (css_provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
gtk_box_pack_start (GTK_BOX (info), info->priv->buttons_bar, TRUE, TRUE, 0);
+ gtk_widget_show (info->priv->buttons_bar);
}
- else {
- info->priv->buttons_bar = gtk_toolbar_new ();
- gtk_box_pack_start (GTK_BOX (info), info->priv->buttons_bar, TRUE, TRUE, 0);
- }
- gtk_widget_show (info->priv->buttons_bar);
if (flags & GDAUI_DATA_PROXY_INFO_CURRENT_ROW) {
+ if (info->priv->tool_item) {
+ /* remove the current contents */
+ gtk_widget_destroy (gtk_bin_get_child (GTK_BIN (info->priv->tool_item)));
+ info->priv->row_spin = NULL;
+ info->priv->current_sample = NULL;
+ }
+ else {
+ GtkToolItem *ti;
+ ti = gtk_tool_item_new ();
+ gtk_toolbar_insert (GTK_TOOLBAR (info->priv->buttons_bar), ti, -1);
+ info->priv->tool_item = GTK_WIDGET (ti);
+ }
+
GtkWidget *toolwid;
if (flags & GDAUI_DATA_PROXY_INFO_ROW_MOVE_BUTTONS) {
toolwid = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-
+
/* read-write spin counter (mainly for forms) */
wid = gtk_spin_button_new_with_range (0, 1, 1);
+ PangoContext *pc;
+ PangoFontDescription *fd, *fdc;
+ pc = gtk_widget_get_pango_context (wid);
+ fd = pango_context_get_font_description (pc);
+ fdc = pango_font_description_copy (fd);
+ pango_font_description_set_size (fdc,
+ pango_font_description_get_size (fd) * .8);
+ gtk_widget_override_font (wid, fdc);
+ pango_font_description_free (fdc);
+ gtk_style_context_add_provider (gtk_widget_get_style_context (wid),
+ GTK_STYLE_PROVIDER (css_provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
gtk_spin_button_set_digits (GTK_SPIN_BUTTON (wid), 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wid), TRUE);
gtk_box_pack_start (GTK_BOX (toolwid), wid, FALSE, TRUE, 2);
@@ -471,7 +540,7 @@ modif_buttons_make (GdauiDataProxyInfo *info)
info->priv->row_spin = wid;
g_signal_connect (G_OBJECT (wid), "value-changed",
G_CALLBACK (row_spin_changed_cb), info);
-
+
/* rows counter */
wid = gtk_label_new (" /?");
info->priv->current_sample = wid;
@@ -484,12 +553,11 @@ modif_buttons_make (GdauiDataProxyInfo *info)
toolwid = wid;
}
- GtkToolItem *ti;
- ti = gtk_tool_item_new ();
- gtk_container_add (GTK_CONTAINER (ti), toolwid);
- gtk_toolbar_insert (GTK_TOOLBAR (info->priv->buttons_bar), ti, -1);
- gtk_widget_show_all (GTK_WIDGET (ti));
+ gtk_container_add (GTK_CONTAINER (info->priv->tool_item), toolwid);
+ gtk_widget_show_all (info->priv->tool_item);
}
+ else if (info->priv->tool_item)
+ gtk_widget_hide (info->priv->tool_item);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]