About.cc 31.1 KB
Newer Older
1
/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
2
3
*                                                                            *
*                              OpenFlipper                                   *
Jan Möbius's avatar
Jan Möbius committed
4
*      Copyright (C) 2001-2011 by Computer Graphics Group, RWTH Aachen       *
Jan Möbius's avatar
Jan Möbius committed
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
*                           www.openflipper.org                              *
*                                                                            *
*--------------------------------------------------------------------------- *
*  This file is part of OpenFlipper.                                         *
*                                                                            *
*  OpenFlipper is free software: you can redistribute it and/or modify       *
*  it under the terms of the GNU Lesser General Public License as            *
*  published by the Free Software Foundation, either version 3 of            *
*  the License, or (at your option) any later version with the               *
*  following exceptions:                                                     *
*                                                                            *
*  If other files instantiate templates or use macros                        *
*  or inline functions from this file, or you compile this file and          *
*  link it with other files to produce an executable, this file does         *
*  not by itself cause the resulting executable to be covered by the         *
*  GNU Lesser General Public License. This exception does not however        *
*  invalidate any other reasons why the executable file might be             *
*  covered by the GNU Lesser General Public License.                         *
*                                                                            *
*  OpenFlipper is distributed in the hope that it will be useful,            *
*  but WITHOUT ANY WARRANTY; without even the implied warranty of            *
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
*  GNU Lesser General Public License for more details.                       *
*                                                                            *
*  You should have received a copy of the GNU LesserGeneral Public           *
*  License along with OpenFlipper. If not,                                   *
*  see <http://www.gnu.org/licenses/>.                                       *
*                                                                            *
33
34
35
\*===========================================================================*/

/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
36
37
38
39
40
*                                                                            *
*   $Revision$                                                       *
*   $LastChangedBy$                                                *
*   $Date$                     *
*                                                                            *
41
\*===========================================================================*/
Jan Möbius's avatar
Jan Möbius committed
42
43
44
45
46
47
48
49
50
51
52
53
54
55




//=============================================================================
//
//  CLASS Core - IMPLEMENTATION
//
//=============================================================================


//== INCLUDES =================================================================

#include "CoreWidget.hh"
56
#include <OpenFlipper/common/FileTypes.hh>
Jan Möbius's avatar
Jan Möbius committed
57

58
59
#include <QGLFormat>

Jan Möbius's avatar
Jan Möbius committed
60
61
#include <OpenFlipper/common/GlobalOptions.hh>

62
#ifndef WIN32
63
64
  #ifndef ARCH_DARWIN
    #include <malloc.h>
65
    #include <unistd.h>
66
  #endif
67
68
#endif

Jan Möbius's avatar
Jan Möbius committed
69
70
71
72
#ifdef ARCH_DARWIN
  #include <sys/types.h>
  #include <sys/sysctl.h>
#endif
73

Jan Möbius's avatar
Jan Möbius committed
74
75
//== IMPLEMENTATION ==========================================================

Jan Möbius's avatar
Jan Möbius committed
76
77
78
void CoreWidget::addAboutInfo(QString _text, QString _tabName ) {
  additionalAboutTabs_[_tabName] = _text;
}
Jan Möbius's avatar
Jan Möbius committed
79
80
81
82
83

void CoreWidget::showAboutWidget( ) {

  if ( OpenFlipper::Options::nogui() )
    return;
Jan Möbius's avatar
Jan Möbius committed
84
  
Jan Möbius's avatar
Jan Möbius committed
85
86
  if ( aboutWidget_ == 0 ) {
    aboutWidget_ = new AboutWidget( this );
Jan Möbius's avatar
Jan Möbius committed
87
88
89
90
91
92
93
94
95
96
97
98


    // Add all additional tabs
    QMap<QString, QString>::const_iterator it = additionalAboutTabs_.constBegin();
    while (it != additionalAboutTabs_.constEnd()) {
      QTextEdit* tmp =  new QTextEdit();
      tmp->insertHtml( it.value() );

      aboutWidget_->About->addTab( tmp, it.key()  );
      ++it;
    }

99
100
101
  } else {
    aboutWidget_->OpenFlipperAbout->clear();
  }
Jan Möbius's avatar
Jan Möbius committed
102
103
104
105
  
  QFont standardFont = aboutWidget_->OpenFlipperAbout->currentFont();
  QFont boldFont = standardFont;
  boldFont.setBold(true);
106

Jan Möbius's avatar
Jan Möbius committed
107
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
Jan Möbius's avatar
Jan Möbius committed
108
  aboutWidget_->OpenFlipperAbout->append(tr("%1 Core Version: %2", "PRODUCT_NAME Core Version:").arg(TOSTRING(PRODUCT_NAME)).arg(OpenFlipper::Options::coreVersion()) ) ;
Jan Möbius's avatar
Jan Möbius committed
109
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
110
111
112
113
114

  // =====================================================================================
  // Directory info
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
115
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
Jan Möbius's avatar
Jan Möbius committed
116
  aboutWidget_->OpenFlipperAbout->append(tr("%1 Directories:").arg(TOSTRING(PRODUCT_NAME)));
Jan Möbius's avatar
Jan Möbius committed
117
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
118
119
120
121
122
123
124
125
126
127
128
129
130
  
  // Get the dataDir
  QDir tempDir = QDir(OpenFlipper::Options::applicationDir());
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
  aboutWidget_->OpenFlipperAbout->append("Data:\t " + tempDir.absolutePath() );
  aboutWidget_->OpenFlipperAbout->append("Shaders:\t " + OpenFlipper::Options::shaderDirStr() );
  aboutWidget_->OpenFlipperAbout->append("Textures:\t " + OpenFlipper::Options::textureDirStr() );
  aboutWidget_->OpenFlipperAbout->append("Scripts:\t " + OpenFlipper::Options::scriptDirStr() );
  aboutWidget_->OpenFlipperAbout->append("Icons:\t " + OpenFlipper::Options::iconDirStr() );
  aboutWidget_->OpenFlipperAbout->append("Fonts:\t" + OpenFlipper::Options::fontsDirStr() );
  aboutWidget_->OpenFlipperAbout->append("Help:\t" + OpenFlipper::Options::helpDirStr() );
131
132
133
134
135
136
137
  aboutWidget_->OpenFlipperAbout->append("\n");

  // =====================================================================================
  // Config files
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
Jan Möbius's avatar
Jan Möbius committed
138
  aboutWidget_->OpenFlipperAbout->append(tr("%1 configuration files:").arg(TOSTRING(PRODUCT_NAME)));
139
140
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);

141
142
143
144
145
  aboutWidget_->OpenFlipperAbout->append(tr("ConfigDir:\t\t\t") +   OpenFlipper::Options::configDirStr() );
  aboutWidget_->OpenFlipperAbout->append(tr("Window states:\t\t") + OpenFlipper::Options::configDirStr()  + OpenFlipper::Options::dirSeparator() + "WindowStates.dat");

  aboutWidget_->OpenFlipperAbout->append(tr("Main option file:\t\t") + OpenFlipperSettings().fileName());
  aboutWidget_->OpenFlipperAbout->append(tr("Additional option files:"));
146
147
148
149
150
  for ( int i = 0 ; i < OpenFlipper::Options::optionFiles().size() ; ++i)
    aboutWidget_->OpenFlipperAbout->append(OpenFlipper::Options::optionFiles()[i]);



151
152
153
154
155
  
  // =====================================================================================
  // Memory infos
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
156
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
157
  aboutWidget_->OpenFlipperAbout->append(tr("Memory Information:"));    
Jan Möbius's avatar
Jan Möbius committed
158
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
159
160
161
162
 
 
  #ifdef WIN32 

163
    // Define memory structure
Jan Möbius's avatar
Jan Möbius committed
164
165
166
167
168
169
170
171
172
173
174
175
176
    MEMORYSTATUSEX ms;
    // Set the size ( required according to spec ... why???? )
    ms.dwLength = sizeof (ms);

    // Get the info
    GlobalMemoryStatusEx(&ms);

    // Output to widget
    aboutWidget_->OpenFlipperAbout->append(tr("Physical Memory:\t")+ QString::number(ms.ullAvailPhys/1024/1024) + "MB/"+ 
                                                                     QString::number(ms.ullTotalPhys/1024/1024) + "MB used ("+
                                                                     QString::number(ms.dwMemoryLoad) + "%)");   
    aboutWidget_->OpenFlipperAbout->append(tr("Pagefile Memory:\t")+ QString::number(ms.ullAvailPageFile/1024/1024) + "MB/"
                                                                   + QString::number(ms.ullTotalPageFile/1024/1024) + "MB used");   
