X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/7ddb99003292dbe619bfdabe1156dcbd11f18d42..53b3c3e816c8a322a15d2b20652d6126baa6644a:/client/proxguiqt.cpp?ds=inline

diff --git a/client/proxguiqt.cpp b/client/proxguiqt.cpp
index 2c689419..151f6ce9 100644
--- a/client/proxguiqt.cpp
+++ b/client/proxguiqt.cpp
@@ -25,6 +25,7 @@
 int GridOffset= 0;
 bool GridLocked= 0;
 int startMax;
+int PageWidth;
 
 void ProxGuiQT::ShowGraphWindow(void)
 {
@@ -79,10 +80,7 @@ void ProxGuiQT::MainLoop()
 	plotapp->exec();
 }
 
-ProxGuiQT::ProxGuiQT(int argc, char **argv) : plotapp(NULL), plotwidget(NULL),
-	argc(argc), argv(argv)
-{
-}
+ProxGuiQT::ProxGuiQT(int argc, char **argv) : plotapp(NULL), plotwidget(NULL), argc(argc), argv(argv) {}
 
 ProxGuiQT::~ProxGuiQT(void)
 {
@@ -108,12 +106,12 @@ void ProxWidget::paintEvent(QPaintEvent *event)
 
 	painter.setFont(QFont("Arial", 10));
 
-	if(GraphStart < 0) {
+	if(GraphStart < 0)
 		GraphStart = 0;
-	}
 
 	if (CursorAPos > GraphTraceLen)
 		CursorAPos= 0;
+
 	if(CursorBPos > GraphTraceLen)
 		CursorBPos= 0;
 
@@ -131,59 +129,62 @@ 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 + GridOffset; 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);
-                } 
+				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)) {
        			lightgreyPath.moveTo(r.left() + 40,zeroHeight + i);
-			lightgreyPath.lineTo(r.right(),zeroHeight + i);
-			painter.drawPath(lightgreyPath);
+				lightgreyPath.lineTo(r.right(),zeroHeight + i);
+				painter.drawPath(lightgreyPath);
         		lightgreyPath.moveTo(r.left() + 40,zeroHeight - i);
-			lightgreyPath.lineTo(r.right(),zeroHeight - i);
-			painter.drawPath(lightgreyPath);
-        		}
+				lightgreyPath.lineTo(r.right(),zeroHeight - i);
+				painter.drawPath(lightgreyPath);
         	}
-	
+        }
+
 	startMax = (GraphTraceLen - (int)((r.right() - r.left() - 40) / GraphPixelsPerPoint));
-	if(startMax < 0) {
+	
+	if(startMax < 0) 
 		startMax = 0;
-	}
-	if(GraphStart > startMax) {
+	
+	if(GraphStart > startMax) 
 		GraphStart = startMax;
-	}
 
 	int absYMax = 1;
 
 	for(i = GraphStart; ; i++) {
-		if(i >= GraphTraceLen) {
-			break;
-		}
-		if(fabs((double)GraphBuffer[i]) > absYMax) {
+
+		if(i >= GraphTraceLen) break;
+		
+		if(fabs((double)GraphBuffer[i]) > absYMax)
 			absYMax = (int)fabs((double)GraphBuffer[i]);
-		}
+		
 		int x = 40 + (int)((i - GraphStart)*GraphPixelsPerPoint);
-		if(x > r.right()) {
-			break;
-		}
+
+		if(x > r.right()) break;
 	}
 
 	absYMax = (int)(absYMax*1.2 + 1);
 	
 	// number of points that will be plotted
 	int span = (int)((r.right() - r.left()) / GraphPixelsPerPoint);
+	
 	// one label every 100 pixels, let us say
 	int labels = (r.right() - r.left() - 40) / 100;
 	if(labels <= 0) labels = 1;
+	
 	int pointsPerLabel = span / labels;
 	if(pointsPerLabel <= 0) pointsPerLabel = 1;
 
@@ -193,30 +194,28 @@ void ProxWidget::paintEvent(QPaintEvent *event)
 	int n = 0;
 
 	for(i = GraphStart; ; i++) {
-		if(i >= GraphTraceLen) {
-			break;
-		}
+		if(i >= GraphTraceLen) break;
+
 		int x = 40 + (int)((i - GraphStart)*GraphPixelsPerPoint);
-		if(x > r.right() + GraphPixelsPerPoint) {
-			break;
-		}
+		if(x > r.right() + GraphPixelsPerPoint) break;
 
 		int y = GraphBuffer[i];
-		if(y < yMin) {
+		if(y < yMin)
 			yMin = y;
-		}
-		if(y > yMax) {
+
+		if(y > yMax)
 			yMax = y;
-		}
+
 		yMean += y;
 		n++;
 
 		y = (y * (r.top() - r.bottom()) / (2*absYMax)) + zeroHeight;
-		if(i == GraphStart) {
+		
+		if(i == GraphStart)
 			penPath.moveTo(x, y);
-		} else {
+		else
 			penPath.lineTo(x, y);
-		}
+		
 
 		if(GraphPixelsPerPoint > 10) {
 			QRect f(QPoint(x - 3, y - 3),QPoint(x + 3, y + 3));
@@ -242,20 +241,19 @@ void ProxWidget::paintEvent(QPaintEvent *event)
 		if(i == CursorAPos || i == CursorBPos) {
 			QPainterPath *cursorPath;
 
-			if(i == CursorAPos) {
+			if(i == CursorAPos)
 				cursorPath = &cursorAPath;
-			} else {
+			else
 				cursorPath = &cursorBPath;
-			}
+			
 			cursorPath->moveTo(x, r.top());
 			cursorPath->lineTo(x, r.bottom());
 			penPath.moveTo(x, y);
 		}
 	}
 
-	if(n != 0) {
+	if(n != 0)
 		yMean /= n;
-	}
 
 	painter.setPen(QColor(255, 255, 255));
 	painter.drawPath(whitePath);
@@ -267,9 +265,19 @@ 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);
@@ -277,7 +285,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 +293,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)
@@ -305,12 +315,27 @@ void ProxWidget::mouseMoveEvent(QMouseEvent *event)
 		CursorBPos = x;
 	}
 
-
 	this->update();
 }
 
 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 +351,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 {
-				GraphStart++;
-				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 {
-				GraphStart--;
-				if (GridLocked && GraphStart > 0)
+				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;
 			}
-			if (PlotGridX)
-				GridOffset %= PlotGridX;
 			break;
 
 		case Qt::Key_G:
@@ -366,15 +412,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;