fix gui (plot) bugs (#604)
[proxmark3-svn] / client / proxguiqt.h
1 //-----------------------------------------------------------------------------
2 // Copyright (C) 2009 Michael Gernoth <michael at gernoth.net>
3 //
4 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
5 // at your option, any later version. See the LICENSE.txt file for the text of
6 // the license.
7 //-----------------------------------------------------------------------------
8 // GUI (QT)
9 //-----------------------------------------------------------------------------
10
11 #ifndef PROXGUI_QT
12 #define PROXGUI_QT
13
14 #include <stdint.h>
15 #include <string.h>
16
17 #include <QApplication>
18 #include <QPushButton>
19 #include <QObject>
20 #include <QWidget>
21 #include <QPainter>
22 #include <QtGui>
23
24 #include "ui/ui_overlays.h"
25 /**
26 * @brief The actual plot, black area were we paint the graph
27 */
28 class Plot: public QWidget
29 {
30 private:
31 QWidget *master;
32 int GraphStart;
33 double GraphPixelsPerPoint;
34 int CursorAPos;
35 int CursorBPos;
36 void PlotGraph(int *buffer, int len, QRect r,QRect r2, QPainter* painter, int graphNum);
37 void PlotDemod(uint8_t *buffer, size_t len, QRect r,QRect r2, QPainter* painter, int graphNum, int plotOffset);
38 void plotGridLines(QPainter* painter,QRect r);
39 int xCoordOf(int i, QRect r );
40 int yCoordOf(int v, QRect r, int maxVal);
41 int valueOf_yCoord(int y, QRect r, int maxVal);
42 void setMaxAndStart(int *buffer, int len, QRect plotRect);
43 QColor getColor(int graphNum);
44 public:
45 Plot(QWidget *parent = 0);
46
47 protected:
48 void paintEvent(QPaintEvent *event);
49 void closeEvent(QCloseEvent *event);
50 void mouseMoveEvent(QMouseEvent *event);
51 void mousePressEvent(QMouseEvent *event) { mouseMoveEvent(event); }
52 void keyPressEvent(QKeyEvent *event);
53
54 };
55 class ProxGuiQT;
56
57 /**
58 * The window with plot and controls
59 */
60 class ProxWidget : public QWidget
61 {
62 Q_OBJECT; //needed for slot/signal classes
63
64 private:
65 ProxGuiQT *master;
66 Plot *plot;
67 Ui::Form *opsController;
68 QWidget* controlWidget;
69
70 public:
71 ProxWidget(QWidget *parent = 0, ProxGuiQT *master = NULL);
72 ~ProxWidget(void);
73 //OpsShow(void);
74
75 protected:
76 // void paintEvent(QPaintEvent *event);
77 void closeEvent(QCloseEvent *event);
78 void showEvent(QShowEvent *event);
79 void hideEvent(QHideEvent *event);
80 // void mouseMoveEvent(QMouseEvent *event);
81 // void mousePressEvent(QMouseEvent *event) { mouseMoveEvent(event); }
82 // void keyPressEvent(QKeyEvent *event);
83 public slots:
84 void applyOperation();
85 void stickOperation();
86 void vchange_autocorr(int v);
87 void vchange_askedge(int v);
88 void vchange_dthr_up(int v);
89 void vchange_dthr_down(int v);
90 };
91
92 class WorkerThread : public QThread {
93 Q_OBJECT;
94 public:
95 WorkerThread(char*, char*, bool);
96 ~WorkerThread();
97 void run();
98 private:
99 char *script_cmds_file = NULL;
100 char *script_cmd = NULL;
101 bool usb_present;
102 };
103
104 class ProxGuiQT : public QObject
105 {
106 Q_OBJECT;
107
108 private:
109 QApplication *plotapp;
110 ProxWidget *plotwidget;
111 int argc;
112 char **argv;
113 void (*main_func)(void);
114 WorkerThread *proxmarkThread;
115
116 public:
117 ProxGuiQT(int argc, char **argv, WorkerThread *wthread);
118 ~ProxGuiQT(void);
119 void ShowGraphWindow(void);
120 void RepaintGraphWindow(void);
121 void HideGraphWindow(void);
122 void MainLoop(void);
123 void Exit(void);
124 private slots:
125 void _ShowGraphWindow(void);
126 void _RepaintGraphWindow(void);
127 void _HideGraphWindow(void);
128 void _Exit(void);
129 void _StartProxmarkThread(void);
130 signals:
131 void ShowGraphWindowSignal(void);
132 void RepaintGraphWindowSignal(void);
133 void HideGraphWindowSignal(void);
134 void ExitSignal(void);
135 };
136
137 #endif // PROXGUI_QT
Impressum, Datenschutz