mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-12 12:01:30 +00:00
556ecd5a9b
The old code was leaking memory. Use std::unique_ptr<> for ownership management. This is still very primitive and divetags are kept during application lifetime. There should probably be some form of reference counting. And the taglist should not be global, but attached to the divelog. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
121 lines
3.2 KiB
C++
121 lines
3.2 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
/* main.c */
|
|
#include <locale.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
|
|
#include "core/dive.h"
|
|
#include "core/divelog.h"
|
|
#include "core/color.h"
|
|
#include "core/downloadfromdcthread.h"
|
|
#include "core/parse.h"
|
|
#include "core/qt-gui.h"
|
|
#include "core/qthelper.h"
|
|
#include "core/subsurfacestartup.h"
|
|
#include "core/settings/qPref.h"
|
|
#include "core/settings/qPrefDisplay.h"
|
|
#include "core/tag.h"
|
|
#include "core/settings/qPrefCloudStorage.h"
|
|
#include "core/checkcloudconnection.h"
|
|
|
|
#include <QApplication>
|
|
#include <QFont>
|
|
#include <QFontMetrics>
|
|
#include <QLocale>
|
|
#include <QLoggingCategory>
|
|
#include <QStringList>
|
|
#include <git2.h>
|
|
|
|
// Implementation of STP logging
|
|
#include "core/ssrf.h"
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
|
QLoggingCategory::setFilterRules(QStringLiteral("qt.bluetooth* = true"));
|
|
|
|
// Start application
|
|
std::unique_ptr<QApplication> app(new QApplication(argc, argv));
|
|
|
|
// and get comand line arguments
|
|
QStringList arguments = QCoreApplication::arguments();
|
|
|
|
subsurface_console_init();
|
|
|
|
for (int i = 1; i < arguments.length(); i++) {
|
|
QString a = arguments.at(i);
|
|
if (!a.isEmpty() && a.at(0) == '-') {
|
|
parse_argument(qPrintable(a));
|
|
continue;
|
|
}
|
|
}
|
|
git_libgit2_init();
|
|
setup_system_prefs();
|
|
if (QLocale().measurementSystem() == QLocale::MetricSystem)
|
|
default_prefs.units = SI_units;
|
|
else
|
|
default_prefs.units = IMPERIAL_units;
|
|
copy_prefs(&default_prefs, &prefs);
|
|
CheckCloudConnection ccc;
|
|
ccc.pickServer();
|
|
fill_computer_list();
|
|
reset_tank_info_table(&tank_info_table);
|
|
|
|
parse_xml_init();
|
|
taglist_init_global();
|
|
|
|
// grab the system font size before we overwrite this when we load preferences
|
|
double initial_font_size = QGuiApplication::font().pointSizeF();
|
|
if (initial_font_size < 0.0) {
|
|
// The OS provides a default font in pixels, not points; doing some crude math
|
|
// to reverse engineer that information by measuring the height of a 10pt font in pixels
|
|
QFont testFont;
|
|
testFont.setPointSizeF(10.0);
|
|
QFontMetrics fm(testFont);
|
|
initial_font_size = QGuiApplication::font().pixelSize() * 10.0 / fm.height();
|
|
}
|
|
init_ui();
|
|
if (prefs.default_file_behavior == LOCAL_DEFAULT_FILE)
|
|
existing_filename = prefs.default_filename;
|
|
else
|
|
existing_filename.clear();
|
|
|
|
// some hard coded settings
|
|
qPrefCloudStorage::set_save_password_local(true);
|
|
|
|
// always show the divecomputer reported ceiling in red
|
|
prefs.redceiling = 1;
|
|
|
|
init_proxy();
|
|
|
|
if (!quit)
|
|
run_mobile_ui(initial_font_size);
|
|
exit_ui();
|
|
clear_divelog(&divelog);
|
|
parse_xml_exit();
|
|
subsurface_console_exit();
|
|
|
|
// Sync struct preferences to disk
|
|
qPref::sync();
|
|
|
|
free_prefs();
|
|
clear_tank_info_table(&tank_info_table);
|
|
return 0;
|
|
}
|
|
|
|
void set_non_bt_addresses()
|
|
{
|
|
#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
|
|
connectionListModel.addAddress("/dev/ttyS0");
|
|
connectionListModel.addAddress("/dev/ttyS1");
|
|
connectionListModel.addAddress("/dev/ttyS2");
|
|
connectionListModel.addAddress("/dev/ttyS3");
|
|
// this makes debugging so much easier - use the simulator
|
|
connectionListModel.addAddress("/tmp/ttyS1");
|
|
#endif
|
|
#if defined(SERIAL_FTDI)
|
|
connectionListModel.addAddress("FTDI");
|
|
#endif
|
|
}
|