mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-14 08:38:45 +00:00
After fixing up the trainDB problem we can now restart the mainwindows safely when the athlete directory changes.
202 lines
6.4 KiB
C++
202 lines
6.4 KiB
C++
/*
|
|
* Copyright (c) 2006 Sean C. Rhea (srhea@srhea.net)
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the Free
|
|
* Software Foundation; either version 2 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc., 51
|
|
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include <QApplication>
|
|
#include <QtGui>
|
|
#include "ChooseCyclistDialog.h"
|
|
#include "MainWindow.h"
|
|
#include "Settings.h"
|
|
#include "TrainDB.h"
|
|
|
|
#ifdef Q_OS_X11
|
|
#include <X11/Xlib.h>
|
|
#endif
|
|
|
|
QApplication *application;
|
|
bool restarting = false;
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
int ret=2; // return code from qapplication, default to error
|
|
|
|
#ifdef Q_OS_X11
|
|
XInitThreads();
|
|
#endif
|
|
|
|
#ifdef Q_OS_MACX
|
|
if ( QSysInfo::MacintoshVersion > QSysInfo::MV_10_8 )
|
|
{
|
|
// fix Mac OS X 10.9 (mavericks) font issue
|
|
// https://bugreports.qt-project.org/browse/QTBUG-32789
|
|
qDebug() << "insertSubstitution .Lucida Grande UI for Lucida Grande";
|
|
//QStringList list;
|
|
//list.append("Lucida Grande");
|
|
//list.append("LucidaGrande");
|
|
//QFont::insertSubstitutions(".Lucida Grande UI", list);
|
|
//QFont::insertSubstitution(".Lucida Grande UI", "Lucida Grande");
|
|
QFont::insertSubstitution("LucidaGrande", "Lucida Grande");
|
|
}
|
|
#endif
|
|
|
|
// create the application -- only ever ONE regardless of restarts
|
|
application = new QApplication(argc, argv);
|
|
|
|
// set defaultfont
|
|
QFont font;
|
|
font.fromString(appsettings->value(NULL, GC_FONT_DEFAULT, QFont().toString()).toString());
|
|
font.setPointSize(appsettings->value(NULL, GC_FONT_DEFAULT_SIZE, 12).toInt());
|
|
application->setFont(font); // set default font
|
|
|
|
|
|
// creating that first mainwindow
|
|
do {
|
|
|
|
// lets not restart endlessly
|
|
restarting = false;
|
|
|
|
//this is the path within the current directory where GC will look for
|
|
//files to allow USB stick support
|
|
QString localLibraryPath="Library/GoldenCheetah";
|
|
|
|
//this is the path that used to be used for all platforms
|
|
//now different platforms will use their own path
|
|
//this path is checked first to make things easier for long-time users
|
|
QString oldLibraryPath=QDir::home().path()+"/Library/GoldenCheetah";
|
|
|
|
//these are the new platform-dependent library paths
|
|
#if defined(Q_OS_MACX)
|
|
QString libraryPath="Library/GoldenCheetah";
|
|
#elif defined(Q_OS_WIN)
|
|
QString libraryPath=QDesktopServices::storageLocation(QDesktopServices::DataLocation) + "/GoldenCheetah";
|
|
#else
|
|
// Q_OS_LINUX et al
|
|
QString libraryPath=".goldencheetah";
|
|
#endif
|
|
|
|
// or did we override in settings?
|
|
QString sh;
|
|
if ((sh=appsettings->value(NULL, GC_HOMEDIR).toString()) != "") localLibraryPath = sh;
|
|
|
|
// lets try the local library we've worked out...
|
|
QDir home = QDir();
|
|
if(home.exists(localLibraryPath)) {
|
|
|
|
home.cd(localLibraryPath);
|
|
|
|
} else {
|
|
|
|
// YIKES !! The directory we should be using doesn't exist!
|
|
home = QDir::home();
|
|
if (home.exists(oldLibraryPath)) { // there is an old style path, lets fo there
|
|
home.cd(oldLibraryPath);
|
|
} else {
|
|
|
|
if (!home.exists(libraryPath)) {
|
|
if (!home.mkpath(libraryPath)) {
|
|
|
|
qDebug()<<"Failed to create library path\n";
|
|
exit(0);
|
|
|
|
}
|
|
}
|
|
home.cd(libraryPath);
|
|
}
|
|
}
|
|
|
|
// install QT Translator to enable QT Dialogs translation
|
|
// we may have restarted JUST to get this!
|
|
QTranslator qtTranslator;
|
|
qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
|
|
application->installTranslator(&qtTranslator);
|
|
|
|
// Language setting (default to system locale)
|
|
QVariant lang = appsettings->value(NULL, GC_LANG, QLocale::system().name());
|
|
|
|
// Load specific translation
|
|
QTranslator gcTranslator;
|
|
gcTranslator.load(":translations/gc_" + lang.toString() + ".qm");
|
|
application->installTranslator(&gcTranslator);
|
|
|
|
// Initialize metrics once the translator is installed
|
|
RideMetricFactory::instance().initialize();
|
|
|
|
// Initialize global registry once the translator is installed
|
|
GcWindowRegistry::initialize();
|
|
|
|
// initialise the trainDB
|
|
trainDB = new TrainDB(home);
|
|
|
|
QStringList args(application->arguments());
|
|
|
|
// lets reopen last athlete
|
|
QVariant lastOpened;
|
|
if(args.size() > 1) {
|
|
lastOpened = args.at(1);
|
|
} else {
|
|
lastOpened = appsettings->value(NULL, GC_SETTINGS_LAST);
|
|
}
|
|
|
|
bool anyOpened = false;
|
|
if (lastOpened != QVariant()) {
|
|
QStringList list = lastOpened.toStringList();
|
|
QStringListIterator i(list);
|
|
while (i.hasNext()) {
|
|
QString cyclist = i.next();
|
|
if (home.cd(cyclist)) {
|
|
MainWindow *mainWindow = new MainWindow(home);
|
|
mainWindow->show();
|
|
home.cdUp();
|
|
anyOpened = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// need to ask the user
|
|
if (!anyOpened) {
|
|
ChooseCyclistDialog d(home, true);
|
|
d.setModal(true);
|
|
|
|
// choose cancel?
|
|
if ((ret=d.exec()) != QDialog::Accepted) {
|
|
delete trainDB;
|
|
return ret;
|
|
}
|
|
|
|
// chosen, so lets get the choice..
|
|
home.cd(d.choice());
|
|
if (!home.exists()) {
|
|
delete trainDB;
|
|
exit(0);
|
|
}
|
|
|
|
// .. and open a mainwindow
|
|
MainWindow *mainWindow = new MainWindow(home);
|
|
mainWindow->show();
|
|
}
|
|
|
|
ret=application->exec();
|
|
|
|
// close trainDB
|
|
delete trainDB;
|
|
|
|
} while (restarting);
|
|
|
|
return ret;
|
|
}
|