optionHandling.cc 14.8 KB
Newer Older
1 2 3 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 39 40 41
/*===========================================================================*\
 *                                                                           *
 *                              OpenFlipper                                  *
 *      Copyright (C) 2001-2009 by Computer Graphics Group, RWTH Aachen      *
 *                           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/>.                                      *
 *                                                                           *
\*===========================================================================*/

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




//=============================================================================
//
//  CLASS Core - IMPLEMENTATION of Path and File Handling
//
//=============================================================================


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

// -------------------- mview
#include "Core.hh"
// -------------------- ACG
#include <ACG/Scenegraph/DrawModes.hh>

#include "OpenFlipper/INIFile/INIFile.hh"
#include "OpenFlipper/common/GlobalOptions.hh"
62
#include <OpenFlipper/BasePlugin/PluginFunctions.hh>
Jan Möbius's avatar
 
Jan Möbius committed
63

Jan Möbius's avatar
Jan Möbius committed
64
//== IMPLEMENTATION ==========================================================
Jan Möbius's avatar
 
Jan Möbius committed
65 66 67 68

void Core::applyOptions(){

  if ( OpenFlipper::Options::gui() ) {
Jan Möbius's avatar
Jan Möbius committed
69

Jan Möbius's avatar
 
Jan Möbius committed
70 71
    //Init ViewModes
    coreWidget_->initViewModes();
Jan Möbius's avatar
Jan Möbius committed
72

Jan Möbius's avatar
 
Jan Möbius committed
73 74 75 76
    //Set default Viewmode
    if (OpenFlipper::Options::defaultToolboxMode() != "")
      coreWidget_->slotChangeView(OpenFlipper::Options::defaultToolboxMode(), QStringList());
    //Set Fullscreen
Dirk Wilden's avatar
Dirk Wilden committed
77
    if ( OpenFlipper::Options::fullScreen() )
78
      coreWidget_->setWindowState( coreWidget_->windowState() | Qt::WindowFullScreen);
Dirk Wilden's avatar
Dirk Wilden committed
79
    else
80
		  coreWidget_->setWindowState( (coreWidget_->windowState() | Qt::WindowFullScreen) ^ Qt::WindowFullScreen);
Jan Möbius's avatar
Jan Möbius committed
81

82
    // Logger
Jan Möbius's avatar
Jan Möbius committed
83
    coreWidget_->showLogger( OpenFlipper::Options::loggerState() );
Jan Möbius's avatar
Jan Möbius committed
84

Jan Möbius's avatar
Jan Möbius committed
85
    // Prepare Picking Debugger Flag
86 87 88 89 90 91 92 93 94
    ACG::SceneGraph::PickTarget target;
    if ( OpenFlipper::Options::pickingRenderMode() == "PICK_ANYHING") {
      target = ACG::SceneGraph::PICK_ANYTHING;
    } else if ( OpenFlipper::Options::pickingRenderMode() == "PICK_VERTEX") {
      target = ACG::SceneGraph::PICK_VERTEX;
    } else if ( OpenFlipper::Options::pickingRenderMode() == "PICK_EDGE") {
      target = ACG::SceneGraph::PICK_EDGE;
    } else if ( OpenFlipper::Options::pickingRenderMode() == "PICK_FACE") {
      target = ACG::SceneGraph::PICK_FACE;
Jan Möbius's avatar
Dennis:  
Jan Möbius committed
95 96 97 98
    } else if ( OpenFlipper::Options::pickingRenderMode() == "PICK_FRONT_VERTEX") {
      target = ACG::SceneGraph::PICK_FRONT_VERTEX;
    } else if ( OpenFlipper::Options::pickingRenderMode() == "PICK_FRONT_EDGE") {
      target = ACG::SceneGraph::PICK_FRONT_EDGE;
99 100 101
    } else {
      target = ACG::SceneGraph::PICK_ANYTHING;
    }
Jan Möbius's avatar
Jan Möbius committed
102

103 104 105 106 107 108
    //set viewer properties
    for (int i=0; i < PluginFunctions::viewers(); i++){

      PluginFunctions::setDrawMode( OpenFlipper::Options::defaultDrawMode(i), i );
      PluginFunctions::setFixedView(OpenFlipper::Options::defaultViewingDirection(i), i );

109 110 111
      //only switch projection here if an object is opened
      //this prevents problems when applying options on app start
      if ( PluginFunctions::objectCount() > 0 ){ 
112 113 114 115
        if ( OpenFlipper::Options::defaultProjectionMode(i) == 0 )
          PluginFunctions::orthographicProjection(i);
        else
          PluginFunctions::perspectiveProjection(i);
116
      }
117 118
    }

119 120 121
    if ( OpenFlipper::Options::multiView() )
      coreWidget_->setViewMode( OpenFlipper::Options::defaultViewerLayout() );

122 123
    //set defaultBackgroundColor
    QColor c = OpenFlipper::Options::defaultBackgroundColor() ;
Jan Möbius's avatar
Jan Möbius committed
124

125
    for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
Jan Möbius's avatar
Jan Möbius committed
126
      //wheel zoom factor
Dirk Wilden's avatar
Dirk Wilden committed
127 128
      PluginFunctions::viewerProperties(i).wheelZoomFactor(OpenFlipper::Options::wheelZoomFactor());
      PluginFunctions::viewerProperties(i).wheelZoomFactorShift(OpenFlipper::Options::wheelZoomFactorShift());
Jan Möbius's avatar
Jan Möbius committed
129 130

      // Picking Debugger
131
      PluginFunctions::viewerProperties(i).renderPicking(OpenFlipper::Options::renderPicking(), target );
Jan Möbius's avatar
Jan Möbius committed
132
    }
133

Jan Möbius's avatar
 
Jan Möbius committed
134 135
    //hideToolbox
    if (OpenFlipper::Options::hideToolbox()) {
136

Jan Möbius's avatar
Dennis:  
Jan Möbius committed
137
      coreWidget_->showToolbox (false);
Jan Möbius's avatar
 
Jan Möbius committed
138
    }
Jan Möbius's avatar
Jan Möbius committed
139

Dirk Wilden's avatar
Dirk Wilden committed
140 141 142 143 144 145 146 147 148 149 150 151 152
    //setup logFile
    if (logFile_ != 0){

      if (OpenFlipper::Options::logFile() != logFile_->fileName() ){
        logFile_->close();
        delete logFile_;
        logFile_ = 0;
        if (logStream_ != 0){
          delete logStream_;
          logStream_ = 0;
        }
      }
    }
153

Jan Möbius's avatar
 
Jan Möbius committed
154
    updateView();
Jan Möbius's avatar
Jan Möbius committed
155

Jan Möbius's avatar
 
Jan Möbius committed
156 157 158
  }
}

