Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "QRootApplication.h"
00027
00028 #include <stdlib.h>
00029
00030 #include "TTimer.h"
00031 #include "TSystem.h"
00032 #include "Riostream.h"
00033
00034
00035 #include <QtCore/QObject>
00036 #include <QtCore/QTimer>
00037
00038 #ifndef WIN32
00039
00040 #include <X11/Xlib.h>
00041
00042 static int qt_x11_errhandler( Display *dpy, XErrorEvent *err )
00043 {
00044
00045 if ( err->error_code == BadWindow ) {
00046
00047 return 0;
00048 }
00049
00050 else if ( err->error_code == BadMatch
00051 && err->request_code == 42 ) {
00052 return 0;
00053 }
00054
00055 char errstr[256];
00056 XGetErrorText( dpy, err->error_code, errstr, 256 );
00057 qWarning( "X11 Error: %s %d\n Major opcode: %d",
00058 errstr, err->error_code, err->request_code );
00059 return 0;
00060 }
00061
00062 #endif
00063
00064 bool QRootApplication::fDebug = false;
00065 bool QRootApplication::fWarning = false;
00066 bool QRootApplication::fRootCanvasMenusEnabled = true;
00067
00068 void qMessageOutput( QtMsgType type, const char *msg )
00069 {
00070 switch ( type ) {
00071 case QtDebugMsg:
00072 if(QRootApplication::fDebug)
00073 std::cerr << "QtRoot-Debug: " << msg << std::endl;
00074 break;
00075 case QtWarningMsg:
00076 if(QRootApplication::fWarning)
00077 std::cerr << "QtRoot-Warning: " << msg << std::endl;
00078 break;
00079 case QtFatalMsg:
00080 std::cerr << "QtRoot-Fatal: " << msg << std::endl;
00081 gSystem->Abort();
00082 case QtCriticalMsg:
00083 std::cerr << "QtRoot-Critical: " << msg << std::endl;
00084 break;
00085 default:
00086 std::cerr << "QtRoot-Other: " << msg << std::endl;
00087 break;
00088 }
00089 }
00090
00091
00092 QRootApplication::QRootApplication(int& argc, char **argv, int poll)
00093 :QApplication(argc,argv, true)
00094 {
00095
00096
00097 if (poll == 0){
00098 timer = new QTimer( this );
00099 QObject::connect( timer, SIGNAL(timeout()),
00100 this, SLOT(execute()) );
00101 timer->setSingleShot(false);
00102 timer->start(20);
00103
00104 rtimer = new TTimer(20);
00105 rtimer->Start(20, kFALSE);
00106
00107 }
00108
00109
00110 fWarning = fDebug = false;
00111
00112 #if QT_VERSION < QT_VERSION_CHECK(5,0,0)
00113 qInstallMsgHandler( qMessageOutput );
00114 #endif
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 const char* env = gSystem->Getenv("ROOT_CANVAS");
00125 int flag = 0;
00126 if (env!=0) {
00127 if ((strcmp(env,"yes")==0) || (strcmp(env,"YES")==0)) flag = 1; else
00128 if ((strcmp(env,"no")==0) || (strcmp(env,"NO")==0)) flag = -1;
00129 }
00130
00131 #ifdef WIN32
00132
00133 fRootCanvasMenusEnabled = (flag == 1);
00134 #else
00135 XSetErrorHandler( qt_x11_errhandler );
00136
00137 fRootCanvasMenusEnabled = (flag != -1);
00138 #endif
00139 }
00140
00141 QRootApplication::~QRootApplication()
00142 {
00143 }
00144
00145 void QRootApplication::execute()
00146
00147 {
00148 gSystem->InnerLoop();
00149 }
00150
00151 void QRootApplication::quit()
00152 {
00153
00154
00155 }
00156
00157 bool QRootApplication::IsRootCanvasMenuEnabled()
00158 {
00159 return fRootCanvasMenusEnabled;
00160 }