mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-14 12:41:07 +00:00
7fa1133912
testpopover now shows several examples of icon buttons. https://bugzilla.gnome.org/show_bug.cgi?id=727477
143 lines
5.4 KiB
C
143 lines
5.4 KiB
C
#include <gtk/gtk.h>
|
|
|
|
static void
|
|
activate (GSimpleAction *action,
|
|
GVariant *parameter,
|
|
gpointer user_data)
|
|
{
|
|
g_print ("%s activated\n", g_action_get_name (G_ACTION (action)));
|
|
}
|
|
|
|
static GActionEntry entries[] = {
|
|
{ "cut", activate, NULL, NULL, NULL },
|
|
{ "copy", activate, NULL, NULL, NULL },
|
|
{ "paste", activate, NULL, NULL, NULL },
|
|
{ "bold", NULL, NULL, "false", NULL },
|
|
{ "italic", NULL, NULL, "false", NULL },
|
|
{ "strikethrough", NULL, NULL, "false", NULL },
|
|
{ "underline", NULL, NULL, "false", NULL },
|
|
{ "set-view", NULL, "s", "'list'", NULL },
|
|
{ "action1", activate, NULL, NULL, NULL },
|
|
{ "action2", NULL, NULL, "true", NULL },
|
|
{ "action2a", NULL, NULL, "false", NULL },
|
|
{ "action3", NULL, "s", "'three'", NULL },
|
|
{ "action4", activate, NULL, NULL, NULL },
|
|
{ "action5", activate, NULL, NULL, NULL },
|
|
{ "action6", activate, NULL, NULL, NULL },
|
|
{ "action7", activate, NULL, NULL, NULL },
|
|
{ "action8", activate, NULL, NULL, NULL },
|
|
{ "action9", activate, NULL, NULL, NULL },
|
|
{ "action10", activate, NULL, NULL, NULL }
|
|
};
|
|
|
|
int main (int argc, char *argv[])
|
|
{
|
|
GtkWidget *win;
|
|
GtkWidget *button;
|
|
GtkBuilder *builder;
|
|
GMenuModel *model;
|
|
GSimpleActionGroup *actions;
|
|
GtkWidget *overlay;
|
|
GtkWidget *grid;
|
|
GtkWidget *popover;
|
|
GtkWidget *label;
|
|
GtkWidget *check;
|
|
GtkWidget *combo;
|
|
GtkWidget *align;
|
|
|
|
gtk_init (&argc, &argv);
|
|
|
|
win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
gtk_window_set_default_size (GTK_WINDOW (win), 400, 600);
|
|
actions = g_simple_action_group_new ();
|
|
g_action_map_add_action_entries (G_ACTION_MAP (actions), entries, G_N_ELEMENTS (entries), NULL);
|
|
|
|
gtk_widget_insert_action_group (win, "top", G_ACTION_GROUP (actions));
|
|
|
|
overlay = gtk_overlay_new ();
|
|
gtk_container_add (GTK_CONTAINER (win), overlay);
|
|
|
|
align = gtk_alignment_new (0.5, 0.5, 0, 0);
|
|
grid = gtk_grid_new ();
|
|
gtk_widget_set_halign (grid, GTK_ALIGN_FILL);
|
|
gtk_widget_set_valign (grid, GTK_ALIGN_FILL);
|
|
gtk_grid_set_row_spacing (GTK_GRID (grid), 10);
|
|
gtk_grid_set_column_spacing (GTK_GRID (grid), 10);
|
|
gtk_container_add (GTK_CONTAINER (overlay), align);
|
|
gtk_container_add (GTK_CONTAINER (align), grid);
|
|
|
|
builder = gtk_builder_new_from_file ("popover.ui");
|
|
model = (GMenuModel *)gtk_builder_get_object (builder, "menu");
|
|
|
|
button = gtk_menu_button_new ();
|
|
gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), model);
|
|
gtk_menu_button_set_use_popover (GTK_MENU_BUTTON (button), TRUE);
|
|
|
|
popover = GTK_WIDGET (gtk_menu_button_get_popover (GTK_MENU_BUTTON (button)));
|
|
|
|
g_object_set (button, "margin", 10, NULL);
|
|
gtk_widget_set_halign (button, GTK_ALIGN_END);
|
|
gtk_widget_set_valign (button, GTK_ALIGN_START);
|
|
gtk_overlay_add_overlay (GTK_OVERLAY (overlay), button);
|
|
|
|
label = gtk_label_new ("Popover hexpand");
|
|
check = gtk_check_button_new ();
|
|
g_object_bind_property (popover, "hexpand",
|
|
check, "active",
|
|
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
|
gtk_grid_attach (GTK_GRID (grid), label , 1, 1, 1, 1);
|
|
gtk_grid_attach (GTK_GRID (grid), check, 2, 1, 1, 1);
|
|
|
|
label = gtk_label_new ("Popover vexpand");
|
|
check = gtk_check_button_new ();
|
|
g_object_bind_property (popover, "vexpand",
|
|
check, "active",
|
|
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
|
gtk_grid_attach (GTK_GRID (grid), label , 1, 2, 1, 1);
|
|
gtk_grid_attach (GTK_GRID (grid), check, 2, 2, 1, 1);
|
|
|
|
label = gtk_label_new ("Button direction");
|
|
combo = gtk_combo_box_text_new ();
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "up", "Up");
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "down", "Down");
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "left", "Left");
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "right", "Right");
|
|
|
|
g_object_bind_property (button, "direction",
|
|
combo, "active",
|
|
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
|
gtk_grid_attach (GTK_GRID (grid), label , 1, 3, 1, 1);
|
|
gtk_grid_attach (GTK_GRID (grid), combo, 2, 3, 1, 1);
|
|
|
|
label = gtk_label_new ("Button halign");
|
|
combo = gtk_combo_box_text_new ();
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "fill", "Fill");
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "start", "Start");
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "end", "End");
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "center", "Center");
|
|
g_object_bind_property (button, "halign",
|
|
combo, "active",
|
|
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
|
gtk_grid_attach (GTK_GRID (grid), label , 1, 4, 1, 1);
|
|
gtk_grid_attach (GTK_GRID (grid), combo, 2, 4, 1, 1);
|
|
|
|
label = gtk_label_new ("Button valign");
|
|
combo = gtk_combo_box_text_new ();
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "fill", "Fill");
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "start", "Start");
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "end", "End");
|
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "center", "Center");
|
|
g_object_bind_property (button, "valign",
|
|
combo, "active",
|
|
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
|
gtk_grid_attach (GTK_GRID (grid), label , 1, 5, 1, 1);
|
|
gtk_grid_attach (GTK_GRID (grid), combo, 2, 5, 1, 1);
|
|
|
|
|
|
gtk_widget_show_all (win);
|
|
|
|
gtk_main ();
|
|
|
|
return 0;
|
|
}
|