177
178

 
179
  #elif defined ARCH_DARWIN 
Jan Möbius's avatar
Jan Möbius committed
180
181
182
183
  
  aboutWidget_->OpenFlipperAbout->append(tr("Not available for this platform (MacOS)"));   
    
    
184
  #else
185
    unsigned long memory = 0;
186
    
187
188
    struct mallinfo info;
    info = mallinfo();
189

190
191
    // add mmap-allocated memory
    memory += info.hblkhd;
192
    
193
194
    // add sbrk-allocated memory
    memory += info.uordblks;
195
    
196
197
198
    double mmapAllocated  = double(info.hblkhd  ) / 1024 / 1024;
    double sbrkAllocated  = double(info.uordblks) / 1024 / 1024;
    double totalAllocated = double(memory)        / 1024 / 1024;
199
    
Jan Möbius's avatar
Jan Möbius committed
200
201
202
203
204
205
206
207
208
209
210
    double pageSize       = double(getpagesize()) /1024 ;
    double availablePages = double( sysconf (_SC_AVPHYS_PAGES) );
    double freeMem        = availablePages * pageSize / 1024;
    
    aboutWidget_->OpenFlipperAbout->append(tr("Total Memory allocated:\t ") + QString::number(totalAllocated,'f' ,2 ) + tr("MB ")
                                           + tr("( mmap: ") + QString::number(mmapAllocated ,'f' ,2 ) + tr("MB") 
                                           + tr(", sbrk: ") + QString::number(sbrkAllocated ,'f' ,2 ) + tr("MB )") );
    
    aboutWidget_->OpenFlipperAbout->append(tr("Free Memory:\t\t ") + QString::number(freeMem,'f' ,2 )  + tr("MB ")
                                           + tr("(") + QString::number(availablePages,'f' ,0 ) + tr(" pages of ") 
                                           + QString::number(pageSize,'f' ,2 ) + tr("KB size)"));
211
    
212
213
  #endif
  
214
215
216
217
218
219
220
221
222
  // =====================================================================================
  // Memory infos
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
  aboutWidget_->OpenFlipperAbout->append(tr("CPU Information:"));    
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);  
  
  #ifdef WIN32 
223
224
    
    QSettings registryCPU("HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor", QSettings::NativeFormat);
Jan Möbius's avatar
Jan Möbius committed
225

226
227
    QStringList cpus = registryCPU.childGroups(); 
    if ( cpus.size() != 0 ) { 
Jan Möbius's avatar
Jan Möbius committed
228

229
230
231
232
233
234
235
236
      aboutWidget_->OpenFlipperAbout->append(tr("CPU vendor:\t\t ") + 
                                            registryCPU.value( cpus[0]+"/VendorIdentifier", "Unknown" ).toString() );
      aboutWidget_->OpenFlipperAbout->append(tr("CPU model:\t\t ") + 
                                            registryCPU.value( cpus[0]+"/ProcessorNameString", "Unknown" ).toString() );
      aboutWidget_->OpenFlipperAbout->append(tr("CPU identifier:\t\t ") + 
                                            registryCPU.value( cpus[0]+"/Identifier", "Unknown" ).toString() );
      aboutWidget_->OpenFlipperAbout->append(tr("CPU Speed:\t\t ") + 
                                            registryCPU.value( cpus[0]+"/~MHz", "Unknown" ).toString()+ " MHz" );
237

238
      aboutWidget_->OpenFlipperAbout->append("CPU Cores:\t\t " + QString::number(cpus.size())); 
239

240
241
242
    } else {
      aboutWidget_->OpenFlipperAbout->append(tr("Unable to retrieve CPU information"));
    }
243
244
245
  
  #elif defined ARCH_DARWIN 
  
Jan Möbius's avatar
Jan Möbius committed
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
    
    size_t lenCPU;
    char *pCPU;
    
    // First call to get required size
    sysctlbyname("machdep.cpu.brand_string", NULL, &lenCPU, NULL, 0);
    
    // allocate
    pCPU = (char * )malloc(lenCPU);
    
    // Second call to get data
    sysctlbyname("machdep.cpu.brand_string", pCPU, &lenCPU, NULL, 0);
    
    // Output
    aboutWidget_->OpenFlipperAbout->append(tr("CPU Brand:\t\t ") + QString(pCPU) );
    
    // free memory
Jan Möbius's avatar
Jan Möbius committed
263
    free(pCPU);
Jan Möbius's avatar
Jan Möbius committed
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
    
    int physicalCPUS = 0;
    
    // Get data
    lenCPU = sizeof(int);
    sysctlbyname("hw.physicalcpu", &physicalCPUS, &lenCPU , NULL, 0);
    
    // Output
    aboutWidget_->OpenFlipperAbout->append(tr("Physical Cores:\t\t ") + QString::number(physicalCPUS) );

    int logicalCPUS = 0;
    
    // Get data
    lenCPU = sizeof(int);
    sysctlbyname("hw.logicalcpu", &logicalCPUS, &lenCPU, NULL, 0);
    
    // Output
    aboutWidget_->OpenFlipperAbout->append(tr("LogicalCores:\t\t ") + QString::number(logicalCPUS) );
    
283
  #else
284
285
286
287
288
289
290
291
    QFile cpuinfo("/proc/cpuinfo");
    if (! cpuinfo.exists() )
      aboutWidget_->OpenFlipperAbout->append(tr("Unable to retrieve CPU information"));
    else {
      
      cpuinfo.open(QFile::ReadOnly);
      QTextStream stream(&cpuinfo);
      QStringList splitted = stream.readAll().split("\n",QString::SkipEmptyParts);
292
    
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
      int position = splitted.indexOf ( QRegExp("^vendor_id.*") );
      if ( position != -1 ){
        QString cpuVendor = splitted[position].section(':', -1).simplified();
        aboutWidget_->OpenFlipperAbout->append(tr("CPU vendor:\t\t ") + cpuVendor );
      } else {
        aboutWidget_->OpenFlipperAbout->append(tr("CPU vendor:\t\t vendor specification not found")); 
      }
      
      position = splitted.indexOf ( QRegExp("^model name.*") );
      if ( position != -1 ){
        QString cpuModel = splitted[position].section(':', -1).simplified();
        aboutWidget_->OpenFlipperAbout->append(tr("CPU model:\t\t ") + cpuModel );
      } else {
        aboutWidget_->OpenFlipperAbout->append(tr("CPU model:\t\t Model specification not found")); 
      }
      
      position = splitted.indexOf ( QRegExp("^cpu cores.*") );
      if ( position != -1 ){
        QString cpuCoresPhysical = splitted[position].section(':', -1).simplified();
        aboutWidget_->OpenFlipperAbout->append(tr("Physical CPU cores:\t\t ") + cpuCoresPhysical );
      } else {
        aboutWidget_->OpenFlipperAbout->append(tr("Physical CPU cores:\t\t CPU Core specification not found")); 
      }
      
      position = splitted.indexOf ( QRegExp("^siblings.*") );
      if ( position != -1 ){
        QString cpuCoresLogical = splitted[position].section(':', -1).simplified();
        aboutWidget_->OpenFlipperAbout->append(tr("Logical CPU cores:\t\t ") + cpuCoresLogical );
      } else {
        aboutWidget_->OpenFlipperAbout->append(tr("Logical CPU cores:\t\t CPU Core specification not found")); 
      }    
      
      position = splitted.indexOf ( QRegExp("^flags.*") );
      if ( position != -1 ){
        QString cpuFlags = splitted[position].section(':', -1).simplified();
328
329
        aboutWidget_->OpenFlipperAbout->append( tr("CPU capabilities:") );
        aboutWidget_->OpenFlipperAbout->append( cpuFlags );
330
331
332
333
      } else {
        aboutWidget_->OpenFlipperAbout->append(tr("CPU capabilities:\t\t CPU flag specification not found")); 
      }    
      
334
335
336
337
338
339
340
      #if Q_BYTE_ORDER == Q_BIG_ENDIAN
        aboutWidget_->OpenFlipperAbout->append(tr("System is Big Endian"));
      #endif

      #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
        aboutWidget_->OpenFlipperAbout->append(tr("System is Little Endian"));
      #endif
341
      
342
343
344
345
    }
  
  #endif
  
