]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/proxguiqt.cpp
Patch submitted by 'FireFart', for some issues with 'hf mf chk'. See http://www.proxm...
[proxmark3-svn] / client / proxguiqt.cpp
index 4e57fecc7ff8754cb46f30f84d64b2decc6daee3..a820fe419d44f0ba604cc3c323667b1e07101e2a 100644 (file)
@@ -25,6 +25,7 @@
 int GridOffset= 0;
 bool GridLocked= 0;
 int startMax;
+int PageWidth;
 
 void ProxGuiQT::ShowGraphWindow(void)
 {
@@ -131,6 +132,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 +144,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 +154,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;
@@ -267,9 +270,9 @@ void ProxWidget::paintEvent(QPaintEvent *event)
        painter.drawPath(cursorBPath);
 
        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);
@@ -285,6 +288,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 +316,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 +347,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 +408,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