File indexing completed on 2024-04-21 14:43:53

0001 /*************************************************************************************
0002  *  Copyright (C) 2012 by Percy Camilo T. Aucahuasi <percy.camilo.ta@gmail.com>      *
0003  *                                                                                   *
0004  *  This program is free software; you can redistribute it and/or                    *
0005  *  modify it under the terms of the GNU General Public License                      *
0006  *  as published by the Free Software Foundation; either version 2                   *
0007  *  of the License, or (at your option) any later version.                           *
0008  *                                                                                   *
0009  *  This program is distributed in the hope that it will be useful,                  *
0010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of                   *
0011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                    *
0012  *  GNU General Public License for more details.                                     *
0013  *                                                                                   *
0014  *  You should have received a copy of the GNU General Public License                *
0015  *  along with this program; if not, write to the Free Software                      *
0016  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA   *
0017  *************************************************************************************/
0018 
0019 #include "plotsbuilder.h"
0020 #include "ui_plotsbuilder.h"
0021 
0022 PlotsBuilder::PlotsBuilder(QWidget* parent): QWidget(parent),
0023     m_currentTyppe(None)
0024 {
0025     m_widget = new Ui::PlotsBuilderWidget;
0026     m_widget->setupUi(this);
0027     
0028     // Setting up Mousetracking and Event-filter for all types of plots
0029     this->setMouseTracking(true);
0030     this->installEventFilter(this);
0031 
0032     // can be done also by enter event and leave event using underMouse();
0033     m_widget->buildCartesianGraphCurve->setIcon(QIcon::fromTheme("newfunction"));
0034     m_widget->buildCartesianGraphCurve->setMouseTracking(true);
0035     m_widget->buildCartesianGraphCurve->installEventFilter(this);
0036 
0037     m_widget->buildCartesianImplicitCurve->setIcon(QIcon::fromTheme("newimplicit"));
0038     m_widget->buildCartesianImplicitCurve->setMouseTracking(true);
0039     m_widget->buildCartesianImplicitCurve->installEventFilter(this);
0040 
0041     m_widget->buildCartesianParametricCurve2D->setIcon(QIcon::fromTheme("newparametric"));
0042     m_widget->buildCartesianParametricCurve2D->setMouseTracking(true);
0043     m_widget->buildCartesianParametricCurve2D->installEventFilter(this);
0044 
0045     m_widget->buildPolarGraphCurve->setIcon(QIcon::fromTheme("newpolar"));
0046     m_widget->buildPolarGraphCurve->setMouseTracking(true);
0047     m_widget->buildPolarGraphCurve->installEventFilter(this);
0048 
0049     m_widget->buildCartesianParametricCurve3D->setIcon(QIcon::fromTheme("newparametric3d"));
0050     m_widget->buildCartesianParametricCurve3D->setMouseTracking(true);
0051     m_widget->buildCartesianParametricCurve3D->installEventFilter(this);
0052 
0053     m_widget->buildCartesianGraphSurface->setIcon(QIcon::fromTheme("newfunction3d"));
0054     m_widget->buildCartesianGraphSurface->setMouseTracking(true);
0055     m_widget->buildCartesianGraphSurface->installEventFilter(this);
0056 
0057     m_widget->buildCartesianImplicitSurface->setIcon(QIcon::fromTheme("draw-square-inverted-corners"));
0058     m_widget->buildCartesianImplicitSurface->setMouseTracking(true);
0059     m_widget->buildCartesianImplicitSurface->installEventFilter(this);
0060 
0061     m_widget->buildCartesianParametricSurface->setIcon(QIcon::fromTheme("draw-donut"));
0062     m_widget->buildCartesianParametricSurface->setMouseTracking(true);
0063     m_widget->buildCartesianParametricSurface->installEventFilter(this);
0064 
0065     m_widget->buildCylindricalGraphSurface->setIcon(QIcon::fromTheme("newcylindrical"));
0066     m_widget->buildCylindricalGraphSurface->setMouseTracking(true);
0067     m_widget->buildCylindricalGraphSurface->installEventFilter(this);
0068 
0069     m_widget->buildSphericalGraphSurface->setIcon(QIcon::fromTheme("newspherical"));
0070     m_widget->buildSphericalGraphSurface->setMouseTracking(true);
0071     m_widget->buildSphericalGraphSurface->installEventFilter(this);
0072 }
0073 
0074 bool PlotsBuilder::eventFilter(QObject *object, QEvent *event)
0075 {
0076     if (event->type() == QEvent::MouseMove)
0077     {
0078         if(object==m_widget->buildCartesianGraphCurve)
0079             m_currentTyppe=CartesianGraphCurve;
0080 
0081         else if(object==m_widget->buildCartesianImplicitCurve)
0082             m_currentTyppe=CartesianImplicitCurve;
0083 
0084         else if(object==m_widget->buildCartesianParametricCurve2D)
0085             m_currentTyppe=CartesianParametricCurve2D;
0086 
0087         else if(object==m_widget->buildPolarGraphCurve)
0088             m_currentTyppe=PolarGraphCurve;
0089 
0090         else if(object==m_widget->buildCartesianParametricCurve3D)
0091             m_currentTyppe=CartesianParametricCurve3D;
0092 
0093         else if(object==m_widget->buildCartesianGraphSurface)
0094             m_currentTyppe=CartesianGraphSurface;
0095 
0096         else if(object==m_widget->buildCartesianImplicitSurface)
0097             m_currentTyppe=CartesianImplicitSurface;
0098 
0099         else if(object==m_widget->buildCartesianParametricSurface)
0100             m_currentTyppe=CartesianParametricSurface;
0101 
0102         else if(object==m_widget->buildCylindricalGraphSurface)
0103             m_currentTyppe=CylindricalGraphSurface;
0104 
0105         else if(object==m_widget->buildSphericalGraphSurface)
0106             m_currentTyppe=SphericalGraphSurface;
0107 
0108         else {
0109             m_currentTyppe=None;
0110             return false;
0111         }
0112     }
0113     return false;
0114 }
0115 
0116 PlotsBuilder::~PlotsBuilder()
0117 {
0118     delete m_widget;
0119 }
0120 
0121 void PlotsBuilder::setupTypes(PlotsBuilder::PlotTypes t)
0122 {
0123     m_types = t;
0124     setupTypes();
0125 }
0126 
0127 void PlotsBuilder::mapConnection(PlotsBuilder::PlotType pt, QObject* recvr, const char* slot)
0128 {
0129     #define caseType(tname) case tname : connect(m_widget->build##tname , SIGNAL(clicked(bool)), recvr, slot); break;
0130     
0131     switch (pt)
0132     {
0133         //2D
0134         caseType(CartesianGraphCurve)
0135         caseType(CartesianImplicitCurve)
0136         caseType(CartesianParametricCurve2D)
0137         caseType(PolarGraphCurve)
0138         //3D
0139         caseType(CartesianParametricCurve3D)
0140         caseType(CartesianGraphSurface)
0141         caseType(CartesianImplicitSurface)
0142         caseType(CartesianParametricSurface)
0143         caseType(CylindricalGraphSurface)
0144         caseType(SphericalGraphSurface)
0145         case(None): break;
0146     }
0147 }
0148 
0149 void PlotsBuilder::showAllTypes()
0150 {
0151     #define showType(tname) m_widget->build##tname->show(); 
0152     
0153     //2D
0154     showType(CartesianGraphCurve)
0155     showType(CartesianGraphCurve)
0156     showType(CartesianImplicitCurve)
0157     showType(CartesianParametricCurve2D)
0158     showType(PolarGraphCurve)
0159     //3D
0160     showType(CartesianParametricCurve3D)
0161     showType(CartesianGraphSurface)
0162     showType(CartesianImplicitSurface)
0163     showType(CartesianParametricSurface)
0164     showType(CylindricalGraphSurface)
0165     showType(SphericalGraphSurface)
0166     
0167     m_widget->cartesianCurvesLinks->show();
0168     m_widget->polarCurvesLinks->show();
0169     m_widget->spaceCurvesLinks->show();
0170     m_widget->cartesianCurvesLinks->show();
0171     m_widget->cylindricalSurfacesLinks->show();
0172     m_widget->sphericalSurfacesLinks->show();
0173 }
0174 
0175 void PlotsBuilder::hideAllTypes()
0176 {
0177     #define hideType(tname) m_widget->build##tname->hide(); 
0178     
0179     //2D
0180     hideType(CartesianGraphCurve)
0181     hideType(CartesianGraphCurve)
0182     hideType(CartesianImplicitCurve)
0183     hideType(CartesianParametricCurve2D)
0184     hideType(PolarGraphCurve)
0185     //3D
0186     hideType(CartesianParametricCurve3D)
0187     hideType(CartesianGraphSurface)
0188     hideType(CartesianImplicitSurface)
0189     hideType(CartesianParametricSurface)
0190     hideType(CylindricalGraphSurface)
0191     hideType(SphericalGraphSurface)
0192     
0193     m_widget->cartesianCurvesLinks->hide();
0194     m_widget->polarCurvesLinks->hide();
0195     m_widget->spaceCurvesLinks->hide();
0196     m_widget->cartesianCurvesLinks->hide();
0197     m_widget->cylindricalSurfacesLinks->hide();
0198     m_widget->sphericalSurfacesLinks->hide();
0199 }
0200 
0201 void PlotsBuilder::setupTypes()
0202 {
0203     #define testType(tname) if (m_types.testFlag( tname )) m_widget->build##tname->show(); else m_widget->build##tname->hide();
0204 
0205     //2D
0206     testType(CartesianGraphCurve)
0207     testType(CartesianGraphCurve)
0208     testType(CartesianImplicitCurve)
0209     testType(CartesianParametricCurve2D)
0210     testType(PolarGraphCurve)
0211     //3D
0212     testType(CartesianParametricCurve3D)
0213     testType(CartesianGraphSurface)
0214     testType(CartesianImplicitSurface)
0215     testType(CartesianParametricSurface)
0216     testType(CylindricalGraphSurface)
0217     testType(SphericalGraphSurface)
0218     
0219     if (m_types.testFlag(CartesianGraphCurve) || m_types.testFlag(CartesianImplicitCurve) || m_types.testFlag(CartesianParametricCurve2D))
0220         m_widget->cartesianCurvesLinks->show();
0221     else
0222         m_widget->cartesianCurvesLinks->hide();
0223     
0224     if (m_types.testFlag(PolarGraphCurve))
0225         m_widget->polarCurvesLinks->show();
0226     else
0227         m_widget->polarCurvesLinks->hide();
0228     
0229     if (m_types.testFlag(CartesianParametricCurve3D))
0230         m_widget->spaceCurvesLinks->show();
0231     else
0232         m_widget->spaceCurvesLinks->hide();
0233 
0234     if (m_types.testFlag(CartesianGraphSurface) || m_types.testFlag(CartesianImplicitSurface) || m_types.testFlag(CartesianParametricSurface))
0235         m_widget->cartesianSurfacesLinks->show();
0236     else
0237         m_widget->cartesianSurfacesLinks->hide();
0238 
0239     if (m_types.testFlag(CylindricalGraphSurface))
0240         m_widget->cylindricalSurfacesLinks->show();
0241     else
0242         m_widget->cylindricalSurfacesLinks->hide();
0243     
0244     if (m_types.testFlag(SphericalGraphSurface))
0245         m_widget->sphericalSurfacesLinks->show();
0246     else
0247         m_widget->sphericalSurfacesLinks->hide();
0248 }
0249 
0250 #include "moc_plotsbuilder.cpp"