| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- MODULE popover ;
- (*
- m2-GTK4 example - popovers.
- A button pops up a GtkPopover with some content, and a GtkMenuButton
- opens a GtkPopoverMenu built from a GMenu (with a working Quit item).
- Build: make examples
- Run: ./build/examples/popover
- *)
- FROM Gio IMPORT g_application_run, g_application_quit;
- FROM GtkApplication IMPORT gtk_application_new;
- FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title,
- gtk_window_set_default_size, gtk_window_set_child, gtk_window_present;
- FROM GtkBox IMPORT gtk_box_new, gtk_box_append, gtk_box_set_spacing;
- FROM GtkEnums IMPORT GtkVertical;
- FROM GtkLabel IMPORT gtk_label_new;
- FROM GtkButton IMPORT gtk_button_new_with_label;
- FROM GtkPopover IMPORT gtk_popover_new, gtk_popover_set_child,
- gtk_popover_popup;
- FROM GtkPopoverMenu IMPORT gtk_popover_menu_new_from_model;
- FROM GtkMenuButton IMPORT gtk_menu_button_new,
- gtk_menu_button_set_icon_name, gtk_menu_button_set_popover;
- FROM GtkWidget IMPORT gtk_widget_set_parent, gtk_widget_set_margin_top,
- gtk_widget_set_margin_bottom, gtk_widget_set_margin_start,
- gtk_widget_set_margin_end;
- FROM GMenu IMPORT g_menu_new, g_menu_append;
- FROM GSimpleAction IMPORT g_simple_action_new;
- FROM GActionMap IMPORT g_action_map_add_action;
- FROM GtkClosures IMPORT Connect2;
- FROM GtkUtils IMPORT Connect;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.Popover";
- VAR
- app, popover: ADDRESS;
- PROCEDURE OnQuit (action: ADDRESS; param: ADDRESS; data: ADDRESS);
- BEGIN
- g_application_quit(app)
- END OnQuit;
- PROCEDURE OnShow (button: ADDRESS; user: ADDRESS);
- BEGIN
- gtk_popover_popup(popover)
- END OnShow;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, box, button, content, menu, menuButton, action: ADDRESS;
- BEGIN
- action := g_simple_action_new("quit", NIL);
- Connect(action, "activate", ADR(OnQuit), NIL);
- g_action_map_add_action(application, action);
- button := gtk_button_new_with_label("Show popover");
- content := gtk_label_new("Popover content");
- popover := gtk_popover_new();
- gtk_popover_set_child(popover, content);
- gtk_widget_set_parent(popover, button);
- Connect2(button, "clicked", OnShow, NIL);
- menu := g_menu_new();
- g_menu_append(menu, "Quit", "app.quit");
- menuButton := gtk_menu_button_new();
- gtk_menu_button_set_icon_name(menuButton, "open-menu-symbolic");
- gtk_menu_button_set_popover(menuButton,
- gtk_popover_menu_new_from_model(menu));
- box := gtk_box_new(GtkVertical, 12);
- gtk_box_set_spacing(box, 12);
- gtk_widget_set_margin_top(box, 14);
- gtk_widget_set_margin_bottom(box, 14);
- gtk_widget_set_margin_start(box, 14);
- gtk_widget_set_margin_end(box, 14);
- gtk_box_append(box, button);
- gtk_box_append(box, menuButton);
- window := gtk_application_window_new(application);
- gtk_window_set_title(window, "m2-GTK4 Popover");
- gtk_window_set_default_size(window, 360, 160);
- gtk_window_set_child(window, box);
- gtk_window_present(window)
- END OnActivate;
- BEGIN
- app := gtk_application_new(AppId, 0);
- IF app = NIL THEN
- printf("gtk_application_new failed\n");
- HALT(1)
- END;
- Connect2(app, "activate", OnActivate, NIL);
- g_application_run(app, 0, NIL)
- END popover.
|