PSQt/src/GUAxes.cpp

Go to the documentation of this file.
00001 //---------------------------------------------------------------------
00002 // File and Version Information:
00003 //   $Id: GUAxes.cpp 9841 2015-03-26 18:35:44Z dubrovin@SLAC.STANFORD.EDU $
00004 //
00005 // Author: Mikhail S. Dubrovin
00006 //---------------------------------------------------------------------
00007 
00008 //--------------------------
00009 #include "PSQt/GUAxes.h"
00010 //#include "PSQt/QGUtils.h"
00011 #include "PSQt/Logger.h"
00012 
00013 #include <QCloseEvent>
00014 #include <QResizeEvent>
00015 #include <QMouseEvent>
00016 
00017 #include <sstream>  // for stringstream
00018 #include <iostream>    // for std::cout
00019 //#include <fstream>     // for std::ifstream(fname)
00020 //#include <math.h>  // atan2
00021 //#include <cstring> // for memcpy
00022 
00023 //using namespace std; // for cout without std::
00024 
00025 namespace PSQt {
00026 
00027 //--------------------------
00028 
00029   GUAxes::GUAxes(  QWidget *parent
00030                    , const float& xmin
00031                    , const float& xmax
00032                    , const float& ymin
00033                    , const float& ymax
00034                    , const unsigned& nxdiv1
00035                    , const unsigned& nydiv1
00036                    , const unsigned& nxdiv2
00037                    , const unsigned& nydiv2
00038                    , const unsigned pbits
00039                  ) 
00040   : QGraphicsView(parent)
00041   , m_pbits(pbits)
00042   , m_color(Qt::black)
00043   , m_pen(Qt::black, 2, Qt::SolidLine)
00044   , m_font()
00045   , m_ruler_hd(0)
00046   , m_ruler_hu(0)
00047   , m_ruler_vl(0)
00048   , m_ruler_vr(0)
00049 {
00050   m_pen.setCosmetic(true);
00051 
00052   if(m_pbits & 1) {std::cout << "GUAxes - ctor\n"; printMemberData();}
00053 
00054   pview()->setGeometry(100, 50, 700, 378);
00055   pview()->setMinimumSize(300,200);
00056   //this->setContentsMargins(-9,-9,-9,-9);
00057  
00058   m_scene = new QGraphicsScene(); 
00059   pview()->setScene(m_scene);
00060   
00061   setLimits(xmin, xmax, ymin, ymax, nxdiv1, nydiv1, nxdiv2, nydiv2);
00062 
00063   if(m_pbits & 2) this->printTransform();
00064 
00065   connectForTest(); 
00066 }
00067 
00068 //--------------------------
00069 
00070   void GUAxes::connectForTest() 
00071   {
00072     // connections for internal test 
00073     connect(this, SIGNAL(pressOnAxes(QMouseEvent*, QPointF)),
00074             this, SLOT(testSignalPressOnAxes(QMouseEvent*, QPointF)));
00075 
00076     connect(this, SIGNAL(releaseOnAxes(QMouseEvent*, QPointF)),
00077             this, SLOT(testSignalReleaseOnAxes(QMouseEvent*, QPointF)));
00078 
00079     //connect(this, SIGNAL(moveOnAxes(QMouseEvent*, QPointF)),
00080     //        this, SLOT(testSignalMoveOnAxes(QMouseEvent*, QPointF)));
00081 
00082   }
00083 
00084 //--------------------------
00085 
00086   void GUAxes::setLimits( const float& xmin
00087                         , const float& xmax
00088                         , const float& ymin
00089                         , const float& ymax
00090                         , const unsigned& nxdiv1
00091                         , const unsigned& nydiv1
00092                         , const unsigned& nxdiv2
00093                         , const unsigned& nydiv2 )
00094   {
00095     m_xmin = xmin;
00096     m_xmax = xmax;
00097     m_ymin = ymin;
00098     m_ymax = ymax;
00099     m_nxdiv1 = nxdiv1;
00100     m_nydiv1 = nydiv1;
00101     m_nxdiv2 = nxdiv2;
00102     m_nydiv2 = nydiv2;
00103 
00104     this->updateTransform();
00105     this->setAxes();
00106   }
00107 
00108 //--------------------------
00109   GUAxes::~GUAxes () 
00110   {
00111     if (m_ruler_hd) delete m_ruler_hd;
00112     if (m_ruler_hu) delete m_ruler_hu;
00113     if (m_ruler_vl) delete m_ruler_vl;
00114     if (m_ruler_vr) delete m_ruler_vr;
00115   }
00116 
00117 //--------------------------
00118 
00119   void GUAxes::updateTransform()
00120   {
00121     const QRect & geometryRect = pview()->geometry();
00122 
00123     //std::stringstream ss; ss << "h:" << geometryRect.width()  << "  w:" << geometryRect.height();
00124     //setWindowTitle(ss.str().c_str());
00125     //std::cout << ss.str() << '\n';
00126 
00127     float sx =  (geometryRect.width()-150)/(m_xmax-m_xmin);
00128     float sy = -(geometryRect.height()-50)/(m_ymax-m_ymin);
00129     QTransform trans(sx, 0, 0, sy, 0, 0);
00130 
00131     pview()->setTransform(trans); // The transformation matrix tranforms the scene into view coordinates.
00132 
00133     //this->printTransform();
00134   }
00135 
00136 //--------------------------
00137 
00138   void GUAxes::setAxes()
00139   {
00140     m_scene_rect.setRect(m_xmin, m_ymin, m_xmax-m_xmin, m_ymax-m_ymin); 
00141 
00142     m_scene->setSceneRect(m_scene_rect);
00143     //pview()->fitInView(m_scene_rect, Qt::IgnoreAspectRatio);
00144     //pview()->ensureVisible(m_scene_rect, 100, 100);
00145     //pview()->ensureVisible(m_scene_rect);
00146 
00147     //QGraphicsScene * scene = pview()->scene();
00148 
00149     if (m_ruler_hd) delete m_ruler_hd;
00150     if (m_ruler_hu) delete m_ruler_hu;
00151     if (m_ruler_vl) delete m_ruler_vl;
00152     if (m_ruler_vr) delete m_ruler_vr;
00153 
00154     m_ruler_hd = new PSQt::GURuler(rview(),GURuler::HD,m_xmin,m_xmax,m_ymin,m_nxdiv1,m_nxdiv2,1,0,0,0,0,m_color,m_pen,m_font);
00155     m_ruler_hu = new PSQt::GURuler(rview(),GURuler::HU,m_xmin,m_xmax,m_ymax,m_nxdiv1,m_nxdiv2,0,0,0,0,0,m_color,m_pen,m_font);
00156     m_ruler_vl = new PSQt::GURuler(rview(),GURuler::VL,m_ymin,m_ymax,m_xmin,m_nydiv1,m_nydiv2,1,0,0,0,0,m_color,m_pen,m_font);
00157     m_ruler_vr = new PSQt::GURuler(rview(),GURuler::VR,m_ymin,m_ymax,m_xmax,m_nydiv1,m_nydiv2,0,0,0,0,0,m_color,m_pen,m_font);
00158   }
00159 
00160 //--------------------------
00161   void GUAxes::printMemberData()
00162   {
00163     std::cout << "GUAxes::printMemberData():"
00164               << "\n xmin  :" << m_xmin
00165               << "\n xmax  :" << m_xmax
00166               << "\n ymin  :" << m_ymin
00167               << "\n ymax  :" << m_ymax
00168               << "\n nxdiv1:" << m_nxdiv1
00169               << "\n nydiv1:" << m_nydiv1
00170               << "\n nxdiv2:" << m_nxdiv2
00171               << "\n nydiv2:" << m_nydiv2
00172               << "\n pbits :" << m_pbits
00173               << '\n';
00174   }
00175 
00176 //--------------------------
00177 
00178   void GUAxes::printTransform()
00179   {
00180     QTransform trans = pview()->transform();
00181     std::cout << "GUAxes::printTransform():"
00182               << "\n m11():" << trans.m11()
00183               << "\n m22():" << trans.m22()
00184               << "\n dx() :" << trans.dx()
00185               << "\n dy() :" << trans.dy()
00186               << '\n';
00187   }
00188 
00189 //--------------------------
00190 
00191 void 
00192 GUAxes::closeEvent(QCloseEvent *event)
00193 {
00194   //QGraphicsView::closeEvent(event);
00195   //std::cout << "GUAxes::closeEvent(...): type = " << event -> type() << std::endl;
00196 }
00197 
00198 //--------------------------
00199 
00200 void 
00201 GUAxes::resizeEvent(QResizeEvent *event)
00202 {
00203   //m_frame -> setFrameRect (this->rect());
00204   //m_frame->setGeometry(0, 0, event->size().width(), event->size().height());
00205   
00206   //std::cout << "GUAxes::resizeEvent(...): w=" << event->size().width() 
00207   //          << "  h=" << event->size().height() << '\n';
00208 
00209   //setWindowTitle("Window is resized");
00210 
00211 
00212 
00213   //pview()->fitInView(m_scene_rect, Qt::IgnoreAspectRatio);
00214   this->updateTransform();
00215 }
00216 
00217 //--------------------------
00218 
00219 QPointF 
00220 GUAxes::pointOnAxes(QMouseEvent *e)
00221 {
00222   //const QPoint& poswin = e->pos();
00223   QPointF sp = pview()->mapToScene(e->pos());
00224   return sp;
00225 }
00226 
00227 //--------------------------
00228 
00229 void 
00230 GUAxes::mousePressEvent(QMouseEvent *e)
00231 {
00232   QPointF sp = pointOnAxes(e);
00233   emit pressOnAxes(e, sp);
00234 }
00235 
00236 //--------------------------
00237 
00238 void 
00239 GUAxes::mouseReleaseEvent(QMouseEvent *e)
00240 {
00241   QPointF sp = pointOnAxes(e);
00242   emit releaseOnAxes(e, sp);
00243 }
00244 
00245 //--------------------------
00246 
00247 void 
00248 GUAxes::mouseMoveEvent(QMouseEvent *e)
00249 {
00250   //QPointF sp = pointOnAxes(e);
00251   //emit moveOnAxes(e, sp);
00252 }
00253 
00254 //--------------------------
00255 //--------------------------
00256 //--------------------------
00257 //--------------------------
00258 
00259 void
00260 GUAxes::message(QMouseEvent *e, const QPointF& sp, const char* cmt)
00261 {
00262   std::stringstream ss;
00263   ss << _name_() << " " << cmt
00264      << "  button: " << e->button()
00265      << "  window x(), y() = " << e->x() << ", " << e->y()
00266      << "  scene x(), y() = " << sp.x() << ", " << sp.y();
00267 
00268   MsgInLog(_name_(), DEBUG, ss.str());
00269 }
00270 
00271 //--------------------------
00272 
00273 void 
00274 GUAxes::testSignalPressOnAxes(QMouseEvent* e, QPointF p)
00275 {
00276   message(e, p, "press   ");
00277 }
00278 
00279 //--------------------------
00280 
00281 void 
00282 GUAxes::testSignalReleaseOnAxes(QMouseEvent* e, QPointF p)
00283 {
00284   message(e, p, "release");
00285 }
00286 
00287 //--------------------------
00288 
00289 void 
00290 GUAxes::testSignalMoveOnAxes(QMouseEvent* e, QPointF p)
00291 {
00292   message(e, p, "move    ");
00293 }
00294 
00295 //--------------------------
00296 //--------------------------
00297 //--------------------------
00298 } // namespace PSQt
00299 //--------------------------

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7