ParseIni.cc 24.6 KB
Newer Older
Jan Möbius's avatar
 
Jan Möbius committed
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
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
80
81
//=============================================================================
//
//                               OpenFlipper
//        Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
//                           www.openflipper.org
//
//-----------------------------------------------------------------------------
//
//                                License
//
//  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.
//
//  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 Lesser General Public License
//  along with OpenFlipper.  If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
//   $Revision$
//   $Author$
//   $Date$
//
//=============================================================================




//=============================================================================
//
//  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") ) {

    // 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);
82
      QString type;
Jan Möbius's avatar
 
Jan Möbius committed
83
84
85
86

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

87
      OpenFlipper::Options::addRecentFile(file, typeId(type) );
Jan Möbius's avatar
 
Jan Möbius committed
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
    }

    // 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;

        QStringList widgets = entry.split(" ");
        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;
          vm->visibleWidgets = widgets;
          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
121

Jan Möbius's avatar
 
Jan Möbius committed
122
123
124
125
126
127
128
129
130
131
132
133
134
135
    //============================================================================
    // 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
136
137
138
139
140
141
142
    //============================================================================
    // Load the default script directory
    //============================================================================
    QString script_dir;
    if( _ini.get_entry(script_dir, "Options", "ScriptDir") )
      OpenFlipper::Options::currentScriptDir(script_dir);

Jan Möbius's avatar
 
Jan Möbius committed
143
144
145
    //============================================================================
    // Load the random base color setting
    //============================================================================
146
147
148
    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
149
150
151
152
153
154
155
156

    //============================================================================
    // Load the backface culling setting
    //============================================================================
    bool backface_culling = false;
    if ( _ini.get_entry( backface_culling, "Options" , "BackfaceCulling") )
      OpenFlipper::Options::backfaceCulling(backface_culling);

Dirk Wilden's avatar
Dirk Wilden committed
157
158
159
160
161
162
163
164
165
166
167
168
169
170
    //============================================================================
    // 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);

Jan Möbius's avatar
 
Jan Möbius committed
171
172
173
174
175
176
177
    //============================================================================
    // Load the animation setting
    //============================================================================
    bool animation = false;
    if ( _ini.get_entry( animation, "Options" , "Animation") )
      OpenFlipper::Options::animation(animation);

Dirk Wilden's avatar
   
Dirk Wilden committed
178
179
180
181
182
183
184
185
186
187
188
189
190
191
    //============================================================================
    // Load the twoSidedLighting setting
    //============================================================================
    bool twoSidedLighting = false;
    if ( _ini.get_entry( twoSidedLighting, "Options" , "TwoSidedLighting") )
      OpenFlipper::Options::twoSidedLighting(twoSidedLighting);

    //============================================================================
    // 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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
    //============================================================================
    // Load the stereo mode setting
    //============================================================================
    bool stereo = false;
    if ( _ini.get_entry( stereo, "Options" , "Stereo") )
      OpenFlipper::Options::stereo(stereo);

    //============================================================================
    // Load the setting for the loger window
    //============================================================================
    bool hideLogger = false;
    if ( _ini.get_entry( hideLogger, "Options" , "HideLogger") )
      OpenFlipper::Options::hideLogger(hideLogger);

206
207
208
209
210
211
212
    //============================================================================
    // 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
213
214
215
216
217
218
219
    //============================================================================
    // Load the setting for the fullscreen option
    //============================================================================
    bool fullScreen = false;
    if ( _ini.get_entry( fullScreen, "Options" , "FullScreen") )
      OpenFlipper::Options::fullScreen(fullScreen);

220
    //============================================================================
221
    // Load the setting for the background color option
222
223
224
    //============================================================================
    uint backgroundColor = 0;
    if ( _ini.get_entry( backgroundColor, "Options" , "DefaultBackgroundColor") )
225
      OpenFlipper::Options::defaultBackgroundColor(QRgb(backgroundColor));
226

227
228
229
230
231
232
233
    //============================================================================
    // 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
234
235
236
237
238
239
240
241
242
243
244
245
    //============================================================================
    // Load the setting for the default Toolbox mode
    //============================================================================
    QString toolboxMode = false;
    if ( _ini.get_entry( toolboxMode, "Options" , "DefaultToolboxMode") )
      OpenFlipper::Options::defaultToolboxMode(toolboxMode);

    //============================================================================
    // Load the drawmodes
    //============================================================================
    std::vector< QString > draw_modes;
    if( _ini.get_entry(draw_modes, "Options", "StandardDrawModes") )
246
      OpenFlipper::Options::standardDrawMode( ListToDrawMode(draw_modes) );
Dirk Wilden's avatar
Dirk Wilden committed
247
248
249
250
251
252
253
254
255
256
257
258
259
260

    //============================================================================
    // 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);
261
262
263
264
265
266
267
268
269
270
271
272
273
274

    //============================================================================
    // Load restrictFrameRate
    //============================================================================
    bool restrictFrameRate = false;
    if( _ini.get_entry(restrictFrameRate, "Options", "RestrictFrameRate") )
      OpenFlipper::Options::restrictFrameRate(restrictFrameRate);

    //============================================================================
    // 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
275
276
277
278
279
280
281
282

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

283
284
285
286
287
288
289
290
291
292
293
    //============================================================================
    // 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);

294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
    //============================================================================
    // Update information
    //============================================================================
    QString updateUrl = "";
    if( _ini.get_entry(updateUrl, "Options", "UpdateURL") )
      OpenFlipper::Options::updateUrl(updateUrl);

    QString updateUsername = "";
    if( _ini.get_entry(updateUsername, "Options", "UpdateUsername") )
      OpenFlipper::Options::updateUsername(updateUsername);

    QString updatePassword = "";
    if( _ini.get_entry(updatePassword, "Options", "UpdatePassword") )
      OpenFlipper::Options::updatePassword(updatePassword);


Jan Möbius's avatar
 
Jan Möbius committed
310
311
312
  }
}

Dirk Wilden's avatar
Dirk Wilden committed
313
/** Write the standard options to the given Ini File
Jan Möbius's avatar
 
Jan Möbius committed
314
315
* @param _ini Inifile to use
*/
Dirk Wilden's avatar
Dirk Wilden committed
316
void Core::writeApplicationOptions(INIFile& _ini) {
Jan Möbius's avatar
 
Jan Möbius committed
317
318
319
320
321
322
323
324
325
326
327
328
329

  // 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);
330
    QString type = typeName( recentFiles[j].type );
Jan Möbius's avatar
 
Jan Möbius committed
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
    _ini.add_entry( "Options" , key , type );
  }

  // 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
        for (int j=0; j < coreWidget_->viewModes_[i]->visibleWidgets.size(); j++)
          entry += " " + coreWidget_->viewModes_[i]->visibleWidgets[j];

        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]);

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

Jan Möbius's avatar
 
Jan Möbius committed
360
361
362
363
364
365
  //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
366
367
368
369
370
371
372
  //============================================================================
  // 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
373

374
375
376
377
378
379
380
381
  //============================================================================
  // other
  //============================================================================
  // restrict Framerate
  _ini.add_entry("Options","RestrictFrameRate",OpenFlipper::Options::restrictFrameRate() );
  // max Framerate
  _ini.add_entry("Options","MaxFrameRate",OpenFlipper::Options::maxFrameRate() );

Jan Möbius's avatar
Jan Möbius committed
382
383
384
385
386
  //============================================================================
  // Debugging
  //============================================================================
  _ini.add_entry("Options","SlotDebugging",OpenFlipper::Options::doSlotDebugging() );

387
388
389
390
391
392
  //============================================================================
  // Write Picking debugger state
  //============================================================================
  _ini.add_entry("Options","RenderPicking",OpenFlipper::Options::renderPicking() );
  _ini.add_entry("Options","PickingRenderMode",OpenFlipper::Options::pickingRenderMode() );

393
394
395
396
397
398
399
  //============================================================================
  // 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
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
  //============================================================================
  //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
421
422
423
424

  QString scriptDir = OpenFlipper::Options::currentScriptDirStr().toUtf8();
  _ini.add_entry("Options","ScriptDir",scriptDir);

425
  _ini.add_entry("Options","RandomBaseColor", OpenFlipper::Options::randomBaseColor() );
Jan Möbius's avatar
 
Jan Möbius committed
426
427
428

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

Jan Möbius's avatar
Jan Möbius committed
429
430
431
432
    if ( OpenFlipper::Options::multiView() ) {
      std::cerr << "Todo : Save application options for multiple views" << std::endl;
    }

433
434
435
    _ini.add_entry("Options","BackfaceCulling",PluginFunctions::viewerProperties().backFaceCulling());
    _ini.add_entry("Options","Animation",PluginFunctions::viewerProperties().animation());
    _ini.add_entry("Options","twoSidedLighting",PluginFunctions::viewerProperties().twoSidedLighting());
Jan Möbius's avatar
 
Jan Möbius committed
436

Jan Möbius's avatar
Jan Möbius committed
437
438
    _ini.add_entry("Options","WheelZoomFactor",coreWidget_->examiner_widgets_[0]->wheelZoomFactor());
    _ini.add_entry("Options","WheelZoomFactorShift",coreWidget_->examiner_widgets_[0]->wheelZoomFactorShift());
Dirk Wilden's avatar
Dirk Wilden committed
439

Jan Möbius's avatar
 
Jan Möbius committed
440
441
442
443
    //============================================================================
    // Save the current draw modes
    //============================================================================
    std::vector< QString > draw_modes;
444
    draw_modes = drawModeToList( OpenFlipper::Options::standardDrawMode() );
Jan Möbius's avatar
 
Jan Möbius committed
445
446
    _ini.add_entry("Options","StandardDrawModes",draw_modes);

447
448
    _ini.add_entry("Options","HideLogger", OpenFlipper::Options::hideLogger() );
    _ini.add_entry("Options","HideToolbox", OpenFlipper::Options::hideToolbox() );
Jan Möbius's avatar
 
Jan Möbius committed
449
450

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

453
    _ini.add_entry("Options","DefaultBackgroundColor", (uint)OpenFlipper::Options::defaultBackgroundColor().rgba ()  );
454
    _ini.add_entry("Options","DefaultBaseColor", (uint)OpenFlipper::Options::defaultBaseColor().rgba ()  );
Jan Möbius's avatar
 
Jan Möbius committed
455
456
457
458
459
460
461
462
463
464
465
466
  }

  _ini.add_entry("Options","Stereo",OpenFlipper::Options::stereo() );
}

void Core::openIniFile(QString _filename) {
  INIFile ini;

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

Jan Möbius's avatar
 
Jan Möbius committed
468
469
470
471
472
  if ( OpenFlipper::Options::gui() ) {
    coreWidget_->statusMessage( "Loading ini File " + _filename + " ...");
    coreWidget_->setStatus(ApplicationStatus::BLOCKED );
  }

473
  OpenFlipper::Options::loadingSettings(true);
Jan Möbius's avatar
 
Jan Möbius committed
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501

  readApplicationOptions(ini);

  QStringList openFiles;

  // Parse File section for files to open
  if ( ini.section_exists("OpenFiles") && ini.get_entry(openFiles,"OpenFiles","open") ) {

    bool newActiveObject = false;

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

      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;
        }
      }

      int tmpType;
      DataType type = DATA_TRIANGLE_MESH;
502

Jan Möbius's avatar
 
