ParseIni.cc 35.1 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79




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


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

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

#include <OpenFlipper/INIFile/INIFile.hh>
#include <OpenFlipper/common/GlobalOptions.hh>
#include <OpenFlipper/common/RecentFiles.hh>

#include <OpenFlipper/BasePlugin/PluginFunctions.hh>

#include <QFile>

#include <OpenFlipper/ACGHelper/DrawModeConverter.hh>

//== IMPLEMENTATION ==========================================================


/** Load the standard options from the given Ini File
* @param _ini Inifile to use
*/
void Core::readApplicationOptions(INIFile& _ini) {
  // Parse standard options
  if ( _ini.section_exists("Options") ) {

80
81
    // TODO: Load View Mode Toolbars and Context Menu Items
    
Jan Möbius's avatar
 
Jan Möbius committed
82
83
84
85
86
87
88
89
90
    // load ViewModes
    int viewModeCount;
    if (_ini.get_entry(viewModeCount,"Options","ViewModeCount") )
      for (int i=0; i < viewModeCount; i++){
        QString entry;
        QString key = "ViewMode" + QString::number(i);

        if ( !_ini.get_entry( entry , "Options" , key ) ) continue;

91
        QStringList widgets = entry.split(";");
Jan Möbius's avatar
 
Jan Möbius committed
92
93
94
95
96
97
98
99
100
101
102
        QString mode = widgets.first();
        widgets.removeFirst();

        bool found = false;
        for (int i=0; i < viewModes_.size(); i++)
          if (viewModes_[i]->name == mode)
            found = true;
        if (!found){
          ViewMode* vm = new ViewMode();
          vm->name = mode;
          vm->custom = true;
Jan Möbius's avatar
Jan Möbius committed
103
          vm->visibleToolboxes = widgets;
Jan Möbius's avatar
 
Jan Möbius committed
104
105
106
107
108
109
110
111
112
          viewModes_.push_back(vm);
        }

      }

    //load default dataType
    QString type;
    if (_ini.get_entry(type, "Options" , "default_DataType" ))
      OpenFlipper::Options::lastDataType(type);
Jan Möbius's avatar
Jan Möbius committed
113

Jan Möbius's avatar
 
Jan Möbius committed
114
115
116
117
118
119
120
121
122
123
124
125
126
127
    //============================================================================
    // Splash Screen
    //============================================================================
    bool splash;
    if( _ini.get_entry(splash, "Options", "Splash") )
      OpenFlipper::Options::splash(splash);

    //============================================================================
    // Load the startup dir for file dialogs
    //============================================================================
    QString startup_dir;
    if( _ini.get_entry(startup_dir, "Options", "StartupDir") )
      OpenFlipper::Options::currentDir(startup_dir);

Dirk Wilden's avatar
Dirk Wilden committed
128
129
130
131
    //============================================================================
    // Load the default script directory
    //============================================================================
    QString script_dir;
132
    if( _ini.get_entry(script_dir, "Options", "CurrentScriptDir") )
Dirk Wilden's avatar
Dirk Wilden committed
133
134
      OpenFlipper::Options::currentScriptDir(script_dir);

135
136
137
138
139
140
141
    //============================================================================
    // Load the default texture directory
    //============================================================================
    QString current_texture_dir;
    if( _ini.get_entry(current_texture_dir, "Options", "CurrentTextureDir") )
      OpenFlipper::Options::currentTextureDir(current_texture_dir);

Jan Möbius's avatar
 
Jan Möbius committed
142
143
144
    //============================================================================
    // Load the random base color setting
    //============================================================================
145
146
147
    bool random_base_color = false;
    if ( _ini.get_entry( random_base_color, "Options" , "RandomBaseColor") )
      OpenFlipper::Options::randomBaseColor( random_base_color );
Jan Möbius's avatar
 
Jan Möbius committed
148

Dirk Wilden's avatar
   
Dirk Wilden committed
149
150
151
152
153
154
155
    //============================================================================
    // Load the synchronization setting
    //============================================================================
    bool synchronization = false;
    if ( _ini.get_entry( synchronization, "Options" , "Synchronization") )
      OpenFlipper::Options::synchronization(synchronization);

Jan Möbius's avatar
 
Jan Möbius committed
156
157
158
    //============================================================================
    // Load the stereo mode setting
    //============================================================================
Jan Möbius's avatar
Jan Möbius committed
159
160
161
    //bool stereo = false;
    //if ( _ini.get_entry( stereo, "Options" , "Stereo") )
    //  OpenFlipper::Options::stereo(stereo);
Jan Möbius's avatar
 
Jan Möbius committed
162

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
163
164
165
166
167
168
169
    //============================================================================
    // Load the stereo mode setting
    //============================================================================
    int stereoMode = 0;
    if ( _ini.get_entry( stereoMode, "Options" , "StereoMode") )
      OpenFlipper::Options::stereoMode(static_cast<OpenFlipper::Options::StereoMode> (stereoMode));

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
170
171
172
173
174
175
176
177
178
179
    //============================================================================
    // Load stereo view settings
    //============================================================================

    float val;
    if ( _ini.get_entry( val, "Options" , "EyeDistance") )
      OpenFlipper::Options::eyeDistance(val);
    if ( _ini.get_entry( val, "Options" , "FocalDistance") )
      OpenFlipper::Options::focalDistance(val);

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
    //============================================================================
    // Load the custom anaglyph stereo mode color matrices
    //============================================================================
    std::vector<float> mat;
    if ( _ini.get_entry( mat, "Options" , "CustomAnaglyphLeftEye") && mat.size () == 9)
    {
      OpenFlipper::Options::anaglyphLeftEyeColorMatrix(mat);
    }
    else
    {
      std::vector<float> set (9,0.0);
      set[0] = 0.299;
      set[3] = 0.587;
      set[6] = 0.114;
      OpenFlipper::Options::anaglyphLeftEyeColorMatrix(set);
    }

    if ( _ini.get_entry( mat, "Options" , "CustomAnaglyphRightEye") && mat.size () == 9)
    {
      OpenFlipper::Options::anaglyphRightEyeColorMatrix(mat);
    }
    else
    {
      std::vector<float> set (9,0.0);
      set[4] = 1.0;
      set[8] = 1.0;
      OpenFlipper::Options::anaglyphRightEyeColorMatrix(set);
    }

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
209
210
211
212
213
214
215
216
217
218
219
220
221
222
    //============================================================================
    // Load stereo mouse picking behavior
    //============================================================================
    bool stereoMousePick = false;
    if ( _ini.get_entry( stereoMousePick, "Options" , "StereoMousePick") )
      OpenFlipper::Options::stereoMousePick(stereoMousePick);

    //============================================================================
    // Load gl mouse painting behavior
    //============================================================================
    bool glMouse = false;
    if ( _ini.get_entry( glMouse, "Options" , "GlMouse") )
      OpenFlipper::Options::glMouse(glMouse);

Jan Möbius's avatar
 
Jan Möbius committed
223
224
225
    //============================================================================
    // Load the setting for the loger window
    //============================================================================
Jan Möbius's avatar
Jan Möbius committed
226
227
228
    int loggerState = 0;
    if ( _ini.get_entry( loggerState, "Options" , "LoggerState") )
      OpenFlipper::Options::loggerState(static_cast<OpenFlipper::Options::LoggerState> (loggerState));
Jan Möbius's avatar
 
Jan Möbius committed
229

230
231
232
233
234
235
236
    //============================================================================
    // Load the setting for the toolbox window
    //============================================================================
    bool hideToolbox = false;
    if ( _ini.get_entry( hideToolbox, "Options" , "HideToolbox") )
      OpenFlipper::Options::hideToolbox(hideToolbox);

Jan Möbius's avatar
 
Jan Möbius committed
237
238
239
240
241
242
243
    //============================================================================
    // Load the setting for the fullscreen option
    //============================================================================
    bool fullScreen = false;
    if ( _ini.get_entry( fullScreen, "Options" , "FullScreen") )
      OpenFlipper::Options::fullScreen(fullScreen);

244
    //============================================================================
245
    // Load the setting for the background color option
246
247
248
    //============================================================================
    uint backgroundColor = 0;
    if ( _ini.get_entry( backgroundColor, "Options" , "DefaultBackgroundColor") )
249
      OpenFlipper::Options::defaultBackgroundColor(QRgb(backgroundColor));
250

251
252
253
254
255
256
257
    //============================================================================
    // Load the setting for the object color option
    //============================================================================
    uint baseColor = 0;
    if ( _ini.get_entry( baseColor, "Options" , "DefaultBaseColor") )
      OpenFlipper::Options::defaultBaseColor(QRgb(baseColor));

Jan Möbius's avatar
 
Jan Möbius committed
258
259
260
261
262
263
264
    //============================================================================
    // Load the setting for the default Toolbox mode
    //============================================================================
    QString toolboxMode = false;
    if ( _ini.get_entry( toolboxMode, "Options" , "DefaultToolboxMode") )
      OpenFlipper::Options::defaultToolboxMode(toolboxMode);

265
266
267
268
269
270
271
    //============================================================================
    // Load the setting for the translation language
    //============================================================================
    QString translation = false;
    if ( _ini.get_entry( translation, "Options" , "Translation") )
      OpenFlipper::Options::translation(translation);

272
273
274
275
276
277
278
    //============================================================================
    // Load the setting for the gridVisibility
    //============================================================================
    bool visible = false;
    if ( _ini.get_entry( visible, "Options" , "GridVisible") )
      OpenFlipper::Options::gridVisible(visible);

279
280
281
282
283
284
285
    //============================================================================
    // Load the setting for the viewer layout
    //============================================================================
    int viewerLayout = 0;
    if ( _ini.get_entry( viewerLayout, "Options" , "DefaultViewerLayout") )
      OpenFlipper::Options::defaultViewerLayout(viewerLayout);

Jan Möbius's avatar
 
Jan Möbius committed
286
    //============================================================================
287
    // Load the viewer settings
Jan Möbius's avatar
 
Jan Möbius committed
288
289
    //============================================================================
    std::vector< QString > draw_modes;
290
291
292
293
294
    int mode;

    for (int i=0; i < 4/*PluginFunctions::viewers()*/; i++ ){

      if( _ini.get_entry(draw_modes, "Options", "DefaultDrawModes" + QString::number(i) ) )
295
        OpenFlipper::Options::defaultDrawMode( ListToDrawMode(draw_modes), i );
296
297

      if( _ini.get_entry(mode, "Options", "DefaultProjectionMode" + QString::number(i) ) )
298
        OpenFlipper::Options::defaultProjectionMode( mode, i );
299
300

      if( _ini.get_entry(mode, "Options", "DefaultViewingDirection" + QString::number(i) ) )
301
        OpenFlipper::Options::defaultViewingDirection( mode, i );
302
    }
Dirk Wilden's avatar
Dirk Wilden committed
303
304
305
306
307
308
309
310
311
312
313
314
315
316

    //============================================================================
    // Load logFile status
    //============================================================================
    bool logFileEnabled = true;
    if( _ini.get_entry(logFileEnabled, "Options", "LogFileEnabled") )
      OpenFlipper::Options::logFileEnabled(logFileEnabled);

    //============================================================================
    // Load logFile location
    //============================================================================
    QString logFile = "";
    if( _ini.get_entry(logFile, "Options", "LogFileLocation") )
      OpenFlipper::Options::logFile(logFile);
317

Dirk Wilden's avatar
Dirk Wilden committed
318
319
320
321
322
323
324
325
326
327
328
329
330
331
    //============================================================================
    // Load the WheelZoomFactor setting
    //============================================================================
    double wheelZoomFactor = 1.0;
    if ( _ini.get_entry( wheelZoomFactor, "Options" , "WheelZoomFactor") )
      OpenFlipper::Options::wheelZoomFactor(wheelZoomFactor);

    //============================================================================
    // Load the WheelZoomFactorShift setting
    //============================================================================
    double wheelZoomFactorShift = 0.2;
    if ( _ini.get_entry( wheelZoomFactorShift, "Options" , "WheelZoomFactorShift" ) )
      OpenFlipper::Options::wheelZoomFactorShift(wheelZoomFactorShift);

332
333
334
335
336
337
338
    //============================================================================
    // Load restrictFrameRate
    //============================================================================
    bool restrictFrameRate = false;
    if( _ini.get_entry(restrictFrameRate, "Options", "RestrictFrameRate") )
      OpenFlipper::Options::restrictFrameRate(restrictFrameRate);

339
340
341
342
343
344
345
    //============================================================================
    // Load showWheelsAtStartup
    //============================================================================
    bool showWheelsAtStartup = false;
    if( _ini.get_entry(showWheelsAtStartup, "Options", "ShowWheelsAtStartup") )
      OpenFlipper::Options::showWheelsAtStartup(showWheelsAtStartup);

346
347
348
349
350
351
    //============================================================================
    // Load maxFrameRate
    //============================================================================
    int maxFrameRate = 35;
    if( _ini.get_entry(maxFrameRate, "Options", "MaxFrameRate") )
      OpenFlipper::Options::maxFrameRate(maxFrameRate);
Jan Möbius's avatar
Jan Möbius committed
352
353
354
355
356
357
358
359

    //============================================================================
    // Load slotDebugging state
    //============================================================================
    bool doSlotDebugging = false;
    if( _ini.get_entry(doSlotDebugging, "Options", "SlotDebugging") )
      OpenFlipper::Options::doSlotDebugging(doSlotDebugging);

360
361
362
363
364
365
366
367
368
369
370
    //============================================================================
    // Load Picking debugger state
    //============================================================================
    bool renderPicking = false;
    if( _ini.get_entry(renderPicking, "Options", "RenderPicking") )
      OpenFlipper::Options::renderPicking(renderPicking);

    QString pickingRenderMode = "";
    if( _ini.get_entry(renderPicking, "Options", "PickingRenderMode") )
      OpenFlipper::Options::pickingRenderMode(pickingRenderMode);

Dirk Wilden's avatar
Dirk Wilden committed
371
372
373
374
375
376
377
378
    //============================================================================
    // ViewerProperties
    //============================================================================

    bool multiView = false;
    if( _ini.get_entry(multiView, "Options", "MultiView") )
      OpenFlipper::Options::multiView(multiView);

Dirk Wilden's avatar
Dirk Wilden committed
379
    uint viewerCount = 0;
Dirk Wilden's avatar
Dirk Wilden committed
380
381
382
    if( _ini.get_entry(viewerCount, "Options", "ViewerCount") ){
    }

Dirk Wilden's avatar
Dirk Wilden committed
383
384
    if ( _ini.section_exists("ViewerProperties") ){
      for ( unsigned int i = 0 ; i < viewerCount; ++i ) {
Jan Möbius's avatar
Jan Möbius committed
385

Dirk Wilden's avatar
Dirk Wilden committed
386
387
        if (OpenFlipper::Options::examinerWidgets() < i)
          break;
Jan Möbius's avatar
Jan Möbius committed
388

Dirk Wilden's avatar
Dirk Wilden committed
389
390
391
392
        // Load the animation setting
        bool animation = false;
        if ( _ini.get_entry( animation, "ViewerProperties" , "Animation" + QString::number(i) ) )
          PluginFunctions::viewerProperties(i).animation(animation);
Jan Möbius's avatar
Jan Möbius committed
393

Dirk Wilden's avatar
Dirk Wilden committed
394
395
396
397
        // Load the twoSidedLighting setting
        bool twoSidedLighting = false;
        if ( _ini.get_entry( twoSidedLighting, "ViewerProperties" , "TwoSidedLighting" + QString::number(i)) )
          PluginFunctions::viewerProperties(i).twoSidedLighting(twoSidedLighting);
Jan Möbius's avatar
Jan Möbius committed
398

Dirk Wilden's avatar
Dirk Wilden committed
399
400
401
402
        // Load the backface culling setting
        bool backface_culling = false;
        if ( _ini.get_entry( backface_culling, "ViewerProperties" , "BackfaceCulling" + QString::number(i)) )
          PluginFunctions::viewerProperties(i).backFaceCulling(backface_culling);
Jan Möbius's avatar
Jan Möbius committed
403

Dirk Wilden's avatar
Dirk Wilden committed
404
405
406
407
408
409
        // Load the setting for the background color option
        uint viewerBackground = 0;
        if ( _ini.get_entry( viewerBackground, "ViewerProperties" , "BackgroundColor" + QString::number(i)) )
          PluginFunctions::viewerProperties(i).backgroundColor( QRgb(viewerBackground) );
      }
    }
Dirk Wilden's avatar
Dirk Wilden committed
410

Dirk Wilden's avatar
Dirk Wilden committed
411
412
413
414
415
416
    //============================================================================
    // Update information
    //============================================================================
    QString updateUrl = "";
    if( _ini.get_entry(updateUrl, "Options", "UpdateURL") )
      OpenFlipper::Options::updateUrl(updateUrl);
Dirk Wilden's avatar
Dirk Wilden committed
417

Dirk Wilden's avatar
Dirk Wilden committed
418
419
420
    QString updateUsername = "";
    if( _ini.get_entry(updateUsername, "Options", "UpdateUsername") )
      OpenFlipper::Options::updateUsername(updateUsername);
Dirk Wilden's avatar
Dirk Wilden committed
421

Dirk Wilden's avatar
Dirk Wilden committed
422
423
424
    QString updatePassword = "";
    if( _ini.get_entry(updatePassword, "Options", "UpdatePassword") )
      OpenFlipper::Options::updatePassword(updatePassword);
Jan Möbius's avatar
 
Jan Möbius committed
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
453
454
455
456
457
458
459
460
461
462
463
464
465
466
void Core::readRecentFiles(QString _filename){

  INIFile ini;

  if ( ! ini.connect(_filename,false) ) {
    emit log(LOGERR,"Failed to connect to ini file" + _filename);
    return;
  }

  OpenFlipper::Options::loadingSettings(true);

  // Load maxRecent Setting
  int mrecent = 6;
  if (ini.get_entry(mrecent,"Options","MaxRecent"))
    OpenFlipper::Options::maxRecent(mrecent);

  for ( int j = mrecent-1 ; j >= 0; --j) {
    QString file;
    QString key = "recent" + QString::number(j);

    if ( !ini.get_entry( file , "Options" , key ) )
      continue;

    key = "type" + QString::number(j);
    QString type;

    if ( !ini.get_entry( type , "Options" , key ) )
      continue;

    OpenFlipper::Options::addRecentFile(file, typeId(type) );
  }

  ini.disconnect();

  OpenFlipper::Options::loadingSettings(false);

}


Dirk Wilden's avatar
Dirk Wilden committed
467
/** Write the standard options to the given Ini File
Jan Möbius's avatar
 
Jan Möbius committed
468
469
* @param _ini Inifile to use
*/
Dirk Wilden's avatar
Dirk Wilden committed
470
void Core::writeApplicationOptions(INIFile& _ini) {
Jan Möbius's avatar
 
Jan Möbius committed
471
472
473
474
475
476
477
478
479
480
481
482
483

  // Write maximum recent file count to ini
  _ini.add_entry("Options","MaxRecent",OpenFlipper::Options::maxRecent());

  // Write list of recent files to ini
  QVector< OpenFlipper::Options::RecentFile > recentFiles = OpenFlipper::Options::recentFiles();
  for ( int j = 0 ; j < recentFiles.size(); ++j) {
    // Save filename
    QString key = "recent" + QString::number(j);
    QString filename = recentFiles[j].filename;
    _ini.add_entry( "Options" , key , filename );
    // Save DataType
    key = "type" + QString::number(j);
484
    QString type = typeName( recentFiles[j].type );
Jan Möbius's avatar
 
Jan Möbius committed
485
486
487
    _ini.add_entry( "Options" , key , type );
  }

488
  // TODO: Save View Mode Toolbars and Context Menu Items
Jan Möbius's avatar
 
Jan Möbius committed
489
490
491
492
493
494
495
496
497
498
  // save ViewModes
  QVector< QString > entries;
  if ( OpenFlipper::Options::gui() )
    for (int i=0; i < coreWidget_->viewModes_.size(); i++)
      if (coreWidget_->viewModes_[i]->custom){

        //store name
        QString entry = coreWidget_->viewModes_[i]->name;

        //store widgets
Jan Möbius's avatar
Jan Möbius committed
499
500
        for (int j=0; j < coreWidget_->viewModes_[i]->visibleToolboxes.size(); j++)
          entry += ";" + coreWidget_->viewModes_[i]->visibleToolboxes[j];
Jan Möbius's avatar
 
Jan Möbius committed
501
502
503
504
505
506
507
508
509

        entries.push_back(entry);
      }

  //save viewmodes to ini
  _ini.add_entry("Options","ViewModeCount" ,entries.size());
  for (int i=0; i < entries.size(); i++)
    _ini.add_entry("Options","ViewMode" + QString::number(i) ,entries[i]);

510
511
512
513
  //save KeyBindings
  if ( OpenFlipper::Options::gui() )
    coreWidget_->saveKeyBindings(_ini);

Jan Möbius's avatar
 
Jan Möbius committed
514
515
516
517
  //============================================================================
  // Splash Screen
  //============================================================================
  _ini.add_entry( "Options" , "Splash" , OpenFlipper::Options::splash() );
Jan Möbius's avatar
Jan Möbius committed
518

Jan Möbius's avatar
 
Jan Möbius committed
519
520
521
522
523
524
  //write default dataType to INI
  _ini.add_entry( "Options" , "default_DataType" , OpenFlipper::Options::lastDataType() );

  //write default ToolboxMode
  _ini.add_entry("Options","DefaultToolboxMode",OpenFlipper::Options::defaultToolboxMode() );

Dirk Wilden's avatar
Dirk Wilden committed
525
526
527
528
529
530
531
  //============================================================================
  // logfile
  //============================================================================
  //write logfile status
  _ini.add_entry("Options","LogFileEnabled",OpenFlipper::Options::logFileEnabled() );
  //write logfile location
  _ini.add_entry("Options","LogFileLocation",OpenFlipper::Options::logFile() );
Jan Möbius's avatar
 
Jan Möbius committed
532

533
534
535
  //============================================================================
  // other
  //============================================================================
Dirk Wilden's avatar
Dirk Wilden committed
536
537
  _ini.add_entry("Options","WheelZoomFactor", OpenFlipper::Options::wheelZoomFactor() );
  _ini.add_entry("Options","WheelZoomFactorShift", OpenFlipper::Options::wheelZoomFactorShift() );
538
539
  // restrict Framerate
  _ini.add_entry("Options","RestrictFrameRate",OpenFlipper::Options::restrictFrameRate() );
540
541
  // Show wheels on startup
  _ini.add_entry("Options","ShowWheelsAtStartup",OpenFlipper::Options::showWheelsAtStartup() );
542
543
544
  // max Framerate
  _ini.add_entry("Options","MaxFrameRate",OpenFlipper::Options::maxFrameRate() );

Jan Möbius's avatar
Jan Möbius committed
545
546
547
548
549
  //============================================================================
  // Debugging
  //============================================================================
  _ini.add_entry("Options","SlotDebugging",OpenFlipper::Options::doSlotDebugging() );

550
551
552
553
554
555
  //============================================================================
  // Write Picking debugger state
  //============================================================================
  _ini.add_entry("Options","RenderPicking",OpenFlipper::Options::renderPicking() );
  _ini.add_entry("Options","PickingRenderMode",OpenFlipper::Options::pickingRenderMode() );

556
557
558
559
560
561
562
  //============================================================================
  // Update information
  //============================================================================
  _ini.add_entry("Options","UpdateURL",OpenFlipper::Options::updateUrl() );
  _ini.add_entry("Options","UpdateUsername",OpenFlipper::Options::updateUsername() );
  _ini.add_entry("Options","UpdatePassword",OpenFlipper::Options::updatePassword() );

Jan Möbius's avatar
 
Jan Möbius committed
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
  //============================================================================
  //dontLoad Plugins
  //============================================================================
  QString dontLoad;
  for (int i=0; i < dontLoadPlugins_.size(); i++)
    if (!dontLoad.contains(dontLoadPlugins_[i].trimmed() + ";"))
      dontLoad += dontLoadPlugins_[i].trimmed() + ";";

  if ( !_ini.section_exists("Plugins") )
    _ini.add_section("Plugins");

  //write dontLoad Plugins
  _ini.add_entry("Plugins","DontLoad", dontLoad);



  if ( !_ini.section_exists("Options") )
    _ini.add_section("Options");

  QString dir = OpenFlipper::Options::currentDirStr().toUtf8();
  _ini.add_entry("Options","StartupDir",dir);
Dirk Wilden's avatar
Dirk Wilden committed
584
585

  QString scriptDir = OpenFlipper::Options::currentScriptDirStr().toUtf8();
586
587
588
589
  _ini.add_entry("Options","CurrentScriptDir",scriptDir);

  QString current_texture_dir = OpenFlipper::Options::currentTextureDirStr().toUtf8();
  _ini.add_entry("Options","CurrentTextureDir",current_texture_dir);
Dirk Wilden's avatar
Dirk Wilden committed
590

591
  _ini.add_entry("Options","RandomBaseColor", OpenFlipper::Options::randomBaseColor() );
Jan Möbius's avatar
 
Jan Möbius committed
592
593
594

  if ( OpenFlipper::Options::gui() ) {

595
596
    _ini.add_entry("Options","DefaultViewerLayout", OpenFlipper::Options::defaultViewerLayout() );
    _ini.add_entry("Options","Translation", OpenFlipper::Options::translation() );
597
    _ini.add_entry("Options","GridVisible", OpenFlipper::Options::gridVisible() );
598

Dirk Wilden's avatar
Dirk Wilden committed
599
600
    _ini.add_entry("Options","MultiView", OpenFlipper::Options::multiView() );
    _ini.add_entry("Options","ViewerCount", OpenFlipper::Options::examinerWidgets() );
Jan Möbius's avatar
Jan Möbius committed
601

Dirk Wilden's avatar
Dirk Wilden committed
602
603
    if ( !_ini.section_exists("ViewerProperties") )
      _ini.add_section("ViewerProperties");
Jan Möbius's avatar
 
Jan Möbius committed
604

Dirk Wilden's avatar
Dirk Wilden committed
605
    for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets(); ++i ) {
Dirk Wilden's avatar
Dirk Wilden committed
606

Dirk Wilden's avatar
Dirk Wilden committed
607
608
609
610
611
612
      _ini.add_entry("ViewerProperties","Animation" + QString::number(i),       PluginFunctions::viewerProperties(i).animation());
      _ini.add_entry("ViewerProperties","BackfaceCulling" + QString::number(i), PluginFunctions::viewerProperties(i).backFaceCulling());
      _ini.add_entry("ViewerProperties","TwoSidedLighting" + QString::number(i),PluginFunctions::viewerProperties(i).twoSidedLighting());
      _ini.add_entry("ViewerProperties","BackgroundColor" + QString::number(i),
                     (uint)PluginFunctions::viewerProperties(i).backgroundColorRgb() );
    }
Jan Möbius's avatar
 
Jan Möbius committed
613
    //============================================================================
614
    // Save the current viewer properties
Jan Möbius's avatar
 
Jan Möbius committed
615
616
    //============================================================================
    std::vector< QString > draw_modes;
617
618
619
620
621
622
623
624
625
626
    int mode;

    for (int i=0; i < PluginFunctions::viewers(); i++ ){

      draw_modes = drawModeToList( OpenFlipper::Options::defaultDrawMode(i) );
      _ini.add_entry("Options","DefaultDrawModes" + QString::number(i), draw_modes);

      _ini.add_entry("Options","DefaultProjectionMode" + QString::number(i), OpenFlipper::Options::defaultProjectionMode(i) );
      _ini.add_entry("Options","DefaultViewingDirection" + QString::number(i), OpenFlipper::Options::defaultViewingDirection(i) );
    }
627

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

Jan Möbius's avatar
Jan Möbius committed
629
    _ini.add_entry("Options","LoggerState", OpenFlipper::Options::loggerState() );
630
    _ini.add_entry("Options","HideToolbox", OpenFlipper::Options::hideToolbox() );
Jan Möbius's avatar
 
Jan Möbius committed
631
632

    // check if we are in fullscreen mode:
633
    _ini.add_entry("Options","FullScreen", OpenFlipper::Options::fullScreen() );
634

635
    _ini.add_entry("Options","DefaultBackgroundColor", (uint)OpenFlipper::Options::defaultBackgroundColor().rgba ()  );
636
    _ini.add_entry("Options","DefaultBaseColor", (uint)OpenFlipper::Options::defaultBaseColor().rgba ()  );
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
637
638
639

    _ini.add_entry("Options","StereoMode",OpenFlipper::Options::stereoMode() );

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
640
641
642
    _ini.add_entry("Options" , "EyeDistance", OpenFlipper::Options::eyeDistance());
    _ini.add_entry("Options" , "FocalDistance", OpenFlipper::Options::focalDistance());

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
643
644
    _ini.add_entry("Options" , "CustomAnaglyphLeftEye", OpenFlipper::Options::anaglyphLeftEyeColorMatrix() );
    _ini.add_entry("Options" , "CustomAnaglyphRightEye", OpenFlipper::Options::anaglyphRightEyeColorMatrix() );
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
645
646
647
648

    _ini.add_entry("Options", "StereoMousePick", OpenFlipper::Options::stereoMousePick() );

    _ini.add_entry("Options", "GlMouse", OpenFlipper::Options::glMouse() );
Jan Möbius's avatar
 
Jan Möbius committed
649
650
  }

651
652
  emit saveOnExit(_ini);

Jan Möbius's avatar
Jan Möbius committed
653
  // _ini.add_entry("Options","Stereo",OpenFlipper::Options::stereo() );
Jan Möbius's avatar
 
Jan Möbius committed
654
655
}

656
657
658
659
void Core::openIniFile( QString _filename,
                        bool    _coreSettings,
                        bool    _perPluginSettings,
                        bool    _loadObjects ){
Jan Möbius's avatar
 
Jan Möbius committed
660
661
662
  INIFile ini;

  if ( ! ini.connect(_filename,false) ) {
663
    emit log(LOGERR,tr("Failed to connect to ini file") + _filename);
Jan Möbius's avatar
 
Jan Möbius committed
664
665
    return;
  }
Jan Möbius's avatar
Jan Möbius committed
666

Jan Möbius's avatar
 
Jan Möbius committed
667
  if ( OpenFlipper::Options::gui() ) {
668
    coreWidget_->statusMessage( tr("Loading ini File ") + _filename + " ...");
Jan Möbius's avatar
 
Jan Möbius committed
669
670
671
    coreWidget_->setStatus(ApplicationStatus::BLOCKED );
  }

672
  OpenFlipper::Options::loadingSettings(true);
Jan Möbius's avatar
 
Jan Möbius committed
673

674
675
676
  // Load Core settings only if requested
  if ( _coreSettings )
    readApplicationOptions(ini);
Jan Möbius's avatar
 
Jan Möbius committed
677

678
679
680
  // if requested load per Plugin settings from the settings file
  if ( _perPluginSettings )
    emit iniLoadOptions( ini );
Jan Möbius's avatar
 
Jan Möbius committed
681

682
  if ( _loadObjects ) {
Jan Möbius's avatar
 
Jan Möbius committed
683

684
    QStringList openFiles;
Jan Möbius's avatar
 
Jan Möbius committed
685

686
687
    // Parse File section for files to open
    if ( ini.section_exists("OpenFiles") && ini.get_entry(openFiles,"OpenFiles","open") ) {
Jan Möbius's avatar
 
Jan Möbius committed
688

689
      bool newActiveObject = false;
Jan Möbius's avatar
 
Jan Möbius committed
690

691
      for ( int i = 0 ; i < openFiles.size(); ++i ) {
Jan Möbius's avatar
 
Jan Möbius committed
692

693
694
695
696
697
698
699
700
701
702
703
704
        QString sectionName = openFiles[i];

        QString path;
        ini.get_entry( path, sectionName , "path" );

        //check if path is relative
        if (path.startsWith( "." + OpenFlipper::Options::dirSeparator() )){
          //check if _filename contains a path
          if (_filename.section(OpenFlipper::Options::dirSeparator(), 0, -2) != ""){
            path.remove(0,1); // remove .
            path = _filename.section(OpenFlipper::Options::dirSeparator(), 0, -2) + path;
          }
Jan Möbius's avatar
 
Jan Möbius committed
705
706
        }

707
708
        int tmpType;
        DataType type = DATA_TRIANGLE_MESH;
709

710
711
        if ( ini.get_entry( tmpType, sectionName , "type"  )) {
          type = DataType(tmpType);
712
713
          emit log(LOGWARN, tr("This ini file uses old int style ObjectType fields!") );
          emit log(LOGWARN, tr("Please convert it to new format! ( ... just save it )") );
714
        } else {
715

716
          QString typeName="";
717

718
719
720
          if ( ini.get_entry( typeName, sectionName , "type"  )) {
            type = typeId(typeName);
          } else
721
            emit log(LOGWARN, tr("Unable to get DataType for object ") +  sectionName + tr(" assuming Triangle Mesh") );
722
        }
Jan Möbius's avatar
 
Jan Möbius committed
723

724
        int newObjectId = loadObject(type, path);
Jan Möbius's avatar
 
Jan Möbius committed
725

726
727
        BaseObject* object = objectRoot_->childExists( newObjectId );
        if ( object == 0 )  {
728
          emit log(LOGERR,tr("Unable to open Object ") + path);
729
730
731
732
          continue;
        }

        bool flag;
733
        if ( ini.get_entry( flag, sectionName , "target" ) )
734
735
736
737
          object->target(flag);

        if ( ini.get_entry( flag, sectionName , "source" ) )
          object->source(flag);
Jan Möbius's avatar
 
Jan Möbius committed
738

739
        emit iniLoad( ini,object->id() );
Jan Möbius's avatar
 
Jan Möbius committed
740

741
742
        emit objectSelectionChanged( object->id() );
      }
Jan Möbius's avatar
 
Jan Möbius committed
743
744
745
746
    }

  }

747
  // Tell Plugins that all objects are
748
  if ( _perPluginSettings )
749
    emit iniLoadOptionsLast( ini );
Jan Möbius's avatar
 
Jan Möbius committed
750
751
752

  ini.disconnect();

753
  OpenFlipper::Options::loadingSettings(false);
Jan Möbius's avatar
 
Jan Möbius committed
754

755
756
  // Reset scenegraph and recompute scene center containing all new objects
  resetScenegraph(true);
Jan Möbius's avatar
Jan Möbius committed
757

Dirk Wilden's avatar
Dirk Wilden committed
758
759
  if ( OpenFlipper::Options::gui() ){
    for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
760
      PluginFunctions::viewerProperties(i).drawMode( OpenFlipper::Options::defaultDrawMode(i) );
Dirk Wilden's avatar
Dirk Wilden committed
761
762
      coreWidget_->examiner_widgets_[i]->viewAll();
    }
Jan Möbius's avatar
Jan Möbius committed
763

764
    coreWidget_->statusMessage( tr("Loading ini File ") + _filename + tr(" ... Done"), 4000);
Jan Möbius's avatar
 
Jan Möbius committed
765
766
767
768
769
    coreWidget_->setStatus(ApplicationStatus::READY );
  }

}

