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>
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 601
  //TODO: rename this we are not using glew anymore
  QString glewVersion = QString(getOpenGLVersion());
  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();

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