[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kstars/bleeding] kstars/fitsviewer: Right-click now removes the crosshairs. Also,
From:       Jasem Mutlaq <mutlaqja () ikarustech ! com>
Date:       2016-09-30 20:38:34
Message-ID: E1bq4Zm-00030p-GT () code ! kde ! org
[Download RAW message or body]

Git commit cce4f3016357362cac2e977a3afa5312155d2e18 by Jasem Mutlaq.
Committed on 29/09/2016 at 19:37.
Pushed by mutlaqja into branch 'bleeding'.

Right-click now removes the crosshairs. Also, if there is a crosshair present then \
zoom in or out will try to center the view on the crosshair location

M  +88   -68   kstars/fitsviewer/fitsview.cpp
M  +0    -3    kstars/fitsviewer/fitsview.h

http://commits.kde.org/kstars/cce4f3016357362cac2e977a3afa5312155d2e18

diff --git a/kstars/fitsviewer/fitsview.cpp b/kstars/fitsviewer/fitsview.cpp
index 90a6563..94a7d0e 100644
--- a/kstars/fitsviewer/fitsview.cpp
+++ b/kstars/fitsviewer/fitsview.cpp
@@ -56,9 +56,10 @@
 #include "indi/driverinfo.h"
 #endif
 
+#define BASE_OFFSET     50
 #define ZOOM_DEFAULT	100.0
-#define ZOOM_MIN	10
-#define ZOOM_MAX	400
+#define ZOOM_MIN        10
+#define ZOOM_MAX        400
 #define ZOOM_LOW_INCR	10
 #define ZOOM_HIGH_INCR	50
 
@@ -143,36 +144,42 @@ void FITSLabel::mousePressEvent(QMouseEvent *e)
 #ifdef HAVE_INDI
     FITSData *image_data = image->getImageData();
 
-    if ( (e->buttons() & Qt::RightButton) && image_data->hasWCS())
+    if (e->buttons() & Qt::RightButton)
     {
-      QMenu fitspopup;
-      QAction *trackAction = fitspopup.addAction(i18n("Center In Telescope"));
+        if (image_data->hasWCS())
+        {
+            QMenu fitspopup;
+            QAction *trackAction = fitspopup.addAction(i18n("Center In Telescope"));
+
+            if (fitspopup.exec(e->globalPos()) == trackAction)
+            {
+                int index = x + y * width;
 
-      if (fitspopup.exec(e->globalPos()) == trackAction)
-      {
-          int index = x + y * width;
+                wcs_point * wcs_coord = image_data->getWCSCoord();
 
-          wcs_point * wcs_coord = image_data->getWCSCoord();
+                if (wcs_coord)
+                {
+                    if (index > size)
+                        return;
 
-          if (wcs_coord)
-          {
-              if (index > size)
-                  return;
+                    centerTelescope(wcs_coord[index].ra/15.0, wcs_coord[index].dec);
 
-              centerTelescope(wcs_coord[index].ra/15.0, wcs_coord[index].dec);
+                    return;
+                }
+            }
+        }
 
-              return;
-          }
-      }
+        if (fabs(image->markerCrosshair.x()-x) <= 15 && \
fabs(image->markerCrosshair.y()-y) <= 15) +            emit markerSelected(0, 0);
     }
 #endif
 
-   emit pointSelected(x, y);
+    emit pointSelected(x, y);
 
-   double HFR = image->getImageData()->getHFR(x, y);
+    double HFR = image->getImageData()->getHFR(x, y);
 
-   if (HFR > 0)
-       QToolTip::showText(e->globalPos(), i18nc("Half Flux Radius", "HFR: %1", \
QString::number(HFR, 'g' , 3)), this); +    if (HFR > 0)
+        QToolTip::showText(e->globalPos(), i18nc("Half Flux Radius", "HFR: %1", \
QString::number(HFR, 'g' , 3)), this);  
 }
 
@@ -251,9 +258,9 @@ FITSView::FITSView(QWidget * parent, FITSMode fitsMode, FITSScale \
filterType) :  trackingBoxEnabled=false;
     trackingBoxUpdated=false;
     filter = filterType;
-    mode = fitsMode;    
+    mode = fitsMode;
 
-    setBackgroundRole(QPalette::Dark);    
+    setBackgroundRole(QPalette::Dark);
 
     markerCrosshair.setX(0);
     markerCrosshair.setY(0);
@@ -261,6 +268,8 @@ FITSView::FITSView(QWidget * parent, FITSMode fitsMode, FITSScale \
filterType) :  currentZoom = 0.0;
     markStars = false;
 
+    setBaseSize(640,480);
+
     connect(image_frame, SIGNAL(newStatus(QString,FITSBar)), this, \
                SIGNAL(newStatus(QString,FITSBar)));
     connect(image_frame, SIGNAL(pointSelected(int,int)), this, \
                SLOT(processPointSelection(int,int)));
     connect(image_frame, SIGNAL(markerSelected(int,int)), this, \
SLOT(processMarkerSelection(int,int))); @@ -271,7 +280,7 @@ \
                FITSView::FITSView(QWidget * parent, FITSMode fitsMode, FITSScale \
                filterType) :
     //connect(image_frame, SIGNAL(pointSelected(int,int)), this, \
SLOT(processPointSelection(int,int)));  
     // Default size
-    resize(INITIAL_W, INITIAL_H);
+    //resize(INITIAL_W, INITIAL_H);
 }
 
 FITSView::~FITSView()
@@ -321,8 +330,8 @@ bool FITSView::loadFITS (const QString &inFilename , bool silent)
             return false;
         else
         {
-           fitsProg.setValue(65);
-           qApp->processEvents();
+            fitsProg.setValue(65);
+            qApp->processEvents();
         }
     }
 
@@ -346,8 +355,8 @@ bool FITSView::loadFITS (const QString &inFilename , bool silent)
             return false;
         else
         {
-           fitsProg.setValue(75);
-           qApp->processEvents();
+            fitsProg.setValue(75);
+            qApp->processEvents();
         }
     }
 
@@ -375,15 +384,15 @@ bool FITSView::loadFITS (const QString &inFilename , bool \
silent)  return false;
         else
         {
-           fitsProg.setValue(100);
-           qApp->processEvents();
+            fitsProg.setValue(100);
+            qApp->processEvents();
         }
     }
 
     setAlignment(Qt::AlignCenter);
 
     if (isVisible())
-    emit newStatus(QString("%1x%2").arg(image_width).arg(image_height), \
FITS_RESOLUTION); +        emit \
newStatus(QString("%1x%2").arg(image_width).arg(image_height), FITS_RESOLUTION);  
     return true;
 }
