| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 | /*=========================================================================  Library:   CTK  Copyright (c) Kitware Inc.   All rights reserved.  Distributed under a BSD License. See LICENSE.txt file.  This software is distributed "AS IS" WITHOUT ANY WARRANTY; without even  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the above copyright notice for more information.=========================================================================*//*=========================================================================  Program:   Visualization Toolkit  Module:    $RCSfile: ctkTestApplication.cxx,v $  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen  All rights reserved.  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.     This software is distributed WITHOUT ANY WARRANTY; without even     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR     PURPOSE.  See the above copyright notice for more information.=========================================================================*//*-------------------------------------------------------------------------  Copyright 2008 Sandia Corporation.  Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,  the U.S. Government retains certain rights in this software.-------------------------------------------------------------------------*/// Qt includes#include <QTimer>#include <QWidget>#include <QKeyEvent>#include <QMouseEvent>// CTK includes#include "ctkTestApplication.h"// STD includes#include <iostream>int ctkTestApplication::Error = 0;//-----------------------------------------------------------------------------ctkTestApplication::ctkTestApplication(int _argc, char** _argv){  qInstallMsgHandler(ctkTestApplication::messageHandler);    // CMake generated driver removes argv[0],   // so let's put a dummy back in  this->Argv.append("ctkTestApplication");  for(int i=0; i<_argc; i++)    {    this->Argv.append(_argv[i]);    }  for(int j=0; j<this->Argv.size(); j++)    {    this->Argvp.append(this->Argv[j].data());    }  this->Argc = this->Argvp.size();  this->App = new QApplication(this->Argc, this->Argvp.data());}//-----------------------------------------------------------------------------ctkTestApplication::~ctkTestApplication(){  delete this->App;  qInstallMsgHandler(0);}//-----------------------------------------------------------------------------void ctkTestApplication::runTestSlot(){  this->runTest();}//-----------------------------------------------------------------------------void ctkTestApplication::runTest(){}//-----------------------------------------------------------------------------int ctkTestApplication::exec(bool reportErrorsOnExit){  if(QCoreApplication::arguments().contains("--exit"))    {    QTimer::singleShot(100, QApplication::instance(),                        SLOT(quit()));    }      int ret = QApplication::exec();  if (reportErrorsOnExit)    {    return Error + ret;    }  else    {    return ret;    }}//-----------------------------------------------------------------------------void ctkTestApplication::messageHandler(QtMsgType type, const char *msg){  switch(type)  {  case QtDebugMsg:    std::cerr << "Debug: " << msg << std::endl;    break;  case QtWarningMsg:    std::cerr << "Warning: " << msg << std::endl;    Error++;    break;  case QtCriticalMsg:    std::cerr << "Critical: " << msg << std::endl;    Error++;    break;  case QtFatalMsg:    std::cerr << "Fatal: " << msg << std::endl;    abort();  }}//-----------------------------------------------------------------------------void ctkTestApplication::delay(int ms){  if(ms > 0)  {    QTimer::singleShot(ms, QApplication::instance(), SLOT(quit()));    QApplication::exec();  }}//-----------------------------------------------------------------------------bool ctkTestApplication::simulateEvent(QWidget* w, QEvent* e){  bool status = QApplication::sendEvent(w, e);  QApplication::processEvents();  return status;}//-----------------------------------------------------------------------------void ctkTestApplication::keyUp(QWidget* w, Qt::Key key, Qt::KeyboardModifiers mod, int ms){  if(!w)    return;  delay(ms);  QString text;  char off = 'a';  if(mod & Qt::ShiftModifier)    off = 'A';  if(key >= Qt::Key_A && key <= Qt::Key_Z)    {    text.append(QChar::fromAscii(key - Qt::Key_A + off));    }  QKeyEvent e(QEvent::KeyRelease, key, mod, text);  if(!simulateEvent(w, &e))    {    qWarning("keyUp not handled\n");    }}//-----------------------------------------------------------------------------void ctkTestApplication::keyDown(QWidget* w, Qt::Key key, Qt::KeyboardModifiers mod, int ms){  if(!w)    return;  delay(ms);  QString text;  char off = 'a';  if(mod & Qt::ShiftModifier)    off = 'A';  if(key >= Qt::Key_A && key <= Qt::Key_Z)    {    text.append(QChar::fromAscii(key - Qt::Key_A + off));    }  QKeyEvent e(QEvent::KeyPress, key, mod, text);  if(!simulateEvent(w, &e))    {    qWarning("keyDown not handled\n");    }}//-----------------------------------------------------------------------------void ctkTestApplication::keyClick(QWidget* w, Qt::Key key, Qt::KeyboardModifiers mod, int ms){  delay(ms);  keyDown(w, key, mod, 0);  keyUp(w, key, mod, 0);}//-----------------------------------------------------------------------------void ctkTestApplication::mouseDown(QWidget* w, QPoint pos, Qt::MouseButton btn,                        Qt::KeyboardModifiers mod, int ms){  delay(ms);  QMouseEvent e(QEvent::MouseButtonPress, pos, btn, btn, mod);  if(!simulateEvent(w, &e))    {    qWarning("mouseDown not handled\n");    }}//-----------------------------------------------------------------------------void ctkTestApplication::mouseUp(QWidget* w, QPoint pos, Qt::MouseButton btn,                      Qt::KeyboardModifiers mod, int ms){  delay(ms);  QMouseEvent e(QEvent::MouseButtonRelease, pos, btn, btn, mod);  if(!simulateEvent(w, &e))    {    qWarning("mouseUp not handled\n");    }}//-----------------------------------------------------------------------------void ctkTestApplication::mouseMove(QWidget* w, QPoint pos, Qt::MouseButton btn,                        Qt::KeyboardModifiers mod, int ms){  delay(ms);  QMouseEvent e(QEvent::MouseMove, pos, btn, btn, mod);  if(!simulateEvent(w, &e))    {    qWarning("mouseMove not handled\n");    }}//-----------------------------------------------------------------------------void ctkTestApplication::mouseClick(QWidget* w, QPoint pos, Qt::MouseButton btn,                         Qt::KeyboardModifiers mod, int ms){  delay(ms);  mouseDown(w, pos, btn, mod, 0);  mouseUp(w, pos, btn, mod, 0);}//-----------------------------------------------------------------------------void ctkTestApplication::mouseDClick(QWidget* w, QPoint pos, Qt::MouseButton btn,                         Qt::KeyboardModifiers mod, int ms){  delay(ms);  QMouseEvent e(QEvent::MouseButtonDblClick, pos, btn, btn, mod);  if(!simulateEvent(w, &e))    {    qWarning("mouseMove not handled\n");    }}
 |