00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "PSQt/GUAxes.h"
00010
00011 #include "PSQt/Logger.h"
00012
00013 #include <QCloseEvent>
00014 #include <QResizeEvent>
00015 #include <QMouseEvent>
00016
00017 #include <sstream>
00018 #include <iostream>
00019
00020
00021
00022
00023
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
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
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
00080
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
00124
00125
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);
00132
00133
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
00144
00145
00146
00147
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
00195
00196 }
00197
00198
00199
00200 void
00201 GUAxes::resizeEvent(QResizeEvent *event)
00202 {
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214 this->updateTransform();
00215 }
00216
00217
00218
00219 QPointF
00220 GUAxes::pointOnAxes(QMouseEvent *e)
00221 {
00222
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
00251
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 }
00299