optionHandling.cc 11.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




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


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

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

60
61
#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

64
65
66
#include <QCoreApplication>


Jan Möbius's avatar
Jan Möbius committed
67
//== IMPLEMENTATION ==========================================================
Jan Möbius's avatar
 
Jan Möbius committed
68
69
70
71

void Core::applyOptions(){

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

Jan Möbius's avatar
 
Jan Möbius committed
73
74
    //Init ViewModes
    coreWidget_->initViewModes();
Jan Möbius's avatar
Jan Möbius committed
75

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

85
    // Logger
Jan Möbius's avatar
Jan Möbius committed
86
    coreWidget_->showLogger( OpenFlipper::Options::loggerState() );
Jan Möbius's avatar
Jan Möbius committed
87

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
88
89
90
    // gl mouse cursor
    coreWidget_->setGlCursor( OpenFlipper::Options::glMouse() );

Jan Möbius's avatar
Jan Möbius committed
91
    // Prepare Picking Debugger Flag
92
93
94
95
96
97
98
99
100
    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
101
102
103
104
    } 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;
105
106
107
    } else {
      target = ACG::SceneGraph::PICK_ANYTHING;
    }
Jan Möbius's avatar
Jan Möbius committed
108

109
110
111
112
113
114
    //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 );

115
116
117
      //only switch projection here if an object is opened
      //this prevents problems when applying options on app start
      if ( PluginFunctions::objectCount() > 0 ){ 
118
119
120
121
        if ( OpenFlipper::Options::defaultProjectionMode(i) == 0 )
          PluginFunctions::orthographicProjection(i);
        else
          PluginFunctions::perspectiveProjection(i);
122
      }
123
124
    }

125
    if ( OpenFlipper::Options::multiView() )
126
      coreWidget_->setViewerLayout( OpenFlipper::Options::defaultViewerLayout() );
127

128
129
130
131
//     if ( OpenFlipper::Options::gridVisible() )
//       gridNode_->show();
//     else
//       gridNode_->hide();
132

133
    //set defaultBackgroundColor
134
    QColor c =  OpenFlipperSettings().value("Core/Gui/glViewer/defaultBackgroundColor").value<QColor>();
Jan Möbius's avatar
Jan Möbius committed
135

136
    for ( unsigned int i = 0 ; i < OpenFlipper::Options::examinerWidgets() ; ++i ) {
Jan Möbius's avatar
Jan Möbius committed
137
      //wheel zoom factor
Jan Möbius's avatar
Jan Möbius committed
138
139
      PluginFunctions::viewerProperties(i).wheelZoomFactor( OpenFlipperSettings().value("Core/Mouse/Wheel/ZoomFactor").toDouble() );
      PluginFunctions::viewerProperties(i).wheelZoomFactorShift( OpenFlipperSettings().value("Core/Mouse/Wheel/ZoomFactorShift").toDouble() );
Jan Möbius's avatar
Jan Möbius committed
140
141

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

Jan Möbius's avatar
 
Jan Möbius committed
145
146
    //hideToolbox
    if (OpenFlipper::Options::hideToolbox()) {
147

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
148
      coreWidget_->showToolbox (false);
Jan Möbius's avatar
 
Jan Möbius committed
149
    }
Jan Möbius's avatar
Jan Möbius committed
150

Dirk Wilden's avatar
Dirk Wilden committed
151
152
153
154
155
156
157
158
159
160
161
162
163
    //setup logFile
    if (logFile_ != 0){

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

Jan Möbius's avatar
 
Jan Möbius committed
165
    updateView();
Jan Möbius's avatar
Jan Möbius committed
166

Jan Möbius's avatar
 
Jan Möbius committed
167
168
169
  }
}

Dirk Wilden's avatar
Dirk Wilden committed
170
void Core::saveOptions(){
Jan Möbius's avatar
Jan Möbius committed
171
  QString inifile = QDir::home().absolutePath() + OpenFlipper::Options::dirSeparator() + ".OpenFlipper" +
Dirk Wilden's avatar
Dirk Wilden committed
172
173
174
175
                                                  OpenFlipper::Options::dirSeparator() +  "OpenFlipper.ini";

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

Dirk Wilden's avatar
Dirk Wilden committed
178
    if ( ! ini.connect( inifile,true) ) {
179
      emit log(LOGERR,tr("Can not create user ini file"));
Dirk Wilden's avatar
Dirk Wilden committed
180
181
182
183
184
185
186
    } else {
      writeApplicationOptions(ini);
      ini.disconnect();
    }
  } else {
    writeApplicationOptions(ini);
    ini.disconnect();
Jan Möbius's avatar
Jan Möbius committed
187
  }
Dirk Wilden's avatar
Dirk Wilden committed
188
189
}

Jan Möbius's avatar
 
Jan Möbius committed
190
void Core::setupOptions() {
Jan Möbius's avatar
Jan Möbius committed
191

Jan Möbius's avatar
Jan Möbius committed
192
193
  // initialize the Settings:
  OpenFlipper::Options::initializeSettings();
194

Jan Möbius's avatar
 
Jan Möbius committed
195
  QStringList optionFiles;
Jan Möbius's avatar
Jan Möbius committed
196

Jan Möbius's avatar
 
Jan Möbius committed
197
198
199
200
  // ==============================================================
  // 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
201
202
203
  if ( globalIni.exists() )
    optionFiles.push_back(OpenFlipper::Options::applicationDir().absolutePath() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");

Jan Möbius's avatar
 
Jan Möbius committed
204
205
206
207
  // ==============================================================
  // 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
208
209
210
  if ( localIni.exists() )
    optionFiles.push_back(OpenFlipper::Options::configDirStr() + OpenFlipper::Options::dirSeparator() + "OpenFlipper.ini");

Jan Möbius's avatar
 
Jan Möbius committed
211
212
  // Set the previously generated Optionfiles
  OpenFlipper::Options::optionFiles(optionFiles);
Jan Möbius's avatar
Jan Möbius committed
213

214
215
216
217
218
219
220
221
222
  // ==============================================================
  // 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
223

Jan Möbius's avatar
 
Jan Möbius committed
224
225
226
  // ==============================================================
  // Load Application options from all files available
  // ==============================================================
Jan Möbius's avatar
Jan Möbius committed
227

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

Jan Möbius's avatar
 
Jan Möbius committed
230
    INIFile _ini;
Jan Möbius's avatar
Jan Möbius committed
231

Jan Möbius's avatar
 
Jan Möbius committed
232
    if ( ! _ini.connect(optionFiles[i],false) ) {
233
      emit log(LOGERR,tr("Failed to connect to _ini file") + optionFiles[i]);
Jan Möbius's avatar
 
Jan Möbius committed
234
      continue;
Jan Möbius's avatar
Jan Möbius committed
235
236
    }

Jan Möbius's avatar
 
Jan Möbius committed
237
    readApplicationOptions(_ini);
Jan Möbius's avatar
Jan Möbius committed
238

Jan Möbius's avatar
 
Jan Möbius committed
239
240
    _ini.disconnect();
  }
Jan Möbius's avatar
Jan Möbius committed
241

Jan Möbius's avatar
 
Jan Möbius committed
242
243
}

244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
/// 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) ) {
276
      emit log(LOGERR,tr("Failed to connect to _ini file") + optionFiles[i]);
277
278
279
280
281
282
283
284
285
286
      continue;
    }

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

    _ini.disconnect();
  }
}

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