void glade_gtk_tool_palette_get_child_property (GladeWidgetAdaptor * adaptor, GObject * container, GObject * child, const gchar * property_name, GValue * value) { g_return_if_fail (GTK_IS_TOOL_PALETTE (container)); if (GTK_IS_TOOL_ITEM_GROUP (child) == FALSE) return; if (strcmp (property_name, "position") == 0) { g_value_set_int (value, gtk_tool_palette_get_group_position (GTK_TOOL_PALETTE (container), GTK_TOOL_ITEM_GROUP (child))); } else { /* Chain Up */ GWA_GET_CLASS (GTK_TYPE_CONTAINER)->child_get_property (adaptor, container, child, property_name, value); } }
void glade_gtk_tool_palette_add_child (GladeWidgetAdaptor * adaptor, GObject * object, GObject * child) { GtkToolPalette *palette; GtkToolItemGroup *group; g_return_if_fail (GTK_IS_TOOL_PALETTE (object)); g_return_if_fail (GTK_IS_TOOL_ITEM_GROUP (child)); palette = GTK_TOOL_PALETTE (object); group = GTK_TOOL_ITEM_GROUP (child); gtk_container_add (GTK_CONTAINER (palette), GTK_WIDGET (group)); if (glade_util_object_is_loading (object)) { GladeWidget *gchild = glade_widget_get_from_gobject (child); /* Packing props arent around when parenting during a glade_widget_dup() */ if (gchild && glade_widget_get_packing_properties (gchild)) glade_widget_pack_property_set (gchild, "position", gtk_tool_palette_get_group_position (palette, group)); } }
static void load_stock_items (GtkToolPalette *palette) { GtkWidget *group_af = gtk_tool_item_group_new ("Stock Icons (A-F)"); GtkWidget *group_gn = gtk_tool_item_group_new ("Stock Icons (G-N)"); GtkWidget *group_or = gtk_tool_item_group_new ("Stock Icons (O-R)"); GtkWidget *group_sz = gtk_tool_item_group_new ("Stock Icons (S-Z)"); GtkWidget *group = NULL; GtkToolItem *item; GSList *stock_ids; GSList *iter; stock_ids = gtk_stock_list_ids (); stock_ids = g_slist_sort (stock_ids, (GCompareFunc) strcmp); gtk_container_add (GTK_CONTAINER (palette), group_af); gtk_container_add (GTK_CONTAINER (palette), group_gn); gtk_container_add (GTK_CONTAINER (palette), group_or); gtk_container_add (GTK_CONTAINER (palette), group_sz); for (iter = stock_ids; iter; iter = g_slist_next (iter)) { GtkStockItem stock_item; gchar *id = iter->data; switch (id[4]) { case 'a': group = group_af; break; case 'g': group = group_gn; break; case 'o': group = group_or; break; case 's': group = group_sz; break; } item = gtk_tool_button_new_from_stock (id); gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM (item), id); gtk_tool_item_set_is_important (GTK_TOOL_ITEM (item), TRUE); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); if (!gtk_stock_lookup (id, &stock_item) || !stock_item.label) gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), id); g_free (id); } g_slist_free (stock_ids); }
static void load_icon_items (GtkToolPalette *palette) { GList *contexts; GList *l; GtkIconTheme *icon_theme; icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (palette))); contexts = gtk_icon_theme_list_contexts (icon_theme); for (l = contexts; l; l = g_list_next (l)) { gchar *context = l->data; GList *icon_names; GList *ll; const guint max_icons = 10; guint icons_count = 0; GtkWidget *group = gtk_tool_item_group_new (context); gtk_container_add (GTK_CONTAINER (palette), group); if (g_strcmp0 (context, "Animations") == 0) continue; g_message ("Got context '%s'", context); icon_names = gtk_icon_theme_list_icons (icon_theme, context); icon_names = g_list_sort (icon_names, (GCompareFunc) strcmp); for (ll = icon_names; ll; ll = g_list_next (ll)) { GtkToolItem *item; gchar *id = ll->data; if (g_str_equal (id, "emblem-desktop")) continue; if (g_str_has_suffix (id, "-symbolic")) continue; g_message ("Got id '%s'", id); item = gtk_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), id); gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM (item), id); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); /* Prevent us having an insane number of icons: */ ++icons_count; if(icons_count >= max_icons) break; } g_list_free_full (icon_names, g_free); } g_list_free_full (contexts, g_free); }
static void palette_drop_item (GtkToolItem *drag_item, GtkToolItemGroup *drop_group, gint x, gint y) { GtkWidget *drag_group = gtk_widget_get_parent (GTK_WIDGET (drag_item)); GtkToolItem *drop_item = gtk_tool_item_group_get_drop_item (drop_group, x, y); gint drop_position = -1; if (drop_item) drop_position = gtk_tool_item_group_get_item_position (GTK_TOOL_ITEM_GROUP (drop_group), drop_item); if (GTK_TOOL_ITEM_GROUP (drag_group) != drop_group) { gboolean homogeneous, expand, fill, new_row; g_object_ref (drag_item); gtk_container_child_get (GTK_CONTAINER (drag_group), GTK_WIDGET (drag_item), "homogeneous", &homogeneous, "expand", &expand, "fill", &fill, "new-row", &new_row, NULL); gtk_container_remove (GTK_CONTAINER (drag_group), GTK_WIDGET (drag_item)); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (drop_group), drag_item, drop_position); gtk_container_child_set (GTK_CONTAINER (drop_group), GTK_WIDGET (drag_item), "homogeneous", homogeneous, "expand", expand, "fill", fill, "new-row", new_row, NULL); g_object_unref (drag_item); } else gtk_tool_item_group_set_item_position (GTK_TOOL_ITEM_GROUP (drop_group), drag_item, drop_position); }
static void palette_drag_data_received (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection, guint info, guint time, gpointer data) { GtkAllocation allocation; GtkToolItemGroup *drop_group = NULL; GtkWidget *drag_palette = gtk_drag_get_source_widget (context); GtkWidget *drag_item = NULL; while (drag_palette && !GTK_IS_TOOL_PALETTE (drag_palette)) drag_palette = gtk_widget_get_parent (drag_palette); if (drag_palette) { drag_item = gtk_tool_palette_get_drag_item (GTK_TOOL_PALETTE (drag_palette), selection); drop_group = gtk_tool_palette_get_drop_group (GTK_TOOL_PALETTE (widget), x, y); } if (GTK_IS_TOOL_ITEM_GROUP (drag_item)) palette_drop_group (GTK_TOOL_PALETTE (drag_palette), GTK_TOOL_ITEM_GROUP (drag_item), drop_group); else if (GTK_IS_TOOL_ITEM (drag_item) && drop_group) { gtk_widget_get_allocation (GTK_WIDGET (drop_group), &allocation); palette_drop_item (GTK_TOOL_ITEM (drag_item), drop_group, x - allocation.x, y - allocation.y); } }
static void load_toggle_items (GtkToolPalette *palette) { GSList *toggle_group = NULL; GtkToolItem *item; GtkWidget *group; char *label; int i; group = gtk_tool_item_group_new ("Radio Item"); gtk_container_add (GTK_CONTAINER (palette), group); for (i = 1; i <= 10; ++i) { label = g_strdup_printf ("#%d", i); item = gtk_radio_tool_button_new (toggle_group); gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), label); g_free (label); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); toggle_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item)); } }
void glade_gtk_tool_palette_set_child_property (GladeWidgetAdaptor * adaptor, GObject * container, GObject * child, const gchar * property_name, GValue * value) { g_return_if_fail (GTK_IS_TOOL_PALETTE (container)); g_return_if_fail (GTK_IS_TOOL_ITEM_GROUP (child)); g_return_if_fail (property_name != NULL || value != NULL); if (strcmp (property_name, "position") == 0) { GtkToolPalette *palette = GTK_TOOL_PALETTE (container); GList *children; gint position, size; children = glade_util_container_get_all_children (GTK_CONTAINER (palette)); size = g_list_length (children); g_list_free (children); position = g_value_get_int (value); if (position >= size) position = size - 1; gtk_tool_palette_set_group_position (palette, GTK_TOOL_ITEM_GROUP (child), position); } else /* Chain Up */ GWA_GET_CLASS (GTK_TYPE_CONTAINER)->child_set_property (adaptor, container, child, property_name, value); }
int main(int argc, char *argv[]) { gtk_init(&argc, &argv); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL); GtkWidget *toolpalette = gtk_tool_palette_new(); gtk_container_add(GTK_CONTAINER(window), toolpalette); GtkWidget *toolitemgroup; GtkToolItem *toolitem; toolitemgroup = gtk_tool_item_group_new("Group 1"); gtk_container_add(GTK_CONTAINER(toolpalette), toolitemgroup); toolitem = gtk_tool_button_new_from_stock(GTK_STOCK_HOME); gtk_tool_item_group_insert(GTK_TOOL_ITEM_GROUP(toolitemgroup), toolitem, -1); toolitem = gtk_tool_button_new_from_stock(GTK_STOCK_ABOUT); gtk_tool_item_group_insert(GTK_TOOL_ITEM_GROUP(toolitemgroup), toolitem, -1); toolitem = gtk_tool_button_new_from_stock(GTK_STOCK_HELP); gtk_tool_item_group_insert(GTK_TOOL_ITEM_GROUP(toolitemgroup), toolitem, -1); toolitemgroup = gtk_tool_item_group_new("Group 2"); gtk_container_add(GTK_CONTAINER(toolpalette), toolitemgroup); toolitem = gtk_tool_button_new_from_stock(GTK_STOCK_ADD); gtk_tool_item_group_insert(GTK_TOOL_ITEM_GROUP(toolitemgroup), toolitem, -1); toolitem = gtk_tool_button_new_from_stock(GTK_STOCK_EDIT); gtk_tool_item_group_insert(GTK_TOOL_ITEM_GROUP(toolitemgroup), toolitem, -1); toolitem = gtk_tool_button_new_from_stock(GTK_STOCK_DELETE); gtk_tool_item_group_insert(GTK_TOOL_ITEM_GROUP(toolitemgroup), toolitem, -1); gtk_widget_show_all(window); gtk_main(); return 0; }
GtkToolItemGroup* cast_GtkToolItemGroup(GtkWidget* widget) { return GTK_TOOL_ITEM_GROUP(widget); }
static void load_special_items (GtkToolPalette *palette) { GtkToolItem *item; GtkWidget *group; GtkWidget *label_button; group = gtk_tool_item_group_new (NULL); label_button = gtk_button_new_with_label ("Advanced Features"); gtk_widget_show (label_button); gtk_tool_item_group_set_label_widget (GTK_TOOL_ITEM_GROUP (group), label_button); gtk_container_add (GTK_CONTAINER (palette), group); item = create_entry_item ("homogeneous=FALSE"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item), "homogeneous", FALSE, NULL); item = create_entry_item ("homogeneous=FALSE, expand=TRUE"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item), "homogeneous", FALSE, "expand", TRUE, NULL); item = create_entry_item ("homogeneous=FALSE, expand=TRUE, fill=FALSE"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item), "homogeneous", FALSE, "expand", TRUE, "fill", FALSE, NULL); item = create_entry_item ("homogeneous=FALSE, expand=TRUE, new-row=TRUE"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item), "homogeneous", FALSE, "expand", TRUE, "new-row", TRUE, NULL); item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_UP); gtk_tool_item_set_tooltip_text (item, "Show on vertical palettes only"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_tool_item_set_visible_horizontal (item, FALSE); item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_FORWARD); gtk_tool_item_set_tooltip_text (item, "Show on horizontal palettes only"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_tool_item_set_visible_vertical (item, FALSE); item = gtk_tool_button_new_from_stock (GTK_STOCK_DELETE); gtk_tool_item_set_tooltip_text (item, "Do not show at all"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_widget_set_no_show_all (GTK_WIDGET (item), TRUE); item = gtk_tool_button_new_from_stock (GTK_STOCK_FULLSCREEN); gtk_tool_item_set_tooltip_text (item, "Expanded this item"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item), "homogeneous", FALSE, "expand", TRUE, NULL); item = gtk_tool_button_new_from_stock (GTK_STOCK_HELP); gtk_tool_item_set_tooltip_text (item, "A regular item"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); }
static void load_special_items (GtkToolPalette *palette) { GtkToolItem *item; GtkWidget *group; GtkWidget *label_button; group = gtk_tool_item_group_new (NULL); label_button = gtk_button_new_with_label ("Advanced Features"); gtk_widget_show (label_button); gtk_tool_item_group_set_label_widget (GTK_TOOL_ITEM_GROUP (group), label_button); gtk_container_add (GTK_CONTAINER (palette), group); item = create_entry_item ("homogeneous=FALSE"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item), "homogeneous", FALSE, NULL); item = create_entry_item ("homogeneous=FALSE, expand=TRUE"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item), "homogeneous", FALSE, "expand", TRUE, NULL); item = create_entry_item ("homogeneous=FALSE, expand=TRUE, fill=FALSE"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item), "homogeneous", FALSE, "expand", TRUE, "fill", FALSE, NULL); item = create_entry_item ("homogeneous=FALSE, expand=TRUE, new-row=TRUE"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item), "homogeneous", FALSE, "expand", TRUE, "new-row", TRUE, NULL); item = gtk_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "go-up"); gtk_tool_item_set_tooltip_text (item, "Show on vertical palettes only"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_tool_item_set_visible_horizontal (item, FALSE); item = gtk_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "go-next"); gtk_tool_item_set_tooltip_text (item, "Show on horizontal palettes only"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_tool_item_set_visible_vertical (item, FALSE); item = gtk_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "edit-delete"); gtk_tool_item_set_tooltip_text (item, "Do not show at all"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_widget_set_no_show_all (GTK_WIDGET (item), TRUE); item = gtk_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "view-fullscreen"); gtk_tool_item_set_tooltip_text (item, "Expanded this item"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item), "homogeneous", FALSE, "expand", TRUE, NULL); item = gtk_tool_button_new (NULL, NULL); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "help-browser"); gtk_tool_item_set_tooltip_text (item, "A regular item"); gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1); }