summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile3
-rw-r--r--dive.h6
-rw-r--r--main.cpp63
-rw-r--r--qt-gui.cpp21
-rw-r--r--qt-gui.h10
-rw-r--r--qt-ui/mainwindow.cpp81
-rw-r--r--qt-ui/mainwindow.h2
-rw-r--r--subsurfacestartup.c (renamed from main.c)85
-rw-r--r--subsurfacestartup.h25
9 files changed, 167 insertions, 129 deletions
diff --git a/Makefile b/Makefile
index 6728a89d2..17c553f3c 100644
--- a/Makefile
+++ b/Makefile
@@ -68,9 +68,10 @@ SOURCES = \
equipment.c \
file.c \
info.c \
- main.c \
+ main.cpp \
parse-xml.c \
planner.c \
+ subsurfacestartup.c \
profile.c \
save-xml.c \
sha1.c \
diff --git a/dive.h b/dive.h
index 2c69cbff8..64da53c87 100644
--- a/dive.h
+++ b/dive.h
@@ -628,12 +628,6 @@ extern void add_event(struct divecomputer *dc, int time, int type, int flags, in
/* UI related protopypes */
-extern void init_ui(int *argcp, char ***argvp);
-extern void init_qt_ui(int *argcp, char ***argvp, char *errormessage);
-
-extern void run_ui(void);
-extern void exit_ui(void);
-
extern void report_error(GError* error);
extern void add_cylinder_description(cylinder_type_t *);
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 000000000..68e8c3708
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,63 @@
+/* main.c */
+#include <locale.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+#include <libintl.h>
+
+#include "qt-gui.h"
+#include "version.h"
+#include "subsurfacestartup.h"
+#include "qt-ui/mainwindow.h"
+
+#include <QStringList>
+
+int main(int argc, char **argv)
+{
+ int i;
+ bool no_filenames = TRUE;
+ const char *path;
+ char *error_message = NULL;
+
+ /* 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;
+
+ subsurface_command_line_init(&argc, &argv);
+ init_ui(&argc, &argv);
+ parse_xml_init();
+
+ QStringList files;
+ QStringList importedFiles;
+ for (i = 1; i < argc; i++) {
+ const char *a = argv[i];
+ if (a[0] == '-') {
+ parse_argument(a);
+ continue;
+ }
+ if (imported)
+ importedFiles.push_back( QString(a) );
+ else
+ files.push_back( QString(a) );
+ }
+ if (no_filenames) {
+ files.push_back( QString(prefs.default_filename) );
+ }
+ process_dives(imported, FALSE);
+ parse_xml_exit();
+ subsurface_command_line_exit(&argc, &argv);
+ mainWindow()->loadFiles(files);
+ mainWindow()->importFiles(importedFiles);
+ run_ui();
+ exit_ui();
+ return 0;
+}
diff --git a/qt-gui.cpp b/qt-gui.cpp
index eb199f0ab..7414ad426 100644
--- a/qt-gui.cpp
+++ b/qt-gui.cpp
@@ -70,18 +70,6 @@ static QApplication *application = NULL;
int error_count;
const char *existing_filename;
-void init_qt_ui(int *argcp, char ***argvp, char *errormessage)
-{
- application->installTranslator(new Translator(application));
- MainWindow *window = new MainWindow();
- window->showError(errormessage);
- window->show();
- if (existing_filename && existing_filename[0] != '\0')
- window->setTitle(MWTF_FILENAME);
- else
- window->setTitle(MWTF_DEFAULT);
-}
-
const char *getSetting(QSettings &s, QString name)
{
QVariant v;
@@ -127,6 +115,15 @@ void init_ui(int *argcp, char ***argvp)
default_dive_computer_product = getSetting(s,"dive_computer_product");
default_dive_computer_device = getSetting(s, "dive_computer_device");
s.endGroup();
+
+ application->installTranslator(new Translator(application));
+ MainWindow *window = new MainWindow();
+ window->show();
+ if (existing_filename && existing_filename[0] != '\0')
+ window->setTitle(MWTF_FILENAME);
+ else
+ window->setTitle(MWTF_DEFAULT);
+
return;
}
diff --git a/qt-gui.h b/qt-gui.h
new file mode 100644
index 000000000..43a006a4c
--- /dev/null
+++ b/qt-gui.h
@@ -0,0 +1,10 @@
+#ifndef QT_GUI_H
+#define QT_GUI_H
+
+void init_ui(int *argcp, char ***argvp);
+void init_qt_ui(int *argcp, char ***argvp, char *errormessage);
+
+void run_ui(void);
+void exit_ui(void);
+
+#endif
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 245f4b347..4eead9616 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -117,22 +117,7 @@ void MainWindow::on_actionOpen_triggered()
QByteArray fileNamePtr = filename.toLocal8Bit();
on_actionClose_triggered();
-
- char *error = NULL;
- parse_file(fileNamePtr.data(), &error);
- set_filename(fileNamePtr.data(), TRUE);
- setTitle(MWTF_FILENAME);
-
- if (error != NULL) {
- showError(error);
- free(error);
- }
- process_dives(FALSE, FALSE);
-
- ui->InfoWidget->reload();
- ui->globe->reload();
- ui->ListWidget->reload(DiveTripModel::TREE);
- ui->ListWidget->setFocus();
+ loadFiles( QStringList() << filename );
}
void MainWindow::on_actionSave_triggered()
@@ -193,23 +178,7 @@ void MainWindow::on_actionImport_triggered()
settings.setValue("LastDir", fileInfo.dir().path());
settings.endGroup();
- QByteArray fileNamePtr;
- char *error = NULL;
- for (int i = 0; i < fileNames.size(); ++i) {
- fileNamePtr = fileNames.at(i).toLocal8Bit();
- parse_file(fileNamePtr.data(), &error);
- if (error != NULL) {
- showError(error);
- free(error);
- error = NULL;
- }
- }
- process_dives(FALSE, FALSE);
-
- ui->InfoWidget->reload();
- ui->globe->reload();
- ui->ListWidget->reload(DiveTripModel::TREE);
- ui->ListWidget->setFocus();
+ importFiles(fileNames);
}
void MainWindow::on_actionExportUDDF_triggered()
@@ -755,3 +724,49 @@ void MainWindow::setTitle(enum MainWindowTitleFormat format)
break;
}
}
+
+void MainWindow::importFiles(const QStringList fileNames)
+{
+ QByteArray fileNamePtr;
+ char *error = NULL;
+ for (int i = 0; i < fileNames.size(); ++i) {
+ fileNamePtr = fileNames.at(i).toLocal8Bit();
+ parse_file(fileNamePtr.data(), &error);
+ if (error != NULL) {
+ showError(error);
+ free(error);
+ error = NULL;
+ }
+ }
+ process_dives(TRUE, FALSE);
+
+ ui->InfoWidget->reload();
+ ui->globe->reload();
+ ui->ListWidget->reload(DiveTripModel::TREE);
+ ui->ListWidget->setFocus();
+}
+
+void MainWindow::loadFiles(const QStringList fileNames)
+{
+ char *error = NULL;
+ QByteArray fileNamePtr;
+
+ for (int i = 0; i < fileNames.size(); ++i) {
+ fileNamePtr = fileNames.at(i).toLocal8Bit();
+ parse_file(fileNamePtr.data(), &error);
+ set_filename(fileNamePtr.data(), TRUE);
+ setTitle(MWTF_FILENAME);
+
+ if (error != NULL) {
+ showError(error);
+ free(error);
+ }
+ }
+
+ process_dives(FALSE, FALSE);
+
+ ui->InfoWidget->reload();
+ ui->globe->reload();
+ ui->ListWidget->reload(DiveTripModel::TREE);
+ ui->ListWidget->setFocus();
+}
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index 0b0b0055d..6cc99db96 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -51,6 +51,8 @@ public:
// when the profile's visible.
void disableDcShortcuts();
void enableDcShortcuts();
+ void loadFiles(const QStringList files);
+ void importFiles(const QStringList importFiles);
private slots:
/* file menu action */
diff --git a/main.c b/subsurfacestartup.c
index ca64b5518..bf093ed9c 100644
--- a/main.c
+++ b/subsurfacestartup.c
@@ -1,17 +1,7 @@
-/* main.c */
-#include <locale.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-#include <libintl.h>
+#include "subsurfacestartup.h"
+#include <stdbool.h>
#include <glib/gi18n.h>
-#include "dive.h"
-#include "divelist.h"
-#include "libdivecomputer.h"
-#include "version.h"
-
struct preferences prefs;
struct preferences default_prefs = {
.units = SI_UNITS,
@@ -49,8 +39,8 @@ struct units *get_units()
/* random helper functions, used here or elsewhere */
static int sortfn(const void *_a, const void *_b)
{
- const struct dive *a = *(void **)_a;
- const struct dive *b = *(void **)_b;
+ const struct dive *a = (const struct dive*) *(void **)_a;
+ const struct dive *b = (const struct dive*) *(void **)_b;
if (a->when < b->when)
return -1;
@@ -86,7 +76,7 @@ const char *monthname(int mon)
/*
* track whether we switched to importing dives
*/
-static gboolean imported = FALSE;
+bool imported = FALSE;
static void print_version() {
printf("Subsurface v%s, ", VERSION_STRING);
@@ -103,7 +93,7 @@ static void print_help() {
printf("\n --version Prints current version\n\n");
}
-static void parse_argument(const char *arg)
+void parse_argument(const char *arg)
{
const char *p = arg+1;
@@ -122,10 +112,7 @@ static void parse_argument(const char *arg)
exit(0);
}
if (strcmp(arg, "--import") == 0) {
- /* mark the dives so far as the base,
- * everything after is imported */
- process_dives(FALSE, FALSE);
- imported = TRUE;
+ imported = TRUE; /* mark the dives so far as the base, * everything after is imported */
return;
}
if (strcmp(arg, "--verbose") == 0) {
@@ -171,7 +158,7 @@ void renumber_dives(int nr)
* I guess Burma and Liberia should trigger this too. I'm too
* lazy to look up the territory names, though.
*/
-static void setup_system_prefs(void)
+void setup_system_prefs(void)
{
const char *env;
@@ -194,59 +181,3 @@ static void setup_system_prefs(void)
default_prefs.units = IMPERIAL_units;
}
-
-int main(int argc, char **argv)
-{
- int i;
- gboolean no_filenames = TRUE;
- const char *path;
- char *error_message = NULL;
-
- /* 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;
-
- 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;
- }
- set_filename(NULL, TRUE);
-
- parse_file(a, &error_message);
- if (no_filenames)
- {
- set_filename(a, TRUE);
- no_filenames = FALSE;
- }
- }
- if (no_filenames) {
- const char *filename = prefs.default_filename;
- parse_file(filename, NULL);
- /* don't report errors - this file may not exist, but make
- sure we remember this as the filename in use */
- set_filename(filename, FALSE);
- }
- process_dives(imported, FALSE);
- parse_xml_exit();
- subsurface_command_line_exit(&argc, &argv);
-
- init_qt_ui(&argc, &argv, error_message); /* qt bit delayed until dives are parsed */
- run_ui();
- exit_ui();
- return 0;
-}
diff --git a/subsurfacestartup.h b/subsurfacestartup.h
new file mode 100644
index 000000000..8a2420345
--- /dev/null
+++ b/subsurfacestartup.h
@@ -0,0 +1,25 @@
+#ifndef SUBSURFACESTARTUP_H
+#define SUBSURFACESTARTUP_H
+
+#include "dive.h"
+#include "divelist.h"
+#include "libdivecomputer.h"
+#include "version.h"
+#include <stdbool.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern struct preferences prefs;
+extern struct preferences default_prefs;
+extern bool imported;
+
+void setup_system_prefs(void);
+void parse_argument(const char *arg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif