diff --git a/src/BlankState.cpp b/src/BlankState.cpp new file mode 100644 index 000000000..37e7d166f --- /dev/null +++ b/src/BlankState.cpp @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2012 Damien Grauser (Damien.Grauser@pev-geneve.ch) * + * 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 "BlankState.h" +#include +#include "MainWindow.h" + +#ifdef Q_OS_MAC +#include "QtMacButton.h" // mac +#endif + +// +// Replace home window when no ride +// +BlankStatePage::BlankStatePage(MainWindow *main) : main(main) +{ + QHBoxLayout *homeLayout = new QHBoxLayout(this); + homeLayout->setAlignment(Qt::AlignCenter); + homeLayout->addSpacing(20); // left margin + + // left part + QWidget *left = new QWidget(this); + leftLayout = new QVBoxLayout(left); + leftLayout->setAlignment(Qt::AlignLeft | Qt::AlignBottom); + left->setLayout(leftLayout); + + welcomeTitle = new QLabel(left); + welcomeTitle->setFont(QFont("Helvetica", 30, QFont::Bold, false)); + leftLayout->addWidget(welcomeTitle); + + welcomeText = new QLabel(left); + welcomeText->setFont(QFont("Helvetica", 16, QFont::Light, false)); + leftLayout->addWidget(welcomeText); + + leftLayout->addSpacing(10); + + homeLayout->addWidget(left); + homeLayout->addSpacing(50); + + QWidget *right = new QWidget(this); + QVBoxLayout *rightLayout = new QVBoxLayout(right); + rightLayout->setAlignment(Qt::AlignRight | Qt::AlignBottom); + right->setLayout(rightLayout); + + img = new QToolButton(this); + img->setToolButtonStyle(Qt::ToolButtonIconOnly); + img->setStyleSheet("QToolButton {text-align: left;color : blue;background: transparent}"); + rightLayout->addWidget(img); + + homeLayout->addWidget(right); + // right margin + homeLayout->addSpacing(20); + + setLayout(homeLayout); +} + +QPushButton* +BlankStatePage::addToShortCuts(ShortCut shortCut) +{ + // + // Separator + // + if (shortCuts.count()>0) { + leftLayout->addSpacing(20); + QFrame* line = new QFrame(); + line->setFrameShape(QFrame::HLine); + line->setFrameShadow(QFrame::Sunken); + leftLayout->addWidget(line); + } + + // append to the list of shortcuts + shortCuts.append(shortCut); + + // + // Create text and button + // + QLabel *shortCutLabel = new QLabel(this); + shortCutLabel->setText(shortCut.label); + shortCutLabel->setFont(QFont("Helvetica", 16, QFont::Light, false)); + leftLayout->addWidget(shortCutLabel); + + QPushButton *shortCutButton = new QPushButton(this); + shortCutButton->setText(shortCut.buttonLabel); + shortCutButton->setIcon(QPixmap(shortCut.buttonIconPath)); + shortCutButton->setIconSize(QSize(60,60)); + //importButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + //importButton->setStyleSheet("QToolButton {text-align: left;color : blue;background: transparent}"); + shortCutButton->setStyleSheet("QPushButton {border-radius: 10px;border-style: outset; background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #DDDDDD, stop: 1 #BBBBBB); border-width: 1px; border-color: #555555;} QPushButton:pressed {background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #BBBBBB, stop: 1 #999999);}"); + shortCutButton->setFixedWidth(200); + leftLayout->addWidget(shortCutButton); + + return shortCutButton; +} + +// +// Replace analysis window when no ride +// +BlankStateAnalysisPage::BlankStateAnalysisPage(MainWindow *main) : BlankStatePage(main) +{ + welcomeTitle->setText("Analysis"); + welcomeText->setText("No ride ?\nLet's start with some data."); + + img->setIcon(QPixmap(":images/analysis.png")); + img->setIconSize(QSize(800,330)); + + ShortCut scImport; + scImport.label = tr("Import files from your disc or usb device"); + scImport.buttonLabel = tr("Import data"); + scImport.buttonIconPath = ":images/mac/download.png"; + QPushButton *importButton = addToShortCuts(scImport); + connect(importButton, SIGNAL(clicked()), main, SLOT(importFile())); + + ShortCut scDownload; + scDownload.label = tr("Download from serial device."); + scDownload.buttonLabel = tr("Download from device"); + scDownload.buttonIconPath = ":images/mac/download.png"; + QPushButton *downloadButton = addToShortCuts(scDownload); + connect(downloadButton, SIGNAL(clicked()), main, SLOT(downloadRide())); + +} + +// +// Replace home window when no ride +// +BlankStateHomePage::BlankStateHomePage(MainWindow *main) : BlankStatePage(main) +{ + welcomeTitle->setText("Home"); + welcomeText->setText("No ride ?\nLet's start with some data."); + + img->setIcon(QPixmap(":images/home.png")); + img->setIconSize(QSize(800,330)); + + /*ShortCut scImport; + scImport.label = tr("Import files from your disc or usb device"); + scImport.buttonLabel = tr("Import data"); + scImport.buttonIconPath = ":images/mac/download.png"; + addToShortCuts(scImport); + + ShortCut scDownload; + scDownload.label = tr("Download from serial device."); + scDownload.buttonLabel = tr("Download from device"); + scDownload.buttonIconPath = ":images/mac/download.png"; + addToShortCuts(scDownload);*/ +} + +// +// Replace diary window when no ride +// +BlankStateDiaryPage::BlankStateDiaryPage(MainWindow *main) : BlankStatePage(main) +{ + welcomeTitle->setText("Diary"); + welcomeText->setText("No ride ?\nLet's start with some data."); + + img->setIcon(QPixmap(":images/diary.png")); + img->setIconSize(QSize(800,330)); + + /*ShortCut scImport; + scImport.label = tr("Import files from your disc or usb device"); + scImport.buttonLabel = tr("Import data"); + scImport.buttonIconPath = ":images/mac/download.png"; + addToShortCuts(scImport); + + ShortCut scDownload; + scDownload.label = tr("Download from serial device."); + scDownload.buttonLabel = tr("Download from device"); + scDownload.buttonIconPath = ":images/mac/download.png"; + addToShortCuts(scDownload);*/ +} + +// +// Replace train window when no ride +// +BlankStateTrainPage::BlankStateTrainPage(MainWindow *main) : BlankStatePage(main) +{ + welcomeTitle->setText("Train"); + welcomeText->setText("No ride ?\nLet's start with some data."); + + img->setIcon(QPixmap(":images/train.png")); + img->setIconSize(QSize(800,330)); + + ShortCut scAddDevice; + scAddDevice.label = tr("Scan and add device for realtime."); + scAddDevice.buttonLabel = tr("Add device"); + scAddDevice.buttonIconPath = ":images/mac/download.png"; + QPushButton *addDeviceButton = addToShortCuts(scAddDevice); + connect(addDeviceButton, SIGNAL(clicked()), main, SLOT(addDevice())); + + + ShortCut scImportWorkout; + scImportWorkout.label = tr("Import Video or Workout from Disk."); + scImportWorkout.buttonLabel = tr("Import Video/Workout"); + scImportWorkout.buttonIconPath = ":images/mac/download.png"; + QPushButton *importWorkoutButton = addToShortCuts(scImportWorkout); + connect(importWorkoutButton, SIGNAL(clicked()), main, SLOT(importWorkout())); +} diff --git a/src/BlankState.h b/src/BlankState.h new file mode 100644 index 000000000..2cf1f6964 --- /dev/null +++ b/src/BlankState.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2012 Damien Grauser (Damien.Grauser@pev-geneve.ch) + * + * 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 + */ + +#ifndef BLANKSTATE_H +#define BLANKSTATE_H + +#include "GoldenCheetah.h" +#include + +struct ShortCut +{ + QString label; + QString text; + QString buttonLabel; + QString buttonIconPath; + QMetaMethod buttonSlot; +}; + +class BlankStatePage : public GcWindow +{ + Q_OBJECT + G_OBJECT + + public: + BlankStatePage(MainWindow *main); + + QPushButton *addToShortCuts(ShortCut shortCut); + + protected: + MainWindow *main; + + QVBoxLayout *leftLayout; + QLabel *welcomeTitle; + QLabel *welcomeText; + + QToolButton *img; + + + + private: + QList shortCuts; +}; + +class BlankStateAnalysisPage : public BlankStatePage +{ + Q_OBJECT + G_OBJECT + + public: + BlankStateAnalysisPage(MainWindow *main); + +}; + +class BlankStateHomePage : public BlankStatePage +{ + Q_OBJECT + G_OBJECT + + public: + BlankStateHomePage(MainWindow *main); + +}; + +class BlankStateDiaryPage : public BlankStatePage +{ + Q_OBJECT + G_OBJECT + + public: + BlankStateDiaryPage(MainWindow *main); + +}; + +class BlankStateTrainPage : public BlankStatePage +{ + Q_OBJECT + G_OBJECT + + public: + BlankStateTrainPage(MainWindow *main); + +}; + +#endif diff --git a/src/GcScopeBar.cpp b/src/GcScopeBar.cpp index 53c7380eb..8439b8f06 100644 --- a/src/GcScopeBar.cpp +++ b/src/GcScopeBar.cpp @@ -193,3 +193,9 @@ GcScopeBar::showHideClicked() emit showSideBar(state); setShowSidebar(state); } + +void +GcScopeBar::setEnabledHideButton(bool EnableHideButton) { + showHide->setEnabled(EnableHideButton); +} + diff --git a/src/GcScopeBar.h b/src/GcScopeBar.h index 84aee042d..d94a5b211 100644 --- a/src/GcScopeBar.h +++ b/src/GcScopeBar.h @@ -33,6 +33,8 @@ public: GcScopeBar(QWidget *parent, QWidget *traintool); ~GcScopeBar(); + void setEnabledHideButton(bool showHideButton); + public slots: void paintEvent (QPaintEvent *event); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 60371591f..48bab2adc 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -21,6 +21,7 @@ #include "AddIntervalDialog.h" #include "AthleteTool.h" #include "BestIntervalDialog.h" +#include "BlankState.h" #include "ChooseCyclistDialog.h" #include "Colors.h" #include "ConfigDialog.h" @@ -688,6 +689,13 @@ MainWindow::MainWindow(const QDir &home) : analysisControls->addWidget(analWindow->controls()); currentWindow = analWindow; + // NO RIDE WINDOW - Replace analysis, home and train window when no ride + blankStateAnalysisPage = new BlankStateAnalysisPage(this); + blankStateHomePage = new BlankStateHomePage(this); + blankStateDiaryPage = new BlankStateDiaryPage(this); + blankStateTrainPage = new BlankStateTrainPage(this); + + // POPULATE TOOLBOX // do controllers after home windows -- they need their first signals caught @@ -722,7 +730,13 @@ MainWindow::MainWindow(const QDir &home) : views->addWidget(diaryWindow); views->addWidget(homeWindow); - views->setCurrentIndex(0); // default to Analysis + // add Blank State pages + views->addWidget(blankStateAnalysisPage); + views->addWidget(blankStateHomePage); + views->addWidget(blankStateDiaryPage); + views->addWidget(blankStateTrainPage); + + //views->setCurrentIndex(0); views->setContentsMargins(0,0,0,0); @@ -907,6 +921,9 @@ MainWindow::MainWindow(const QDir &home) : if (allRides->childCount() != 0) treeWidget->setCurrentItem(allRides->child(allRides->childCount()-1)); + // default to Analysis + selectAnalysis(); + // now we're up and runnning lets connect the signals connect(treeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(rideTreeWidgetSelectionChanged())); connect(intervalWidget,SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(showContextMenuPopup(const QPoint &))); @@ -1435,11 +1452,29 @@ MainWindow::helpView() void MainWindow::selectAnalysis() { - masterControls->setCurrentIndex(0); - views->setCurrentIndex(0); - analWindow->selected(); // tell it! - currentWindow = analWindow; - trainTool->getToolbarButtons()->hide(); + // No ride - no analysis view + if (allRides->childCount() == 0) { + masterControls->setVisible(false); + toolBox->hide(); +#ifndef Q_OS_MAC + side->setEnabled(false); +#else + scopebar->setEnabledHideButton(false); +#endif + views->setCurrentWidget(blankStateAnalysisPage); + } else { + masterControls->setVisible(true); + toolBox->show(); +#ifndef Q_OS_MAC + side->setEnabled(true); +#else + scopebar->setEnabledHideButton(true); +#endif + masterControls->setCurrentIndex(0); + views->setCurrentIndex(0); + analWindow->selected(); // tell it! + currentWindow = analWindow; + trainTool->getToolbarButtons()->hide(); #ifndef Q_OS_MAC analButtons->show(); #ifdef GC_HAVE_ICAL @@ -1448,69 +1483,113 @@ MainWindow::selectAnalysis() toolbar->select(1); #endif #else - scopebar->selected(2); + scopebar->selected(2); #endif - toolBox->setCurrentIndex(0); - setStyle(); + toolBox->setCurrentIndex(0); + setStyle(); + } } void MainWindow::selectTrain() { - masterControls->setCurrentIndex(1); - views->setCurrentIndex(1); - trainWindow->selected(); // tell it! - currentWindow = trainWindow; - trainTool->getToolbarButtons()->show(); + if (allRides->childCount() == 0) { + masterControls->setVisible(false); + toolBox->hide(); #ifndef Q_OS_MAC - analButtons->hide(); -#ifdef GC_HAVE_ICAL - toolbar->select(3); + side->setEnabled(false); #else - toolbar->select(2); + scopebar->setEnabledHideButton(false); #endif -#else - scopebar->selected(3); -#endif - toolBox->setCurrentIndex(2); - setStyle(); + views->setCurrentWidget(blankStateTrainPage); + } else { + masterControls->setVisible(true); + toolBox->show(); + side->setEnabled(true); + masterControls->setCurrentIndex(1); + views->setCurrentIndex(1); + trainWindow->selected(); // tell it! + currentWindow = trainWindow; + trainTool->getToolbarButtons()->show(); + #ifndef Q_OS_MAC + analButtons->hide(); + #ifdef GC_HAVE_ICAL + toolbar->select(3); + #else + toolbar->select(2); + #endif + #else + scopebar->selected(3); + #endif + toolBox->setCurrentIndex(2); + setStyle(); + } } void MainWindow::selectDiary() { - masterControls->setCurrentIndex(2); - views->setCurrentIndex(2); - diaryWindow->selected(); // tell it! - currentWindow = diaryWindow; - trainTool->getToolbarButtons()->hide(); + if (allRides->childCount() == 0) { + masterControls->setVisible(false); + toolBox->hide(); #ifndef Q_OS_MAC - analButtons->hide(); - toolbar->select(1); + side->setEnabled(false); #else - scopebar->selected(1); + scopebar->setEnabledHideButton(false); #endif - toolBox->setCurrentIndex(1); - gcCalendar->refresh(); // get that signal with the date range... - setStyle(); + views->setCurrentWidget(blankStateDiaryPage); + } else { + masterControls->setVisible(true); + toolBox->show(); + side->show(); + masterControls->setCurrentIndex(2); + views->setCurrentIndex(2); + diaryWindow->selected(); // tell it! + currentWindow = diaryWindow; + trainTool->getToolbarButtons()->hide(); + #ifndef Q_OS_MAC + analButtons->hide(); + toolbar->select(1); + #else + scopebar->selected(1); + #endif + toolBox->setCurrentIndex(1); + gcCalendar->refresh(); // get that signal with the date range... + setStyle(); + } } void MainWindow::selectHome() { - masterControls->setCurrentIndex(3); - views->setCurrentIndex(3); - homeWindow->selected(); // tell it! - currentWindow = homeWindow; - trainTool->getToolbarButtons()->hide(); + // No ride - no analysis view + if (allRides->childCount() == 0) { + masterControls->setVisible(false); + toolBox->hide(); #ifndef Q_OS_MAC - analButtons->hide(); - toolbar->select(0); + side->setEnabled(false); #else - scopebar->selected(0); + scopebar->setEnabledHideButton(false); #endif - toolBox->setCurrentIndex(3); - setStyle(); + views->setCurrentWidget(blankStateHomePage); + } else { + masterControls->setVisible(true); + toolBox->show(); + side->setEnabled(true); + masterControls->setCurrentIndex(3); + views->setCurrentIndex(3); + homeWindow->selected(); // tell it! + currentWindow = homeWindow; + trainTool->getToolbarButtons()->hide(); + #ifndef Q_OS_MAC + analButtons->hide(); + toolbar->select(0); + #else + scopebar->selected(0); + #endif + toolBox->setCurrentIndex(3); + setStyle(); + } } void MainWindow::selectAthlete() diff --git a/src/MainWindow.h b/src/MainWindow.h index e0dca02f2..5453d600f 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -70,6 +70,10 @@ class QtMacSegmentedButton; class GcScopeBar; class RideFileCache; class Library; +class BlankStateAnalysisPage; +class BlankStateHomePage; +class BlankStateDiaryPage; +class BlankStateTrainPage; extern QList mainwindows; // keep track of all the MainWindows we have open @@ -148,6 +152,12 @@ class MainWindow : public QMainWindow HomeWindow *trainWindow; HomeWindow *analWindow; HomeWindow *currentWindow; // tracks the curerntly showing window + + BlankStateAnalysisPage *blankStateAnalysisPage; + BlankStateHomePage *blankStateHomePage; + BlankStateDiaryPage *blankStateDiaryPage; + BlankStateTrainPage *blankStateTrainPage; + ChartSettings *chartSettings; // state data diff --git a/src/application.qrc b/src/application.qrc index 26c320e82..f5729c7f7 100644 --- a/src/application.qrc +++ b/src/application.qrc @@ -1,126 +1,131 @@ - - - images/devices/garminusb.png - images/devices/computrainer.png - images/devices/kickr.png - images/devices/fortius.png - images/devices/quarqd.png - images/toolbar/main/togglefull.png - images/toolbar/main/hideside.png - images/toolbar/main/hiderside.png - images/toolbar/main/normal.png - images/toolbar/main/showside.png - images/toolbar/main/showrside.png - images/toolbar/main/style.png - images/toolbar/main/tab.png - images/toolbar/main/tile.png - images/toolbar/main/analysis.png - images/toolbar/main/athlete.png - images/toolbar/main/config.png - images/toolbar/main/diary.png - images/toolbar/main/help.png - images/toolbar/main/home.png - images/toolbar/main/measures.png - images/toolbar/main/train.png - images/toolbar/clear.png - images/toolbar/search.png - images/toolbar/filter.png - images/toolbar/GeneralPreferences.png - images/toolbar/user.png - images/toolbar/passwords.png - images/toolbar/color.png - images/toolbar/data.png - images/toolbar/abacus.png - images/maps/cycling_feed.png - images/maps/loop.png - images/maps/cycling.png - images/maps/cycling_sprint.png - images/maps/finish.png - images/IconAltitude.png - images/IconBike.png - images/IconCadence.png - images/IconGPS.png - images/IconHR.png - images/IconPower.png - images/IconRun.png - images/IconSpeed.png - images/IconSwim.png - images/IconTemp.png - images/IconTorque.png - images/IconWind.png - images/aluBar.png - images/aluToolBar.png - images/aluBarDark.png - images/aluLight.jpg - images/carbon.jpg - images/dark.jpg - images/twitter.png - images/cyclist.png - images/imetrics.png - images/power.png - images/arduino.png - images/query.png - images/update.png - images/gc.png - images/gc-blank.png - images/config.png - images/cheetah.png - images/noavatar.png - images/activity.png - images/metadata.png - images/stopwatch.png - images/settings.png - images/addchart.png - images/library.png - translations/gc_fr.qm - translations/gc_ja.qm - translations/gc_it.qm - translations/gc_pt-br.qm - translations/gc_de.qm - translations/gc_ru.qm - translations/gc_cs.qm - translations/gc_es.qm - translations/gc_pt.qm - xml/charts.xml - xml/metadata.xml - xml/measures.xml - xml/train-layout.xml - xml/diary-layout.xml - xml/analysis-layout.xml - xml/home-layout.xml - html/ltm-summary.html - images/oxygen/play.png - images/oxygen/pause.png - images/oxygen/stop.png - images/oxygen/ffwd.png - images/oxygen/rewind.png - images/oxygen/lap.png - images/oxygen/save.png - images/oxygen/open.png - images/toolbar/close-icon.png - images/toolbar/save.png - images/toolbar/splash green.png - images/toolbar/cut.png - images/toolbar/copy.png - images/toolbar/paste.png - images/toolbar/undo.png - images/toolbar/redo.png - images/toolbar/back_alt.png - images/toolbar/forward_alt.png - images/toolbar/popbutton.png - images/toolbar/flipbutton.png - images/splashscreen.png - images/mac/compose.png - images/mac/download.png - images/mac/share.png - images/mac/split.png - images/mac/trash.png - images/mac/stop.png - images/mac/tabbed.png - images/mac/tiled.png - images/mac/scope-active.png - images/mac/scope-inactive.png - images/mac/hide.png - images/mac/show.png - + + + images/devices/garminusb.png + images/devices/computrainer.png + images/devices/kickr.png + images/devices/fortius.png + images/devices/quarqd.png + images/toolbar/main/togglefull.png + images/toolbar/main/hideside.png + images/toolbar/main/hiderside.png + images/toolbar/main/normal.png + images/toolbar/main/showside.png + images/toolbar/main/showrside.png + images/toolbar/main/style.png + images/toolbar/main/tab.png + images/toolbar/main/tile.png + images/toolbar/main/analysis.png + images/toolbar/main/athlete.png + images/toolbar/main/config.png + images/toolbar/main/diary.png + images/toolbar/main/help.png + images/toolbar/main/home.png + images/toolbar/main/measures.png + images/toolbar/main/train.png + images/toolbar/clear.png + images/toolbar/search.png + images/toolbar/filter.png + images/toolbar/GeneralPreferences.png + images/toolbar/user.png + images/toolbar/passwords.png + images/toolbar/color.png + images/toolbar/data.png + images/toolbar/abacus.png + images/maps/cycling_feed.png + images/maps/loop.png + images/maps/cycling.png + images/maps/cycling_sprint.png + images/maps/finish.png + images/IconAltitude.png + images/IconBike.png + images/IconCadence.png + images/IconGPS.png + images/IconHR.png + images/IconPower.png + images/IconRun.png + images/IconSpeed.png + images/IconSwim.png + images/IconTemp.png + images/IconTorque.png + images/IconWind.png + images/aluBar.png + images/aluToolBar.png + images/aluBarDark.png + images/aluLight.jpg + images/carbon.jpg + images/dark.jpg + images/twitter.png + images/cyclist.png + images/imetrics.png + images/power.png + images/arduino.png + images/query.png + images/update.png + images/gc.png + images/gc-blank.png + images/config.png + images/cheetah.png + images/noavatar.png + images/activity.png + images/metadata.png + images/stopwatch.png + images/settings.png + images/addchart.png + images/library.png + translations/gc_fr.qm + translations/gc_ja.qm + translations/gc_it.qm + translations/gc_pt-br.qm + translations/gc_de.qm + translations/gc_ru.qm + translations/gc_cs.qm + translations/gc_es.qm + translations/gc_pt.qm + xml/charts.xml + xml/metadata.xml + xml/measures.xml + xml/train-layout.xml + xml/diary-layout.xml + xml/analysis-layout.xml + xml/home-layout.xml + html/ltm-summary.html + images/oxygen/play.png + images/oxygen/pause.png + images/oxygen/stop.png + images/oxygen/ffwd.png + images/oxygen/rewind.png + images/oxygen/lap.png + images/oxygen/save.png + images/oxygen/open.png + images/toolbar/close-icon.png + images/toolbar/save.png + images/toolbar/splash green.png + images/toolbar/cut.png + images/toolbar/copy.png + images/toolbar/paste.png + images/toolbar/undo.png + images/toolbar/redo.png + images/toolbar/back_alt.png + images/toolbar/forward_alt.png + images/toolbar/popbutton.png + images/toolbar/flipbutton.png + images/splashscreen.png + images/mac/compose.png + images/mac/download.png + images/mac/share.png + images/mac/split.png + images/mac/trash.png + images/mac/stop.png + images/mac/tabbed.png + images/mac/tiled.png + images/mac/scope-active.png + images/mac/scope-inactive.png + images/mac/hide.png + images/mac/show.png + images/nogps.png + images/analysis.png + images/home.png + images/train.png + images/diary.png + diff --git a/src/images/analysis.png b/src/images/analysis.png new file mode 100644 index 000000000..ba5060d24 Binary files /dev/null and b/src/images/analysis.png differ diff --git a/src/images/nogps.png b/src/images/nogps.png new file mode 100644 index 000000000..1631a9742 Binary files /dev/null and b/src/images/nogps.png differ diff --git a/src/src.pro b/src/src.pro index 96c916c57..5a3e9d274 100644 --- a/src/src.pro +++ b/src/src.pro @@ -233,6 +233,7 @@ HEADERS += \ BinRideFile.h \ Bin2RideFile.h \ BingMap.h \ + BlankState.h \ CalendarDownload.h \ ChartSettings.h \ ChooseCyclistDialog.h \ @@ -423,6 +424,7 @@ SOURCES += \ BinRideFile.cpp \ Bin2RideFile.cpp \ BingMap.cpp \ + BlankState.cpp \ CalendarDownload.cpp \ ChartSettings.cpp \ ChooseCyclistDialog.cpp \