@@ -507,12 +516,15 @@ int FITSView::rescale(FITSZoom type)
     case ZOOM_FIT_WINDOW:
         if ((display_image->width() > width() || display_image->height() > \
height()))  {
+            int w = baseSize().width() - BASE_OFFSET;
+            int h = baseSize().height() - BASE_OFFSET;
+
             // Find the zoom level which will enclose the current FITS in the \
                default window size (640x480)
-            currentZoom = floor( (INITIAL_W / currentWidth) * 10.) * 10.;
+            currentZoom = floor( (w / currentWidth) * 10.) * 10.;
 
             /* If width is not the problem, try height */
             if (currentZoom > ZOOM_DEFAULT)
-                currentZoom = floor( (INITIAL_H / currentHeight) * 10.) * 10.;
+                currentZoom = floor( (h / currentHeight) * 10.) * 10.;
 
             currentWidth  = image_width * (currentZoom / ZOOM_DEFAULT);
             currentHeight = image_height * (currentZoom / ZOOM_DEFAULT);
@@ -547,8 +559,8 @@ int FITSView::rescale(FITSZoom type)
     setWidget(image_frame);
 
 
-   if (type != ZOOM_KEEP_LEVEL)
-       emit newStatus(QString("%1%").arg(currentZoom), FITS_ZOOM);
+    if (type != ZOOM_KEEP_LEVEL)
+        emit newStatus(QString("%1%").arg(currentZoom), FITS_ZOOM);
 
     return 0;
 
@@ -613,9 +625,9 @@ void FITSView::updateFrame()
         return;
 
     if (currentZoom != ZOOM_DEFAULT)
-            ok = displayPixmap.convertFromImage(display_image->scaled( (int) \
                currentWidth, (int) currentHeight, Qt::KeepAspectRatio, \
                Qt::SmoothTransformation));
-        else
-            ok = displayPixmap.convertFromImage(*display_image);
+        ok = displayPixmap.convertFromImage(display_image->scaled( (int) \
currentWidth, (int) currentHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + \
else +        ok = displayPixmap.convertFromImage(*display_image);
 
 
     if (ok == false)
@@ -650,7 +662,7 @@ void FITSView::ZoomDefault()
 void FITSView::drawOverlay(QPainter *painter)
 {
     if (markStars)
-         drawStarCentroid(painter);
+        drawStarCentroid(painter);
 
     //if (mode == FITS_GUIDE)
     if (trackingBoxEnabled)
@@ -753,37 +765,37 @@ void FITSView::setTrackingBox(const QRect & rect)
 
 void FITSView::toggleStars(bool enable)
 {
-     markStars = enable;
-
-     if (markStars == true)
-     {
-       QApplication::setOverrideCursor(Qt::WaitCursor);
-       emit newStatus(i18n("Finding stars..."), FITS_MESSAGE);
-       qApp->processEvents();
-       int count = -1;
-
-       if (trackingBoxEnabled)
-       {
-           count = image_data->findStars(trackingBox, trackingBoxUpdated);
-           trackingBoxUpdated=false;
-       }
-       else
-           count = image_data->findStars();
-
-
-    //QRectF boundary(0,0, image_data->getWidth(), image_data->getHeight());
-    //count = image_data->findOneStar(boundary);
-
-       if (count >= 0 && isVisible())
-               emit newStatus(i18np("1 star detected.", "%1 stars detected.", \
                count), FITS_MESSAGE);
-       QApplication::restoreOverrideCursor();
-     }
+    markStars = enable;
+
+    if (markStars == true)
+    {
+        QApplication::setOverrideCursor(Qt::WaitCursor);
+        emit newStatus(i18n("Finding stars..."), FITS_MESSAGE);
+        qApp->processEvents();
+        int count = -1;
+
+        if (trackingBoxEnabled)
+        {
+            count = image_data->findStars(trackingBox, trackingBoxUpdated);
+            trackingBoxUpdated=false;
+        }
+        else
+            count = image_data->findStars();
+
+
+        //QRectF boundary(0,0, image_data->getWidth(), image_data->getHeight());
+        //count = image_data->findOneStar(boundary);
+
+        if (count >= 0 && isVisible())
+            emit newStatus(i18np("1 star detected.", "%1 stars detected.", count), \
FITS_MESSAGE); +        QApplication::restoreOverrideCursor();
+    }
 }
 
 void FITSView::processPointSelection(int x, int y)
 {
     //if (mode != FITS_GUIDE)
-        //return;
+    //return;
 
     //image_data->getCenterSelection(&x, &y);
 
@@ -793,10 +805,10 @@ void FITSView::processPointSelection(int x, int y)
 
 void FITSView::processMarkerSelection(int x, int y)
 {
-   markerCrosshair.setX(x);
-   markerCrosshair.setY(y);
+    markerCrosshair.setX(x);
+    markerCrosshair.setY(y);
 
-   updateFrame();
+    updateFrame();
 }
 
 void FITSView::setTrackingBoxEnabled(bool enable)
@@ -816,6 +828,14 @@ void FITSView::wheelEvent(QWheelEvent* event)
         ZoomOut();
 
     event->accept();
+
+    if (markerCrosshair.isNull() == false)
+    {
+        int x0 = markerCrosshair.x()  * (currentZoom / ZOOM_DEFAULT);
+        int y0 = markerCrosshair.y()  * (currentZoom / ZOOM_DEFAULT);
+
+        ensureVisible(x0,y0, image_width/2, image_height/2);
+    }
 }
 
 void FITSView::initDisplayImage()
diff --git a/kstars/fitsviewer/fitsview.h b/kstars/fitsviewer/fitsview.h
index 0f6074c..e45eb10 100644
--- a/kstars/fitsviewer/fitsview.h
+++ b/kstars/fitsviewer/fitsview.h
@@ -43,9 +43,6 @@
 #include "dms.h"
 #include "fitsdata.h"
 
-#define INITIAL_W	640
-#define INITIAL_H	480
-
 #define MINIMUM_PIXEL_RANGE 5
 #define MINIMUM_STDVAR  5
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic