optionHandling.cc 14.9 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
    if ( OpenFlipper::Options::multiView() )
120
      coreWidget_->setViewerLayout( OpenFlipper::Options::defaultViewerLayout() );
121

122
123
124
125
126
    if ( OpenFlipper::Options::gridVisible() )
      gridNode_->show();
    else
      gridNode_->hide();

127
128
    //set defaultBackgroundColor
    QColor c = OpenFlipper::Options::defaultBackgroundColor() ;
Jan Möbius's avatar
Jan Möbius committed
129

130
    for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
Jan Möbius's avatar
Jan Möbius committed
131
      //wheel zoom factor
Dirk Wilden's avatar
Dirk Wilden committed
132
133
      PluginFunctions::viewerProperties(i).wheelZoomFactor(OpenFlipper::Options::wheelZoomFactor());
      PluginFunctions::viewerProperties(i).wheelZoomFactorShift(OpenFlipper::Options::wheelZoomFactorShift());
Jan Möbius's avatar
Jan Möbius committed
134
135

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

Jan Möbius's avatar
   
Jan Möbius committed
139
140
    //hideToolbox
    if (OpenFlipper::Options::hideToolbox()) {
141

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
142
      coreWidget_->showToolbox (false);
Jan Möbius's avatar
   
Jan Möbius committed
143
    }
Jan Möbius's avatar
Jan Möbius committed
144

Dirk Wilden's avatar
Dirk Wilden committed
145
146
147
148
149
150
151
152
153
154
155
156
157
    //setup logFile
    if (logFile_ != 0){

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

Jan Möbius's avatar
   
Jan Möbius committed
159
    updateView();
Jan Möbius's avatar
Jan Möbius committed
160

Jan Möbius's avatar
   
Jan Möbius committed
161
162
163
  }
}

