X-Git-Url: http://git.maemo.org/git/?p=ffqwlibrary;a=blobdiff_plain;f=libffqw-demo-1.0%2Fsources%2Fmainwindow.cpp;fp=libffqw-demo-1.0%2Fsources%2Fmainwindow.cpp;h=7706c6b3f3b4cf29c448c19ce4384ea35eca6d43;hp=0000000000000000000000000000000000000000;hb=1273d1fbb03faf468b080ca8f2f78717e6949815;hpb=0cf856837e9dc2e271c8e16390758bf02107f678 diff --git a/libffqw-demo-1.0/sources/mainwindow.cpp b/libffqw-demo-1.0/sources/mainwindow.cpp new file mode 100644 index 0000000..7706c6b --- /dev/null +++ b/libffqw-demo-1.0/sources/mainwindow.cpp @@ -0,0 +1,418 @@ +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + +http://www.gnu.org/licenses/gpl-3.0.txt +*/ +/** + * @file mainwindow.cpp + * @brief Implementation of mainwindow class. + * + * @author ComArch S.A. + * @date 2009.09.03 + * @version 1.0 + */ + +#include "mainwindow.h" + + +/** + *Function to generate points used in the library demonstration graph. + */ +float fun01(float x) +{ + return (sin(x/5)*10 + qAbs(x)) - 50; +} + +/** + *Function to generate points used in the library demonstration graph. + */ +float fun02(float x) +{ + if(x==0) + x=0.000001; + return sin(x/4)/ (x/100); +} + +/** + *Function to generate points used in the library demonstration graph. + */ +float fun03(float x) +{ + return (x*x)/300; +} + +/** + *Function to generate points used in the library demonstration graph. + */ +float fun04(float x) +{ + return (x*x*x)/1000; +} + +/** + *Function to generate points used in the library demonstration graph. + */ +float fun05(float x) +{ + return x; +} + +/** + *Function to generate points used in the library demonstration graph. + */ +float fun06(float x) +{ + if(x<-50) + return -50; + else if(x>=-50 && x<=50) + return x - 20; + else if(x>50) + return 50; +} + +/** + *Main function to show FFQW library features. + */ +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent) +{ + QWidget* centralWidget = new QWidget; + setCentralWidget(centralWidget); + resize(800, 480); + + chartTab = new QWidget; + + + chart = new FFChart; + + functions = new FFStringComboBox; + combo = new FFColorComboBox; + line = new FFLineComboBox; + + QVBoxLayout* chartLayout = new QVBoxLayout; + chartLayout->addWidget(chart); + chartLayout->addWidget(functions); + + centralWidget->setLayout(chartLayout); + + fun.append("Set 01 - sinusoids"); + fun.append("Set 02 - parabolic"); + fun.append("Set 03 - linears"); + functions->addItems(fun); + functions->setTitle("Choose a functions set"); + + setFocusPolicy(Qt::ClickFocus); + chart->setFocusPolicy(Qt::ClickFocus); + init(); + + chart->installEventFilter(this); + + leftKeySw = false; + rightKeySw = false; + upKeySw = false; + downKeySw = false; + + connect(functions,SIGNAL(activated(int)),this,SLOT(changeFunctions(int))); + functions->setCurrentItem(0); +} + +MainWindow::~MainWindow() +{ + +} + +/** + * Initiate an object of demo application. Set all needed fields. + */ +void MainWindow::init() +{ + setStyleSheet( "background: black;" + "padding: 0px;" + "spacing: 0px;" + "border: 0px;"); + + chartTab->setStyleSheet( "background: black;" + "padding: 0px;" + "spacing: 0px;" + "border: 0px;"); + { + // Sinusoids + for(float i=-150;i<150;i+=1) + { + series01.append(QPointF(i,fun01(i))); + } + + for(float i=-150;i<150;i+=1) + { + series02.append(QPointF(i,fun02(i))); + } + + // Linears + for(float i = -250; i < 250; i += 1) + { + series03.append(QPointF(i, fun03(i))); + } + + for(float i = -150; i < 150; i += 1) + { + series04.append(QPointF(i, fun04(i))); + } + + // Linears + series05.append(QPointF(-150,-150)); + series05.append(QPointF(150,150)); + + series06.append(QPointF(-150,-150)); + series06.append(QPointF(-50,-150)); + series06.append(QPointF(50,150)); + series06.append(QPointF(150,150)); + + series07.append(QPointF(-200,20)); + series07.append(QPointF(-80,20)); + series07.append(QPointF(-70,-80)); + series07.append(QPointF(-60,120)); + series07.append(QPointF(-50,20)); + series07.append(QPointF( 70,20)); + series07.append(QPointF( 80,-60)); + series07.append(QPointF( 90,110)); + series07.append(QPointF(100,20)); + series07.append(QPointF(200,20)); + + series08.append(QPointF(-200,-200)); + series08.append(QPointF( 200,-200)); + + series09.append(QPointF(-200,-180)); + series09.append(QPointF(200,-180)); + + series10.append(QPointF(-200,-160)); + series10.append(QPointF(200,-160)); + + series11.append(QPointF(-200,-140)); + series11.append(QPointF(200,-140)); + } + changeFunctions(1); +} + +/** + * Change set of function to display in gprah to another. + */ + void MainWindow::changeFunctions(int funNum) +{ + if(funNum == 0) + { + chart->removeSeries(); + chart->addSeries(new FFChartSeries(series01,QPen(QBrush(QColor(255,255,0)),2),"SRP lev 2008")); + chart->addSeries(new FFChartSeries(series02,QPen(QBrush(QColor(255,0,255)),2),"SRP standardized lev 2008")); + } + else if(funNum == 1) + { + chart->removeSeries(); + chart->addSeries(new FFChartSeries(series03,QPen(QBrush(QColor(0,0,255)),2),"Swimming Performance")); + chart->addSeries(new FFChartSeries(series04,QPen(QBrush(QColor(0,255,0)),2),"Running Performance")); + } + else if(funNum == 2) + { + chart->removeSeries(); + chart->addSeries(new FFChartSeries(series05,QPen(QBrush(QColor( 0,255, 0)),2),"FFQW Progress")); + chart->addSeries(new FFChartSeries(series06,QPen(QBrush(QColor(255, 0, 0)),2),"Standardized Reverse Progress")); + chart->addSeries(new FFChartSeries(series07,QPen(QBrush(QColor(255,255, 0)),2),"Standardized Tech Progress")); + chart->addSeries(new FFChartSeries(series08,QPen(QBrush(QColor(255,255,255)),2),"EKG")); + chart->addSeries(new FFChartSeries(series09,QPen(QBrush(QColor( 0,255,255)),2),"PKB Lev")); + chart->addSeries(new FFChartSeries(series10,QPen(QBrush(QColor( 0, 0,255)),2),"YETI Lev")); + chart->addSeries(new FFChartSeries(series11,QPen(QBrush(QColor(150,150,150)),2),"Mot Ratio")); + } +} + +/** + * Support key press events in demo application. + */ + void MainWindow::keyPressEvent(QKeyEvent* event) + { + switch ( event->key () ) + { + case Qt::Key_F5: //HOME + break; + case Qt::Key_F6: //FULL_SCREEN + break; + case Qt::Key_F7: //+ + chart->zoomIn(0.2); + break; + case Qt::Key_F8: //- + chart->zoomOut(0.2); + break; + case Qt::Key_F4: //MENU + break; + case Qt::Key_Left: //LEFT + leftKeySw=true; + if(upKeySw) + { + chart->moveBy(QPoint(10,10)); + break; + } + if(downKeySw) + { + chart->moveBy(QPoint(10,-10)); + break; + } + chart->moveBy(QPoint(10,0)); + break; + case Qt::Key_Right: //RIGHT + rightKeySw=true; + if(upKeySw) + { + chart->moveBy(QPoint(-10, 10)); + break; + } + if(downKeySw) + { + chart->moveBy(QPoint(-10, -10)); + break; + } + chart->moveBy(QPoint(- 10,0)); + break; + case Qt::Key_Up: //UP + upKeySw=true; + if(leftKeySw) + { + chart->moveBy(QPoint(10, 10)); + break; + } + if(rightKeySw) + { + chart->moveBy(QPoint(-10, 10)); + break; + } + chart->moveBy(QPoint(0,10)); + break; + case Qt::Key_Down: //DOWN + downKeySw=true; + if(leftKeySw) + { + chart->moveBy(QPoint(10, -10)); + break; + } + if(rightKeySw) + { + chart->moveBy(QPoint(-10, -10)); + break; + } + chart->moveBy(QPoint(0,-10)); + break; + case Qt::Key_Return: //ENTER + break; + case Qt::Key_Escape: //BACK + break; + default: + event->ignore (); + } + } + +/** + * Support key release events in demo application. + */ + void MainWindow::keyReleaseEvent(QKeyEvent* event) + { + switch(event->key()) + { + case Qt::Key_Left: //LEFT + leftKeySw = false; + break; + case Qt::Key_Right: //RIGHT + rightKeySw = false; + break; + case Qt::Key_Up: //UP + upKeySw = false; + break; + case Qt::Key_Down: //DOWN + downKeySw = false; + break; + default: + event->ignore(); + } + } + +/** + * Reimplement standard eventFilter. + */ +bool MainWindow::eventFilter(QObject *object, QEvent *event) +{ + Q_UNUSED(object); + if(event->type() == QEvent::KeyPress) + { + QKeyEvent *keyEvent = static_cast (event); + keyPressEvent(keyEvent); + return true; + } + else + { + return false; + } +}