/** * gtk_radio_tool_button_new_with_stock_from_widget: (constructor) * @group: (allow-none): An existing #GtkRadioToolButton. * @stock_id: the name of a stock item * * Creates a new #GtkRadioToolButton adding it to the same group as @group. * The new #GtkRadioToolButton will contain an icon and label from the * stock item indicated by @stock_id. * * Return value: (transfer none): A new #GtkRadioToolButton * * Since: 2.4 **/ GtkToolItem * gtk_radio_tool_button_new_with_stock_from_widget (GtkRadioToolButton *group, const gchar *stock_id) { GSList *list = NULL; g_return_val_if_fail (group == NULL || GTK_IS_RADIO_TOOL_BUTTON (group), NULL); if (group != NULL) list = gtk_radio_tool_button_get_group (group); return gtk_radio_tool_button_new_from_stock (list, stock_id); }
/*# @method new_from_stock GtkRadioToolButton @brief Creates a new GtkRadioToolButton, adding it to group. @param group An existing GtkRadioToolButton, or nil to create a new group of buttons. @param stock_id the name of a stock item @return The new GtkRadioToolItem The new GtkRadioToolButton will contain an icon and label from the stock item indicated by stock_id. */ FALCON_FUNC RadioToolButton::new_from_stock( VMARG ) { const char* spec = "[GtkRadioToolItem],S"; Gtk::ArgCheck1 args( vm, spec ); CoreGObject* o_grp = args.getCoreGObject( 0, false ); const gchar* stock = args.getCString( 1 ); #ifndef NO_PARAMETER_CHECK if ( o_grp && !CoreObject_IS_DERIVED( o_grp, GtkRadioToolButton ) ) throw_inv_params( spec ); #endif GtkRadioToolButton* grp = o_grp ? (GtkRadioToolButton*) o_grp->getObject() : NULL; GtkToolItem* btn = grp ? gtk_radio_tool_button_new_with_stock_from_widget( grp, stock ) : gtk_radio_tool_button_new_from_stock( NULL, stock ); vm->retval( new Gtk::RadioToolButton( vm->findWKI( "GtkRadioToolButton" )->asClass(), (GtkRadioToolButton*) btn ) ); }
/** * gtk_radio_tool_button_new_with_stock_from_widget: (constructor) * @group: (allow-none): An existing #GtkRadioToolButton. * @stock_id: the name of a stock item * * Creates a new #GtkRadioToolButton adding it to the same group as @group. * The new #GtkRadioToolButton will contain an icon and label from the * stock item indicated by @stock_id. * * Returns: (transfer none): A new #GtkRadioToolButton * * Since: 2.4 * * Deprecated: 3.10: gtk_radio_tool_button_new_from_widget **/ GtkToolItem * gtk_radio_tool_button_new_with_stock_from_widget (GtkRadioToolButton *group, const gchar *stock_id) { GSList *list = NULL; GtkToolItem *item; g_return_val_if_fail (group == NULL || GTK_IS_RADIO_TOOL_BUTTON (group), NULL); if (group != NULL) list = gtk_radio_tool_button_get_group (group); G_GNUC_BEGIN_IGNORE_DEPRECATIONS; item = gtk_radio_tool_button_new_from_stock (list, stock_id); G_GNUC_END_IGNORE_DEPRECATIONS; return item; }
GtkWidget* ptk_toolbar_add_items_from_data( GtkWidget* toolbar, PtkToolItemEntry* entries, gpointer cb_data, GtkTooltips* tooltips ) { GtkWidget* btn; PtkToolItemEntry* ent; GtkWidget* image; GtkWidget* menu; GtkIconSize icon_size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (toolbar)); GSList* radio_group = NULL; for( ent = entries; ; ++ent ) { /* Normal tool item */ if( G_LIKELY( ent->stock_icon || ent->tooltip || ent->label ) ) { /* Stock item */ if( G_LIKELY(ent->stock_icon) ) image = gtk_image_new_from_stock( ent->stock_icon, icon_size ); else image = NULL; if( G_LIKELY( ! ent->menu ) ) { /* Normal button */ if( G_UNLIKELY( PTK_IS_STOCK_ITEM(ent) ) ) btn = GTK_WIDGET(gtk_tool_button_new_from_stock ( ent->label )); else btn = GTK_WIDGET(gtk_tool_button_new ( image, _(ent->label) )); } else if( G_UNLIKELY( PTK_IS_CHECK_TOOL_ITEM(ent) ) ) { if( G_UNLIKELY( PTK_IS_STOCK_ITEM(ent) ) ) btn = GTK_WIDGET(gtk_toggle_tool_button_new_from_stock(ent->label)); else { btn = GTK_WIDGET(gtk_toggle_tool_button_new ()); gtk_tool_button_set_icon_widget( GTK_TOOL_BUTTON(btn), image ); gtk_tool_button_set_label(GTK_TOOL_BUTTON(btn), _(ent->label)); } } else if( G_UNLIKELY( PTK_IS_RADIO_TOOL_ITEM(ent) ) ) { if( G_UNLIKELY( PTK_IS_STOCK_ITEM(ent) ) ) btn = GTK_WIDGET(gtk_radio_tool_button_new_from_stock( radio_group, ent->label )); else { btn = GTK_WIDGET(gtk_radio_tool_button_new( radio_group )); if( G_LIKELY( PTK_IS_RADIO_TOOL_ITEM( (ent + 1) ) ) ) radio_group = gtk_radio_tool_button_get_group( GTK_RADIO_TOOL_BUTTON(btn) ); else radio_group = NULL; gtk_tool_button_set_icon_widget( GTK_TOOL_BUTTON(btn), image ); gtk_tool_button_set_label(GTK_TOOL_BUTTON(btn), _(ent->label)); } } else if( ent->menu ) { if( G_UNLIKELY( PTK_IS_STOCK_ITEM(ent) ) ) btn = GTK_WIDGET(gtk_menu_tool_button_new_from_stock ( ent->label )); else { btn = GTK_WIDGET(gtk_menu_tool_button_new ( image, _(ent->label) )); if( G_LIKELY( 3 < (int)ent->menu ) ) { /* Sub menu */ menu = ptk_menu_new_from_data( ent->menu, cb_data, NULL ); gtk_menu_tool_button_set_menu( GTK_MENU_TOOL_BUTTON(btn), menu ); } } } if( G_LIKELY(ent->callback) ) { /* Callback */ if( G_LIKELY( ent->menu == NULL || ent->menu == PTK_EMPTY_MENU) ) g_signal_connect( btn, "clicked", ent->callback, cb_data); else g_signal_connect( btn, "toggled", ent->callback, cb_data); } if( G_LIKELY(ent->tooltip) ) gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (btn), tooltips, _(ent->tooltip), NULL); } else { if( ! PTK_IS_SEPARATOR_TOOL_ITEM(ent) ) /* End of menu */ break; btn = (GtkWidget*)gtk_separator_tool_item_new (); } gtk_toolbar_insert ( GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(btn), -1 ); if( G_UNLIKELY(ent->ret) ) {/* Return */ *ent->ret = btn; ent->ret = NULL; } } return NULL; }
gint main (gint argc, gchar **argv) { GtkWidget *window, *toolbar, *table, *treeview, *scrolled_window; GtkWidget *hbox, *hbox1, *hbox2, *checkbox, *option_menu, *menu; gint i; static const gchar *toolbar_styles[] = { "icons", "text", "both (vertical)", "both (horizontal)" }; GtkToolItem *item; GtkListStore *store; GtkWidget *image; GtkWidget *menuitem; GtkWidget *button; GtkWidget *label; GIcon *gicon; GSList *group; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (window, "destroy", G_CALLBACK(gtk_main_quit), NULL); table = gtk_table_new (4, 2, FALSE); gtk_container_add (GTK_CONTAINER (window), table); toolbar = gtk_toolbar_new (); gtk_table_attach (GTK_TABLE (table), toolbar, 0,2, 0,1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); hbox1 = gtk_hbox_new (FALSE, 3); gtk_container_set_border_width (GTK_CONTAINER (hbox1), 5); gtk_table_attach (GTK_TABLE (table), hbox1, 1,2, 1,2, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); hbox2 = gtk_hbox_new (FALSE, 2); gtk_container_set_border_width (GTK_CONTAINER (hbox2), 5); gtk_table_attach (GTK_TABLE (table), hbox2, 1,2, 2,3, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); checkbox = gtk_check_button_new_with_mnemonic("_Vertical"); gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0); g_signal_connect (checkbox, "toggled", G_CALLBACK (change_orientation), toolbar); checkbox = gtk_check_button_new_with_mnemonic("_Show Arrow"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), TRUE); gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0); g_signal_connect (checkbox, "toggled", G_CALLBACK (change_show_arrow), toolbar); checkbox = gtk_check_button_new_with_mnemonic("_Set Toolbar Style:"); g_signal_connect (checkbox, "toggled", G_CALLBACK (set_toolbar_style_toggled), toolbar); gtk_box_pack_start (GTK_BOX (hbox1), checkbox, FALSE, FALSE, 0); option_menu = gtk_option_menu_new(); gtk_widget_set_sensitive (option_menu, FALSE); g_object_set_data (G_OBJECT (checkbox), "option-menu", option_menu); menu = gtk_menu_new(); for (i = 0; i < G_N_ELEMENTS (toolbar_styles); i++) { GtkWidget *menuitem; menuitem = gtk_menu_item_new_with_label (toolbar_styles[i]); gtk_container_add (GTK_CONTAINER (menu), menuitem); gtk_widget_show (menuitem); } gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu); gtk_option_menu_set_history (GTK_OPTION_MENU (option_menu), GTK_TOOLBAR (toolbar)->style); gtk_box_pack_start (GTK_BOX (hbox2), option_menu, FALSE, FALSE, 0); g_signal_connect (option_menu, "changed", G_CALLBACK (change_toolbar_style), toolbar); checkbox = gtk_check_button_new_with_mnemonic("_Set Icon Size:"); g_signal_connect (checkbox, "toggled", G_CALLBACK (set_icon_size_toggled), toolbar); gtk_box_pack_start (GTK_BOX (hbox2), checkbox, FALSE, FALSE, 0); option_menu = gtk_option_menu_new(); g_object_set_data (G_OBJECT (checkbox), "option-menu", option_menu); gtk_widget_set_sensitive (option_menu, FALSE); menu = gtk_menu_new(); menuitem = gtk_menu_item_new_with_label ("small toolbar"); g_object_set_data (G_OBJECT (menuitem), "value-id", GINT_TO_POINTER (GTK_ICON_SIZE_SMALL_TOOLBAR)); gtk_container_add (GTK_CONTAINER (menu), menuitem); gtk_widget_show (menuitem); menuitem = gtk_menu_item_new_with_label ("large toolbar"); g_object_set_data (G_OBJECT (menuitem), "value-id", GINT_TO_POINTER (GTK_ICON_SIZE_LARGE_TOOLBAR)); gtk_container_add (GTK_CONTAINER (menu), menuitem); gtk_widget_show (menuitem); gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu); gtk_box_pack_start (GTK_BOX (hbox2), option_menu, FALSE, FALSE, 0); g_signal_connect (option_menu, "changed", G_CALLBACK (icon_size_history_changed), toolbar); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_table_attach (GTK_TABLE (table), scrolled_window, 1,2, 3,4, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); store = create_items_list (&treeview); gtk_container_add (GTK_CONTAINER (scrolled_window), treeview); item = gtk_tool_button_new_from_stock (GTK_STOCK_NEW); gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), "Custom label"); gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), NULL); add_item_to_list (store, item, "New"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); gdk_threads_add_timeout (3000, (GSourceFunc) timeout_cb, item); gtk_tool_item_set_expand (item, TRUE); menu = gtk_menu_new (); for (i = 0; i < 20; i++) { char *text; text = g_strdup_printf ("Menuitem %d", i); menuitem = gtk_menu_item_new_with_label (text); g_free (text); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); } item = gtk_menu_tool_button_new_from_stock (GTK_STOCK_OPEN); gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (item), menu); add_item_to_list (store, item, "Open"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); gdk_threads_add_timeout (3000, (GSourceFunc) timeout_cb1, item); menu = gtk_menu_new (); for (i = 0; i < 20; i++) { char *text; text = g_strdup_printf ("A%d", i); menuitem = gtk_menu_item_new_with_label (text); g_free (text); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); } item = gtk_menu_tool_button_new_from_stock (GTK_STOCK_GO_BACK); gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (item), menu); add_item_to_list (store, item, "BackWithHistory"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_separator_tool_item_new (); add_item_to_list (store, item, "-----"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_tool_button_new_from_stock (GTK_STOCK_REFRESH); add_item_to_list (store, item, "Refresh"); g_signal_connect (item, "clicked", G_CALLBACK (reload_clicked), NULL); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG); item = gtk_tool_item_new (); gtk_widget_show (image); gtk_container_add (GTK_CONTAINER (item), image); add_item_to_list (store, item, "(Custom Item)"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK); add_item_to_list (store, item, "Back"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_separator_tool_item_new (); add_item_to_list (store, item, "-----"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_FORWARD); add_item_to_list (store, item, "Forward"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_toggle_tool_button_new_from_stock (GTK_STOCK_BOLD); g_signal_connect (item, "toggled", G_CALLBACK (bold_toggled), NULL); add_item_to_list (store, item, "Bold"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE); item = gtk_separator_tool_item_new (); add_item_to_list (store, item, "-----"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); gtk_tool_item_set_expand (item, TRUE); gtk_separator_tool_item_set_draw (GTK_SEPARATOR_TOOL_ITEM (item), FALSE); g_assert (gtk_toolbar_get_nth_item (GTK_TOOLBAR (toolbar), 0) != 0); item = gtk_radio_tool_button_new_from_stock (NULL, GTK_STOCK_JUSTIFY_LEFT); group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item)); add_item_to_list (store, item, "Left"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_radio_tool_button_new_from_stock (group, GTK_STOCK_JUSTIFY_CENTER); make_prop_editor (G_OBJECT (item)); group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item)); add_item_to_list (store, item, "Center"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_radio_tool_button_new_from_stock (group, GTK_STOCK_JUSTIFY_RIGHT); add_item_to_list (store, item, "Right"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); item = gtk_tool_button_new (gtk_image_new_from_file ("apple-red.png"), "_Apple"); add_item_to_list (store, item, "Apple"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (item), TRUE); gicon = g_content_type_get_icon ("video/ogg"); image = gtk_image_new_from_gicon (gicon, GTK_ICON_SIZE_LARGE_TOOLBAR); g_object_unref (gicon); item = gtk_tool_button_new (image, "Video"); add_item_to_list (store, item, "Video"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); image = gtk_image_new_from_icon_name ("utility-terminal", GTK_ICON_SIZE_LARGE_TOOLBAR); item = gtk_tool_button_new (image, "Terminal"); add_item_to_list (store, item, "Terminal"); gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); hbox = gtk_hbox_new (FALSE, 5); gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); gtk_table_attach (GTK_TABLE (table), hbox, 1,2, 4,5, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); button = gtk_button_new_with_label ("Drag me to the toolbar"); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); label = gtk_label_new ("Drop index:"); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); label = gtk_label_new (""); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); checkbox = gtk_check_button_new_with_mnemonic("_Right to left"); if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), FALSE); g_signal_connect (checkbox, "toggled", G_CALLBACK (rtl_toggled), NULL); gtk_box_pack_end (GTK_BOX (hbox), checkbox, FALSE, FALSE, 0); gtk_drag_source_set (button, GDK_BUTTON1_MASK, target_table, G_N_ELEMENTS (target_table), GDK_ACTION_MOVE); gtk_drag_dest_set (toolbar, GTK_DEST_DEFAULT_DROP, target_table, G_N_ELEMENTS (target_table), GDK_ACTION_MOVE); g_signal_connect (toolbar, "drag_motion", G_CALLBACK (toolbar_drag_motion), NULL); g_signal_connect (toolbar, "drag_leave", G_CALLBACK (toolbar_drag_leave), NULL); g_signal_connect (toolbar, "drag_drop", G_CALLBACK (toolbar_drag_drop), label); gtk_widget_show_all (window); make_prop_editor (G_OBJECT (toolbar)); g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (toolbar, "popup_context_menu", G_CALLBACK (popup_context_menu), NULL); gtk_main (); return 0; }