Dirk Wilden's avatar
Dirk Wilden committed
164
void Core::saveOptions(){
Jan Möbius's avatar
Jan Möbius committed
165
  QString inifile = QDir::home().absolutePath() + OpenFlipper::Options::dirSeparator() + ".OpenFlipper" +
Dirk Wilden's avatar
Dirk Wilden committed
166
167
168
169
                                                  OpenFlipper::Options::dirSeparator() +  "OpenFlipper.ini";

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

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

Jan Möbius's avatar
   
Jan Möbius committed
184
void Core::setupOptions() {
Jan Möbius's avatar
Jan Möbius committed
185

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

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

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

Jan Möbius's avatar
   
Jan Möbius committed
208
  // Set the standard path to the plugins
209
210
211
212
213
  #ifdef OPENFLIPPER_PLUGINDIR
    tempDir.cd(OPENFLIPPER_PLUGINDIR);
  #else
    tempDir.cd("Plugins");

214
215
216
217
218
219
220
221
    #if defined(WIN32)
      tempDir.cd("Windows");
    #elif defined(ARCH_DARWIN)
      tempDir.cd("Darwin");
    #else
      tempDir.cd("Linux");
    #endif

222
223
    if ( OpenFlipper::Options::is64bit() )
      tempDir.cd("64");
224
225
    else
      tempDir.cd("32");
226
227

    #ifdef WIN32
228
229
        #ifndef NDEBUG
          #define DEBUG
230
        #endif
231
232
233
234
    #endif

    #ifdef DEBUG
            tempDir.cd("Debug");
235
    #else
236
            tempDir.cd("Release");
237
238
    #endif
  #endif
Jan Möbius's avatar
Jan Möbius committed
239

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

Jan Möbius's avatar
   
Jan Möbius committed
242
243
  // Set the Path to the shaders
  tempDir = QDir(OpenFlipper::Options::applicationDir());
244
245
246
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
Jan Möbius's avatar
   
Jan Möbius committed
247
248
  tempDir.cd("Shaders");
  OpenFlipper::Options::shaderDir(tempDir.absolutePath());
Jan Möbius's avatar
Jan Möbius committed
249
250


Jan Möbius's avatar
   
Jan Möbius committed
251
252
  // Set the Path to the textures
  tempDir = QDir(OpenFlipper::Options::applicationDir());
253
254
255
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
Jan Möbius's avatar
   
Jan Möbius committed
256
257
  tempDir.cd("Textures");
  OpenFlipper::Options::textureDir(tempDir.absolutePath());
Jan Möbius's avatar
Jan Möbius committed
258

Jan Möbius's avatar
Jan Möbius committed
259
260
261
262
263
264
265
266
  // 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
267
268
  // Set the Path to the Icons
  tempDir = QDir(OpenFlipper::Options::applicationDir());
269
270
271
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
Jan Möbius's avatar
   
Jan Möbius committed
272
273
  tempDir.cd("Icons");
  OpenFlipper::Options::iconDir(tempDir.absolutePath());
Jan Möbius's avatar
Jan Möbius committed
274
275
276
277
278
279
280
  
  // 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
281
  OpenFlipper::Options::translationsDir(tempDir.absolutePath());  
Jan Möbius's avatar
Jan Möbius committed
282

Jan Möbius's avatar
Jan Möbius committed
283
284
  // Set the Path to the Fonts
  tempDir = QDir(OpenFlipper::Options::applicationDir());
285
286
287
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
Jan Möbius's avatar
Jan Möbius committed
288
289
290
  tempDir.cd("Fonts");
  OpenFlipper::Options::fontsDir(tempDir.absolutePath());

291
292
293
294
295
296
297
298
  // 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());

299
300
301
302
303
304
305
306
  // 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());

307
308
309
310
311
312
313
  // 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
314
  QStringList optionFiles;
Jan Möbius's avatar
Jan Möbius committed
315

Jan Möbius's avatar
   
Jan Möbius committed
316
317
318
319
  // ==============================================================
  // 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
320
321
322
  if ( globalIni.exists() )
    optionFiles.push_back(OpenFlipper::Options::applicationDir().absolutePath() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");

Jan Möbius's avatar
   
Jan Möbius committed
323
324
325
326
  // ==============================================================
  // 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
327
328
329
  if ( localIni.exists() )
    optionFiles.push_back(OpenFlipper::Options::configDirStr() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");

Jan Möbius's avatar
   
Jan Möbius committed
330
331
  // Set the previously generated Optionfiles
  OpenFlipper::Options::optionFiles(optionFiles);
Jan Möbius's avatar
Jan Möbius committed
332

333
334
335
336
337
338
339
340
341
  // ==============================================================
  // 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
342

Jan Möbius's avatar
   
Jan Möbius committed
343
344
345
  // ==============================================================
  // Load Application options from all files available
  // ==============================================================
Jan Möbius's avatar
Jan Möbius committed
346

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

Jan Möbius's avatar
   
Jan Möbius committed
349
    INIFile _ini;
Jan Möbius's avatar
Jan Möbius committed
350

Jan Möbius's avatar
   
Jan Möbius committed
351
    if ( ! _ini.connect(optionFiles[i],false) ) {
352
      emit log(LOGERR,tr("Failed to connect to _ini file") + optionFiles[i]);
Jan Möbius's avatar
   
Jan Möbius committed
353
      continue;
Jan Möbius's avatar
Jan Möbius committed
354
355
    }

Jan Möbius's avatar
   
Jan Möbius committed
356
    readApplicationOptions(_ini);
Jan Möbius's avatar
Jan Möbius committed
357

Jan Möbius's avatar
   
Jan Möbius committed
358
359
    _ini.disconnect();
  }
Jan Möbius's avatar
Jan Möbius committed
360

Jan Möbius's avatar
   
Jan Möbius committed
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
390
391
392
393
394
/// 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) ) {
395
      emit log(LOGERR,tr("Failed to connect to _ini file") + optionFiles[i]);
396
397
398
399
400
401
402
403
404
405
      continue;
    }

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

    _ini.disconnect();
  }
}

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