int main(int argc, char **argv) { int i; output_units = SI_units; parse_xml_init(); init_ui(argc, argv); for (i = 1; i < argc; i++) { const char *a = argv[i]; if (a[0] == '-') { parse_argument(a); continue; } GError *error = NULL; parse_xml_file(a, &error); if (error != NULL) { report_error(error); g_error_free(error); error = NULL; } } report_dives(); dive_list_update_dives(); run_ui(); return 0; }
static void parse_argument(const char *arg) { const char *p = arg+1; do { switch (*p) { case 'v': verbose++; continue; case '-': /* long options with -- */ if (strcmp(arg,"--import") == 0) { /* mark the dives so far as the base, * everything after is imported */ report_dives(FALSE); imported = TRUE; return; } /* fallthrough */ case 'p': /* ignore process serial number argument when run as native macosx app */ if (strncmp(arg, "-psn_", 5) == 0) { return; } /* fallthrough */ default: fprintf(stderr, "Bad argument '%s'\n", arg); exit(1); } } while (*++p); }
static void file_open(GtkWidget *w, gpointer data) { GtkWidget *dialog; GtkFileFilter *filter; dialog = gtk_file_chooser_dialog_new("Open File", GTK_WINDOW(main_window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter, "*.xml"); gtk_file_filter_add_pattern(filter, "*.XML"); gtk_file_filter_add_pattern(filter, "*.sda"); gtk_file_filter_add_pattern(filter, "*.SDA"); gtk_file_filter_add_mime_type(filter, "text/xml"); gtk_file_filter_set_name(filter, "XML file"); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { GSList *filenames; char *filename; filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog)); GError *error = NULL; while(filenames != NULL) { filename = filenames->data; parse_xml_file(filename, &error); if (error != NULL) { report_error(error); g_error_free(error); error = NULL; } g_free(filename); filenames = g_slist_next(filenames); } g_slist_free(filenames); report_dives(FALSE); } gtk_widget_destroy(dialog); }
int main(int argc, char **argv) { int i; GtkWidget *win; GtkWidget *divelist; GtkWidget *table; GtkWidget *notebook; GtkWidget *frame; GtkWidget *menubar; GtkWidget *vbox; parse_xml_init(); gtk_init(&argc, &argv); for (i = 1; i < argc; i++) { const char *a = argv[i]; if (a[0] == '-') { parse_argument(a); continue; } parse_xml_file(a); } report_dives(); win = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(on_destroy), NULL); main_window = win; vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(win), vbox); menubar = get_menubar_menu(win); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); /* Table for the list of dives, cairo window, and dive info */ table = gtk_table_new(2, 2, FALSE); gtk_container_set_border_width(GTK_CONTAINER(table), 5); gtk_box_pack_end(GTK_BOX(vbox), table, TRUE, TRUE, 0); gtk_widget_show(table); /* Create the atual divelist */ divelist = create_dive_list(); gtk_table_attach(GTK_TABLE(table), divelist, 0, 1, 0, 2, 0, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); /* Frame for minimal dive info */ frame = dive_info_frame(); gtk_table_attach(GTK_TABLE(table), frame, 1, 2, 0, 1, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0, 0); /* Notebook for dive info vs profile vs .. */ notebook = gtk_notebook_new(); gtk_table_attach_defaults(GTK_TABLE(table), notebook, 1, 2, 1, 2); /* Frame for dive profile */ frame = dive_profile_frame(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame, gtk_label_new("Dive Profile")); dive_profile = frame; /* Frame for extended dive info */ frame = extended_dive_info_frame(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame, gtk_label_new("Extended dive Info")); gtk_widget_set_app_paintable(win, TRUE); gtk_widget_show_all(win); gtk_main(); return 0; }
void import_dialog(GtkWidget *w, gpointer data) { int result; GtkWidget *dialog, *hbox, *vbox, *label; GtkComboBox *computer; GtkEntry *device; GtkWidget *XMLchooser; device_data_t devicedata = { .devname = NULL, }; dialog = gtk_dialog_new_with_buttons("Import from dive computer", GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); label = gtk_label_new("Import: \nLoad XML file or import directly from dive computer"); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 3); XMLchooser = xml_file_selector(vbox, dialog); computer = dive_computer_selector(vbox); device = dive_computer_device(vbox); hbox = gtk_hbox_new(FALSE, 6); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 3); devicedata.progress.bar = gtk_progress_bar_new(); gtk_container_add(GTK_CONTAINER(hbox), devicedata.progress.bar); gtk_widget_show_all(dialog); result = gtk_dialog_run(GTK_DIALOG(dialog)); switch (result) { int type; GtkTreeIter iter; GtkTreeModel *model; const char *comp; GSList *list; case GTK_RESPONSE_ACCEPT: /* what happened - did the user pick a file? In that case * we ignore whether a dive computer model was picked */ list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(XMLchooser)); if (g_slist_length(list) == 0) { if (!gtk_combo_box_get_active_iter(computer, &iter)) break; model = gtk_combo_box_get_model(computer); gtk_tree_model_get(model, &iter, 0, &comp, 1, &type, -1); devicedata.type = type; devicedata.name = comp; devicedata.devname = gtk_entry_get_text(device); do_import(&devicedata); } else { g_slist_foreach(list,do_import_file,NULL); g_slist_free(list); } break; default: break; } gtk_widget_destroy(dialog); report_dives(TRUE); }
int main(int argc, char **argv) { int i; gboolean no_filenames = TRUE; const char *path; /* set up l18n - the search directory needs to change * so that it uses the correct system directory when * subsurface isn't run from the local directory */ path = subsurface_gettext_domainpath(argv[0]); setlocale(LC_ALL, ""); bindtextdomain("subsurface", path); bind_textdomain_codeset("subsurface", "utf-8"); textdomain("subsurface"); setup_system_prefs(); prefs = default_prefs; #if DEBUGFILE > 1 debugfile = stderr; #elif defined(DEBUGFILE) debugfilename = strdup(prefs.default_filename); strncpy(debugfilename + strlen(debugfilename) - 3, "log", 3); if (g_mkdir_with_parents(g_path_get_dirname(debugfilename), 0664) != 0 || (debugfile = g_fopen(debugfilename, "w")) == NULL) printf("oh boy, can't create debugfile"); #endif subsurface_command_line_init(&argc, &argv); parse_xml_init(); init_ui(&argc, &argv); for (i = 1; i < argc; i++) { const char *a = argv[i]; if (a[0] == '-') { parse_argument(a); continue; } GError *error = NULL; /* if we have exactly one filename, parse_file will set * that to be the default. Otherwise there will be no default filename */ set_filename(NULL, TRUE); parse_file(a, &error, no_filenames); no_filenames = FALSE; if (error != NULL) { report_error(error); g_error_free(error); error = NULL; } } if (no_filenames) { GError *error = NULL; const char *filename = prefs.default_filename; parse_file(filename, &error, TRUE); /* don't report errors - this file may not exist, but make sure we remember this as the filename in use */ set_filename(filename, FALSE); } report_dives(imported, FALSE); if (dive_table.nr == 0) show_dive_info(NULL); run_ui(); exit_ui(); parse_xml_exit(); subsurface_command_line_exit(&argc, &argv); #ifdef DEBUGFILE if (debugfile) fclose(debugfile); #endif return 0; }