added all files
[ffqwlibrary] / libffqw-demo-1.0 / sources / mainwindow.cpp
diff --git a/libffqw-demo-1.0/sources/mainwindow.cpp b/libffqw-demo-1.0/sources/mainwindow.cpp
new file mode 100644 (file)
index 0000000..7706c6b
--- /dev/null
@@ -0,0 +1,418 @@
+/*
+         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;
+       }
+}