Jan Möbius's avatar
Jan Möbius committed
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
  // =====================================================================================
  // OS info
  // =====================================================================================    
  aboutWidget_->OpenFlipperAbout->append("\n");
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
  aboutWidget_->OpenFlipperAbout->append(tr("Operating System Info:"));
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);

  #ifdef WIN32 
     QSettings registryOS("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", QSettings::NativeFormat);
     aboutWidget_->OpenFlipperAbout->append(tr("Product Name:\t\t ") + 
                                               registryOS.value( "ProductName", "Unknown" ).toString() );
     aboutWidget_->OpenFlipperAbout->append(tr("Current Version:\t\t ") + 
                                               registryOS.value( "CurrentVersion", "Unknown" ).toString() );
  #elif defined ARCH_DARWIN 
Jan Möbius's avatar
Jan Möbius committed
361
362
363
364
365
366
367
368
369
370
371
372
373
374
    
    int mib[2];
    size_t len;
    char *p;
    
    mib[0] = CTL_KERN;
    mib[1] = KERN_VERSION;
    
    sysctl(mib, 2, NULL, &len, NULL, 0);
    p = (char * )malloc(len);
    sysctl(mib, 2, p, &len, NULL, 0);
    
    aboutWidget_->OpenFlipperAbout->append(tr("OS Version:\t\t ") + QString(p) );
    
Jan Möbius's avatar
Jan Möbius committed
375
    free(p);
Jan Möbius's avatar
Jan Möbius committed
376

Jan Möbius's avatar
Jan Möbius committed
377
  #else
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
    QFile versionInfo("/proc/version");
    if (! versionInfo.exists() )
      aboutWidget_->OpenFlipperAbout->append(tr("Unable to retrieve Kernel information"));
    else {
      versionInfo.open(QFile::ReadOnly);
      QTextStream versionStream(&versionInfo);
      aboutWidget_->OpenFlipperAbout->append(tr("Kernel Version:\t\t ") + versionStream.readAll().simplified()); 
      
      QString program = "/usr/bin/lsb_release";
      
      QFile lsb(program);
      if ( lsb.exists() ) {
        QStringList arguments;
        arguments << "-a";
        
        QProcess myProcess;
        myProcess.start(program, arguments);
        
        if ( myProcess.waitForFinished ( 4000 ) ) {
          QStringList outputLSB = QString(myProcess.readAllStandardOutput()).split('\n');
          
          
          int position = outputLSB.indexOf ( QRegExp("^Distributor ID.*") );
          if ( position != -1 ){
            QString distributorID = outputLSB[position].section(':', -1).simplified();
            aboutWidget_->OpenFlipperAbout->append(tr("Distributor ID:\t\t ") + distributorID );
          } else {
            aboutWidget_->OpenFlipperAbout->append(tr("Distributor ID:\t\t Unknown")); 
          }
          
          position = outputLSB.indexOf ( QRegExp("^Description.*") );
          if ( position != -1 ){
            QString description = outputLSB[position].section(':', -1).simplified();
            aboutWidget_->OpenFlipperAbout->append(tr("Description:\t\t ") + description );
          } else {
            aboutWidget_->OpenFlipperAbout->append(tr("Description:\t\t Unknown")); 
          }          
          
          position = outputLSB.indexOf ( QRegExp("^Release.*") );
          if ( position != -1 ){
            QString release = outputLSB[position].section(':', -1).simplified();
            aboutWidget_->OpenFlipperAbout->append(tr("Release number:\t\t ") + release );
          } else {
            aboutWidget_->OpenFlipperAbout->append(tr("Release number:\t\t Unknown")); 
          }    
          
          position = outputLSB.indexOf ( QRegExp("^Codename.*") );
          if ( position != -1 ){
            QString codename = outputLSB[position].section(':', -1).simplified();
            aboutWidget_->OpenFlipperAbout->append(tr("Codename:\t\t ") + codename );
          } else {
            aboutWidget_->OpenFlipperAbout->append(tr("Codename:\t\t Unknown")); 
          }                      
          
        } else {
          aboutWidget_->OpenFlipperAbout->append(tr("Unable to get LSB info")); 
        }
        
      } else {
        aboutWidget_->OpenFlipperAbout->append(tr("No additional information. Unable to get info via LSB.")); 
      }
      
    }
Jan Möbius's avatar
Jan Möbius committed
441
442
  #endif

443
444
445
446
447
448
449
450
451
  QString systemPathVariable = getenv("PATH");
  aboutWidget_->OpenFlipperAbout->append(tr("System Path:\n ") + systemPathVariable);

