]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/proxguiqt.cpp
align clock grid with demods on graph (#276)
[proxmark3-svn] / client / proxguiqt.cpp
index 4e57fecc7ff8754cb46f30f84d64b2decc6daee3..85f408f79bacf331bce4524fee18c3fec4c1251e 100644 (file)
@@ -7,6 +7,7 @@
 //-----------------------------------------------------------------------------
 // GUI (QT)
 //-----------------------------------------------------------------------------
+#include "proxguiqt.h"
 
 #include <iostream>
 #include <QPainterPath>
 #include <math.h>
 #include <limits.h>
 #include <stdio.h>
-#include "proxguiqt.h"
 #include "proxgui.h"
 
-int GridOffset= 0;
-bool GridLocked= 0;
 int startMax;
+int PageWidth;
 
 void ProxGuiQT::ShowGraphWindow(void)
 {
@@ -101,7 +100,7 @@ ProxGuiQT::~ProxGuiQT(void)
 void ProxWidget::paintEvent(QPaintEvent *event)
 {
        QPainter painter(this);
-       QPainterPath penPath, whitePath, greyPath, lightgreyPath, cursorAPath, cursorBPath;
+       QPainterPath penPath, whitePath, greyPath, lightgreyPath, cursorAPath, cursorBPath, cursorCPath, cursorDPath;
        QRect r;
        QBrush brush(QColor(100, 255, 100));
        QPen pen(QColor(100, 255, 100));
@@ -116,6 +115,10 @@ void ProxWidget::paintEvent(QPaintEvent *event)
                CursorAPos= 0;
        if(CursorBPos > GraphTraceLen)
                CursorBPos= 0;
+       if(CursorCPos > GraphTraceLen)
+               CursorCPos= 0;
+       if(CursorDPos > GraphTraceLen)
+               CursorDPos= 0;
 
        r = rect();
 
@@ -131,6 +134,8 @@ void ProxWidget::paintEvent(QPaintEvent *event)
        painter.setPen(QColor(100, 100, 100));
        painter.drawPath(greyPath);
 
+       PageWidth= (int)((r.right() - r.left() - 40) / GraphPixelsPerPoint);
+       
         // plot X and Y grid lines
         int i;
         if ((PlotGridX > 0) && ((PlotGridX * GraphPixelsPerPoint) > 1)) {
@@ -141,7 +146,7 @@ void ProxWidget::paintEvent(QPaintEvent *event)
                        lightgreyPath.moveTo(r.left()+i,r.top());
                        lightgreyPath.lineTo(r.left()+i,r.bottom());
                        painter.drawPath(lightgreyPath);
-                
+               } 
         } 
         if ((PlotGridY > 0) && ((PlotGridY * GraphPixelsPerPoint) > 1)){
                for(i = 0; i < ((r.top() + r.bottom())>>1); i += (int)(PlotGridY * GraphPixelsPerPoint)) {
@@ -151,9 +156,9 @@ void ProxWidget::paintEvent(QPaintEvent *event)
                        lightgreyPath.moveTo(r.left() + 40,zeroHeight - i);
                        lightgreyPath.lineTo(r.right(),zeroHeight - i);
                        painter.drawPath(lightgreyPath);
-                       }
                }
-       
+        }
+
        startMax = (GraphTraceLen - (int)((r.right() - r.left() - 40) / GraphPixelsPerPoint));
        if(startMax < 0) {
                startMax = 0;
@@ -239,13 +244,17 @@ void ProxWidget::paintEvent(QPaintEvent *event)
                        penPath.moveTo(x,y);
                }
 
-               if(i == CursorAPos || i == CursorBPos) {
+               if(i == CursorAPos || i == CursorBPos || i == CursorCPos || i == CursorDPos) {
                        QPainterPath *cursorPath;
 
                        if(i == CursorAPos) {
                                cursorPath = &cursorAPath;
-                       } else {
+                       } else if (i == CursorBPos) {
                                cursorPath = &cursorBPath;
+                       } else if (i == CursorCPos) {
+                               cursorPath = &cursorCPath;
+                       } else {
+                               cursorPath = &cursorDPath;
                        }
                        cursorPath->moveTo(x, r.top());
                        cursorPath->lineTo(x, r.bottom());
@@ -265,11 +274,15 @@ void ProxWidget::paintEvent(QPaintEvent *event)
        painter.drawPath(cursorAPath);
        painter.setPen(QColor(255, 0, 255));
        painter.drawPath(cursorBPath);
+       painter.setPen(QColor(255, 153, 0)); //orange
+       painter.drawPath(cursorCPath);
+       painter.setPen(QColor(0, 0, 205)); //light blue
+       painter.drawPath(cursorDPath);
 
        char str[200];
-       sprintf(str, "@%d   max=%d min=%d mean=%d n=%d/%d    dt=%d [%.3f] zoom=%.3f CursorA=%d [%d] CursorB=%d [%d]",
+       sprintf(str, "@%d   max=%d min=%d mean=%d n=%d/%d    dt=%d [%.3f] zoom=%.3f CursorA=%d [%d] CursorB=%d [%d]    GridX=%d GridY=%d (%s)",
                        GraphStart, yMax, yMin, yMean, n, GraphTraceLen,
-                       CursorBPos - CursorAPos, (CursorBPos - CursorAPos)/CursorScaleFactor,GraphPixelsPerPoint,CursorAPos,GraphBuffer[CursorAPos],CursorBPos,GraphBuffer[CursorBPos]);
+                       CursorBPos - CursorAPos, (CursorBPos - CursorAPos)/CursorScaleFactor,GraphPixelsPerPoint,CursorAPos,GraphBuffer[CursorAPos],CursorBPos,GraphBuffer[CursorBPos],PlotGridXdefault,PlotGridYdefault,GridLocked?"Locked":"Unlocked");
 
        painter.setPen(QColor(255, 255, 255));
        painter.drawText(50, r.bottom() - 20, str);
@@ -277,7 +290,7 @@ void ProxWidget::paintEvent(QPaintEvent *event)
 
 ProxWidget::ProxWidget(QWidget *parent) : QWidget(parent), GraphStart(0), GraphPixelsPerPoint(1)
 {
-       resize(600, 500);
+       resize(600, 300);
 
        QPalette palette(QColor(0,0,0,0));
        palette.setColor(QPalette::WindowText, QColor(255,255,255));
@@ -285,6 +298,8 @@ ProxWidget::ProxWidget(QWidget *parent) : QWidget(parent), GraphStart(0), GraphP
        palette.setColor(QPalette::Button, QColor(100, 100, 100));
        setPalette(palette);
        setAutoFillBackground(true);
+       CursorAPos = 0;
+       CursorBPos = 0;
 }
 
 void ProxWidget::closeEvent(QCloseEvent *event)
@@ -311,6 +326,22 @@ void ProxWidget::mouseMoveEvent(QMouseEvent *event)
 
 void ProxWidget::keyPressEvent(QKeyEvent *event)
 {
+       int     offset;
+       int     gridchanged;
+
+       gridchanged= 0;
+
+       if(event->modifiers() & Qt::ShiftModifier) {
+               if (PlotGridX)
+                       offset= PageWidth - (PageWidth % PlotGridX);
+               else
+                       offset= PageWidth;
+       } else 
+               if(event->modifiers() & Qt::ControlModifier)
+                       offset= 1;
+               else
+                       offset= (int)(20 / GraphPixelsPerPoint);
+
        switch(event->key()) {
                case Qt::Key_Down:
                        if(GraphPixelsPerPoint <= 50) {
@@ -326,32 +357,53 @@ void ProxWidget::keyPressEvent(QKeyEvent *event)
 
                case Qt::Key_Right:
                        if(GraphPixelsPerPoint < 20) {
-                               if (GridLocked && GraphStart < startMax)
-                                       GridOffset -= (int)(20 / GraphPixelsPerPoint);
-                               GraphStart += (int)(20 / GraphPixelsPerPoint);
+                               if (PlotGridX && GridLocked && GraphStart < startMax){
+                                       GridOffset -= offset;
+                                       GridOffset %= PlotGridX;
+                                       gridchanged= 1;
+                               }
+                               GraphStart += offset;
                        } else {
-                               if (GridLocked && GraphStart < startMax)
+                               if (PlotGridX && GridLocked && GraphStart < startMax){
                                        GridOffset--;
+                                       GridOffset %= PlotGridX;
+                                       gridchanged= 1;
+                               }
                                GraphStart++;
                        }
-                       if(GridOffset < 0)
+                       if(GridOffset < 0) {
                                GridOffset += PlotGridX;
-                       if (PlotGridX)
-                               GridOffset %= PlotGridX;
+                       }
+                       if (gridchanged)
+                               if (GraphStart > startMax) {
+                                       GridOffset += (GraphStart - startMax);
+                                       GridOffset %= PlotGridX;
+                               }
                        break;
 
                case Qt::Key_Left:
                        if(GraphPixelsPerPoint < 20) {
-                               if (GridLocked && GraphStart > 0)
-                                       GridOffset += (int)(20 / GraphPixelsPerPoint);
-                               GraphStart -= (int)(20 / GraphPixelsPerPoint);
+                               if (PlotGridX && GridLocked && GraphStart > 0){
+                                       GridOffset += offset;
+                                       GridOffset %= PlotGridX;
+                                       gridchanged= 1;
+                               }
+                               GraphStart -= offset;
                        } else {
-                               if (GridLocked && GraphStart > 0)
+                               if (PlotGridX && GridLocked && GraphStart > 0){
                                        GridOffset++;
+                                       GridOffset %= PlotGridX;
+                                       gridchanged= 1;
+                               }
                                GraphStart--;
                        }
-                       if (PlotGridX)
-                               GridOffset %= PlotGridX;
+                       if (gridchanged){
+                               if (GraphStart < 0)
+                                       GridOffset += GraphStart;
+                               if(GridOffset < 0)
+                                       GridOffset += PlotGridX;
+                       GridOffset %= PlotGridX;
+                       }
                        break;
 
                case Qt::Key_G:
@@ -366,15 +418,21 @@ void ProxWidget::keyPressEvent(QKeyEvent *event)
 
                case Qt::Key_H:
                        puts("Plot Window Keystrokes:\n");
-                       puts(" Key           Action\n");
-                       puts(" DOWN          Zoom in");
-                       puts(" G             Toggle grid display");
-                       puts(" H             Show help");
-                       puts(" LEFT          Move left");
-                       puts(" L             Toggle lock grid relative to samples");
-                       puts(" Q             Hide window");
-                       puts(" RIGHT         Move right");
-                       puts(" UP            Zoom out");
+                       puts(" Key                      Action\n");
+                       puts(" DOWN                     Zoom in");
+                       puts(" G                        Toggle grid display");
+                       puts(" H                        Show help");
+                       puts(" L                        Toggle lock grid relative to samples");
+                       puts(" LEFT                     Move left");
+                       puts(" <CTL>LEFT                Move left 1 sample");
+                       puts(" <SHIFT>LEFT              Page left");
+                       puts(" LEFT-MOUSE-CLICK         Set yellow cursor");
+                       puts(" Q                        Hide window");
+                       puts(" RIGHT                    Move right");
+                       puts(" <CTL>RIGHT               Move right 1 sample");
+                       puts(" <SHIFT>RIGHT             Page right");
+                       puts(" RIGHT-MOUSE-CLICK        Set purple cursor");
+                       puts(" UP                       Zoom out");
                        puts("");
                        puts("Use client window 'data help' for more plot commands\n");
                        break;
Impressum, Datenschutz