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.

353 lines
6.8 KiB
C++

#include "cedittasks.h"
#include "ui_cedittasks.h"
CEditTaskS::CEditTaskS(QWidget *parent) :
QDialog(parent),
m_ui(new Ui::CEditTaskS)
{
m_bChanging = false;
m_ui->setupUi(this);
m_ui->m_lpGroupPause->setVisible(false);
}
CEditTaskS::~CEditTaskS()
{
delete m_ui;
}
void CEditTaskS::changeEvent(QEvent *e)
{
QDialog::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
m_ui->retranslateUi(this);
break;
default:
break;
}
}
void CEditTaskS::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 CEditTaskS::on_buttonBox_rejected()
{
reject();
}
void CEditTaskS::on_m_lpCount_valueChanged(int iCount)
{
if(iCount > 1)
m_ui->m_lpGroupPause->setVisible(true);
else
m_ui->m_lpGroupPause->setVisible(false);
CalcTotal();
}
QString CEditTaskS::GetDesc()
{
return(m_ui->m_lpDesc->text());
}
uint32_t CEditTaskS::GetCount()
{
return(m_ui->m_lpCount->value());
}
CTime CEditTaskS::GetTime()
{
return(m_ui->m_lpTime->time());
}
uint32_t CEditTaskS::GetDist()
{
return(m_ui->m_lpDist->value());
}
QString CEditTaskS::GetHR()
{
return(m_ui->m_lpHR->currentText());
}
uint32_t CEditTaskS::GetPace()
{
if(!m_ui->m_lpSpeed->value())
return(0);
return(3600/m_ui->m_lpSpeed->value());
}
CTime CEditTaskS::GetPauseTime()
{
return(m_ui->m_lpPauseTime->time());
}
uint32_t CEditTaskS::GetPauseDist()
{
return(m_ui->m_lpPauseDist->value());
}
QString CEditTaskS::GetPauseHR()
{
return(m_ui->m_lpPauseHR->currentText());
}
uint32_t CEditTaskS::GetPausePace()
{
if(!m_ui->m_lpPauseSpeed->value())
return(0);
return(3600/m_ui->m_lpPauseSpeed->value());
}
void CEditTaskS::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));
if(dwPace)
m_ui->m_lpSpeed->setValue(3600/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));
if(dwPausePace)
m_ui->m_lpPauseSpeed->setValue(3600/dwPausePace);
}
CalcTotal();
}
void CEditTaskS::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 dwSpeed = m_ui->m_lpSpeed->value();
if(!dwTime)
return;
if(dwDist)
{
m_bChanging = true;
dwSpeed = 3600*dwDist/dwTime/1000;
m_ui->m_lpSpeed->setValue(dwSpeed);
}
else if(dwSpeed)
{
m_bChanging = true;
dwDist = dwSpeed*dwTime*1000/3600;
m_ui->m_lpDist->setValue(dwDist);
}
CalcTotal();
}
void CEditTaskS::on_m_lpDist_valueChanged(int )
{
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 dwSpeed = m_ui->m_lpSpeed->value();
if(!dwDist)
return;
if(dwTime)
{
m_bChanging = true;
dwSpeed = 3600*dwDist/dwTime/1000;
m_ui->m_lpSpeed->setValue(dwSpeed);
}
else if(dwSpeed)
{
m_bChanging = true;
dwDist = dwSpeed*dwTime*1000/3600;
m_ui->m_lpDist->setValue(dwDist);
}
CalcTotal();
}
void CEditTaskS::on_m_lpSpeed_valueChanged(int speed)
{
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 dwSpeed = speed;
if(!dwSpeed)
return;
if(dwDist)
{
m_bChanging = true;
dwTime = dwDist*3600/dwSpeed/1000;
m_ui->m_lpTime->setTime(QTime(HOURS(dwTime), MINUTES(dwTime), SECONDS(dwTime)));
}
else if(dwTime)
{
m_bChanging = true;
dwDist = dwSpeed*dwTime*1000/3600;
m_ui->m_lpDist->setValue(dwDist);
}
CalcTotal();
}
void CEditTaskS::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 dwSpeed = m_ui->m_lpPauseSpeed->value();
if(!dwTime)
return;
if(dwDist)
{
m_bChanging = true;
dwSpeed = 3600*dwDist/dwTime/1000;
m_ui->m_lpPauseSpeed->setValue(dwSpeed);
}
else if(dwSpeed)
{
m_bChanging = true;
dwDist = dwSpeed*dwTime*1000/3600;
m_ui->m_lpPauseDist->setValue(dwDist);
}
CalcTotal();
}
void CEditTaskS::on_m_lpPauseDist_valueChanged(int )
{
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 dwSpeed = m_ui->m_lpPauseSpeed->value();
if(!dwDist)
return;
if(dwTime)
{
m_bChanging = true;
dwSpeed = 3600*dwDist/dwTime/1000;
m_ui->m_lpPauseSpeed->setValue(dwSpeed);
}
else if(dwSpeed)
{
m_bChanging = true;
dwDist = dwSpeed*dwTime*1000/3600;
m_ui->m_lpPauseDist->setValue(dwDist);
}
CalcTotal();
}
void CEditTaskS::on_m_lpPauseSpeed_valueChanged(int speed)
{
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 dwSpeed = speed;
if(!dwSpeed)
return;
if(dwDist)
{
m_bChanging = true;
dwTime = dwDist*3600/dwSpeed/1000;
m_ui->m_lpPauseTime->setTime(QTime(HOURS(dwTime), MINUTES(dwTime), SECONDS(dwTime)));
}
else if(dwTime)
{
m_bChanging = true;
dwDist = dwSpeed*dwTime*1000/3600;
m_ui->m_lpPauseDist->setValue(dwDist);
}
CalcTotal();
}
void CEditTaskS::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));
}