Jan Möbius committed
503
504
      if ( ini.get_entry( tmpType, sectionName , "type"  )) {
        type = DataType(tmpType);
Jan Möbius's avatar
Jan Möbius committed
505
506
        emit log(LOGWARN, "This ini file uses old int style ObjectType fields!" );
        emit log(LOGWARN, "Please convert it to new format! ( ... just save it )" );
507
508
509
510
511
512
513
514
515
      } else {

        QString typeName="";

        if ( ini.get_entry( typeName, sectionName , "type"  )) {
          type = typeId(typeName);
        } else
          emit log(LOGWARN, "Unable to get DataType for object " +  sectionName + " assuming Triangle Mesh" );
      }
Jan Möbius's avatar
 
Jan Möbius committed
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547

      int newObjectId = loadObject(type, path);

      BaseObject* object = objectRoot_->childExists( newObjectId );
      if ( object == 0 )  {
        emit log(LOGERR,"Unable to open Object " + path);
        continue;
      }

      bool flag;
      if ( ini.get_entry( flag, sectionName , "target" ) ) {
        object->target(flag);
        newActiveObject = true;
      }

      if ( ini.get_entry( flag, sectionName , "source" ) )
        object->source(flag);

      emit iniLoad( ini,object->id() );
    }

    if ( newActiveObject )
      emit activeObjectChanged();

  }



  emit iniLoadOptions( ini );

  ini.disconnect();

548
  OpenFlipper::Options::loadingSettings(false);
Jan Möbius's avatar
 
Jan Möbius committed
549
550

  resetScenegraph();
Jan Möbius's avatar
Jan Möbius committed
551

Jan Möbius's avatar
 
Jan Möbius committed
552
553
554
555
556
557
558
  if ( OpenFlipper::Options::gui() ) {
    coreWidget_->statusMessage( "Loading ini File " + _filename + " ... Done", 4000);
    coreWidget_->setStatus(ApplicationStatus::READY );
  }

}

Jan Möbius's avatar
Jan Möbius committed
559
560
561
562
563
void Core::writeIniFile(QString _filename, bool _relativePaths, bool _targetOnly, bool _systemSettings ) {

  if ( ! _systemSettings )
      std::cerr << "Currently unsupported : Saving ini files without including global settings" << std::endl;

Jan Möbius's avatar
 
Jan Möbius committed
564
565
566
567
568
569
  INIFile ini;

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

Jan Möbius's avatar
 
Jan Möbius committed
571
572
573
574
575
576
577
578
579
580
  if ( OpenFlipper::Options::gui() ) {
    coreWidget_->statusMessage( "Saving ini File " + _filename + " ...");
    coreWidget_->setStatus(ApplicationStatus::BLOCKED );
  }

  writeApplicationOptions(ini);

  // This vector will hold the file sections to open
  QStringList openFiles;

581
582
583
584

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

Jan Möbius's avatar
 
Jan Möbius committed
588
589
  QString keyName;
  QString sectionName;
590
  for ( PluginFunctions::ObjectIterator o_it(restriction) ;
Jan Möbius's avatar
 
Jan Möbius committed
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
                                        o_it != PluginFunctions::objects_end(); ++o_it) {
    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 );
607
      ini.add_entry( sectionName , "type" , typeName(o_it->dataType() ) );
Jan Möbius's avatar
 
Jan Möbius committed
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
      ini.add_entry( sectionName , "target" , o_it->target() );
      ini.add_entry( sectionName , "source" , o_it->source() );

    }
  }

  ini.add_entry("OpenFiles","open",openFiles);

  ///@todo :write ini file ( Ask for objects which are not written yet
  std::cerr << "Todo :  write ini file ( Ask for objects which are not written yet )" << std::endl;

  // Tell plugins to save their information for the given object
  for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
                                        o_it != PluginFunctions::objects_end(); ++o_it)
    emit iniSave(  ini , o_it->id() );

  emit iniSaveOptions( ini );

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

Jan Möbius's avatar
 
Jan Möbius committed
628
629
630
631
632
633
634
635
  if ( OpenFlipper::Options::gui() ) {
    coreWidget_->statusMessage( "Saving ini File " + _filename + " ... Done", 4000);
    coreWidget_->setStatus(ApplicationStatus::READY );
  }
}


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