Dirk Wilden's avatar
Dirk Wilden committed
159
void Core::saveOptions(){
Jan Möbius's avatar
Jan Möbius committed
160
  QString inifile = QDir::home().absolutePath() + OpenFlipper::Options::dirSeparator() + ".OpenFlipper" +
Dirk Wilden's avatar
Dirk Wilden committed
161 162 163 164
                                                  OpenFlipper::Options::dirSeparator() +  "OpenFlipper.ini";

  INIFile ini;
  if ( ! ini.connect( inifile ,false) ) {
165
    emit log(LOGERR,tr("Failed to connect to users ini file"));
Jan Möbius's avatar
Jan Möbius committed
166

Dirk Wilden's avatar
Dirk Wilden committed
167
    if ( ! ini.connect( inifile,true) ) {
168
      emit log(LOGERR,tr("Can not create user ini file"));
Dirk Wilden's avatar
Dirk Wilden committed
169 170 171 172 173 174 175
    } else {
      writeApplicationOptions(ini);
      ini.disconnect();
    }
  } else {
    writeApplicationOptions(ini);
    ini.disconnect();
Jan Möbius's avatar
Jan Möbius committed
176
  }
Dirk Wilden's avatar
Dirk Wilden committed
177 178
}

Jan Möbius's avatar
 
Jan Möbius committed
179
void Core::setupOptions() {
Jan Möbius's avatar
Jan Möbius committed
180

Jan Möbius's avatar
 
Jan Möbius committed
181
  // Get the Main config dir in the home directory and possibly create it
Jan Möbius's avatar
Jan Möbius committed
182 183
  QDir configDir = QDir::home();

Jan Möbius's avatar
 
Jan Möbius committed
184
  if ( ! configDir.cd(".OpenFlipper") ) {
185
    emit log(LOGOUT,tr("Creating config Dir ~/.OpenFlipper"));
Jan Möbius's avatar
 
Jan Möbius committed
186 187
    configDir.mkdir(".OpenFlipper");
    if ( ! configDir.cd(".OpenFlipper") ) {
188
      emit log(LOGERR,tr("Unable to create config dir ~/.OpenFlipper"));
Jan Möbius's avatar
Jan Möbius committed
189
      return;
Jan Möbius's avatar
 
Jan Möbius committed
190 191 192
    }
  }
  OpenFlipper::Options::configDir(configDir);
Jan Möbius's avatar
Jan Möbius committed
193

Jan Möbius's avatar
 
Jan Möbius committed
194 195
  // Remember the main application directory (assumed to be one above executable Path)
  QDir tempDir = QDir(qApp->applicationDirPath());
196 197 198 199 200
  #ifdef OPENFLIPPER_APPDIR
    tempDir.cd(OPENFLIPPER_APPDIR);
  #else
    tempDir.cd(".." + OpenFlipper::Options::dirSeparator() );
  #endif
Jan Möbius's avatar
 
Jan Möbius committed
201
  OpenFlipper::Options::applicationDir(tempDir.absolutePath());
Jan Möbius's avatar
Jan Möbius committed
202

Jan Möbius's avatar
 
Jan Möbius committed
203
  // Set the standard path to the plugins
204 205 206 207 208
  #ifdef OPENFLIPPER_PLUGINDIR
    tempDir.cd(OPENFLIPPER_PLUGINDIR);
  #else
    tempDir.cd("Plugins");

209 210 211 212 213 214 215 216
    #if defined(WIN32)
      tempDir.cd("Windows");
    #elif defined(ARCH_DARWIN)
      tempDir.cd("Darwin");
    #else
      tempDir.cd("Linux");
    #endif

217 218
    if ( OpenFlipper::Options::is64bit() )
      tempDir.cd("64");
219 220
    else
      tempDir.cd("32");
221 222

    #ifdef WIN32
223 224
        #ifndef NDEBUG
          #define DEBUG
225
        #endif
226 227 228 229
    #endif

    #ifdef DEBUG
            tempDir.cd("Debug");
230
    #else
231
            tempDir.cd("Release");
232 233
    #endif
  #endif
Jan Möbius's avatar
Jan Möbius committed
234

Jan Möbius's avatar
 
Jan Möbius committed
235
  OpenFlipper::Options::pluginDir(tempDir.absolutePath());
Jan Möbius's avatar
Jan Möbius committed
236

Jan Möbius's avatar
 
Jan Möbius committed
237 238
  // Set the Path to the shaders
  tempDir = QDir(OpenFlipper::Options::applicationDir());
239 240 241
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
Jan Möbius's avatar
 
Jan Möbius committed
242 243
  tempDir.cd("Shaders");
  OpenFlipper::Options::shaderDir(tempDir.absolutePath());
Jan Möbius's avatar
Jan Möbius committed
244 245


Jan Möbius's avatar
 
Jan Möbius committed
246 247
  // Set the Path to the textures
  tempDir = QDir(OpenFlipper::Options::applicationDir());
248 249 250
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
Jan Möbius's avatar
 
Jan Möbius committed
251 252
  tempDir.cd("Textures");
  OpenFlipper::Options::textureDir(tempDir.absolutePath());
Jan Möbius's avatar
Jan Möbius committed
253

Jan Möbius's avatar
Jan Möbius committed
254 255 256 257 258 259 260 261
  // Set the Path to the Scripts
  tempDir = QDir(OpenFlipper::Options::applicationDir());
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
  tempDir.cd("Scripts");
  OpenFlipper::Options::scriptDir(tempDir.absolutePath());

Jan Möbius's avatar
 
Jan Möbius committed
262 263
  // Set the Path to the Icons
  tempDir = QDir(OpenFlipper::Options::applicationDir());
264 265 266
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
Jan Möbius's avatar
 
Jan Möbius committed
267 268
  tempDir.cd("Icons");
  OpenFlipper::Options::iconDir(tempDir.absolutePath());
Jan Möbius's avatar
Jan Möbius committed
269 270 271 272 273 274 275
  
  // Set the Path to the translations
  tempDir = QDir(OpenFlipper::Options::applicationDir());
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
  tempDir.cd("Translations");
Jan Möbius's avatar
Jan Möbius committed
276
  OpenFlipper::Options::translationsDir(tempDir.absolutePath());  
Jan Möbius's avatar
Jan Möbius committed
277

Jan Möbius's avatar
Jan Möbius committed
278 279
  // Set the Path to the Fonts
  tempDir = QDir(OpenFlipper::Options::applicationDir());
280 281 282
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
Jan Möbius's avatar
Jan Möbius committed
283 284 285
  tempDir.cd("Fonts");
  OpenFlipper::Options::fontsDir(tempDir.absolutePath());

286 287 288 289 290 291 292 293
  // Set the Path to the License files
  tempDir = QDir(OpenFlipper::Options::applicationDir());
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
  tempDir.cd("Licenses");
  OpenFlipper::Options::licenseDir(tempDir.absolutePath());

294 295 296 297 298 299 300 301
  // Set the Path to the Help
  tempDir = QDir(OpenFlipper::Options::applicationDir());
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
  tempDir.cd("Help");
  OpenFlipper::Options::helpDir(tempDir.absolutePath());

302 303 304 305 306 307 308
  // Set the Path to the main data directory
  tempDir = QDir(OpenFlipper::Options::applicationDir());
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
  OpenFlipper::Options::dataDir(tempDir.absolutePath());

Jan Möbius's avatar
 
Jan Möbius committed
309
  QStringList optionFiles;
Jan Möbius's avatar
Jan Möbius committed
310

Jan Möbius's avatar
 
Jan Möbius committed
311 312 313 314
  // ==============================================================
  // Global ini file in the application directory
  // ==============================================================
  QFile globalIni(OpenFlipper::Options::applicationDir().absolutePath() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");
Jan Möbius's avatar
Jan Möbius committed
315 316 317
  if ( globalIni.exists() )
    optionFiles.push_back(OpenFlipper::Options::applicationDir().absolutePath() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");

Jan Möbius's avatar
 
Jan Möbius committed
318 319 320 321
  // ==============================================================
  // Local ini file in the users home directory
  // ==============================================================
  QFile localIni(OpenFlipper::Options::configDirStr() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");
Jan Möbius's avatar
Jan Möbius committed
322 323 324
  if ( localIni.exists() )
    optionFiles.push_back(OpenFlipper::Options::configDirStr() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");

Jan Möbius's avatar
 
Jan Möbius committed
325 326
  // Set the previously generated Optionfiles
  OpenFlipper::Options::optionFiles(optionFiles);
Jan Möbius's avatar
Jan Möbius committed
327

328 329 330 331 332 333 334 335 336
  // ==============================================================
  // Default File open directories
  // ==============================================================
  // Default to OpenFlippers Texture dir
  OpenFlipper::Options::currentTextureDir(OpenFlipper::Options::textureDirStr());

  // Default to home directory
  OpenFlipper::Options::currentDir( QDir::home() );

Jan Möbius's avatar
Jan Möbius committed
337

Jan Möbius's avatar
 
Jan Möbius committed
338 339 340
  // ==============================================================
  // Load Application options from all files available
  // ==============================================================
Jan Möbius's avatar
Jan Möbius committed
341

Jan Möbius's avatar
 
Jan Möbius committed
342
  for ( int i = 0 ; i < (int)optionFiles.size(); ++i) {
Jan Möbius's avatar
Jan Möbius committed
343

Jan Möbius's avatar
 
Jan Möbius committed
344
    INIFile _ini;
Jan Möbius's avatar
Jan Möbius committed
345

Jan Möbius's avatar
 
Jan Möbius committed
346
    if ( ! _ini.connect(optionFiles[i],false) ) {
347
      emit log(LOGERR,tr("Failed to connect to _ini file") + optionFiles[i]);
Jan Möbius's avatar
 
Jan Möbius committed
348
      continue;
Jan Möbius's avatar
Jan Möbius committed
349 350
    }

Jan Möbius's avatar
 
Jan Möbius committed
351
    readApplicationOptions(_ini);
Jan Möbius's avatar
Jan Möbius committed
352

Jan Möbius's avatar
 
Jan Möbius committed
353 354
    _ini.disconnect();
  }
Jan Möbius's avatar
Jan Möbius committed
355

Jan Möbius's avatar
 
Jan Möbius committed
356 357
}

358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
/// restore key Assignments that were saved in config files
void Core::restoreKeyBindings(){

  QStringList optionFiles;

  // ==============================================================
  // Global ini file in the application directory
  // ==============================================================
  QFile globalIni(OpenFlipper::Options::applicationDir().absolutePath() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");
  if ( globalIni.exists() )
    optionFiles.push_back(OpenFlipper::Options::applicationDir().absolutePath() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");

  // ==============================================================
  // Local ini file in the users home directory
  // ==============================================================
  QFile localIni(OpenFlipper::Options::configDirStr() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");
  if ( localIni.exists() )
    optionFiles.push_back(OpenFlipper::Options::configDirStr() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");

  // Set the previously generated Optionfiles
  OpenFlipper::Options::optionFiles(optionFiles);


  // ==============================================================
  // Load Application options from all files available
  // ==============================================================

  for ( int i = 0 ; i < (int)optionFiles.size(); ++i) {

    INIFile _ini;

    if ( ! _ini.connect(optionFiles[i],false) ) {
390
      emit log(LOGERR,tr("Failed to connect to _ini file") + optionFiles[i]);
391 392 393 394 395 396 397 398 399 400
      continue;
    }

    if ( OpenFlipper::Options::gui() )
      coreWidget_->loadKeyBindings(_ini);

    _ini.disconnect();
  }
}

Jan Möbius's avatar
 
Jan Möbius committed
401
//=============================================================================