About.cc 31.6 KB
Newer Older
1
/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
2
3
*                                                                            *
*                              OpenFlipper                                   *
Martin Schultz's avatar
Martin Schultz committed
4
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
33
34
35
36
37
38
 *           Copyright (c) 2001-2015, RWTH-Aachen University                 *
 *           Department of Computer Graphics and Multimedia                  *
 *                          All rights reserved.                             *
 *                            www.openflipper.org                            *
 *                                                                           *
 *---------------------------------------------------------------------------*
 * This file is part of OpenFlipper.                                         *
 *---------------------------------------------------------------------------*
 *                                                                           *
 * Redistribution and use in source and binary forms, with or without        *
 * modification, are permitted provided that the following conditions        *
 * are met:                                                                  *
 *                                                                           *
 * 1. Redistributions of source code must retain the above copyright notice, *
 *    this list of conditions and the following disclaimer.                  *
 *                                                                           *
 * 2. Redistributions in binary form must reproduce the above copyright      *
 *    notice, this list of conditions and the following disclaimer in the    *
 *    documentation and/or other materials provided with the distribution.   *
 *                                                                           *
 * 3. Neither the name of the copyright holder nor the names of its          *
 *    contributors may be used to endorse or promote products derived from   *
 *    this software without specific prior written permission.               *
 *                                                                           *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       *
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A           *
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  *
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,       *
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR        *
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    *
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING      *
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS        *
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.              *
Jan Möbius's avatar
Jan Möbius committed
39
*                                                                            *
40
41
42
\*===========================================================================*/

/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
43
44
45
46
47
*                                                                            *
*   $Revision$                                                       *
*   $LastChangedBy$                                                *
*   $Date$                     *
*                                                                            *
48
\*===========================================================================*/
Jan Möbius's avatar
Jan Möbius committed
49
50
51
52
53
54
55
56
57
58
59
60
61




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


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

Hans-Christian Ebke's avatar
Hans-Christian Ebke committed
62
#include <common/glew_wrappers.hh>
schultz's avatar
schultz committed
63

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

67
68
#include <QGLFormat>

69
#ifndef WIN32
70
71
  #ifndef ARCH_DARWIN
    #include <malloc.h>
72
    #include <unistd.h>
73
  #endif
74
75
#endif

Jan Möbius's avatar
Jan Möbius committed
76
77
78
79
#ifdef ARCH_DARWIN
  #include <sys/types.h>
  #include <sys/sysctl.h>
#endif
80

81
82
83
84
85
//== Defines =================================================================

#define GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX   0x9048
#define GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049

Jan Möbius's avatar
Jan Möbius committed
86
87
//== IMPLEMENTATION ==========================================================

Jan Möbius's avatar
Jan Möbius committed
88
89
90
void CoreWidget::addAboutInfo(QString _text, QString _tabName ) {
  additionalAboutTabs_[_tabName] = _text;
}
Jan Möbius's avatar
Jan Möbius committed
91
92
93
94
95

void CoreWidget::showAboutWidget( ) {

  if ( OpenFlipper::Options::nogui() )
    return;
Jan Möbius's avatar
Jan Möbius committed
96
  
Jan Möbius's avatar
Jan Möbius committed
97
98
  if ( aboutWidget_ == 0 ) {
    aboutWidget_ = new AboutWidget( this );
Jan Möbius's avatar
Jan Möbius committed
99
100
101
102
103
104
105
106
107
108
109
110


    // 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;
    }

111
112
113
  } else {
    aboutWidget_->OpenFlipperAbout->clear();
  }
Jan Möbius's avatar
Jan Möbius committed
114
115
116
117
  
  QFont standardFont = aboutWidget_->OpenFlipperAbout->currentFont();
  QFont boldFont = standardFont;
  boldFont.setBold(true);
118

Jan Möbius's avatar
Jan Möbius committed
119
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
Jan Möbius's avatar
Jan Möbius committed
120
  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
