--- /dev/null
+/*
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ 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<QKeyEvent*> (event);
+ keyPressEvent(keyEvent);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}