770
771
772
773
774
775
void Core::writeIniFile(QString _filename,
                        bool _relativePaths,
                        bool _targetOnly,
                        bool _saveSystemSettings,
                        bool _savePluginSettings ,
                        bool _saveObjectInfo ) {
Jan Möbius's avatar
Jan Möbius committed
776

Jan Möbius's avatar
 
Jan Möbius committed
777
778
779
  INIFile ini;

  if ( ! ini.connect(_filename,true) ) {
780
    emit log(LOGERR,tr("Failed to connect to _ini file") + _filename);
Jan Möbius's avatar
 
Jan Möbius committed
781
782
      return;
  }
Jan Möbius's avatar
Jan Möbius committed
783

Jan Möbius's avatar
 
Jan Möbius committed
784
  if ( OpenFlipper::Options::gui() ) {
785
    coreWidget_->statusMessage( tr("Saving ini File ") + _filename + " ...");
Jan Möbius's avatar
 
Jan Möbius committed
786
787
788
    coreWidget_->setStatus(ApplicationStatus::BLOCKED );
  }

789
  // Only save application settings when requested
790
  if ( _saveSystemSettings )
791
    writeApplicationOptions(ini);
Jan Möbius's avatar
 
Jan Möbius committed
792

793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
  if ( _savePluginSettings )
    emit iniSaveOptions( ini );

  if ( _saveObjectInfo ) {
    // This vector will hold the file sections to open
    QStringList openFiles;


    PluginFunctions::IteratorRestriction restriction;
    if ( _targetOnly )
      restriction = PluginFunctions::TARGET_OBJECTS;
    else
      restriction = PluginFunctions::ALL_OBJECTS;

    QString keyName;
    QString sectionName;
    for ( PluginFunctions::ObjectIterator o_it(restriction) ;
Jan Möbius's avatar
   
Jan Möbius committed
810
                                          o_it != PluginFunctions::objectsEnd(); ++o_it) {
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
      QString file = o_it->path() + OpenFlipper::Options::dirSeparator() + o_it->name();
      if (QFile(file).exists()){
        // Add a section for this object
        sectionName = o_it->name();
        ini.add_section( sectionName );
        openFiles.push_back( sectionName );

        //modify filename if relativePaths are wanted
        if (_relativePaths){
          int prefixLen = _filename.section(OpenFlipper::Options::dirSeparator(),0,-2).length();
          file.remove(0, prefixLen);
          file = "." + file;
        }
        // Add the path of this object to the section
        ini.add_entry( sectionName , "path" , file );
        ini.add_entry( sectionName , "type" , typeName(o_it->dataType() ) );
        ini.add_entry( sectionName , "target" , o_it->target() );
        ini.add_entry( sectionName , "source" , o_it->source() );
Jan Möbius's avatar
 
Jan Möbius committed
829

830
      }
Jan Möbius's avatar
 
Jan Möbius committed
831
832
    }

833
    ini.add_entry("OpenFiles","open",openFiles);
Jan Möbius's avatar
 
Jan Möbius committed
834

835
836
    // Tell plugins to save their information for the given object
    for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
Jan Möbius's avatar
   
Jan Möbius committed
837
                                          o_it != PluginFunctions::objectsEnd(); ++o_it)
838
839
      emit iniSave(  ini , o_it->id() );
  }
Jan Möbius's avatar
 
Jan Möbius committed
840
841
842
843



  ini.disconnect();
Jan Möbius's avatar
Jan Möbius committed
844

Jan Möbius's avatar
 
Jan Möbius committed
845
  if ( OpenFlipper::Options::gui() ) {
846
    coreWidget_->statusMessage( tr("Saving ini File ") + _filename + tr(" ... Done"), 4000);
Jan Möbius's avatar
 
Jan Möbius committed
847
848
849
850
851
852
    coreWidget_->setStatus(ApplicationStatus::READY );
  }
}


//=============================================================================