| 178 | kaklik | 1 | #include <QtGui/QMessageBox> | 
      
        |  |  | 2 | #include "mandoWindow.hh" | 
      
        |  |  | 3 | #include "mandoWizard.hh" | 
      
        |  |  | 4 | #include <X11/extensions/XTest.h> | 
      
        |  |  | 5 |  | 
      
        |  |  | 6 | using namespace mimas; | 
      
        |  |  | 7 | using namespace std; | 
      
        |  |  | 8 |  | 
      
        |  |  | 9 | MandoWindow::MandoWindow( QWidget *parent, Qt::WFlags f ): | 
      
        |  |  | 10 |   QWidget( parent, f ), mandoWizard(NULL), timer(0) | 
      
        |  |  | 11 | { | 
      
        |  |  | 12 |   ui.setupUi( this ); | 
      
        |  |  | 13 |   connect( ui.quitButton, SIGNAL(clicked()), | 
      
        |  |  | 14 |            this, SLOT(close()) ); | 
      
        |  |  | 15 |   connect( ui.aboutButton, SIGNAL(clicked()), | 
      
        |  |  | 16 |            this, SLOT(about()) ); | 
      
        |  |  | 17 |   connect( ui.configureButton, SIGNAL(clicked()), | 
      
        |  |  | 18 |            this, SLOT(configure()) ); | 
      
        |  |  | 19 |   connect( ui.activateCheckBox, SIGNAL(toggled(bool)), | 
      
        |  |  | 20 |            this, SLOT(activate(bool)) ); | 
      
        |  |  | 21 | } | 
      
        |  |  | 22 |  | 
      
        |  |  | 23 | void MandoWindow::about() | 
      
        |  |  | 24 | { | 
      
        |  |  | 25 |   QMessageBox::about | 
      
        |  |  | 26 |     ( this, "About mando", | 
      
        |  |  | 27 |       "<p>Copyright © 2006. <b>mando</b> is free software; you can " | 
      
        |  |  | 28 |       "redistribute it and/or  modify it under the terms of the <em>GNU " | 
      
        |  |  | 29 |       "General Public License</em> as published by the Free Software " | 
      
        |  |  | 30 |       "Foundation; either version 2 of the License, or (at your option) any " | 
      
        |  |  | 31 |       "later version.</p>" | 
      
        |  |  | 32 |       "<p><b>mando</b> is distributed in the hope that it will be useful, but " | 
      
        |  |  | 33 |       "<em>without any warranty</em>; without even the implied warranty of " | 
      
        |  |  | 34 |       "<em>merchantibility</em> or <em>fitness for a particular " | 
      
        |  |  | 35 |       "purpose</em>. See the GNU General Public License for more details.</p>" | 
      
        |  |  | 36 |       "<p>You should have received a copy of the GNU General Public License " | 
      
        |  |  | 37 |       "along with <b>mando</b>; if not, contact one of the authors of this " | 
      
        |  |  | 38 |       "software.</p>" | 
      
        |  |  | 39 |       "<ul><li>Juan Roldan <a href=\"mailto:juan.roldanREMOVETHIS@gmail.com\">juan.roldanREMOVETHIS@gmail.com</a></li>" | 
      
        |  |  | 40 |       "<li>Ushakiran Soutapalli <a href=\"mailto:ushakiron_sREMOVETHIS@yahoo.co.in\">ushakiron_sREMOVETHIS@yahoo.co.in</a></li>" | 
      
        |  |  | 41 |       "<li>Julien Faucher <a href=\"faucherjREMOVETHIS@gmail.com\">faucherjREMOVETHIS@gmail.com</a></li>" | 
      
        |  |  | 42 |       "<li>Jan Wedekind\n <a href=\"mailto:janREMOVETHIS@wedesoft.de\">janREMOVETHIS@wedesoft.de</a></li></ul>" ); | 
      
        |  |  | 43 | } | 
      
        |  |  | 44 |  | 
      
        |  |  | 45 | void MandoWindow::configure() | 
      
        |  |  | 46 | { | 
      
        |  |  | 47 |   input.reset(); | 
      
        |  |  | 48 |   pointerRecognition.reset(); | 
      
        |  |  | 49 |   ui.activateCheckBox->setEnabled( false ); | 
      
        |  |  | 50 |   activate(false); | 
      
        |  |  | 51 |   MandoWizard mandoWizard( this ); | 
      
        |  |  | 52 | } | 
      
        |  |  | 53 |  | 
      
        |  |  | 54 | void MandoWindow::activate( bool on ) | 
      
        |  |  | 55 | { | 
      
        |  |  | 56 |   if ( on ) { | 
      
        |  |  | 57 |     if ( timer == 0 ) | 
      
        |  |  | 58 |       timer = startTimer( 0 ); | 
      
        |  |  | 59 |   } else | 
      
        |  |  | 60 |     if ( timer != 0 ) { | 
      
        |  |  | 61 |       killTimer( timer ); | 
      
        |  |  | 62 |       timer = 0; | 
      
        |  |  | 63 |     }; | 
      
        |  |  | 64 | } | 
      
        |  |  | 65 |  | 
      
        |  |  | 66 | void MandoWindow::startDrag(void) | 
      
        |  |  | 67 | { | 
      
        |  |  | 68 |   Display *display = XOpenDisplay(NULL); | 
      
        |  |  | 69 |   XTestFakeButtonEvent( display, 1, True, 0 ); | 
      
        |  |  | 70 |   XCloseDisplay( display ); | 
      
        |  |  | 71 | } | 
      
        |  |  | 72 |  | 
      
        |  |  | 73 | void MandoWindow::stopDrag(void) | 
      
        |  |  | 74 | { | 
      
        |  |  | 75 |   Display *display = XOpenDisplay(NULL); | 
      
        |  |  | 76 |   XTestFakeButtonEvent( display, 1, False, 0 ); | 
      
        |  |  | 77 |   XCloseDisplay( display ); | 
      
        |  |  | 78 |   // ui.singleClickRadio->setChecked( true ); | 
      
        |  |  | 79 | } | 
      
        |  |  | 80 |  | 
      
        |  |  | 81 | void MandoWindow::click(void) | 
      
        |  |  | 82 | { | 
      
        |  |  | 83 |   Display *display = XOpenDisplay(NULL); | 
      
        |  |  | 84 |   XTestFakeButtonEvent( display, 1, True, 0 ); | 
      
        |  |  | 85 |   XTestFakeButtonEvent( display, 1, False, 250 ); | 
      
        |  |  | 86 |   XCloseDisplay( display ); | 
      
        |  |  | 87 | } | 
      
        |  |  | 88 |  | 
      
        |  |  | 89 | void MandoWindow::mouseMove( int x, int y ) | 
      
        |  |  | 90 | { | 
      
        |  |  | 91 |   Display *display = XOpenDisplay(NULL); | 
      
        |  |  | 92 |   int screen = DefaultScreen( display ); | 
      
        |  |  | 93 |   XTestFakeMotionEvent( display, screen, x, y, 0 ); | 
      
        |  |  | 94 |   XCloseDisplay( display ); | 
      
        |  |  | 95 | } | 
      
        |  |  | 96 |  | 
      
        |  |  | 97 | void MandoWindow::timerEvent( QTimerEvent *e ) | 
      
        |  |  | 98 | { | 
      
        |  |  | 99 |   if ( e->timerId() == timer ) { | 
      
        |  |  | 100 |     try { | 
      
        |  |  | 101 |       assert( pointerRecognition ); | 
      
        |  |  | 102 |       Vector camPos( 3 ), pos( 3 ); | 
      
        |  |  | 103 |       image< rgba< unsigned char > > frame( grabColourFrame() ); | 
      
        |  |  | 104 |     } catch ( exception & ) { | 
      
        |  |  | 105 |       assert( timer != 0 ); | 
      
        |  |  | 106 |       killTimer( timer ); | 
      
        |  |  | 107 |       ui.activateCheckBox->setChecked( false ); | 
      
        |  |  | 108 |     }; | 
      
        |  |  | 109 |   } else | 
      
        |  |  | 110 |     QWidget::timerEvent( e ); | 
      
        |  |  | 111 | } | 
      
        |  |  | 112 |  | 
      
        |  |  | 113 | image< rgba< unsigned char > > MandoWindow::grabColourFrame(void) | 
      
        |  |  | 114 |   throw (mimasexception) | 
      
        |  |  | 115 | { | 
      
        |  |  | 116 |   assert( input ); | 
      
        |  |  | 117 |   image< rgba< unsigned char > > retVal; | 
      
        |  |  | 118 |   (*input) >> retVal; | 
      
        |  |  | 119 |   return retVal; | 
      
        |  |  | 120 | } | 
      
        |  |  | 121 |  |