#ifndef WIN32
  QString systemLibraryPathVariable = getenv("LD_LIBRARY_PATH");
  aboutWidget_->OpenFlipperAbout->append(tr("LD_LIBRARY_PATH:\n ") + systemLibraryPathVariable);
#endif


452
453
454
455
456

  // =====================================================================================
  // OpenGL Renderer/Vendor and version info
  // =====================================================================================    
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
457
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
458
  aboutWidget_->OpenFlipperAbout->append(tr("OpenGL Specific Info:"));
Jan Möbius's avatar
Jan Möbius committed
459
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
460
461

  QString vendor = QString((const char*)glGetString(GL_VENDOR));
462
  aboutWidget_->OpenFlipperAbout->append(tr("Qt reports Vendor:\t\t") + vendor);
463
  QString renderer = QString((const char*)glGetString(GL_RENDERER));
464
  aboutWidget_->OpenFlipperAbout->append(tr("Qt reports Renderer:\t\t") + renderer);
465
466
467
  
  QGLFormat::OpenGLVersionFlags flags = QGLFormat::openGLVersionFlags();

468
469
470
471
472
  QString openGLQtVersion = tr("Qt reports Version:\t\t");

  if ( flags.testFlag(QGLFormat::OpenGL_Version_4_0) )
    openGLQtVersion += tr("4.0 or higher") ;
  else if (flags.testFlag(QGLFormat::OpenGL_Version_3_3))
473
    openGLQtVersion += tr("3.3") ;
474
  else if (flags.testFlag(QGLFormat::OpenGL_Version_3_2))
475
    openGLQtVersion += tr("3.2") ;
476
  else if (flags.testFlag(QGLFormat::OpenGL_Version_3_1))
477
    openGLQtVersion += tr("3.1") ;
478
  else if (flags.testFlag(QGLFormat::OpenGL_Version_3_0))
479
    openGLQtVersion += tr("3.0") ;
480
  else if (flags.testFlag(QGLFormat::OpenGL_Version_3_0))
481
    openGLQtVersion += tr("3.0") ;
482
  else if (flags.testFlag(QGLFormat::OpenGL_Version_2_1))
483
    openGLQtVersion += tr("2.1" );
484
  else if (flags.testFlag(QGLFormat::OpenGL_Version_2_0))
485
    openGLQtVersion += tr("2.0" );
486
  else if (flags.testFlag(QGLFormat::OpenGL_Version_1_5))
487
    openGLQtVersion += tr("1.5" );
488
  else if (flags.testFlag(QGLFormat::OpenGL_Version_1_4))
489
    openGLQtVersion += tr("1.4" );
490
  else if (flags.testFlag(QGLFormat::OpenGL_Version_1_3))
491
    openGLQtVersion += tr("1.3" );
492
  else if (flags.testFlag(QGLFormat::OpenGL_Version_1_2))
493
    openGLQtVersion += tr("1.2" );
494
  else if (flags.testFlag(QGLFormat::OpenGL_Version_1_1))
495
    openGLQtVersion += tr("1.1" );
496
  else
497
    openGLQtVersion += tr("Version:\tUNKNOWN!" );
498

499
500
501
502
  aboutWidget_->OpenFlipperAbout->append(openGLQtVersion);

  aboutWidget_->OpenFlipperAbout->append("\n");

503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
  const QGLContext* context = QGLContext::currentContext();
  if (context) {
    QString openGLprofile = tr("Qt reports the OpenGL profile:\t");
    QGLFormat::OpenGLContextProfile profile = context->format().profile();
    if (profile == QGLFormat::NoProfile)
      openGLprofile += tr("no profile");
    else if (profile == QGLFormat::CoreProfile)
      openGLprofile += tr("Core profile");
    else if (profile == QGLFormat::CompatibilityProfile)
      openGLprofile += tr("Compatibility profile");
    else
      openGLprofile += tr("unknown profile");

    aboutWidget_->OpenFlipperAbout->append(openGLprofile);
    aboutWidget_->OpenFlipperAbout->append("\n");
  }


521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
  QString openGLVendor = tr("GL reports Vendor:\t\t");
  openGLVendor += QString((const char*)glGetString(GL_VENDOR));
  aboutWidget_->OpenFlipperAbout->append(openGLVendor);

  QString openGLRenderer = tr("GL reports Renderer:\t\t");
  openGLRenderer += QString((const char*)glGetString(GL_RENDERER));
  aboutWidget_->OpenFlipperAbout->append(openGLRenderer);

  QString openGLGLVersion = tr("GL reports Version:\t\t");
  openGLGLVersion += QString((const char*)glGetString(GL_VERSION));
  aboutWidget_->OpenFlipperAbout->append(openGLGLVersion);

  QString openGLShadingLanguageVersion = tr("GL reports Shading Language Version:\t");
  openGLShadingLanguageVersion += QString((const char*)glGetString(GL_SHADING_LANGUAGE_VERSION));
  aboutWidget_->OpenFlipperAbout->append(openGLShadingLanguageVersion);
536
537
538
539
540


  // =====================================================================================
  // OpenGL Extensions
  // =====================================================================================
541
  aboutWidget_->OpenFlipperAbout->append("\n");
542
543
544
545
  aboutWidget_->OpenFlipperAbout->append(tr("Supported Extensions:"));
  QString glExtensions = QString((const char*)glGetString(GL_EXTENSIONS));
  aboutWidget_->OpenFlipperAbout->append(glExtensions);
  
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564

  // =====================================================================================
  // OpenGL Properties
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
  aboutWidget_->OpenFlipperAbout->append(tr("OpenGL Values:"));
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
  GLint getBuffer[2];
  glGetIntegerv(GL_MAX_VIEWPORT_DIMS,  &getBuffer[0] );
  aboutWidget_->OpenFlipperAbout->append(tr("Maximal Viewport size(GL_MAX_VIEWPORT_DIMS):\t\t\t\t ") + QString::number(getBuffer[0]) + "x" + QString::number(getBuffer[1]) );

  glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS,  &getBuffer[0] );
  aboutWidget_->OpenFlipperAbout->append(tr("Maximum supported texture image units(GL_MAX_TEXTURE_IMAGE_UNITS):\t") + QString::number(getBuffer[0]) );





565
566
567
568
569
  
  // =====================================================================================
  // glu Information
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
570
571
572
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
  aboutWidget_->OpenFlipperAbout->append(tr("Glu Specific Info:"));
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
573
574
575
576
577
578
579
580
581
582
583
584
585
586
  
  QString gluVersion = QString((const char *)gluGetString(GLU_VERSION));
  aboutWidget_->OpenFlipperAbout->append(tr("GLU Version:\t") + gluVersion);
  
  aboutWidget_->OpenFlipperAbout->append(tr("Supported GLU Extensions:"));
  QString gluExtensions = QString((const char*)gluGetString(GLU_EXTENSIONS));
  aboutWidget_->OpenFlipperAbout->append(gluExtensions);
  
  
  aboutWidget_->OpenFlipperAbout->moveCursor(QTextCursor::Start);
  
  // =====================================================================================
  // glew Information
  // =====================================================================================
587
  #ifndef __APPLE__
588
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
589
590
591
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
  aboutWidget_->OpenFlipperAbout->append(tr("GLEW Specific Info:"));
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
592
593
594
  
  QString glewVersion = QString((const char *)glewGetString(GLEW_VERSION));
  aboutWidget_->OpenFlipperAbout->append(tr("GLEW Version:\t") + glewVersion);
595
  #endif
596
597
598
599
600
601
  
  // =====================================================================================
  // Qt information
  // =====================================================================================
  
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
602
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
603
  aboutWidget_->OpenFlipperAbout->append(tr("Qt Version Info:"));
Jan Möbius's avatar
Jan Möbius committed
604
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
605
606
  aboutWidget_->OpenFlipperAbout->append(tr("Currently used Version:\t") + qVersion() );
  aboutWidget_->OpenFlipperAbout->append(tr("Link time Version:\t\t") + QT_VERSION_STR );
607

608
609
610
611
612
613
614
615
616
617
618
619
620
621
  QList<QByteArray> imageFormats = QImageReader::supportedImageFormats();
  QString formatsString = "";
  for ( int i = 0 ; i < imageFormats.size() ; ++i) {
    formatsString += imageFormats[i] + " ";

    if ( (i != 0)  && (i % 15) == 0 )
      formatsString+= "\n";
  }

  aboutWidget_->OpenFlipperAbout->append(tr("Supported image read formats:") );
  aboutWidget_->OpenFlipperAbout->append(formatsString);

  aboutWidget_->OpenFlipperAbout->append("\n");

