#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
timer = new QTimer(this);
timer2 = new QTimer(this);
timer3 = new QTimer(this);
AnimTimer = new QTimer(this);
S = new QGraphicsScene(this);
//Alustuksia
InitGV();
Flag = false;
p=0;
i=0;
Ampers=0;
Charge=1000;
BatteryMultiplier=0.5;
AmperMultiplier=0.8;
CalculateCharge();
Temp=20;
ui->panelView->setScene(new QGraphicsScene(this));
//Labelit piiloon
ui->redArrowLabel->hide();
ui->greenArrowLabel->hide();
ui->TempMeter->setValue(Temp);
//Labeleihin kuvat
ui->BatteryLabel->setPixmap(QPixmap("Pics/batteryGreen.png"));
ui->redArrowLabel->setPixmap(QPixmap("Pics/ArrowRed.png"));
ui->greenArrowLabel->setPixmap(QPixmap("Pics/ArrowGreen.png"));
ui->PanelLabel->setPixmap(QPixmap("Pics/panel.png"));
ui->panelView->setBackgroundBrush(Qt::darkBlue);
//Yhdistetaan timerit funktioihin
connect(timer,SIGNAL(timeout()),this,SLOT(CalculateCharge()));
connect(timer,SIGNAL(timeout()),this,SLOT(CalculateAmpers()));
connect(timer3,SIGNAL(timeout()),this,SLOT(CalculateTemp()));
connect(AnimTimer,SIGNAL(timeout()),this,SLOT(Anim1()));
connect(AnimTimer,SIGNAL(timeout()),this,SLOT(Anim2()));
connect(AnimTimer,SIGNAL(timeout()),this,SLOT(AnimatePanel()));
connect(timer2,SIGNAL(timeout()),this,SLOT(RotateGear()));
//Yhdistetaan slideri rattaan animointiin
connect(ui->UsageSlider,SIGNAL(valueChanged(int)),this,SLOT(CalculateRotation()));
//Kaynnistetaan timerit
timer->start(500);
timer3->start(2000);
AnimTimer->start(1100);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::CalculateAmpers() //"Lasketaan" rattaan kayttama virta ja naytetaan se mittarissa
{
if(Charge |= 0)Ampers = ui->UsageSlider->value()*AmperMultiplier;
else Ampers = 0;
ui->AmperMeter->setValue(Ampers);
}
void MainWindow::CalculateCharge() //"Lasketaan" akun lataus, naytetaan se progressbarissa ja prosentteina
//(kuvat vaihtuu akun kohdalla latauksen mukaan, vihrea, keltainen, punainen)
{
if(ui->UsageSlider->value()>0)
{
Charge=Charge-ui->UsageSlider->value()*BatteryMultiplier;
if(Charge<0) Charge = 0;
}
else
{
Charge = Charge+10;
if(Charge>1000) Charge=1000;
}
ChargeP=(float)Charge/(float)1000*(float)100;
Text.setNum(ChargeP);
ui->BatteryBar->setValue(Charge);
ui->ChargeP->setText(Text);
if(Charge>=300) ui->BatteryLabel->setPixmap(QPixmap("Pics/batteryGreen.png"));
if(Charge<300 && Charge>=100) ui->BatteryLabel->setPixmap(QPixmap("Pics/batteryYellow.png"));
if(Charge<100) ui->BatteryLabel->setPixmap(QPixmap("Pics/batteryRed.png"));
}
void MainWindow::RotateGear() //Rotate animaation toteutus
{
if(Charge|=0)ui->graphicsView->rotate(2);
}
void MainWindow::InitGV() //Graphicsviewin initialisointi
{
S->addPixmap(QPixmap("Pics/gear.png")); //laitetan pixmap sceneen S
ui->graphicsView->setScene(S); //Asetetaan graphicsviewiin scene S (kuva rattaasta)
ui->graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //Scrollbarit pois
ui->graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
void MainWindow::CalculateRotation() //Maaritellaan rattaan pyorimisnopeus sliderista (timerin aikajakso, joka kutsuu qgraphicsviewin rotatea)
{
int value;
if(Charge==0) value=0;
else value = ui->UsageSlider->value();
switch(value){
case 0: timer2->stop(); break;
case 1: timer2->start(200); break;
case 2: timer2->start(150); break;
case 3: timer2->start(100); break;
case 4: timer2->start(80); break;
case 5: timer2->start(60); break;
case 6: timer2->start(50); break;
case 7: timer2->start(40); break;
case 8: timer2->start(30); break;
case 9: timer2->start(20); break;
case 10: timer2->start(10); break;
}
}
void MainWindow::CalculateTemp() //"Lasketaan" akun lampotila
{
i=0.1;
if(ui->UsageSlider->value()>0) Temp= Temp + ui->UsageSlider->value()*i;
else Temp = Temp - 1*i;
if(Temp>66) Temp=66;
if(Temp<20) Temp=20;
ui->TempMeter->setValue(Temp);
}
void MainWindow::Anim1() // KS. anim2()
{
QPropertyAnimation* anim1 = new QPropertyAnimation(ui->redArrowLabel,"geometry");
anim1->setDuration(1100);
anim1->setStartValue(QRect(630,400,91,41));
anim1->setEndValue(ui->redArrowGoal->geometry());
if(ui->UsageSlider->value()>0 && Charge > 0)
{
ui->redArrowLabel->show();
anim1->start();
}
else ui->redArrowLabel->hide();
}
void MainWindow::Anim2()
{
QPropertyAnimation* anim2 = new QPropertyAnimation(ui->greenArrowLabel,"geometry"); //Luodaan animaatio, otetaan sille geometria vihreän nuolen labelista
anim2->setDuration(1100); //Maaritetan animaation kesto
anim2->setStartValue(QRect(810,110,122,144)); //Maaritellaan animaation alkuarvo (x,y,leveys,korkeus)
anim2->setEndValue(ui->greenArrowGoal->geometry()); //Maaritellaan animaation loppuarvot ( tassa tapauksessa ui:in laitettu label, jonka paikka on loppuarvo)
if(ui->UsageSlider->value()==0 && Charge<1000) //jos kayttosliderin arvo on isompi kuin 0 = ratas pyorii ja lataus on alle taydet
{
ui->greenArrowLabel->show(); //nayta nuoli
anim2->start(); //aloita animaatio
}
else ui->greenArrowLabel->hide(); //muuten nuoli piiloon
}
void MainWindow::AnimatePanel() //"animaatio", jolla aurinkopaneelin vari vaihtuu latauksessa
{
if(ui->UsageSlider->value()==0 && Charge<1000)
{
p++;
ui->panelView->setBackgroundBrush(Qt::blue);
}
if(ui->UsageSlider->value()==0 && Charge<1000 && p>1)
{
ui->panelView->setBackgroundBrush(Qt::darkBlue);
p=0;
}
if(Charge==1000) ui->panelView->setBackgroundBrush(Qt::darkBlue);
}
|