static void menus_init(void) { GError *error = NULL; gchar *uifile; if (!initialise) return; initialise = FALSE; _setup_global_actions (); uifile = build_ui_filename ("ui/toolbox-ui.xml"); if (!gtk_ui_manager_add_ui_from_file (_ui_manager, uifile, &error)) { g_warning ("building menus failed: %s", error->message); g_error_free (error); error = NULL; } g_free (uifile); /* the display menu */ display_actions = create_or_ref_display_actions (TRUE); display_ui_manager = gtk_ui_manager_new (); g_signal_connect (G_OBJECT (display_ui_manager), "connect_proxy", G_CALLBACK (_ui_manager_connect_proxy), NULL); gtk_ui_manager_set_add_tearoffs (display_ui_manager, DIA_SHOW_TEAROFFS); gtk_ui_manager_insert_action_group (display_ui_manager, display_actions, 0); gtk_ui_manager_insert_action_group (display_ui_manager, tool_actions, 0); if (!gtk_ui_manager_add_ui_from_string (display_ui_manager, ui_info, -1, &error)) { g_warning ("built-in menus failed: %s", error->message); g_error_free (error); error = NULL; } uifile = build_ui_filename ("ui/popup-ui.xml"); /* TODO it would be more elegant if we had only one definition of the * menu hierarchy and merge it into a popup somehow. */ if (!gtk_ui_manager_add_ui_from_file (display_ui_manager, uifile, &error)) { g_warning ("building menus failed: %s", error->message); g_error_free (error); error = NULL; } g_free (uifile); display_accels = gtk_ui_manager_get_accel_group (display_ui_manager); display_menubar = gtk_ui_manager_get_widget (display_ui_manager, DISPLAY_MENU); g_assert (display_menubar); add_plugin_actions (_ui_manager, TOOLBOX_MENU); add_plugin_actions (display_ui_manager, DISPLAY_MENU); add_plugin_actions (display_ui_manager, INVISIBLE_MENU); /* after creating all menu items */ load_accels (); }
GtkWidget * menus_create_display_menubar (GtkUIManager **ui_manager, GtkActionGroup **actions) { GtkWidget *menu_bar; GError *error = NULL; gchar *uifile; *actions = create_or_ref_display_actions (TRUE); tool_actions = create_or_ref_tool_actions (); *ui_manager = gtk_ui_manager_new (); gtk_ui_manager_set_add_tearoffs (*ui_manager, DIA_SHOW_TEAROFFS); gtk_ui_manager_insert_action_group (*ui_manager, *actions, 0); gtk_ui_manager_insert_action_group (*ui_manager, tool_actions, 0); g_object_unref (G_OBJECT (tool_actions)); uifile = build_ui_filename ("ui/display-ui.xml"); if (!gtk_ui_manager_add_ui_from_file (*ui_manager, uifile, &error)) { g_warning ("building menus failed: %s", error->message); g_error_free (error); g_free (uifile); return NULL; } g_free (uifile); add_plugin_actions (*ui_manager, DISPLAY_MENU); menu_bar = gtk_ui_manager_get_widget (*ui_manager, DISPLAY_MENU); return menu_bar; }
void menus_get_integrated_ui_menubar (GtkWidget **menubar, GtkWidget **toolbar, GtkAccelGroup **accel_group) { GError *error = NULL; gchar *uifile; _setup_global_actions (); g_return_if_fail (_ui_manager != NULL); /* the integrated ui menu */ display_actions = create_or_ref_display_actions (FALSE); g_return_if_fail (tool_actions != NULL); /* maybe better to put this into toolbox_actions? */ gtk_action_group_add_toggle_actions (display_actions, integrated_ui_view_toggle_entries, G_N_ELEMENTS (integrated_ui_view_toggle_entries), NULL); /* for stand-alone they are per display */ gtk_ui_manager_insert_action_group (_ui_manager, display_actions, 0); tool_actions = create_or_ref_tool_actions (); gtk_ui_manager_insert_action_group (_ui_manager, tool_actions, 0); uifile = build_ui_filename ("ui/integrated-ui.xml"); if (!gtk_ui_manager_add_ui_from_file (_ui_manager, uifile, &error)) { g_warning ("building integrated ui menus failed: %s", error->message); g_error_free (error); error = NULL; } g_free (uifile); if (!gtk_ui_manager_add_ui_from_string (_ui_manager, ui_info, -1, &error)) { g_warning ("built-in menus failed: %s", error->message); g_error_free (error); error = NULL; } add_plugin_actions (_ui_manager, NULL); /* after creating all menu items */ load_accels (); if (menubar) *menubar = gtk_ui_manager_get_widget (_ui_manager, INTEGRATED_MENU); if (toolbar) *toolbar = create_integrated_ui_toolbar (); if (accel_group) *accel_group = gtk_ui_manager_get_accel_group (_ui_manager); }
static GtkBuilder * builder_new_from_file (const char *filename) { GError *error = NULL; gchar *uifile; GtkBuilder *builder; builder = gtk_builder_new(); uifile = build_ui_filename (filename); if (!gtk_builder_add_from_file (builder, uifile, &error)) { g_warning ("Couldn't load builder file: %s", error->message); g_error_free(error); } g_free (uifile); return builder; }
/** * Create the toolbar for the integrated UI * @return Main toolbar (GtkToolbar*) for the integrated UI main window */ static GtkWidget * create_integrated_ui_toolbar (void) { GtkToolbar *toolbar; GtkToolItem *sep; GtkWidget *w; GError *error = NULL; gchar *uifile; uifile = build_ui_filename ("ui/toolbar-ui.xml"); if (!gtk_ui_manager_add_ui_from_file (_ui_manager, uifile, &error)) { g_warning ("building menus failed: %s", error->message); g_error_free (error); error = NULL; toolbar = GTK_TOOLBAR (gtk_toolbar_new ()); } else { toolbar = GTK_TOOLBAR(gtk_ui_manager_get_widget (_ui_manager, "/Toolbar")); } g_free (uifile); /* Zoom Combo Box Entry */ w = gtk_combo_box_text_new_with_entry (); g_object_set_data (G_OBJECT (toolbar), DIA_INTEGRATED_TOOLBAR_ZOOM_COMBO, w); integrated_ui_toolbar_add_custom_item (toolbar, w); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w), ZOOM_FIT); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w), _("800%")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w), _("400%")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w), _("300%")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w), _("200%")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w), _("150%")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w), _("100%")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w), _("75%")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w), _("50%")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w), _("25%")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (w), _("10%")); g_signal_connect (G_OBJECT (w), "changed", G_CALLBACK (integrated_ui_toolbar_zoom_combo_selection_changed), NULL); /* Get the combo's GtkEntry child to set the width for the widget */ w = gtk_bin_get_child (GTK_BIN (w)); gtk_entry_set_width_chars (GTK_ENTRY (w), 6); g_signal_connect (G_OBJECT (w), "activate", G_CALLBACK(integrated_ui_toolbar_zoom_activate), NULL); /* Seperator */ sep = gtk_separator_tool_item_new (); gtk_toolbar_insert (toolbar, sep, -1); gtk_widget_show (GTK_WIDGET (sep)); /* Snap to grid */ w = dia_toggle_button_new_with_icon_names ("dia-grid-on", "dia-grid-off"); g_signal_connect (G_OBJECT (w), "toggled", G_CALLBACK (integrated_ui_toolbar_grid_snap_toggle), toolbar); gtk_widget_set_tooltip_text (w, _("Toggles snap-to-grid.")); g_object_set_data (G_OBJECT (toolbar), DIA_INTEGRATED_TOOLBAR_SNAP_GRID, w); integrated_ui_toolbar_add_custom_item (toolbar, w); /* Object Snapping */ w = dia_toggle_button_new_with_icon_names ("dia-mainpoints-on", "dia-mainpoints-off"); g_signal_connect (G_OBJECT (w), "toggled", G_CALLBACK (integrated_ui_toolbar_object_snap_toggle), toolbar); gtk_widget_set_tooltip_text (w, _("Toggles object snapping.")); g_object_set_data (G_OBJECT (toolbar), DIA_INTEGRATED_TOOLBAR_OBJECT_SNAP, w); integrated_ui_toolbar_add_custom_item (toolbar, w); sep = gtk_separator_tool_item_new (); gtk_toolbar_insert (toolbar, sep, -1); gtk_widget_show (GTK_WIDGET (sep)); return GTK_WIDGET (toolbar); }