Fixed BUG with inner timers.
| @@ -3,5 +3,6 @@ | |||||||
|         <file>resources/play.wav</file> |         <file>resources/play.wav</file> | ||||||
|         <file>resources/rest.wav</file> |         <file>resources/rest.wav</file> | ||||||
|         <file>resources/stop.wav</file> |         <file>resources/stop.wav</file> | ||||||
|  |         <file>resources/inner.wav</file> | ||||||
|     </qresource> |     </qresource> | ||||||
| </RCC> | </RCC> | ||||||
|   | |||||||
| Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 6.7 KiB | 
| Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.4 KiB | 
| Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.5 KiB | 
| @@ -47,9 +47,22 @@ Page { | |||||||
|     property int mRoundMs: settings.roundsMs |     property int mRoundMs: settings.roundsMs | ||||||
|     property int mRestMs: settings.restMs |     property int mRestMs: settings.restMs | ||||||
|  |  | ||||||
|  |     property var mListOfInnerTimers: [] | ||||||
|  |  | ||||||
|     onStatusChanged: { |     onStatusChanged: { | ||||||
|         if (status === PageStatus.Active) { |         if (status === PageStatus.Active) { | ||||||
|             Helper.pushPresetListPage(); |             Helper.pushPresetListPage() | ||||||
|  |  | ||||||
|  |             var counter = 0 | ||||||
|  |             for (var i = 0; i < settingsColumn.children.length; i++) { | ||||||
|  |                 if (settingsColumn.children[i].objectName === 'innerSlider') { | ||||||
|  | //                    if (counter in mListOfInnerTimers) { | ||||||
|  | //                        counter++ | ||||||
|  | //                    } else { | ||||||
|  | //                        settingsColumn.children[i].destroy() | ||||||
|  | //                    } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -65,7 +78,8 @@ Page { | |||||||
|                         presetName.text, |                         presetName.text, | ||||||
|                         roundsSlider.value, |                         roundsSlider.value, | ||||||
|                         roundsTimeSlider.value, |                         roundsTimeSlider.value, | ||||||
|                         Converter.sToMs(restSlider.value) |                         Converter.sToMs(restSlider.value), | ||||||
|  |                         Helper.getListOfInnerTimers() | ||||||
|                     ) |                     ) | ||||||
|  |  | ||||||
|                     boxingTimer.loadPreset(presetName.text) |                     boxingTimer.loadPreset(presetName.text) | ||||||
| @@ -75,6 +89,20 @@ Page { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         PushUpMenu { | ||||||
|  |             MenuItem { | ||||||
|  |                 text: qsTr("Add inner time") | ||||||
|  |                 onClicked: Helper.addSliderForInnerTime() | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             MenuItem { | ||||||
|  |                 text: qsTr("Remove last inner time") | ||||||
|  |                 onClicked: Helper.removeLastSliderFromInnerTimers() | ||||||
|  |  | ||||||
|  |                 visible: mListOfInnerTimers.length | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|         contentHeight: settingsColumn.height |         contentHeight: settingsColumn.height | ||||||
|  |  | ||||||
|         Column { |         Column { | ||||||
| @@ -136,6 +164,12 @@ Page { | |||||||
|  |  | ||||||
|                 label: qsTr("Total rounds") |                 label: qsTr("Total rounds") | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             SectionHeader { | ||||||
|  |                 text: qsTr("Inner timers") | ||||||
|  |  | ||||||
|  |                 visible: mListOfInnerTimers.length | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -11,3 +11,64 @@ function playPauseTimer() { | |||||||
|         boxingTimer.restore() |         boxingTimer.restore() | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function addSliderForInnerTime(value) { | ||||||
|  |     if (value === undefined) value = 5 | ||||||
|  |  | ||||||
|  |     var remainingTimeForInner = settingsPage.mRoundMs | ||||||
|  |     var numberOfInnerTimers = settingsPage.mListOfInnerTimers.length | ||||||
|  |     for (var i = 0; i < numberOfInnerTimers; i++) { | ||||||
|  |         remainingTimeForInner -= settingsPage.mListOfInnerTimers[i].value | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (remainingTimeForInner > 0) { | ||||||
|  |         var number = parseInt(numberOfInnerTimers) + 1 | ||||||
|  |         var id = "innerTime_" + number | ||||||
|  |         var newSlider = Qt.createQmlObject( | ||||||
|  |             "import QtQuick 2.2;" + | ||||||
|  |             "import Sailfish.Silica 1.0;" + | ||||||
|  |             "import 'converter.js' as Converter;" + | ||||||
|  |             "Slider {" + | ||||||
|  |                 "id: " + id + ";" + | ||||||
|  |                 "objectName: 'innerSlider';" + | ||||||
|  |  | ||||||
|  |                 "width: parent.width;" + | ||||||
|  |  | ||||||
|  |                 "minimumValue: Converter.sToMs(5);" + | ||||||
|  |                 "maximumValue: "+ remainingTimeForInner +";" + | ||||||
|  |                 "stepSize: Converter.sToMs(5);" + | ||||||
|  |  | ||||||
|  |                 "value: "+ value +";" + | ||||||
|  |                 "valueText: Converter.msToTime(value);" + | ||||||
|  |  | ||||||
|  |                 "label: qsTr('Inner time "+ number +"');" + | ||||||
|  |             "}", | ||||||
|  |             settingsColumn, | ||||||
|  |             "dynamicInnerTimerSlider" | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         var newArray = settingsPage.mListOfInnerTimers | ||||||
|  |         newArray.push(newSlider); | ||||||
|  |         settingsPage.mListOfInnerTimers = newArray; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function removeLastSliderFromInnerTimers() { | ||||||
|  |     var newArray = settingsPage.mListOfInnerTimers | ||||||
|  |     var slider = newArray.pop() | ||||||
|  |  | ||||||
|  |     slider.destroy() | ||||||
|  |  | ||||||
|  |     settingsPage.mListOfInnerTimers = newArray | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function getListOfInnerTimers() { | ||||||
|  |     var list = [] | ||||||
|  |  | ||||||
|  |     var timers = settingsPage.mListOfInnerTimers.length | ||||||
|  |     for (var i = 0; i < timers; i++) { | ||||||
|  |         list.push(settingsPage.mListOfInnerTimers[i].value) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return list; | ||||||
|  | } | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								resources/inner.wav
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -66,6 +66,9 @@ desktop-file-install --delete-original       \ | |||||||
| %{_bindir} | %{_bindir} | ||||||
| %{_datadir}/%{name} | %{_datadir}/%{name} | ||||||
| %{_datadir}/applications/%{name}.desktop | %{_datadir}/applications/%{name}.desktop | ||||||
| %{_datadir}/icons/hicolor/*/apps/%{name}.png | %{_datadir}/icons/hicolor/86x86/apps/%{name}.png | ||||||
|  | %{_datadir}/icons/hicolor/108x108/apps/%{name}.png | ||||||
|  | %{_datadir}/icons/hicolor/128x128/apps/%{name}.png | ||||||
|  | %{_datadir}/icons/hicolor/256x256/apps/%{name}.png | ||||||
| # >> files | # >> files | ||||||
| # << files | # << files | ||||||
|   | |||||||
| @@ -39,7 +39,10 @@ Files: | |||||||
|   - '%{_bindir}' |   - '%{_bindir}' | ||||||
|   - '%{_datadir}/%{name}' |   - '%{_datadir}/%{name}' | ||||||
|   - '%{_datadir}/applications/%{name}.desktop' |   - '%{_datadir}/applications/%{name}.desktop' | ||||||
|   - '%{_datadir}/icons/hicolor/*/apps/%{name}.png' |   - '%{_datadir}/icons/hicolor/86x86/apps/%{name}.png' | ||||||
|  |   - '%{_datadir}/icons/hicolor/108x108/apps/%{name}.png' | ||||||
|  |   - '%{_datadir}/icons/hicolor/128x128/apps/%{name}.png' | ||||||
|  |   - '%{_datadir}/icons/hicolor/256x256/apps/%{name}.png' | ||||||
|  |  | ||||||
| # For more information about yaml and what's supported in Sailfish OS | # For more information about yaml and what's supported in Sailfish OS | ||||||
| # build system, please see https://wiki.merproject.org/wiki/Spectacle | # build system, please see https://wiki.merproject.org/wiki/Spectacle | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| #include "boxingsettings.h" | #include "boxingsettings.h" | ||||||
|  |  | ||||||
| #include <QString> | #include <QString> | ||||||
|  | #include <QVariant> | ||||||
|  |  | ||||||
| BoxingSettings::BoxingSettings() : | BoxingSettings::BoxingSettings() : | ||||||
|     mRounds(DefaultRounds), |     mRounds(DefaultRounds), | ||||||
| @@ -46,17 +47,30 @@ void BoxingSettings::loadPreset() { | |||||||
|         this->mRounds = DefaultRounds; |         this->mRounds = DefaultRounds; | ||||||
|         this->mRoundMilliseconds = DefaultRoundMilliseconds; |         this->mRoundMilliseconds = DefaultRoundMilliseconds; | ||||||
|         this->mRestMilliseconds = DefaultRestMilliseconds; |         this->mRestMilliseconds = DefaultRestMilliseconds; | ||||||
|  |         this->mInnerTimers.clear(); | ||||||
|     } else { |     } else { | ||||||
|         this->beginGroup(this->mPreset); |         this->beginGroup(this->mPreset); | ||||||
|         this->mPresetName = this->value("name").toString(); |         this->mPresetName = this->value("name").toString(); | ||||||
|         this->mRounds = this->value("rounds").toInt(); |         this->mRounds = this->value("rounds").toInt(); | ||||||
|         this->mRoundMilliseconds = this->value("roundmilliseconds").toInt(); |         this->mRoundMilliseconds = this->value("roundmilliseconds").toInt(); | ||||||
|         this->mRestMilliseconds = this->value("restmilliseconds").toInt(); |         this->mRestMilliseconds = this->value("restmilliseconds").toInt(); | ||||||
|  |  | ||||||
|  | //        QList<int> list = this->value("innerTimers").value<QList<int>>(); | ||||||
|  |         this->mInnerTimers = this->value("innerTimers").value<QList<int>>(); | ||||||
|  |  | ||||||
|  | //#ifdef QT_DEBUG | ||||||
|  | //    qDebug() << list; | ||||||
|  | //#endif | ||||||
|  |  | ||||||
|  | //        foreach(QVariant v, list) { | ||||||
|  | //            this->mInnerTimers.append(v.toInt()); | ||||||
|  | //        } | ||||||
|  |  | ||||||
|         this->endGroup(); |         this->endGroup(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| void BoxingSettings::savePreset(const QString &name, const int &rounds, const int &roundMilliseconds, const int &restMilliseconds) { | void BoxingSettings::savePreset(const QString &name, const int &rounds, const int &roundMilliseconds, const int &restMilliseconds, const QList<int> &innerTimers) { | ||||||
|     QString strippedName = this->convertRichNameToGroup(name); |     QString strippedName = this->convertRichNameToGroup(name); | ||||||
|  |  | ||||||
|     this->beginGroup(strippedName); |     this->beginGroup(strippedName); | ||||||
| @@ -64,6 +78,12 @@ void BoxingSettings::savePreset(const QString &name, const int &rounds, const in | |||||||
|     this->setValue("rounds", rounds); |     this->setValue("rounds", rounds); | ||||||
|     this->setValue("roundmilliseconds", roundMilliseconds); |     this->setValue("roundmilliseconds", roundMilliseconds); | ||||||
|     this->setValue("restmilliseconds", restMilliseconds); |     this->setValue("restmilliseconds", restMilliseconds); | ||||||
|  |  | ||||||
|  | #ifdef QT_DEBUG | ||||||
|  |     qDebug() << innerTimers; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     this->setValue("innerTimers", QVariant::fromValue(innerTimers)); | ||||||
|     this->endGroup(); |     this->endGroup(); | ||||||
|  |  | ||||||
|     this->setPreset(strippedName); |     this->setPreset(strippedName); | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ | |||||||
| #include <QString> | #include <QString> | ||||||
| #include <QStringList> | #include <QStringList> | ||||||
| #include <QSettings> | #include <QSettings> | ||||||
|  | #include <QList> | ||||||
|  |  | ||||||
| #ifdef QT_DEBUG | #ifdef QT_DEBUG | ||||||
|     #include <QDebug> |     #include <QDebug> | ||||||
| @@ -25,6 +26,7 @@ class BoxingSettings : public QSettings { | |||||||
|         Q_PROPERTY(int rounds READ getRounds WRITE setRounds NOTIFY presetChanged) |         Q_PROPERTY(int rounds READ getRounds WRITE setRounds NOTIFY presetChanged) | ||||||
|         Q_PROPERTY(int roundsMs READ getRoundMilliseconds WRITE setRoundMilliseconds NOTIFY presetChanged) |         Q_PROPERTY(int roundsMs READ getRoundMilliseconds WRITE setRoundMilliseconds NOTIFY presetChanged) | ||||||
|         Q_PROPERTY(int restMs READ getRestMilliseconds WRITE setRestMilliseconds NOTIFY presetChanged) |         Q_PROPERTY(int restMs READ getRestMilliseconds WRITE setRestMilliseconds NOTIFY presetChanged) | ||||||
|  |         Q_PROPERTY(QList<int> innerTimers READ getInnerTimers NOTIFY presetChanged) | ||||||
|         /** @endcond */ |         /** @endcond */ | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
| @@ -78,7 +80,7 @@ class BoxingSettings : public QSettings { | |||||||
|          * |          * | ||||||
|          * @brief Save or override settings about specific preset |          * @brief Save or override settings about specific preset | ||||||
|          */ |          */ | ||||||
|         Q_INVOKABLE void savePreset(const QString &name, const int &rounds, const int &roundMilliseconds, const int &restMilliseconds); |         Q_INVOKABLE void savePreset(const QString &name, const int &rounds, const int &roundMilliseconds, const int &restMilliseconds, const QList<int> &innerTimers); | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|          * @addtogroup QML |          * @addtogroup QML | ||||||
| @@ -115,6 +117,20 @@ class BoxingSettings : public QSettings { | |||||||
|          */ |          */ | ||||||
|         inline int getRestMilliseconds() { return this->mRestMilliseconds; } |         inline int getRestMilliseconds() { return this->mRestMilliseconds; } | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * @brief gerInnerTimers() | ||||||
|  |          * | ||||||
|  |          * @return the list of inner timers | ||||||
|  |          */ | ||||||
|  |         inline QList<int> getInnerTimers() { return this->mInnerTimers; } | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * @brief getInnerTimer(const int &index) | ||||||
|  |          * | ||||||
|  |          * @return the specific timer in milliseconds | ||||||
|  |          */ | ||||||
|  |         inline int getInnerTimer(const int &index) { return this->mInnerTimers.at(index); } | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|          * @fn QString getPreset() |          * @fn QString getPreset() | ||||||
|          * |          * | ||||||
| @@ -166,6 +182,8 @@ class BoxingSettings : public QSettings { | |||||||
|         int mRoundMilliseconds; |         int mRoundMilliseconds; | ||||||
|         int mRestMilliseconds; |         int mRestMilliseconds; | ||||||
|  |  | ||||||
|  |         QList<int> mInnerTimers; | ||||||
|  |  | ||||||
|         QString mPreset; |         QString mPreset; | ||||||
|         QString mPresetName; |         QString mPresetName; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,16 +8,20 @@ | |||||||
|  |  | ||||||
| BoxingTimer::BoxingTimer() : | BoxingTimer::BoxingTimer() : | ||||||
|     mRound(0), |     mRound(0), | ||||||
|  |     mInnerRemainingMilliseconds(0), | ||||||
|     mStatus(Status::Stop), |     mStatus(Status::Stop), | ||||||
|     mOldStatus(Status::Default) { |     mOldStatus(Status::Default) { | ||||||
|     this->setTimerType(Qt::VeryCoarseTimer); |     this->setTimerType(Qt::VeryCoarseTimer); | ||||||
|  |  | ||||||
|     this->settings = new BoxingSettings(); |     this->settings = new BoxingSettings(); | ||||||
|     this->mRemainingMilliseconds = settings->getRoundMilliseconds(); |     this->mRemainingMilliseconds = this->settings->getRoundMilliseconds(); | ||||||
|  |  | ||||||
|  |     this->setInnerTimers(); | ||||||
|  |  | ||||||
|     this->playBell = new QSound(":/audio/resources/play.wav"); |     this->playBell = new QSound(":/audio/resources/play.wav"); | ||||||
|     this->restBell = new QSound(":/audio/resources/rest.wav"); |     this->restBell = new QSound(":/audio/resources/rest.wav"); | ||||||
|     this->stopBell = new QSound(":/audio/resources/stop.wav"); |     this->stopBell = new QSound(":/audio/resources/stop.wav"); | ||||||
|  |     this->innerBell = new QSound(":/audio/resources/inner.wav"); | ||||||
|  |  | ||||||
|     QObject::connect(this, SIGNAL(statusChanged()), this, SLOT(applyStatus())); |     QObject::connect(this, SIGNAL(statusChanged()), this, SLOT(applyStatus())); | ||||||
|     QObject::connect(this, SIGNAL(timeout()), this, SLOT(updateRemainingMilliseconds())); |     QObject::connect(this, SIGNAL(timeout()), this, SLOT(updateRemainingMilliseconds())); | ||||||
| @@ -68,8 +72,10 @@ void BoxingTimer::applyStatus() { | |||||||
|         case Status::Reset: |         case Status::Reset: | ||||||
|             if (this->mOldStatus == Status::Start) { |             if (this->mOldStatus == Status::Start) { | ||||||
|                 this->setRemainingMilliseconds(this->settings->getRoundMilliseconds()); |                 this->setRemainingMilliseconds(this->settings->getRoundMilliseconds()); | ||||||
|  |                 this->setInnerTimers(); | ||||||
|             } else if (this->mOldStatus == Status::Rest) { |             } else if (this->mOldStatus == Status::Rest) { | ||||||
|                 this->setRemainingMilliseconds(this->settings->getRestMilliseconds()); |                 this->setRemainingMilliseconds(this->settings->getRestMilliseconds()); | ||||||
|  |                 this->setInnerTimers(); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             if (this->isActive()) { |             if (this->isActive()) { | ||||||
| @@ -109,11 +115,41 @@ void BoxingTimer::updateRemainingMilliseconds() { | |||||||
|             this->mStatus = Status::Start; |             this->mStatus = Status::Start; | ||||||
|             this->setRemainingMilliseconds(this->settings->getRoundMilliseconds()); |             this->setRemainingMilliseconds(this->settings->getRoundMilliseconds()); | ||||||
|  |  | ||||||
|  |             this->setInnerTimers(); | ||||||
|  |  | ||||||
|             this->nextRound(); |             this->nextRound(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         this->songsBell(); |         this->songsBell(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     this->updateInnerRemainingMilliseconds(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void BoxingTimer::updateInnerRemainingMilliseconds() { | ||||||
|  |     if (this->mInnerTime >= 0 && this->mStatus == Status::Start) { | ||||||
|  |         this->mInnerRemainingMilliseconds -= 1000; | ||||||
|  |  | ||||||
|  |         if (this->mInnerRemainingMilliseconds <= 0) { | ||||||
|  |             if (++this->mInnerTime >= this->mNumberOfInnerTimers) { | ||||||
|  |                 this->mInnerTime = 0; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             this->mInnerRemainingMilliseconds = this->settings->getInnerTimer(this->mInnerTime); | ||||||
|  |  | ||||||
|  |             this->innerBell->play(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void BoxingTimer::setInnerTimers() { | ||||||
|  |     this->mNumberOfInnerTimers = this->settings->getInnerTimers().size(); | ||||||
|  |  | ||||||
|  |     this->mInnerTime = -1; | ||||||
|  |     if (this->mNumberOfInnerTimers > 0) { | ||||||
|  |         this->mInnerTime = 0; | ||||||
|  |         this->mInnerRemainingMilliseconds = this->settings->getInnerTimer(this->mInnerTime); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| const QString BoxingTimer::remainingTimeToString() { | const QString BoxingTimer::remainingTimeToString() { | ||||||
| @@ -156,6 +192,8 @@ void BoxingTimer::loadPreset(const QString &preset) { | |||||||
|     this->mRemainingMilliseconds = settings->getRoundMilliseconds(); |     this->mRemainingMilliseconds = settings->getRoundMilliseconds(); | ||||||
|     this->mStatus = Status::Stop; |     this->mStatus = Status::Stop; | ||||||
|  |  | ||||||
|  |     this->setInnerTimers(); | ||||||
|  |  | ||||||
|     emit presetChanged(); |     emit presetChanged(); | ||||||
|     emit roundsToStringChanged(); |     emit roundsToStringChanged(); | ||||||
|     emit remainingTimeToStringChanged(); |     emit remainingTimeToStringChanged(); | ||||||
|   | |||||||
| @@ -155,17 +155,22 @@ class BoxingTimer : public QTimer { | |||||||
|         int mRoundsMilliseconds; |         int mRoundsMilliseconds; | ||||||
|         int mRemainingMilliseconds; |         int mRemainingMilliseconds; | ||||||
|  |  | ||||||
|  |         int mInnerTime; | ||||||
|  |         int mNumberOfInnerTimers; | ||||||
|  |         int mInnerRemainingMilliseconds; | ||||||
|  |  | ||||||
|         void setRemainingMilliseconds(const int &milliseconds); |         void setRemainingMilliseconds(const int &milliseconds); | ||||||
|         void setRound(const int &round); |         void setRound(const int &round); | ||||||
|  |  | ||||||
|         QSound *playBell; |         QSound *playBell; | ||||||
|         QSound *restBell; |         QSound *restBell; | ||||||
|         QSound *stopBell; |         QSound *stopBell; | ||||||
|  |         QSound *innerBell; | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|          * @fn void songsBell() |          * @fn void songsBell() | ||||||
|          * |          * | ||||||
|          * @brief Play the bell check actual status |          * @brief Play the bell if status changes | ||||||
|          */ |          */ | ||||||
|         void songsBell(); |         void songsBell(); | ||||||
|  |  | ||||||
| @@ -181,6 +186,20 @@ class BoxingTimer : public QTimer { | |||||||
|          */ |          */ | ||||||
|         void nextRound(); |         void nextRound(); | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * @fn void updateInnerRemainingMilliseconds() | ||||||
|  |          * | ||||||
|  |          * @brief Update remaining milliseconds of inner timer | ||||||
|  |          */ | ||||||
|  |         void updateInnerRemainingMilliseconds(); | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * @fn void setInnerTimers() | ||||||
|  |          * | ||||||
|  |          * @brief Setup inner timers from settings | ||||||
|  |          */ | ||||||
|  |         void setInnerTimers(); | ||||||
|  |  | ||||||
|     signals: |     signals: | ||||||
|         void remainingTimeToStringChanged(); |         void remainingTimeToStringChanged(); | ||||||
|         void roundsToStringChanged(); |         void roundsToStringChanged(); | ||||||
|   | |||||||
| @@ -29,6 +29,7 @@ | |||||||
| */ | */ | ||||||
|  |  | ||||||
| #include <QtQuick> | #include <QtQuick> | ||||||
|  | #include <QList> | ||||||
|  |  | ||||||
| #include <sailfishapp.h> | #include <sailfishapp.h> | ||||||
|  |  | ||||||
| @@ -46,6 +47,8 @@ int main(int argc, char *argv[]) | |||||||
|     // |     // | ||||||
|     // To display the view, call "show()" (will show fullscreen on device). |     // To display the view, call "show()" (will show fullscreen on device). | ||||||
|  |  | ||||||
|  |     qRegisterMetaTypeStreamOperators<QList<int>>("QList<int>"); | ||||||
|  |  | ||||||
|     qmlRegisterType<BoxingTimer>("Pw.Unitoo.Backend", 1, 0, "BoxingTimer"); |     qmlRegisterType<BoxingTimer>("Pw.Unitoo.Backend", 1, 0, "BoxingTimer"); | ||||||
|     qmlRegisterType<BoxingSettings>("Pw.Unitoo.Backend", 1, 0, "BoxingSettings"); |     qmlRegisterType<BoxingSettings>("Pw.Unitoo.Backend", 1, 0, "BoxingSettings"); | ||||||
|  |  | ||||||
|   | |||||||