X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/cd00aa3043b507ed10bf79a37b83b88741d176d7..14d7657703c3396da37f2c0e56c871d2a13bb17f:/client/proxgui.cpp?ds=sidebyside diff --git a/client/proxgui.cpp b/client/proxgui.cpp index 7e87b582..e7fdae6c 100644 --- a/client/proxgui.cpp +++ b/client/proxgui.cpp @@ -1,30 +1,54 @@ +//----------------------------------------------------------------------------- +// Copyright (C) 2009 Michael Gernoth +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// GUI functions +//----------------------------------------------------------------------------- + #include "proxgui.h" #include "proxguiqt.h" +#include "proxmark3.h" static ProxGuiQT *gui = NULL; +static WorkerThread *main_loop_thread = NULL; + +WorkerThread::WorkerThread(char *script_cmds_file, bool usb_present) : script_cmds_file(script_cmds_file), usb_present(usb_present) +{ +} + +WorkerThread::~WorkerThread() +{ +} + +void WorkerThread::run() { + main_loop(script_cmds_file, usb_present); +} extern "C" void ShowGraphWindow(void) { - if (!gui) - return; - - gui->ShowGraphWindow(); + if (!gui) + return; + + gui->ShowGraphWindow(); } extern "C" void HideGraphWindow(void) { - if (!gui) - return; - - gui->HideGraphWindow(); + if (!gui) + return; + + gui->HideGraphWindow(); } extern "C" void RepaintGraphWindow(void) { - if (!gui) - return; + if (!gui) + return; - gui->RepaintGraphWindow(); + gui->RepaintGraphWindow(); } extern "C" void MainGraphics(void) @@ -32,10 +56,11 @@ extern "C" void MainGraphics(void) if (!gui) return; + main_loop_thread->start(); gui->MainLoop(); } -extern "C" void InitGraphics(int argc, char **argv) +extern "C" void InitGraphics(int argc, char **argv, char *script_cmds_file, bool usb_present) { #ifdef Q_WS_X11 bool useGUI = getenv("DISPLAY") != 0; @@ -46,13 +71,17 @@ extern "C" void InitGraphics(int argc, char **argv) return; gui = new ProxGuiQT(argc, argv); + main_loop_thread = new WorkerThread(script_cmds_file, usb_present); + QObject::connect(main_loop_thread, SIGNAL(finished()), main_loop_thread, SLOT(deleteLater())); + QObject::connect(main_loop_thread, SIGNAL(finished()), gui, SLOT(_Exit())); } + extern "C" void ExitGraphics(void) { - if (!gui) - return; - - delete gui; - gui = NULL; + if (!gui) + return; + + gui->Exit(); + gui = NULL; }