622
  aboutWidget_->OpenFlipperAbout->append(tr("Currently used Library paths:") );
623
624
  QStringList libPaths = QCoreApplication::libraryPaths();
  for(int i = 0 ; i < libPaths.size() ; ++i)
625
    aboutWidget_->OpenFlipperAbout->append(" " + libPaths[i]);
626

627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643

  // =========================================================
  // Qt Documentation files
  // =========================================================
/*
  aboutWidget_->OpenFlipperAbout->append("\n");
  aboutWidget_->OpenFlipperAbout->append(tr("Currently Loaded documentations:") );

  QStringList registeredDocumentations = helpEngine_->registeredDocumentations ();

  for ( int i = 0 ; i < registeredDocumentations.size(); ++i) {
    QString documentationInfo = registeredDocumentations[i];
    documentationInfo += " ";
    documentationInfo += helpEngine_->documentationFileName(registeredDocumentations[i]);
    aboutWidget_->OpenFlipperAbout->append(documentationInfo);
  }
*/
644
645
646
647
  // =====================================================================================
  // Compiler information
  // =====================================================================================    
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
648
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
649
  aboutWidget_->OpenFlipperAbout->append(tr("Compiler Info:"));
Jan Möbius's avatar
Jan Möbius committed
650
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
651
652
  aboutWidget_->OpenFlipperAbout->append( OpenFlipper::Options::compilerInfo() );
  
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
  QString definitions;

  // Trying to check some defines:
  #ifdef WIN32
    definitions += "WIN32 ";
  #endif

  #ifdef WIN64
    definitions += "WIN64 ";
  #endif

  #ifdef DLL
    definitions += "DLL ";
  #endif


  #ifdef APPLE
    definitions += "APPLE ";
  #endif

  #ifdef ARCH_DARWIN
    definitions += "ARCH_DARWIN ";
  #endif

  #ifdef INCLUDE_TEMPLATES
    definitions += "INCLUDE_TEMPLATES ";
  #endif

  #ifdef DEBUG
    definitions += "DEBUG ";
  #endif

  #ifdef NDEBUG
    definitions += "NDEBUG ";
  #endif

  #ifdef QT_NO_OPENGL
    definitions += "QT_NO_OPENGL ";
  #endif

  #ifdef OPENMP
    definitions += "OPENMP ";
  #endif

  #ifdef USE_OPENMP
    definitions += "USE_OPENMP ";
  #endif

  aboutWidget_->OpenFlipperAbout->append( tr("Definitions (incomplete):\n") + definitions );

703
704
705
706
  // =====================================================================================
  // List the currently registered data types
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
707
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
708
  aboutWidget_->OpenFlipperAbout->append(tr("Registered data types:"));
Jan Möbius's avatar
Jan Möbius committed
709
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
710
711
712
713
714
715
716
717
718

  QString types;

  // Iterate over all Types known to the core
  // Start at 1:
  // 0 type is defined as DATA_UNKNOWN
  DataType currentType = 1;
  for ( uint i = 0 ; i < typeCount() - 2  ; ++i) {
    types += typeName( currentType ) + "\t\t typeId: " + QString::number(currentType.value()) + "\n";
719
    
720
    // Advance to next type ( Indices are bits so multiply by to to get next bit)
Jan Möbius's avatar
Jan Möbius committed
721
    ++currentType;
Jan Möbius's avatar
Jan Möbius committed
722
  }
723
724
  
  aboutWidget_->OpenFlipperAbout->append( types );
Jan Möbius's avatar
Jan Möbius committed
725

726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
  // =====================================================================================
  // List The File Plugins with their filters
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
  aboutWidget_->OpenFlipperAbout->append(tr("Registered File Plugins:"));
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);

  for ( uint i = 0 ; i < supportedTypes().size() ; ++i ) {
    aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
    aboutWidget_->OpenFlipperAbout->append( "\t" + supportedTypes()[i].name );
    aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
    aboutWidget_->OpenFlipperAbout->append( "\t\t Load: " + supportedTypes()[i].loadFilters );
    aboutWidget_->OpenFlipperAbout->append( "\t\t Save: " + supportedTypes()[i].saveFilters );
  }


Jan Möbius's avatar
Jan Möbius committed
743
744
745
746
  aboutWidget_->show();

}
//=============================================================================