X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/999d57c20113c76bab27fc190c5fa394f9274629..994f21fe017fd0f2373399ff7cfb9843bfd303df:/client/proxguiqt.cpp diff --git a/client/proxguiqt.cpp b/client/proxguiqt.cpp index 6171c429..30e4c8de 100644 --- a/client/proxguiqt.cpp +++ b/client/proxguiqt.cpp @@ -26,13 +26,17 @@ #include #include "proxgui.h" #include + +extern "C" { +#include "util_darwin.h" +} //#include bool g_useOverlays = false; int g_absVMax = 0; int startMax; int PageWidth; - +int unlockStart = 0; void ProxGuiQT::ShowGraphWindow(void) { @@ -60,7 +64,12 @@ void ProxGuiQT::_ShowGraphWindow(void) return; if (!plotwidget) + { +#if defined(__MACH__) && defined(__APPLE__) + makeFocusable(); +#endif plotwidget = new ProxWidget(); + } plotwidget->show(); } @@ -84,6 +93,18 @@ void ProxGuiQT::_HideGraphWindow(void) void ProxGuiQT::_Exit(void) { delete this; } + +void ProxGuiQT::_StartProxmarkThread(void) { + if (!proxmarkThread) + return; + + // if thread finished delete self and delete application + QObject::connect(proxmarkThread, SIGNAL(finished()), proxmarkThread, SLOT(deleteLater())); + QObject::connect(proxmarkThread, SIGNAL(finished()), this, SLOT(_Exit())); + // start proxmark thread + proxmarkThread->start(); +} + void ProxGuiQT::MainLoop() { plotapp = new QApplication(argc, argv); @@ -93,11 +114,19 @@ void ProxGuiQT::MainLoop() connect(this, SIGNAL(HideGraphWindowSignal()), this, SLOT(_HideGraphWindow())); connect(this, SIGNAL(ExitSignal()), this, SLOT(_Exit())); + //start proxmark thread after starting event loop + QTimer::singleShot(200, this, SLOT(_StartProxmarkThread())); + +#if defined(__MACH__) && defined(__APPLE__) + //Prevent the terminal from loosing focus during launch by making the client unfocusable + makeUnfocusable(); +#endif + plotapp->exec(); } -ProxGuiQT::ProxGuiQT(int argc, char **argv) : plotapp(NULL), plotwidget(NULL), - argc(argc), argv(argv) +ProxGuiQT::ProxGuiQT(int argc, char **argv, WorkerThread *wthread) : plotapp(NULL), plotwidget(NULL), + argc(argc), argv(argv), proxmarkThread(wthread) { } @@ -110,7 +139,7 @@ ProxGuiQT::~ProxGuiQT(void) //} if (plotapp) { plotapp->quit(); - delete plotapp; + // delete plotapp; plotapp = NULL; } } @@ -119,13 +148,13 @@ ProxGuiQT::~ProxGuiQT(void) void ProxWidget::applyOperation() { //printf("ApplyOperation()"); - save_restoreGB(1); + save_restoreGB(GRAPH_SAVE); memcpy(GraphBuffer, s_Buff, sizeof(int) * GraphTraceLen); RepaintGraphWindow(); } void ProxWidget::stickOperation() { - save_restoreGB(0); + save_restoreGB(GRAPH_RESTORE); //printf("stickOperation()"); } void ProxWidget::vchange_autocorr(int v) @@ -166,8 +195,7 @@ ProxWidget::ProxWidget(QWidget *parent, ProxGuiQT *master) : QWidget(parent) this->master = master; resize(800,500); - /** Setup the controller widget **/ - + // Setup the controller widget controlWidget = new QWidget(); opsController = new Ui::Form(); opsController->setupUi(controlWidget); @@ -189,23 +217,17 @@ ProxWidget::ProxWidget(QWidget *parent, ProxGuiQT *master) : QWidget(parent) QObject::connect(opsController->horizontalSlider_dirthr_down, SIGNAL(valueChanged(int)), this, SLOT(vchange_dthr_down(int))); QObject::connect(opsController->horizontalSlider_askedge, SIGNAL(valueChanged(int)), this, SLOT(vchange_askedge(int))); - controlWidget->show(); - // Set up the plot widget, which does the actual plotting - plot = new Plot(this); - /* - QSlider* slider = new QSlider(Qt::Horizontal); - slider->setFocusPolicy(Qt::StrongFocus); - slider->setTickPosition(QSlider::TicksBothSides); - slider->setTickInterval(10); - slider->setSingleStep(1); - */ QVBoxLayout *layout = new QVBoxLayout; - //layout->addWidget(slider); layout->addWidget(plot); setLayout(layout); - //printf("Proxwidget Constructor just set layout\r\n"); + show(); // places the window on the screen. + + // Move controller widget below plot + controlWidget->move(x(),y()+frameSize().height()); + controlWidget->resize(size().width(), controlWidget->size().height()); + controlWidget->show(); } // not 100% sure what i need in this block @@ -254,6 +276,7 @@ int Plot::xCoordOf(int i, QRect r ) int Plot::yCoordOf(int v, QRect r, int maxVal) { int z = (r.bottom() - r.top())/2; + if ( maxVal == 0 ) maxVal++; return -(z * v) / maxVal + z; } @@ -434,11 +457,22 @@ void Plot::PlotGraph(int *buffer, int len, QRect plotRect, QRect annotationRect, void Plot::plotGridLines(QPainter* painter,QRect r) { + // set GridOffset + if (PlotGridX <= 0) return; + int offset = GridOffset; + if (GridLocked && PlotGridX) { + offset = GridOffset + PlotGridX - (GraphStart % PlotGridX); + } else if (!GridLocked && GraphStart > 0 && PlotGridX) { + offset = PlotGridX-((GraphStart - offset) % PlotGridX) + GraphStart - unlockStart; + } + offset %= PlotGridX; + if (offset < 0) offset += PlotGridX; + int i; int grid_delta_x = (int) (PlotGridX * GraphPixelsPerPoint); int grid_delta_y = PlotGridY; if ((PlotGridX > 0) && ((PlotGridX * GraphPixelsPerPoint) > 1)) { - for(i = (GridOffset * GraphPixelsPerPoint); i < r.right(); i += grid_delta_x) { + for(i = (offset * GraphPixelsPerPoint); i < r.right(); i += grid_delta_x) { painter->drawLine(r.left()+i, r.top(), r.left()+i, r.bottom()); } } @@ -553,6 +587,8 @@ Plot::Plot(QWidget *parent) : QWidget(parent), GraphStart(0), GraphPixelsPerPoin CursorBPos = 0; setWindowTitle(tr("Sliders")); + + master = parent; } void Plot::closeEvent(QCloseEvent *event) @@ -581,9 +617,6 @@ void Plot::mouseMoveEvent(QMouseEvent *event) void Plot::keyPressEvent(QKeyEvent *event) { int offset; - int gridchanged; - - gridchanged= 0; if(event->modifiers() & Qt::ShiftModifier) { if (PlotGridX) @@ -611,53 +644,18 @@ void Plot::keyPressEvent(QKeyEvent *event) case Qt::Key_Right: if(GraphPixelsPerPoint < 20) { - 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) { - 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: @@ -667,7 +665,7 @@ void Plot::keyPressEvent(QKeyEvent *event) } else { PlotGridX= PlotGridXdefault; PlotGridY= PlotGridYdefault; - } + } break; case Qt::Key_H: @@ -692,11 +690,15 @@ void Plot::keyPressEvent(QKeyEvent *event) break; case Qt::Key_L: - GridLocked= !GridLocked; + GridLocked = !GridLocked; + if (GridLocked) + GridOffset += (GraphStart - unlockStart); + else + unlockStart = GraphStart; break; case Qt::Key_Q: - this->hide(); + master->hide(); break; default: