- va_end(args);
-}
-
-#define UNITCALLBACK(name, type, value) \
-static void name(GtkWidget *w, gpointer data) \
-{ \
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))) \
- menu_units.type = value; \
-}
-
-static struct units menu_units;
-
-UNITCALLBACK(set_meter, length, METERS)
-UNITCALLBACK(set_feet, length, FEET)
-UNITCALLBACK(set_bar, pressure, BAR)
-UNITCALLBACK(set_psi, pressure, PSI)
-UNITCALLBACK(set_liter, volume, LITER)
-UNITCALLBACK(set_cuft, volume, CUFT)
-UNITCALLBACK(set_celsius, temperature, CELSIUS)
-UNITCALLBACK(set_fahrenheit, temperature, FAHRENHEIT)
-
-static void unit_dialog(GtkWidget *w, gpointer data)
-{
- int result;
- GtkWidget *dialog;
-
- menu_units = output_units;
-
- dialog = gtk_dialog_new_with_buttons("Units",
- GTK_WINDOW(main_window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
- GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
- NULL);
-
- create_radio(dialog, "Depth:",
- "Meter", set_meter, (output_units.length == METERS),
- "Feet", set_feet, (output_units.length == FEET),
- NULL);
-
- create_radio(dialog, "Pressure:",
- "Bar", set_bar, (output_units.pressure == BAR),
- "PSI", set_psi, (output_units.pressure == PSI),
- NULL);
-
- create_radio(dialog, "Volume:",
- "Liter", set_liter, (output_units.volume == LITER),
- "CuFt", set_cuft, (output_units.volume == CUFT),
- NULL);
-
- create_radio(dialog, "Temperature:",
- "Celsius", set_celsius, (output_units.temperature == CELSIUS),
- "Fahrenheit", set_fahrenheit, (output_units.temperature == FAHRENHEIT),
- NULL);
-
- gtk_widget_show(dialog);
- result = gtk_dialog_run(GTK_DIALOG(dialog));
- if (result == GTK_RESPONSE_ACCEPT) {
- output_units = menu_units;
- update_dive_list_units(&dive_list);
- repaint_dive();
- gconf_client_set_bool(gconf, GCONF_NAME(feet), output_units.length == FEET, NULL);
- gconf_client_set_bool(gconf, GCONF_NAME(psi), output_units.pressure == PSI, NULL);
- gconf_client_set_bool(gconf, GCONF_NAME(cuft), output_units.volume == CUFT, NULL);
- gconf_client_set_bool(gconf, GCONF_NAME(fahrenheit), output_units.temperature == FAHRENHEIT, NULL);
- }
- gtk_widget_destroy(dialog);
-}
-
-static GtkActionEntry menu_items[] = {
- { "FileMenuAction", GTK_STOCK_FILE, "Log", NULL, NULL, NULL},
- { "OpenFile", GTK_STOCK_OPEN, NULL, "<control>O", NULL, G_CALLBACK(file_open) },
- { "SaveFile", GTK_STOCK_SAVE, NULL, "<control>S", NULL, G_CALLBACK(file_save) },
- { "Quit", GTK_STOCK_QUIT, NULL, "<control>Q", NULL, G_CALLBACK(quit) },
- { "Units", NULL, "Units", NULL, NULL, G_CALLBACK(unit_dialog) },
-};
-static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
-
-static const gchar* ui_string = " \
- <ui> \
- <menubar name=\"MainMenu\"> \
- <menu name=\"FileMenu\" action=\"FileMenuAction\"> \
- <menuitem name=\"Open\" action=\"OpenFile\" /> \
- <menuitem name=\"Save\" action=\"SaveFile\" /> \
- <separator name=\"Separator1\"/> \
- <menuitem name=\"Units\" action=\"Units\" /> \
- <separator name=\"Separator2\"/> \
- <menuitem name=\"Quit\" action=\"Quit\" /> \
- </menu> \
- </menubar> \
- </ui> \
-";
-
-static GtkWidget *get_menubar_menu(GtkWidget *window)
-{
- GtkActionGroup *action_group = gtk_action_group_new("Menu");
- gtk_action_group_add_actions(action_group, menu_items, nmenu_items, 0);
-
- GtkUIManager *ui_manager = gtk_ui_manager_new();
- gtk_ui_manager_insert_action_group(ui_manager, action_group, 0);
- GError* error = 0;
- gtk_ui_manager_add_ui_from_string(GTK_UI_MANAGER(ui_manager), ui_string, -1, &error);
-
- gtk_window_add_accel_group(GTK_WINDOW(window), gtk_ui_manager_get_accel_group(ui_manager));
- GtkWidget* menu = gtk_ui_manager_get_widget(ui_manager, "/MainMenu");
-
- return menu;