X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/212ef3a04d19bcb5299c38fd153ee434e0f26efd..refs/pull/165/head:/client/proxguiqt.cpp?ds=inline

diff --git a/client/proxguiqt.cpp b/client/proxguiqt.cpp
index f0038683..3e9bdfd5 100644
--- a/client/proxguiqt.cpp
+++ b/client/proxguiqt.cpp
@@ -22,6 +22,11 @@
 #include "proxguiqt.h"
 #include "proxgui.h"
 
+int GridOffset= 0;
+bool GridLocked= 0;
+int startMax;
+int PageWidth;
+
 void ProxGuiQT::ShowGraphWindow(void)
 {
 	emit ShowGraphWindowSignal();
@@ -127,17 +132,19 @@ 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)) {
-        	for(i = 40; i < r.right(); i += (int)(PlotGridX * GraphPixelsPerPoint)) {
+        	for(i = 40 + (GridOffset * GraphPixelsPerPoint); i < r.right(); i += (int)(PlotGridX * GraphPixelsPerPoint)) {
         		//SelectObject(hdc, GreyPenLite);
         		//MoveToEx(hdc, r.left + i, r.top, NULL);
         		//LineTo(hdc, r.left + i, r.bottom);
         		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)) {
@@ -147,11 +154,10 @@ void ProxWidget::paintEvent(QPaintEvent *event)
         		lightgreyPath.moveTo(r.left() + 40,zeroHeight - i);
 			lightgreyPath.lineTo(r.right(),zeroHeight - i);
 			painter.drawPath(lightgreyPath);
-        		}
         	}
-	
-	int startMax =
-		(GraphTraceLen - (int)((r.right() - r.left() - 40) / GraphPixelsPerPoint));
+        }
+
+	startMax = (GraphTraceLen - (int)((r.right() - r.left() - 40) / GraphPixelsPerPoint));
 	if(startMax < 0) {
 		startMax = 0;
 	}
@@ -263,10 +269,10 @@ void ProxWidget::paintEvent(QPaintEvent *event)
 	painter.setPen(QColor(255, 0, 255));
 	painter.drawPath(cursorBPath);
 
-	char str[100];
-	sprintf(str, "@%d   max=%d min=%d mean=%d n=%d/%d    dt=%d [%.3f] zoom=%.3f CursorA=%d [%d] CursorB=%d [%d]",
+	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]    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);
@@ -274,7 +280,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));
@@ -282,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)
@@ -308,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) {
@@ -323,18 +347,92 @@ void ProxWidget::keyPressEvent(QKeyEvent *event)
 
 		case Qt::Key_Right:
 			if(GraphPixelsPerPoint < 20) {
-				GraphStart += (int)(20 / GraphPixelsPerPoint);
+				if (PlotGridX && GridLocked && GraphStart < startMax){
+					GridOffset -= offset;
+					GridOffset %= PlotGridX;
+					gridchanged= 1;
+				}
+				GraphStart += offset;
 			} else {
+				if (PlotGridX && GridLocked && GraphStart < startMax){
+					GridOffset--;
+					GridOffset %= PlotGridX;
+					gridchanged= 1;
+				}
 				GraphStart++;
 			}
+			if(GridOffset < 0) {
+				GridOffset += PlotGridX;
+			}
+			if (gridchanged)
+				if (GraphStart > startMax) {
+					GridOffset += (GraphStart - startMax);
+					GridOffset %= PlotGridX;
+				}
 			break;
 
 		case Qt::Key_Left:
 			if(GraphPixelsPerPoint < 20) {
-				GraphStart -= (int)(20 / GraphPixelsPerPoint);
+				if (PlotGridX && GridLocked && GraphStart > 0){
+					GridOffset += offset;
+					GridOffset %= PlotGridX;
+					gridchanged= 1;
+				}
+				GraphStart -= offset;
 			} else {
+				if (PlotGridX && GridLocked && GraphStart > 0){
+					GridOffset++;
+					GridOffset %= PlotGridX;
+					gridchanged= 1;
+				}
 				GraphStart--;
 			}
+			if (gridchanged){
+				if (GraphStart < 0)
+					GridOffset += GraphStart;
+				if(GridOffset < 0)
+					GridOffset += PlotGridX;
+			GridOffset %= PlotGridX;
+			}
+			break;
+
+		case Qt::Key_G:
+			if(PlotGridX || PlotGridY) {
+				PlotGridX= 0;
+				PlotGridY= 0;
+			} else {
+				PlotGridX= PlotGridXdefault;
+				PlotGridY= PlotGridYdefault;
+				}
+			break;
+
+		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(" 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;
+
+		case Qt::Key_L:
+			GridLocked= !GridLocked;
+			break;
+
+		case Qt::Key_Q:
+			this->hide();
 			break;
 
 		default: