You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
352 lines
7.1 KiB
C++
352 lines
7.1 KiB
C++
#include "cedittask.h"
|
|
#include "ui_cedittask.h"
|
|
#include "common.h"
|
|
#include "ctime.h"
|
|
|
|
CEditTask::CEditTask(QWidget *parent) :
|
|
QDialog(parent),
|
|
m_ui(new Ui::CEditTask)
|
|
{
|
|
m_bChanging = false;
|
|
m_ui->setupUi(this);
|
|
m_ui->m_lpGroupPause->setVisible(false);
|
|
}
|
|
|
|
CEditTask::~CEditTask()
|
|
{
|
|
delete m_ui;
|
|
}
|
|
|
|
void CEditTask::changeEvent(QEvent *e)
|
|
{
|
|
QDialog::changeEvent(e);
|
|
switch (e->type()) {
|
|
case QEvent::LanguageChange:
|
|
m_ui->retranslateUi(this);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CEditTask::on_buttonBox_accepted()
|
|
{
|
|
if(!m_ui->m_lpDesc->text().length())
|
|
{
|
|
MESSAGE(tr("Description is empty!"));
|
|
return;
|
|
}
|
|
if(!m_ui->m_lpHR->currentText().length())
|
|
{
|
|
MESSAGE(tr("No heart rate selected!"));
|
|
return;
|
|
}
|
|
if(m_ui->m_lpCount->value() > 1 && !m_ui->m_lpPauseHR->currentText().length())
|
|
{
|
|
MESSAGE(tr("No pause heart rate selected!"));
|
|
return;
|
|
}
|
|
accept();
|
|
}
|
|
|
|
void CEditTask::on_buttonBox_rejected()
|
|
{
|
|
reject();
|
|
}
|
|
|
|
|
|
void CEditTask::on_m_lpCount_valueChanged(int iCount)
|
|
{
|
|
if(iCount > 1)
|
|
m_ui->m_lpGroupPause->setVisible(true);
|
|
else
|
|
m_ui->m_lpGroupPause->setVisible(false);
|
|
|
|
CalcTotal();
|
|
}
|
|
|
|
QString CEditTask::GetDesc()
|
|
{
|
|
return(m_ui->m_lpDesc->text());
|
|
}
|
|
|
|
uint32_t CEditTask::GetCount()
|
|
{
|
|
return(m_ui->m_lpCount->value());
|
|
}
|
|
|
|
CTime CEditTask::GetTime()
|
|
{
|
|
return((CTime)m_ui->m_lpTime->time());
|
|
}
|
|
|
|
uint32_t CEditTask::GetDist()
|
|
{
|
|
return(m_ui->m_lpDist->value());
|
|
}
|
|
|
|
QString CEditTask::GetHR()
|
|
{
|
|
return(m_ui->m_lpHR->currentText());
|
|
}
|
|
|
|
uint32_t CEditTask::GetPace()
|
|
{
|
|
QTime Time = m_ui->m_lpPace->time();
|
|
return((uint32_t)Time.hour()*3600+(uint32_t)Time.minute()*60+(uint32_t)Time.second());
|
|
}
|
|
|
|
CTime CEditTask::GetPauseTime()
|
|
{
|
|
return(m_ui->m_lpPauseTime->time());
|
|
}
|
|
|
|
uint32_t CEditTask::GetPauseDist()
|
|
{
|
|
return(m_ui->m_lpPauseDist->value());
|
|
}
|
|
|
|
QString CEditTask::GetPauseHR()
|
|
{
|
|
return(m_ui->m_lpPauseHR->currentText());
|
|
}
|
|
|
|
uint32_t CEditTask::GetPausePace()
|
|
{
|
|
QTime Time = m_ui->m_lpPausePace->time();
|
|
return((uint32_t)Time.hour()*3600+(uint32_t)Time.minute()*60+(uint32_t)Time.second());
|
|
}
|
|
|
|
void CEditTask::Set(const QStringList& HRList, const QString& szDesc, uint32_t dwCount, const QTime& Time, uint32_t dwDist, const QString& szHR, uint32_t dwPace, const QTime& PauseTime, uint32_t dwPauseDist, const QString& szPauseHR, uint32_t dwPausePace)
|
|
{
|
|
int i;
|
|
|
|
for(i = 0;i < HRList.size();i++)
|
|
{
|
|
m_ui->m_lpHR->addItem(HRList.at(i));
|
|
m_ui->m_lpPauseHR->addItem(HRList.at(i));
|
|
}
|
|
|
|
m_ui->m_lpDesc->setText(szDesc);
|
|
m_ui->m_lpCount->setValue(dwCount);
|
|
m_ui->m_lpTime->setTime(Time);
|
|
m_ui->m_lpDist->setValue(dwDist);
|
|
m_ui->m_lpHR->setCurrentIndex(m_ui->m_lpHR->findText(szHR));
|
|
m_ui->m_lpPace->setTime(QTime(HOURS(dwPace), MINUTES(dwPace), SECONDS(dwPace)));
|
|
if(dwCount > 1)
|
|
{
|
|
m_ui->m_lpGroupPause->setVisible(true);
|
|
m_ui->m_lpPauseTime->setTime(PauseTime);
|
|
m_ui->m_lpPauseDist->setValue(dwPauseDist);
|
|
m_ui->m_lpPauseHR->setCurrentIndex(m_ui->m_lpHR->findText(szPauseHR));
|
|
m_ui->m_lpPausePace->setTime(QTime(HOURS(dwPausePace), MINUTES(dwPausePace), SECONDS(dwPausePace)));
|
|
}
|
|
|
|
CalcTotal();
|
|
}
|
|
|
|
void CEditTask::on_m_lpTime_timeChanged(QTime time)
|
|
{
|
|
if(m_bChanging)
|
|
{
|
|
m_bChanging = false;
|
|
return;
|
|
}
|
|
uint32_t dwTime = CTime(time).toDWORD();
|
|
uint32_t dwDist = m_ui->m_lpDist->value();
|
|
uint32_t dwPace = CTime(m_ui->m_lpPace->time()).toDWORD();
|
|
|
|
if(!dwTime)
|
|
return;
|
|
|
|
if(dwDist)
|
|
{
|
|
m_bChanging = true;
|
|
dwPace = dwTime*1000/dwDist;
|
|
m_ui->m_lpPace->setTime(QTime(HOURS(dwPace), MINUTES(dwPace), SECONDS(dwPace)));
|
|
}
|
|
else if(dwPace)
|
|
{
|
|
m_bChanging = true;
|
|
dwDist = dwPace*dwTime*1000;
|
|
m_ui->m_lpDist->setValue(dwDist);
|
|
}
|
|
|
|
CalcTotal();
|
|
}
|
|
|
|
void CEditTask::on_m_lpDist_valueChanged(int dist)
|
|
{
|
|
if(m_bChanging)
|
|
{
|
|
m_bChanging = false;
|
|
return;
|
|
}
|
|
uint32_t dwTime = CTime(m_ui->m_lpTime->time()).toDWORD();
|
|
uint32_t dwDist = dist;
|
|
uint32_t dwPace = CTime(m_ui->m_lpPace->time()).toDWORD();
|
|
|
|
if(!dwDist)
|
|
return;
|
|
|
|
if(dwTime)
|
|
{
|
|
m_bChanging = true;
|
|
dwPace = dwTime*1000/dwDist;
|
|
m_ui->m_lpPace->setTime(QTime(HOURS(dwPace), MINUTES(dwPace), SECONDS(dwPace)));
|
|
}
|
|
else if(dwPace)
|
|
{
|
|
m_bChanging = true;
|
|
dwDist = dwPace*dwTime*1000;
|
|
m_ui->m_lpDist->setValue(dwDist);
|
|
}
|
|
|
|
CalcTotal();
|
|
}
|
|
|
|
void CEditTask::on_m_lpPace_timeChanged(QTime time)
|
|
{
|
|
if(m_bChanging)
|
|
{
|
|
m_bChanging = false;
|
|
return;
|
|
}
|
|
uint32_t dwTime = CTime(m_ui->m_lpTime->time()).toDWORD();
|
|
uint32_t dwDist = m_ui->m_lpDist->value();
|
|
uint32_t dwPace = CTime(time).toDWORD();
|
|
|
|
if(!dwPace)
|
|
return;
|
|
|
|
if(dwDist)
|
|
{
|
|
m_bChanging = true;
|
|
dwTime = dwPace*dwDist/1000;
|
|
m_ui->m_lpTime->setTime(QTime(HOURS(dwTime), MINUTES(dwTime), SECONDS(dwTime)));
|
|
}
|
|
else if(dwTime)
|
|
{
|
|
m_bChanging = true;
|
|
dwDist = dwTime*dwPace*1000;
|
|
m_ui->m_lpDist->setValue(dwDist);
|
|
}
|
|
|
|
CalcTotal();
|
|
}
|
|
|
|
void CEditTask::on_m_lpPauseTime_timeChanged(QTime time)
|
|
{
|
|
if(m_bChanging)
|
|
{
|
|
m_bChanging = false;
|
|
return;
|
|
}
|
|
uint32_t dwTime = CTime(time).toDWORD();
|
|
uint32_t dwDist = m_ui->m_lpPauseDist->value();
|
|
uint32_t dwPace = CTime(m_ui->m_lpPausePace->time()).toDWORD();
|
|
|
|
if(!dwTime)
|
|
return;
|
|
|
|
if(dwDist)
|
|
{
|
|
m_bChanging = true;
|
|
dwPace = dwTime*1000/dwDist;
|
|
m_ui->m_lpPausePace->setTime(QTime(HOURS(dwPace), MINUTES(dwPace), SECONDS(dwPace)));
|
|
}
|
|
else if(dwPace)
|
|
{
|
|
m_bChanging = true;
|
|
dwDist = dwPace*dwTime*1000;
|
|
m_ui->m_lpPauseDist->setValue(dwDist);
|
|
}
|
|
|
|
CalcTotal();
|
|
}
|
|
|
|
void CEditTask::on_m_lpPauseDist_valueChanged(int dist)
|
|
{
|
|
if(m_bChanging)
|
|
{
|
|
m_bChanging = false;
|
|
return;
|
|
}
|
|
uint32_t dwTime = CTime(m_ui->m_lpPauseTime->time()).toDWORD();
|
|
uint32_t dwDist = dist;
|
|
uint32_t dwPace = CTime(m_ui->m_lpPausePace->time()).toDWORD();
|
|
|
|
if(!dwDist)
|
|
return;
|
|
|
|
if(dwTime)
|
|
{
|
|
m_bChanging = true;
|
|
dwPace = dwTime*1000/dwDist;
|
|
m_ui->m_lpPausePace->setTime(QTime(HOURS(dwPace), MINUTES(dwPace), SECONDS(dwPace)));
|
|
}
|
|
else if(dwPace)
|
|
{
|
|
m_bChanging = true;
|
|
dwDist = dwPace*dwTime*1000;
|
|
m_ui->m_lpPauseDist->setValue(dwDist);
|
|
}
|
|
|
|
CalcTotal();
|
|
}
|
|
|
|
void CEditTask::on_m_lpPausePace_timeChanged(QTime time)
|
|
{
|
|
if(m_bChanging)
|
|
{
|
|
m_bChanging = false;
|
|
return;
|
|
}
|
|
uint32_t dwTime = CTime(m_ui->m_lpPauseTime->time()).toDWORD();
|
|
uint32_t dwDist = m_ui->m_lpPauseDist->value();
|
|
uint32_t dwPace = CTime(time).toDWORD();
|
|
|
|
if(!dwPace)
|
|
return;
|
|
|
|
if(dwDist)
|
|
{
|
|
m_bChanging = true;
|
|
dwTime = dwPace*dwDist/1000;
|
|
m_ui->m_lpPauseTime->setTime(QTime(HOURS(dwTime), MINUTES(dwTime), SECONDS(dwTime)));
|
|
}
|
|
else if(dwTime)
|
|
{
|
|
m_bChanging = true;
|
|
dwDist = dwTime*dwPace*1000;
|
|
m_ui->m_lpPauseDist->setValue(dwDist);
|
|
}
|
|
|
|
CalcTotal();
|
|
}
|
|
|
|
void CEditTask::CalcTotal()
|
|
{
|
|
int iCount = m_ui->m_lpCount->value();
|
|
uint32_t dwTime = CTime(m_ui->m_lpTime->time()).toDWORD();
|
|
uint32_t dwDist = m_ui->m_lpDist->value();
|
|
uint32_t dwPauseTime = CTime(m_ui->m_lpPauseTime->time()).toDWORD();
|
|
uint32_t dwPauseDist = m_ui->m_lpPauseDist->value();
|
|
uint32_t dwTotalTime;
|
|
uint32_t dwTotalDist;
|
|
|
|
dwTotalTime = dwTime*iCount;
|
|
dwTotalDist = dwDist*iCount;
|
|
if(iCount > 1)
|
|
{
|
|
dwTotalTime += dwPauseTime*(iCount-1);
|
|
dwTotalDist += dwPauseDist*(iCount-1);
|
|
}
|
|
m_ui->m_lpTotalDist->setText(QString(tr("%1")).arg(dwTotalDist));
|
|
|
|
uint32_t h = HOURS(dwTotalTime);
|
|
uint32_t m = MINUTES(dwTotalTime);
|
|
uint32_t s = SECONDS(dwTotalTime);
|
|
m_ui->m_lpTotalTime->setTime(QTime(h, m, s));
|
|
}
|