PSQt/src/WdgImageFigs.cpp

Go to the documentation of this file.
00001 //---------------------------------------------------------------------
00002 // File and Version Information:
00003 //   $Id: WdgImageFigs.cpp 9841 2015-03-26 18:35:44Z dubrovin@SLAC.STANFORD.EDU $
00004 //
00005 // Author: Mikhail S. Dubrovin
00006 //---------------------------------------------------------------------
00007 
00008 //--------------------------
00009 #include "PSQt/WdgImageFigs.h"
00010 #include "PSQt/Logger.h"
00011 //#include "PSCalib/GeometryAccess.h"
00012 //#include "ndarray/ndarray.h" // for img_from_pixel_arrays(...)
00013 
00014 #include "PSQt/QGUtils.h"
00015 #include "PSQt/DragStore.h"
00016 
00017 #include <iostream>    // for std::cout
00018 #include <fstream>     // for std::ifstream(fname)
00019 //using namespace std; // for cout without std::
00020 //#include <math.h>  // atan2
00021 //#include <cstring> // for memcpy
00022 
00023 namespace PSQt {
00024 
00025 //--------------------------
00026 
00027 WdgImageFigs::WdgImageFigs(QWidget *parent, const std::string& ifname)
00028   : WdgImage(parent, ifname)
00029 {
00030   this->setParameters();
00031 }
00032 
00033 //--------------------------
00034 
00035 WdgImageFigs::WdgImageFigs( QWidget *parent, const QImage* image)
00036   : WdgImage(parent, image)
00037 {
00038   this->setParameters();
00039 }
00040 
00041 //--------------------------
00042 
00043 WdgImageFigs::~WdgImageFigs()
00044 {
00045 }
00046 
00047 //--------------------------
00048 
00049 void
00050 WdgImageFigs::setParameters()
00051 {
00052   //m_dragstore = new DragStore(WdgImage::getThis());
00053   m_dragstore = new DragStore(this);
00054   m_dragmode = ZOOM;
00055 
00056   QVector<qreal> dashes;
00057   qreal space = 5;
00058   dashes << 5 << space;
00059 
00060   m_pen1 = new QPen(Qt::red,   2, Qt::DashLine);
00061   m_pen2 = new QPen(Qt::green, 2, Qt::DashLine);
00062   m_pen1->setDashPattern(dashes);
00063   m_pen2->setDashPattern(dashes);
00064   m_pen2->setDashOffset(5);
00065 }
00066 
00067 //--------------------------
00068 
00069 void 
00070 WdgImageFigs::paintEvent(QPaintEvent *e)
00071 {
00072   WdgImage::QLabel::paintEvent(e);
00073   WdgImage::paintEvent(e);
00074 
00075   m_painter = WdgImage::getPainter();
00076   m_painter->begin(this);
00077 
00078   //-----------
00079   drawDragFigs();
00080   //drawDragFigsV0();
00081   //-----------
00082 
00083   m_painter->end();
00084 
00085   //static unsigned count=0; count++;
00086   //std::cout << "WdgImageFigs::paintEvent counter = " << count << '\n';
00087 }
00088 
00089 //--------------------------
00090 
00091 void 
00092 WdgImageFigs::drawDragFigs()
00093 {
00094   m_dragstore -> drawFigs(m_dragmode);
00095 }
00096 
00097 //--------------------------
00098 
00099 void 
00100 WdgImageFigs::addCircle(const float& rad_raw)
00101 {
00102   m_dragstore -> addCircle(rad_raw);
00103   update();
00104 }
00105 //--------------------------
00106 
00107 const QPointF& 
00108 WdgImageFigs::getCenter()
00109 { 
00110   return m_dragstore->getCenter(); 
00111 }
00112 
00113 //--------------------------
00114 //--------------------------
00115 //--------------------------
00116 //--------------------------
00117 
00118 void 
00119 WdgImageFigs::drawDragFigsV0()
00120 {
00121   drawLine();
00122   drawRect();
00123   //drawCirc();
00124   //drawCenter();
00125 }
00126 
00127 //--------------------------
00128 
00129 void 
00130 WdgImageFigs::drawLine()
00131 {
00132   QPointF p1_raw(200,100);
00133   QPointF p2_raw(800,800);
00134 
00135   QPointF p1 = WdgImage::pointInImage(p1_raw);
00136   QPointF p2 = WdgImage::pointInImage(p2_raw);
00137 
00138   QPen pen(Qt::white, 2, Qt::SolidLine);
00139   m_painter->setPen(pen);
00140   m_painter->drawLine(p1, p2);
00141 }
00142 
00143 //--------------------------
00144 
00145 void 
00146 WdgImageFigs::drawRect()
00147 {
00148   QPointF p1_raw(100,200);
00149   QPointF p2_raw(200,500);
00150 
00151   QPointF p1 = WdgImage::pointInImage(p1_raw);
00152   QPointF p2 = WdgImage::pointInImage(p2_raw);
00153 
00154   QRectF m_rect(p1,p2);
00155   m_painter->setPen(*m_pen1); m_painter->drawRect(m_rect); 
00156   m_painter->setPen(*m_pen2); m_painter->drawRect(m_rect); 
00157 }
00158 
00159 //--------------------------
00160 //--------------------------
00161 //--------------------------
00162 //--------------------------
00163 
00164 void 
00165 WdgImageFigs::moveEvent(QMoveEvent *e)
00166 {
00167   WdgImage::moveEvent(e);
00168   //stringstream ss; 
00169   //ss << _name_() << "::moveEvent(...): x=" << e->pos().x() << "  y=" << e->pos().y();
00170   //MsgInLog(_name_(), INFO, ss.str());
00171 }
00172 
00173 //--------------------------
00174 
00175 void 
00176 WdgImageFigs::resizeEvent(QResizeEvent *e)
00177 {
00178   WdgImage::resizeEvent(e);
00179   //stringstream ss; 
00180   //ss << _name_() << "::resizeEvent(...): w=" << e->size().width() << "  h=" << e->size().height();
00181   //MsgInLog(_name_(), INFO, ss.str());
00182 }
00183 
00184 //--------------------------
00185 
00186 void 
00187 WdgImageFigs::closeEvent(QCloseEvent *e)
00188 {
00189   QWidget::closeEvent(e);
00190   //stringstream ss; ss << _name_() << "::closeEvent(...): type = " << e -> type();
00191   //std::cout << ss.str() << '\n';
00192   //MsgInLog(_name_(), INFO, ss.str());
00193 }
00194 
00195 //--------------------------
00196 
00197 void 
00198 WdgImageFigs::mousePressEvent(QMouseEvent *e)
00199 {
00200   bool click_on_fig = m_dragstore -> containFigs(e->posF());
00201 
00202   if(click_on_fig) {
00203       if(e->button() == Qt::MidButton) m_dragmode = DELETE;
00204       else m_dragmode = MOVE;
00205   }
00206 
00207   if(m_dragmode == ZOOM) WdgImage::mousePressEvent(e);
00208 
00209   if(m_dragmode == MOVE)   MsgInLog(_name_(), DEBUG, "MOVE mode is on");
00210 
00211   if(m_dragmode == DELETE) MsgInLog(_name_(), DEBUG, "DELETE mode is on");
00212   //std::cout << _name_() << "::mousePressEvent:"
00213   //          << "  button: " << e->button()
00214   //          << "  x(),y() = " << e->x() << ", " << e->y()
00215   //          << '\n';
00216 
00217   /*
00218   QPointF pimg(float(e->x()),float(e->y())); 
00219   QPointF praw  = pointInRaw(pimg);
00220   QPointF pimg1 = pointInImage(praw);
00221   std::cout << "  point in image   x:" << pimg.x()  << "   x:" << pimg.y() << '\n';
00222   std::cout << "  point in raw     x:" << praw.x()  << "   x:" << praw.y() << '\n';
00223   std::cout << "  point in image1  x:" << pimg1.x() << "   x:" << pimg1.y() << '\n';
00224   */
00225 
00226   this -> setCursor(Qt::ClosedHandCursor);
00227   /*
00228   m_point1->setX(e->x());
00229   m_point1->setY(e->y());
00230   m_point2->setX(e->x());
00231   m_point2->setY(e->y());
00232   */
00233   update();
00234 }
00235 
00236 //--------------------------
00237 
00238 void 
00239 WdgImageFigs::mouseReleaseEvent(QMouseEvent *e)
00240 {
00241   if(m_dragmode == ZOOM) WdgImage::mouseReleaseEvent(e);
00242 
00243   if(m_dragmode == DELETE) m_dragstore -> deleteFig();
00244 
00245   if(m_dragmode == MOVE) m_dragstore -> moveFigsIsCompleted(e->posF());
00246 
00247   //std::cout << _name_() << "::mouseReleaseEvent:"
00248   //          << "  button: " << e->button()
00249   //          << "  x(),y() = " << e->x() << ", " << e->y()
00250   //          << '\n';
00251 
00252   //this -> unsetCursor(); 
00253   this -> setCursor(Qt::PointingHandCursor); // Qt::SizeAllCursor, Qt::WaitCursor, Qt::PointingHandCursor
00254 
00255   //if(e->button() == 4) { // for middle button
00256   //  update();
00257   //  return;
00258   //}
00259 
00260   //m_point2->setX(e->x());
00261   //m_point2->setY(e->y());
00262 
00263   update();
00264   m_dragmode = ZOOM;
00265 }
00266 
00267 //--------------------------
00268 
00269 void 
00270 WdgImageFigs::forceUpdate()
00271 {
00272   update();
00273 }
00274 
00275 //--------------------------
00276 
00277 void 
00278 WdgImageFigs::mouseMoveEvent(QMouseEvent *e)
00279 {
00280   if(m_dragmode == ZOOM) WdgImage::mouseMoveEvent(e);
00281 
00282   if(m_dragmode == MOVE) m_dragstore -> moveFigs(e->posF());
00283 
00284   //std::cout << "mouseMoveEvent: "
00285   //          << "  x(),y() = "  << e->x() << ", " << e->y()
00286   //          << '\n';
00287   //m_point2->setX(e->x());
00288   //m_point2->setY(e->y());
00289   update();
00290 }
00291 
00292 //--------------------------
00293 //--------------------------
00294 //----   Test images   -----
00295 //--------------------------
00296 //--------------------------
00297 
00298 void 
00299 WdgImageFigs::onTest()
00300 {
00301   MsgInLog(_name_(), INFO, "onTest() - slot");
00302   //std::cout << "WdgImageFigs::onTest() - slot\n";  
00303 }
00304 
00305 //--------------------------
00306 //--------------------------
00307 //--------------------------
00308 //--------------------------
00309 //--------------------------
00310 //--------------------------
00311 
00312 } // namespace PSQt
00313 
00314 //--------------------------

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7