121
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
122
123
124
125
126

  // =====================================================================================
  // Directory info
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
127
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
Jan Möbius's avatar
Jan Möbius committed
128
  aboutWidget_->OpenFlipperAbout->append(tr("%1 Directories:").arg(TOSTRING(PRODUCT_NAME)));
Jan Möbius's avatar
Jan Möbius committed
129
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
130
131
132
133
134
135
136
137
138
139
140
141
142
  
  // 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() );
143
144
145
146
147
148
149
  aboutWidget_->OpenFlipperAbout->append("\n");

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

153
154
155
156
157
  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:"));
158
159
160
161
162
  for ( int i = 0 ; i < OpenFlipper::Options::optionFiles().size() ; ++i)
    aboutWidget_->OpenFlipperAbout->append(OpenFlipper::Options::optionFiles()[i]);



163
164
165
166
167
  
  // =====================================================================================
  // Memory infos
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
168
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
169
  aboutWidget_->OpenFlipperAbout->append(tr("Memory Information:"));    
Jan Möbius's avatar
Jan Möbius committed
170
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
171
172
173
174
 
 
  #ifdef WIN32 

175
    // Define memory structure
Jan Möbius's avatar
Jan Möbius committed
176
177
178
179
180
181
182
183
184
    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/"+ 
185
                                                                     QString::number(ms.ullTotalPhys/1024/1024) + "MB free ("+
Jan Möbius's avatar
Jan Möbius committed
186
187
                                                                     QString::number(ms.dwMemoryLoad) + "%)");   
    aboutWidget_->OpenFlipperAbout->append(tr("Pagefile Memory:\t")+ QString::number(ms.ullAvailPageFile/1024/1024) + "MB/"
188
                                                                   + QString::number(ms.ullTotalPageFile/1024/1024) + "MB free");
189
190

 
191
  #elif defined ARCH_DARWIN 
Jan Möbius's avatar
Jan Möbius committed
192
193
194
195
  
  aboutWidget_->OpenFlipperAbout->append(tr("Not available for this platform (MacOS)"));   
    
    
196
  #else
197
    unsigned long memory = 0;
198
    
199
200
    struct mallinfo info;
    info = mallinfo();
201

202
203
    // add mmap-allocated memory
    memory += info.hblkhd;
204
    
205
206
    // add sbrk-allocated memory
    memory += info.uordblks;
207
    
208
209
210
    double mmapAllocated  = double(info.hblkhd  ) / 1024 / 1024;
    double sbrkAllocated  = double(info.uordblks) / 1024 / 1024;
    double totalAllocated = double(memory)        / 1024 / 1024;
211
    
Jan Möbius's avatar
Jan Möbius committed
212
213
214
215
216
217
218
219
220
221
222
    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)"));
223
    
224
225
  #endif
  
226
227
228
229
230
231
232
233
234
  // =====================================================================================
  // Memory infos
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
  aboutWidget_->OpenFlipperAbout->append(tr("CPU Information:"));    
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);  
  
  #ifdef WIN32 
235
236
    
    QSettings registryCPU("HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor", QSettings::NativeFormat);
Jan Möbius's avatar
Jan Möbius committed
237

238
239
    QStringList cpus = registryCPU.childGroups(); 
    if ( cpus.size() != 0 ) { 
Jan Möbius's avatar
Jan Möbius committed
240

241
242
243
244
245
246
247
248
      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" );
249

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

252
253
254
    } else {
      aboutWidget_->OpenFlipperAbout->append(tr("Unable to retrieve CPU information"));
    }
255
256
257
  
  #elif defined ARCH_DARWIN 
  
Jan Möbius's avatar
Jan Möbius committed
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
    
    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
275
    free(pCPU);
Jan Möbius's avatar
Jan Möbius committed
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
    
    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) );
    
295
  #else
296
297
298
299
300
301
302
303
    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);
304
    
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
      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();
340
341
        aboutWidget_->OpenFlipperAbout->append( tr("CPU capabilities:") );
        aboutWidget_->OpenFlipperAbout->append( cpuFlags );
342
343
344
345
      } else {
        aboutWidget_->OpenFlipperAbout->append(tr("CPU capabilities:\t\t CPU flag specification not found")); 
      }    
      
346
347
348
349
350
351
352
      #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
353
      
354
355
356
357
    }
  
  #endif
  
Jan Möbius's avatar
Jan Möbius committed
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
  // =====================================================================================
  // 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
373
374
375
376
377
378
379
380
381
382
383
384
385
386
    
    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
387
    free(p);
Jan Möbius's avatar
Jan Möbius committed
388

Jan Möbius's avatar
Jan Möbius committed
389
  #else
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
441
442
443
444
445
446
447
448
449
450
451
452
    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
453
454
  #endif

455
456
457
458
459
460
461
462
463
  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


464
465
466
467
468

  // =====================================================================================
  // OpenGL Renderer/Vendor and version info
  // =====================================================================================    
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
469
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
470
  aboutWidget_->OpenFlipperAbout->append(tr("OpenGL Specific Info:"));
Jan Möbius's avatar
Jan Möbius committed
471
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
472
473

  QString vendor = QString((const char*)glGetString(GL_VENDOR));
474
  aboutWidget_->OpenFlipperAbout->append(tr("Qt reports Vendor:\t\t") + vendor);
475
  QString renderer = QString((const char*)glGetString(GL_RENDERER));
476
  aboutWidget_->OpenFlipperAbout->append(tr("Qt reports Renderer:\t\t") + renderer);
477
478
479
  
  QGLFormat::OpenGLVersionFlags flags = QGLFormat::openGLVersionFlags();

480
481
482
483
484
  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))
485
    openGLQtVersion += tr("3.3") ;
486
  else if (flags.testFlag(QGLFormat::OpenGL_Version_3_2))
487
    openGLQtVersion += tr("3.2") ;
488
  else if (flags.testFlag(QGLFormat::OpenGL_Version_3_1))
489
    openGLQtVersion += tr("3.1") ;
490
  else if (flags.testFlag(QGLFormat::OpenGL_Version_3_0))
491
    openGLQtVersion += tr("3.0") ;
492
  else if (flags.testFlag(QGLFormat::OpenGL_Version_2_1))
493
    openGLQtVersion += tr("2.1" );
494
  else if (flags.testFlag(QGLFormat::OpenGL_Version_2_0))
495
    openGLQtVersion += tr("2.0" );
496
  else if (flags.testFlag(QGLFormat::OpenGL_Version_1_5))
497
    openGLQtVersion += tr("1.5" );
498
  else if (flags.testFlag(QGLFormat::OpenGL_Version_1_4))
499
    openGLQtVersion += tr("1.4" );
500
  else if (flags.testFlag(QGLFormat::OpenGL_Version_1_3))
501
    openGLQtVersion += tr("1.3" );
502
  else if (flags.testFlag(QGLFormat::OpenGL_Version_1_2))
503
    openGLQtVersion += tr("1.2" );
504
  else if (flags.testFlag(QGLFormat::OpenGL_Version_1_1))
505
    openGLQtVersion += tr("1.1" );
506
  else
507
    openGLQtVersion += tr("Version:\tUNKNOWN!" );
508

509
510
511
512
  aboutWidget_->OpenFlipperAbout->append(openGLQtVersion);

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

513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
  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");
  }


531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
  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);
546
547
548
549
550


  // =====================================================================================
  // OpenGL Extensions
  // =====================================================================================
551
  aboutWidget_->OpenFlipperAbout->append("\n");
552
553
554
555
  aboutWidget_->OpenFlipperAbout->append(tr("Supported Extensions:"));
  QString glExtensions = QString((const char*)glGetString(GL_EXTENSIONS));
  aboutWidget_->OpenFlipperAbout->append(glExtensions);
  
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570

  // =====================================================================================
  // 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]) );

571
572
573
574
575
  // Check extension for NVIDIA memory information
  if ( glExtensions.contains("GL_NVX_gpu_memory_info") ) {
    // get total memory on gpu
    GLint total_mem_kb = 0;
    glGetIntegerv(GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, &total_mem_kb);
576

577
    aboutWidget_->OpenFlipperAbout->append(tr("GPU Memory (Total available):\t\t") + QString::number(total_mem_kb /1024) + " MB" );
578

579
580
581
582
583
584
    // get currently available memory on gpu
    GLint cur_avail_mem_kb = 0;
    glGetIntegerv(GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &cur_avail_mem_kb);

    aboutWidget_->OpenFlipperAbout->append(tr("GPU Memory (Currently available):\t") + QString::number(cur_avail_mem_kb / 1024) + " MB" );
  }
585
586


587
588
589
590
591
592
  
  aboutWidget_->OpenFlipperAbout->moveCursor(QTextCursor::Start);
  
  // =====================================================================================
  // glew Information
  // =====================================================================================
593
  #ifndef __APPLE__
594
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
595
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
596
  aboutWidget_->OpenFlipperAbout->append(tr("OpenGL Specific Info:"));
Jan Möbius's avatar
Jan Möbius committed
597
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
598
  
599
600
  //TODO: rename this we are not using glew anymore
  QString glewVersion = QString(getOpenGLVersion());
601
  aboutWidget_->OpenFlipperAbout->append(tr("OpenGL Version:\t") + glewVersion);
602
  #endif
603
604
605
606
607
608
  
  // =====================================================================================
  // Qt information
  // =====================================================================================
  
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
609
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
610
  aboutWidget_->OpenFlipperAbout->append(tr("Qt Version Info:"));
Jan Möbius's avatar
Jan Möbius committed
611
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
612
613
  aboutWidget_->OpenFlipperAbout->append(tr("Currently used Version:\t") + qVersion() );
  aboutWidget_->OpenFlipperAbout->append(tr("Link time Version:\t\t") + QT_VERSION_STR );
614

615
616
617
618
619
620
621
622
623
624
625
626
627
628
  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");

629
  aboutWidget_->OpenFlipperAbout->append(tr("Currently used Library paths:") );
630
631
  QStringList libPaths = QCoreApplication::libraryPaths();
  for(int i = 0 ; i < libPaths.size() ; ++i)
632
    aboutWidget_->OpenFlipperAbout->append(" " + libPaths[i]);
633

634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650

  // =========================================================
  // 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);
  }
*/
651
652
653
654
  // =====================================================================================
  // Compiler information
  // =====================================================================================    
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
655
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
656
  aboutWidget_->OpenFlipperAbout->append(tr("Compiler Info:"));
Jan Möbius's avatar
Jan Möbius committed
657
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
658
659
  aboutWidget_->OpenFlipperAbout->append( OpenFlipper::Options::compilerInfo() );
  
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
703
704
705
706
707
708
709
  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 );

710
711
712
713
  // =====================================================================================
  // List the currently registered data types
  // =====================================================================================
  aboutWidget_->OpenFlipperAbout->append("\n");
Jan Möbius's avatar
Jan Möbius committed
714
  aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
715
  aboutWidget_->OpenFlipperAbout->append(tr("Registered data types:"));
Jan Möbius's avatar
Jan Möbius committed
716
  aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
717
718
719
720
721
722
723
724
725

  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";
726
    
727
    // Advance to next type ( Indices are bits so multiply by to to get next bit)
Jan Möbius's avatar
Jan Möbius committed
728
    ++currentType;
Jan Möbius's avatar
Jan Möbius committed
729
  }
730
731
  
  aboutWidget_->OpenFlipperAbout->append( types );
Jan Möbius's avatar
Jan Möbius committed
732

733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
  // =====================================================================================
  // 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
750
751
752
753
  aboutWidget_->show();

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