optionHandling.cc 14.6 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
112
113
114
115
116
      //only switch projection here if an object is opened
      //this prevents problems when applying options on app start
      if ( PluginFunctions::objectCount() > 0 ){ 
	if ( OpenFlipper::Options::defaultProjectionMode(i) == 0 )
	  PluginFunctions::orthographicProjection(i);
	else
	  PluginFunctions::perspectiveProjection(i);
      }
117
118
    }

119
120
    //set defaultBackgroundColor
    QColor c = OpenFlipper::Options::defaultBackgroundColor() ;
Jan Möbius's avatar
Jan Möbius committed
121

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

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

Jan Möbius's avatar
   
Jan Möbius committed
131
132
    //hideToolbox
    if (OpenFlipper::Options::hideToolbox()) {
133

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
134
      coreWidget_->showToolbox (false);
Jan Möbius's avatar
   
Jan Möbius committed
135
    }
Jan Möbius's avatar
Jan Möbius committed
136

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

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

Jan Möbius's avatar
   
Jan Möbius committed
151
    updateView();
Jan Möbius's avatar
Jan Möbius committed
152

Jan Möbius's avatar
   
Jan Möbius committed
153
154
155
  }
}

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

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

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

Jan Möbius's avatar
   
Jan Möbius committed
176
void Core::setupOptions() {
Jan Möbius's avatar
Jan Möbius committed
177

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

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

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

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

206
207
208
209
210
211
212
213
    #if defined(WIN32)
      tempDir.cd("Windows");
    #elif defined(ARCH_DARWIN)
      tempDir.cd("Darwin");
    #else
      tempDir.cd("Linux");
    #endif

214
215
    if ( OpenFlipper::Options::is64bit() )
      tempDir.cd("64");
216
217
    else
      tempDir.cd("32");
218
219

    #ifdef WIN32
220
221
        #ifndef NDEBUG
          #define DEBUG
222
        #endif
223
224
225
226
    #endif

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

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

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


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

Jan Möbius's avatar
Jan Möbius committed
251
252
253
254
255
256
257
258
  // 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
259
260
  // Set the Path to the Icons
  tempDir = QDir(OpenFlipper::Options::applicationDir());
261
262
263
  #ifdef OPENFLIPPER_DATADIR
    tempDir.cd(OPENFLIPPER_DATADIR);
  #endif
Jan Möbius's avatar
   
Jan Möbius committed
264
265
  tempDir.cd("Icons");
  OpenFlipper::Options::iconDir(tempDir.absolutePath());
Jan Möbius's avatar
Jan Möbius committed
266
267
268
269
270
271
272
  
  // 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
273
  OpenFlipper::Options::translationsDir(tempDir.absolutePath());  
Jan Möbius's avatar
Jan Möbius committed
274

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

283
284
285
286
287
288
289
290
  // 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());

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

299
300
301
302
303
304
305
  // 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
306
  QStringList optionFiles;
Jan Möbius's avatar
Jan Möbius committed
307

Jan Möbius's avatar
   
Jan Möbius committed
308
309
310
311
  // ==============================================================
  // 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
312
313
314
  if ( globalIni.exists() )
    optionFiles.push_back(OpenFlipper::Options::applicationDir().absolutePath() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");

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

Jan Möbius's avatar
   
Jan Möbius committed
322
323
  // Set the previously generated Optionfiles
  OpenFlipper::Options::optionFiles(optionFiles);
Jan Möbius's avatar
Jan Möbius committed
324

325
326
327
328
329
330
331
332
333
  // ==============================================================
  // 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
334

Jan Möbius's avatar
   
Jan Möbius committed
335
336
337
  // ==============================================================
  // Load Application options from all files available
  // ==============================================================
Jan Möbius's avatar
Jan Möbius committed
338

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

Jan Möbius's avatar
   
Jan Möbius committed
341
    INIFile _ini;
Jan Möbius's avatar
Jan Möbius committed
342

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

Jan Möbius's avatar
   
Jan Möbius committed
348
    readApplicationOptions(_ini);
Jan Möbius's avatar
Jan Möbius committed
349

Jan Möbius's avatar
   
Jan Möbius committed
350
351
    _ini.disconnect();
  }
Jan Möbius's avatar
Jan Möbius committed
352

Jan Möbius's avatar
   
Jan Möbius committed
353
354
}

355
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
390
391
392
393
394
395
396
397
/// 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) ) {
      emit log(LOGERR,"Failed to connect to _ini file" + optionFiles[i]);
      continue;
    }

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

    _ini.disconnect();
  }
}

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