static void line_length_changed (GtkSpinButton *spin, GtkFlowBox *flowbox) { gint length = gtk_spin_button_get_value_as_int (spin); gtk_flow_box_set_min_children_per_line (flowbox, length); }
static GtkWidget * add_section (GtkWidget *box, const gchar *heading) { GtkWidget *label; GtkWidget *section; label = gtk_label_new (heading); gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_widget_set_margin_top (label, 10); gtk_widget_set_margin_bottom (label, 10); gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0); section = gtk_flow_box_new (); gtk_widget_set_halign (section, GTK_ALIGN_START); gtk_flow_box_set_selection_mode (GTK_FLOW_BOX (section), GTK_SELECTION_NONE); gtk_flow_box_set_min_children_per_line (GTK_FLOW_BOX (section), 2); gtk_flow_box_set_max_children_per_line (GTK_FLOW_BOX (section), 20); gtk_box_pack_start (GTK_BOX (box), section, FALSE, TRUE, 0); return section; }
static void agreement_app_window_init(AgreementAppWindow *win) { gtk_window_set_title(GTK_WINDOW(win), "Agreement"); gtk_window_set_default_size(GTK_WINDOW(win), 800, 500); GtkWidget* grid; grid = gtk_grid_new(); gtk_container_add(GTK_CONTAINER(win), grid); GtkWidget *view; view = gtk_text_view_new(); gtk_widget_set_hexpand(view, true); gtk_widget_set_vexpand(view, true); gtk_grid_attach(GTK_GRID(grid), view, 0, 0, 1, 1); agreement_text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); gtk_text_buffer_set_text(agreement_text_buffer, "No file loaded", -1); GtkWidget *flow_box; flow_box = gtk_flow_box_new(); gtk_flow_box_set_min_children_per_line(GTK_FLOW_BOX(flow_box), 2); gtk_widget_set_halign(flow_box, GTK_ALIGN_CENTER); gtk_grid_attach(GTK_GRID(grid), flow_box, 0, 1, 1, 1); GtkWidget *no_button; no_button = gtk_button_new_from_icon_name("window-close", GTK_ICON_SIZE_BUTTON); gtk_button_set_always_show_image(GTK_BUTTON(no_button), true); gtk_button_set_label(GTK_BUTTON(no_button), "No, I do not agree"); gtk_container_add(GTK_CONTAINER(flow_box), no_button); GtkWidget *yes_button; yes_button = gtk_button_new_from_icon_name("go-next", GTK_ICON_SIZE_BUTTON); gtk_button_set_always_show_image(GTK_BUTTON(yes_button), true); gtk_button_set_label(GTK_BUTTON(yes_button), "Yes, I agree"); gtk_container_add(GTK_CONTAINER(flow_box), yes_button); gtk_widget_show_all(GTK_WIDGET(win)); }
static GtkWidget * create_window (void) { GtkWidget *window, *hbox, *vbox, *flowbox_cntl, *items_cntl; GtkWidget *flowbox, *widget, *expander, *swindow; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_container_set_border_width (GTK_CONTAINER (window), 8); gtk_widget_show (vbox); gtk_widget_show (hbox); gtk_container_add (GTK_CONTAINER (window), hbox); gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); swindow = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show (swindow); gtk_box_pack_start (GTK_BOX (hbox), swindow, TRUE, TRUE, 0); flowbox = gtk_flow_box_new (); gtk_widget_set_halign (flowbox, GTK_ALIGN_END); the_flowbox = (GtkFlowBox *)flowbox; gtk_widget_set_halign (flowbox, INITIAL_HALIGN); gtk_widget_set_valign (flowbox, INITIAL_VALIGN); gtk_flow_box_set_column_spacing (GTK_FLOW_BOX (flowbox), INITIAL_CSPACING); gtk_flow_box_set_row_spacing (GTK_FLOW_BOX (flowbox), INITIAL_RSPACING); gtk_flow_box_set_min_children_per_line (GTK_FLOW_BOX (flowbox), INITIAL_MINIMUM_LENGTH); gtk_flow_box_set_max_children_per_line (GTK_FLOW_BOX (flowbox), INITIAL_MAXIMUM_LENGTH); gtk_widget_show (flowbox); gtk_container_add (GTK_CONTAINER (swindow), flowbox); gtk_flow_box_set_hadjustment (GTK_FLOW_BOX (flowbox), gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (swindow))); gtk_flow_box_set_vadjustment (GTK_FLOW_BOX (flowbox), gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (swindow))); g_signal_connect (flowbox, "child-activated", G_CALLBACK (on_child_activated), NULL); g_signal_connect (flowbox, "selected-children-changed", G_CALLBACK (on_selected_children_changed), NULL); /* Add Flowbox test control frame */ expander = gtk_expander_new ("Flow Box controls"); gtk_expander_set_expanded (GTK_EXPANDER (expander), TRUE); flowbox_cntl = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_widget_show (flowbox_cntl); gtk_widget_show (expander); gtk_container_add (GTK_CONTAINER (expander), flowbox_cntl); gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 0); widget = gtk_check_button_new_with_label ("Homogeneous"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set whether the items should be displayed at the same size"); gtk_box_pack_start (GTK_BOX (flowbox_cntl), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (homogeneous_toggled), flowbox); widget = gtk_check_button_new_with_label ("Activate on single click"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); g_object_bind_property (widget, "active", flowbox, "activate-on-single-click", G_BINDING_SYNC_CREATE); gtk_widget_show (widget); gtk_box_pack_start (GTK_BOX (flowbox_cntl), widget, FALSE, FALSE, 0); /* Add alignment controls */ widget = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Fill"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Start"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "End"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Center"); gtk_combo_box_set_active (GTK_COMBO_BOX (widget), INITIAL_HALIGN); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set the horizontal alignment policy"); gtk_box_pack_start (GTK_BOX (flowbox_cntl), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (horizontal_alignment_changed), flowbox); widget = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Fill"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Start"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "End"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Center"); gtk_combo_box_set_active (GTK_COMBO_BOX (widget), INITIAL_VALIGN); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set the vertical alignment policy"); gtk_box_pack_start (GTK_BOX (flowbox_cntl), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (vertical_alignment_changed), flowbox); /* Add Orientation control */ widget = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Horizontal"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical"); gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set the flowbox orientation"); gtk_box_pack_start (GTK_BOX (flowbox_cntl), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (orientation_changed), flowbox); /* Add selection mode control */ widget = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "None"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Single"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Browse"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Multiple"); gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 1); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set the selection mode"); gtk_box_pack_start (GTK_BOX (flowbox_cntl), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (selection_mode_changed), flowbox); /* Add minimum line length in items control */ widget = gtk_spin_button_new_with_range (1, 10, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), INITIAL_MINIMUM_LENGTH); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set the minimum amount of items per line before wrapping"); gtk_box_pack_start (GTK_BOX (flowbox_cntl), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (line_length_changed), flowbox); g_signal_connect (G_OBJECT (widget), "value-changed", G_CALLBACK (line_length_changed), flowbox); /* Add natural line length in items control */ widget = gtk_spin_button_new_with_range (1, 10, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), INITIAL_MAXIMUM_LENGTH); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set the natural amount of items per line "); gtk_box_pack_start (GTK_BOX (flowbox_cntl), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (max_line_length_changed), flowbox); g_signal_connect (G_OBJECT (widget), "value-changed", G_CALLBACK (max_line_length_changed), flowbox); /* Add horizontal/vertical spacing controls */ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_widget_show (hbox); widget = gtk_label_new ("H Spacing"); gtk_widget_show (widget); gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0); widget = gtk_spin_button_new_with_range (0, 30, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), INITIAL_CSPACING); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set the horizontal spacing between children"); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (spacing_changed), GINT_TO_POINTER (GTK_ORIENTATION_HORIZONTAL)); g_signal_connect (G_OBJECT (widget), "value-changed", G_CALLBACK (spacing_changed), GINT_TO_POINTER (GTK_ORIENTATION_HORIZONTAL)); gtk_box_pack_start (GTK_BOX (flowbox_cntl), hbox, FALSE, FALSE, 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_widget_show (hbox); widget = gtk_label_new ("V Spacing"); gtk_widget_show (widget); gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0); widget = gtk_spin_button_new_with_range (0, 30, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), INITIAL_RSPACING); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set the vertical spacing between children"); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (spacing_changed), GINT_TO_POINTER (GTK_ORIENTATION_VERTICAL)); g_signal_connect (G_OBJECT (widget), "value-changed", G_CALLBACK (spacing_changed), GINT_TO_POINTER (GTK_ORIENTATION_VERTICAL)); gtk_box_pack_start (GTK_BOX (flowbox_cntl), hbox, FALSE, FALSE, 0); /* filtering and sorting */ widget = gtk_check_button_new_with_label ("Filter"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set whether some items should be filtered out"); gtk_box_pack_start (GTK_BOX (flowbox_cntl), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (filter_toggled), flowbox); widget = gtk_check_button_new_with_label ("Sort"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set whether items should be sorted"); gtk_box_pack_start (GTK_BOX (flowbox_cntl), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (sort_toggled), flowbox); /* Add test items control frame */ expander = gtk_expander_new ("Test item controls"); gtk_expander_set_expanded (GTK_EXPANDER (expander), TRUE); items_cntl = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_widget_show (items_cntl); gtk_widget_show (expander); gtk_container_add (GTK_CONTAINER (expander), items_cntl); gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 0); /* Add Items control */ widget = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Simple"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Focus"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Wrappy"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Stock"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Images"); gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set the item set to use"); gtk_box_pack_start (GTK_BOX (items_cntl), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (items_changed), flowbox); /* Add Text Orientation control */ widget = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Horizontal"); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical"); gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0); gtk_widget_show (widget); gtk_widget_set_tooltip_text (widget, "Set the item's text orientation (cant be done for stock buttons)"); gtk_box_pack_start (GTK_BOX (items_cntl), widget, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (text_orientation_changed), flowbox); populate_items (GTK_FLOW_BOX (flowbox)); /* This line was added only for the convenience of reproducing * a height-for-width inside GtkScrolledWindow bug (bug 629778). * -Tristan */ gtk_window_set_default_size (GTK_WINDOW (window), 390, -1); return window; }