SVN checkout 11/12/2010
[monav:monav.git] / preprocessor / preprocessingwindow.cpp
1 /*
2 Copyright 2010  Christian Vetter veaac.fdirct@gmail.com
3
4 This file is part of MoNav.
5
6 MoNav is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 MoNav is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with MoNav.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "preprocessingwindow.h"
21 #include "ui_preprocessingwindow.h"
22 #include "utils/qthelpers.h"
23
24 #include <omp.h>
25 #include <QFileDialog>
26 #include <QSettings>
27 #include <QtDebug>
28 #include <QDir>
29 #include <QMessageBox>
30 #include <QDesktopServices>
31 #include <QCloseEvent>
32
33 PreprocessingWindow::PreprocessingWindow( QWidget* parent, QString configFile ) :
34         QMainWindow( parent ),
35         m_ui( new Ui::PreprocessingWindow )
36 {
37         m_ui->setupUi(this);
38
39         setWindowIcon( QIcon( ":/images/target.png" ) );
40
41         connectSlots();
42         loadPlugins();
43
44         QSettings* settings;
45         if ( configFile.isEmpty() )
46                 settings = new QSettings( "MoNav" );
47         else
48                 settings = new QSettings( configFile, QSettings::IniFormat );
49
50         m_ui->input->setText( settings->value( "input" ).toString() );
51         m_ui->output->setText( settings->value( "output" ).toString() );
52
53         QString importerName = settings->value( "importer", m_ui->importerComboBox->currentText() ).toString();
54         QString routerName = settings->value( "router", m_ui->routerComboBox->currentText() ).toString();
55         QString rendererName = settings->value( "renderer", m_ui->rendererComboBox->currentText() ).toString();
56         QString gpsLookupName = settings->value( "gpsLookup", m_ui->gpsLookupComboBox->currentText() ).toString();
57         QString addressLookupName = settings->value( "addressLookup", m_ui->addressLookupComboBox->currentText() ).toString();
58
59         m_ui->importerComboBox->setCurrentIndex( m_ui->importerComboBox->findText( importerName ) );
60         m_ui->routerComboBox->setCurrentIndex( m_ui->routerComboBox->findText( routerName ) );
61         m_ui->rendererComboBox->setCurrentIndex( m_ui->rendererComboBox->findText( rendererName ) );
62         m_ui->gpsLookupComboBox->setCurrentIndex( m_ui->gpsLookupComboBox->findText( gpsLookupName ) );
63         m_ui->addressLookupComboBox->setCurrentIndex( m_ui->addressLookupComboBox->findText( addressLookupName ) );
64
65         m_ui->name->setText( settings->value( "name", tr( "MyMap" ) ).toString() );
66         m_ui->description->setText( settings->value( "description", tr( "This is my map data" ) ).toString() );
67         m_ui->image->setText( settings->value( "image", ":/images/about.png" ).toString() );
68
69         m_ui->threads->setMaximum( omp_get_max_threads() );
70         m_ui->threads->setValue( settings->value( "threads", omp_get_max_threads() ).toInt() );
71
72         restoreGeometry( settings->value( "geometry" ).toByteArray() );
73
74         QList< int > splitterSizes;
75         splitterSizes.push_back( 0 );
76         splitterSizes.push_back( 1 );
77         m_ui->splitter->setSizes( splitterSizes );
78         m_ui->splitter->restoreState( settings->value( "splitter" ).toByteArray() );
79
80         foreach ( IImporter* plugin, m_importerPlugins )
81                 plugin->LoadSettings( settings );
82         foreach ( IPreprocessor* plugin, m_routerPlugins )
83                 plugin->LoadSettings( settings );
84         foreach ( IPreprocessor* plugin, m_rendererPlugins )
85                 plugin->LoadSettings( settings );
86         foreach ( IPreprocessor* plugin, m_gpsLookupPlugins )
87                 plugin->LoadSettings( settings );
88         foreach ( IPreprocessor* plugin, m_addressLookupPlugins )
89                 plugin->LoadSettings( settings );
90
91         delete settings;
92
93         parseArguments();
94 }
95
96 void PreprocessingWindow::parseArguments()
97 {
98         QStringList args = QCoreApplication::arguments();
99         int index = args.indexOf( QRegExp( "--name=.*" ) );
100         if ( index != -1 )
101                 m_ui->name->setText( args[index].section( '=', 1 ) );
102         index = args.indexOf( QRegExp( "--description=.*" ) );
103         if ( index != -1 )
104                 m_ui->description->setText( args[index].section( '=', 1 ) );
105         index = args.indexOf( QRegExp( "--image=.*" ) );
106         if ( index != -1 )
107                 m_ui->image->setText( args[index].section( '=', 1 ) );
108         index = args.indexOf( QRegExp( "--input=.*" ) );
109         if ( index != -1 )
110                 m_ui->input->setText( args[index].section( '=', 1 ) );
111         index = args.indexOf( QRegExp( "--output=.*" ) );
112         if ( index != -1 )
113                 m_ui->output->setText( args[index].section( '=', 1 ) );
114         index = args.indexOf( QRegExp( "--threads=.*" ) );
115         if ( index != -1 )
116                 m_ui->threads->setValue( args[index].section( '=', 1 ).toInt() );
117 }
118
119 bool PreprocessingWindow::saveSettings( QString configFile )
120 {
121         QSettings* settings;
122         if ( configFile.isEmpty() )
123                 settings = new QSettings( "MoNav" );
124         else
125                 settings = new QSettings( configFile, QSettings::IniFormat );
126
127         settings->setValue( "input", m_ui->input->text() );
128         settings->setValue( "output", m_ui->output->text() );
129
130         settings->setValue( "importer", m_ui->importerComboBox->currentText() );
131         settings->setValue( "router", m_ui->routerComboBox->currentText() );
132         settings->setValue( "renderer", m_ui->rendererComboBox->currentText() );
133         settings->setValue( "gpsLookup", m_ui->gpsLookupComboBox->currentText() );
134         settings->setValue( "addressLookup", m_ui->addressLookupComboBox->currentText() );
135
136         settings->setValue( "name", m_ui->name->text() );
137         settings->setValue( "description", m_ui->description->toPlainText() );
138         settings->setValue( "image", m_ui->image->text() );
139
140         settings->setValue( "threads", m_ui->threads->value() );
141
142         settings->setValue( "geometry", saveGeometry() );
143         settings->setValue( "splitter", m_ui->splitter->saveState() );
144
145         foreach ( IImporter* plugin, m_importerPlugins ) {
146                 if ( !plugin->SaveSettings( settings ) )
147                         return false;
148         }
149         foreach ( IPreprocessor* plugin, m_routerPlugins ) {
150                 if ( !plugin->SaveSettings( settings ) )
151                         return false;
152         }
153         foreach ( IPreprocessor* plugin, m_rendererPlugins ) {
154                 if ( !plugin->SaveSettings( settings ) )
155                         return false;
156         }
157         foreach ( IPreprocessor* plugin, m_gpsLookupPlugins ) {
158                 if ( !plugin->SaveSettings( settings ) )
159                         return false;
160         }
161         foreach ( IPreprocessor* plugin, m_addressLookupPlugins ) {
162                 if ( !plugin->SaveSettings( settings ) )
163                         return false;
164         }
165
166         delete settings;
167         return true;
168 }
169
170 void PreprocessingWindow::closeEvent( QCloseEvent* event )
171 {
172         if ( !saveSettings() ) {
173                 if ( QMessageBox::information( this, "Save Settings", "Failed To Save Settings", QMessageBox::Cancel | QMessageBox::Close ) == QMessageBox::Cancel ) {
174                         event->ignore();
175                         return;
176                 }
177         }
178         event->accept();
179         return;
180 }
181
182 PreprocessingWindow::~PreprocessingWindow()
183 {
184         unloadPlugins();
185         delete m_ui;
186 }
187
188 void PreprocessingWindow::connectSlots()
189 {
190         connect( m_ui->inputBrowse, SIGNAL(clicked()), this, SLOT(inputBrowse()) );
191         connect( m_ui->input, SIGNAL(textChanged(QString)), this, SLOT(inputChanged(QString)) );
192
193         connect( m_ui->outputBrowse, SIGNAL(clicked()), this, SLOT(outputBrowse()) );
194         connect( m_ui->output, SIGNAL(textChanged(QString)), this, SLOT(outputChanged(QString)) );
195
196         connect( m_ui->imageBrowse, SIGNAL(clicked()), this, SLOT(imageBrowse()) );
197         connect( m_ui->image, SIGNAL(textChanged(QString)), this, SLOT(imageChanged(QString)) );
198
199         connect( m_ui->threads, SIGNAL(valueChanged(int)), this, SLOT(threadsChanged(int)) );
200
201         connect( m_ui->saveSettings, SIGNAL(clicked()), this, SLOT(saveSettingsToFile()) );
202
203         connect( m_ui->importerPreprocessButton, SIGNAL(clicked()), this, SLOT(importerPreprocessing()) );
204         connect( m_ui->rendererPreprocessButton, SIGNAL(clicked()), this, SLOT(rendererPreprocessing()) );
205         connect( m_ui->routerPreprocessButton, SIGNAL(clicked()), this, SLOT(routerPreprocessing()) );
206         connect( m_ui->gpsLookupPreprocessButton, SIGNAL(clicked()), this, SLOT(gpsLookupPreprocessing()) );
207         connect( m_ui->addressLookupPreprocessButton, SIGNAL(clicked()), this, SLOT(addressLookupPreprocessing()) );
208         connect( m_ui->deleteTemporaryButton, SIGNAL(clicked()), this, SLOT(deleteTemporary()) );
209         connect( m_ui->writeConfigButton, SIGNAL(clicked()), this, SLOT(writeConfig()) );
210
211         connect( m_ui->allPreprocessButton, SIGNAL(clicked()), this, SLOT(preprocessAll()) );
212 }
213
214 void PreprocessingWindow::loadPlugins()
215 {
216         QDir pluginDir( QApplication::applicationDirPath() );
217         if ( pluginDir.cd("plugins_preprocessor") ) {
218                 foreach ( QString fileName, pluginDir.entryList( QDir::Files ) ) {
219                         QPluginLoader* loader = new QPluginLoader( pluginDir.absoluteFilePath( fileName ) );
220                         loader->setLoadHints( QLibrary::ExportExternalSymbolsHint );
221                         if ( !loader->load() )
222                                 qDebug() << loader->errorString();
223
224                         if ( testPlugin( loader->instance() ) ) {
225                                 m_plugins.push_back( loader );
226                         } else {
227                                 loader->unload();
228                                 delete loader;
229                         }
230                 }
231         }
232
233         foreach ( QObject *plugin, QPluginLoader::staticInstances() )
234                 testPlugin( plugin );
235
236         if ( m_importerPlugins.size() == 0  || m_rendererPlugins.size() == 0  || m_routerPlugins.size() == 0 || m_gpsLookupPlugins.size() == 0  || m_addressLookupPlugins.size() == 0 )
237                 qFatal( "plugin types are missing" );
238 }
239
240 bool PreprocessingWindow::testPlugin( QObject* plugin )
241 {
242         bool needed = false;
243         if ( IImporter *interface = qobject_cast< IImporter* >( plugin ) )
244         {
245                 m_importerPlugins.append( interface );
246                 m_ui->importerComboBox->addItem( interface->GetName() );
247                 m_ui->importerSettings->addTab( interface->GetSettings(), interface->GetName() );
248                 needed = true;
249         }
250         if ( IPreprocessor *interface = qobject_cast< IPreprocessor* >( plugin ) )
251         {
252                 QString name = interface->GetName();
253                 if ( interface->GetType() == IPreprocessor::Renderer )
254                 {
255                         m_rendererPlugins.append( interface );
256                         m_ui->rendererComboBox->addItem( name );
257                         m_ui->rendererSettings->addTab( interface->GetSettings(), interface->GetName() );
258                 }
259                 if ( interface->GetType() == IPreprocessor::Router )
260                 {
261                         m_routerPlugins.append( interface );
262                         m_ui->routerComboBox->addItem( name );
263                         m_ui->routerSettings->addTab( interface->GetSettings(), interface->GetName() );
264                 }
265                 if ( interface->GetType() == IPreprocessor::GPSLookup )
266                 {
267                         m_gpsLookupPlugins.append( interface );
268                         m_ui->gpsLookupComboBox->addItem( name );
269                         m_ui->gpsLookupSettings->addTab( interface->GetSettings(), interface->GetName() );
270                 }
271                 if ( interface->GetType() == IPreprocessor::AddressLookup )
272                 {
273                         m_addressLookupPlugins.append( interface );
274                         m_ui->addressLookupComboBox->addItem( name );
275                         m_ui->addressLookupSettings->addTab( interface->GetSettings(), interface->GetName() );
276                 }
277                 needed = true;
278         }
279         return needed;
280 }
281
282 void PreprocessingWindow::unloadPlugins()
283 {
284         foreach( QPluginLoader* pluginLoader, m_plugins )
285         {
286                 pluginLoader->unload();
287                 delete pluginLoader;
288         }
289         foreach ( QObject *plugin, QPluginLoader::staticInstances() )
290                 delete plugin;
291 }
292
293 void PreprocessingWindow::saveSettingsToFile()
294 {
295         QString filename = QFileDialog::getSaveFileName( this, "Config File", QString(), "*.ini" );
296         if ( filename.isEmpty() )
297                 return;
298         if ( !filename.endsWith( ".ini" ) )
299                 filename += ".ini";
300         if ( !saveSettings( filename ) )
301                 qCritical() << "Failed To Save Settings";
302 }
303
304 void PreprocessingWindow::inputBrowse()
305 {
306         QString file = m_ui->input->text();
307         file = QFileDialog::getOpenFileName( this, tr( "Open Input File" ), file );
308         if ( !file.isEmpty() )
309                 m_ui->input->setText( file );
310 }
311
312 void PreprocessingWindow::outputBrowse()
313 {
314         QString dir = m_ui->output->text();
315         dir = QFileDialog::getExistingDirectory(this, tr( "Open Output Directory" ), dir );
316         if ( !dir.isEmpty() )
317                 m_ui->output->setText( dir );
318 }
319
320 void PreprocessingWindow::imageBrowse()
321 {
322         QString file = m_ui->image->text();
323         file = QFileDialog::getOpenFileName( this, tr( "Open Image File" ), file );
324         if ( !file.isEmpty() )
325                 m_ui->image->setText( file );
326 }
327
328 void PreprocessingWindow::inputChanged( QString text )
329 {
330         QPalette pal;
331         if ( !QFile::exists( text ) )
332                 pal.setColor( QPalette::Text, Qt::red );
333         m_ui->input->setPalette( pal );
334 }
335
336 void PreprocessingWindow::imageChanged( QString text )
337 {
338         bool valid = true;
339         QPalette pal;
340         if ( !QFile::exists( text ) ) {
341                 valid = false;
342         } else {
343                 QPixmap image( text );
344                 if ( image.isNull() )
345                         valid = false;
346                 else
347                         m_ui->imagePreview->setPixmap( image );
348         }
349         if ( !valid ) {
350                 m_ui->imagePreview->clear();
351                 pal.setColor( QPalette::Text, Qt::red );
352         }
353         m_ui->image->setPalette( pal );
354 }
355
356 void PreprocessingWindow::outputChanged( QString text )
357 {
358         QPalette pal;
359         if ( !QFile::exists( text ) )
360                 pal.setColor( QPalette::Text, Qt::red );
361         m_ui->output->setPalette( pal );
362 }
363
364 void PreprocessingWindow::threadsChanged( int threads )
365 {
366         omp_set_num_threads( threads );
367 }
368
369 bool PreprocessingWindow::importerPreprocessing()
370 {
371         if ( !QFile::exists( m_ui->input->text() ) ) {
372                 qCritical() << "Input File Does not Exist";
373                 return false;
374         }
375         if ( !QFile::exists( m_ui->output->text() ) ) {
376                 qCritical() << "Output Directory Does Not Exist";
377                 return false;
378         }
379         int index = m_ui->importerComboBox->currentIndex();
380         m_importerPlugins[index]->SetOutputDirectory( m_ui->output->text() );
381         bool result = m_importerPlugins[index]->Preprocess( m_ui->input->text() );
382         if ( result )
383                 m_ui->importerLabel->setPixmap( QPixmap( ":/images/ok.png" ) );
384         else
385                 m_ui->importerLabel->setPixmap( QPixmap( ":/images/reload.png" ) );
386         m_ui->rendererLabel->setPixmap( QPixmap( ":/images/reload.png" ) );
387         m_ui->routerLabel->setPixmap( QPixmap( ":/images/reload.png" ) );
388         m_ui->gpsLookupLabel->setPixmap( QPixmap( ":/images/reload.png" ) );
389         m_ui->addressLookupLabel->setPixmap( QPixmap( ":/images/reload.png" ) );
390         return result;
391 }
392
393 bool PreprocessingWindow::rendererPreprocessing()
394 {
395         if ( !QFile::exists( m_ui->output->text() ) ) {
396                 qCritical() << "Output Directory Does Not Exist";
397                 return false;
398         }
399         int importerIndex = m_ui->importerComboBox->currentIndex();
400         m_importerPlugins[importerIndex]->SetOutputDirectory( m_ui->output->text() );
401         int index = m_ui->rendererComboBox->currentIndex();
402         bool result = m_rendererPlugins[index]->Preprocess( m_importerPlugins[importerIndex], m_ui->output->text() );
403         if ( result )
404                 m_ui->rendererLabel->setPixmap( QPixmap( ":/images/ok.png" ) );
405         else
406                 m_ui->rendererLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
407         return result;
408 }
409
410 bool PreprocessingWindow::routerPreprocessing()
411 {
412         if ( !QFile::exists( m_ui->output->text() ) ) {
413                 qCritical() << "Output Directory Does Not Exist";
414                 return false;
415         }
416         int importerIndex = m_ui->importerComboBox->currentIndex();
417         m_importerPlugins[importerIndex]->SetOutputDirectory( m_ui->output->text() );
418         int index = m_ui->routerComboBox->currentIndex();
419         bool result = m_routerPlugins[index]->Preprocess( m_importerPlugins[importerIndex], m_ui->output->text() );
420         if ( result )
421                 m_ui->routerLabel->setPixmap( QPixmap( ":/images/ok.png" ) );
422         else
423                 m_ui->routerLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
424         m_ui->gpsLookupLabel->setPixmap( QPixmap( ":/images/reload.png" ) );
425         return result;
426 }
427
428 bool PreprocessingWindow::gpsLookupPreprocessing()
429 {
430         if ( !QFile::exists( m_ui->output->text() ) ) {
431                 qCritical() << "Output Directory Does Not Exist";
432                 return false;
433         }
434         int importerIndex = m_ui->importerComboBox->currentIndex();
435         m_importerPlugins[importerIndex]->SetOutputDirectory( m_ui->output->text() );
436         int index = m_ui->gpsLookupComboBox->currentIndex();
437         bool result = m_gpsLookupPlugins[index]->Preprocess( m_importerPlugins[importerIndex], m_ui->output->text() );
438         if ( result )
439                 m_ui->gpsLookupLabel->setPixmap( QPixmap( ":/images/ok.png" ) );
440         else
441                 m_ui->gpsLookupLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
442         return result;
443 }
444
445 bool PreprocessingWindow::addressLookupPreprocessing()
446 {
447         if ( !QFile::exists( m_ui->output->text() ) ) {
448                 qCritical() << "Output Directory Does Not Exist";
449                 return false;
450         }
451         int importerIndex = m_ui->importerComboBox->currentIndex();
452         m_importerPlugins[importerIndex]->SetOutputDirectory( m_ui->output->text() );
453         int index = m_ui->addressLookupComboBox->currentIndex();
454         bool result = m_addressLookupPlugins[index]->Preprocess( m_importerPlugins[importerIndex], m_ui->output->text() );
455         if ( result )
456                 m_ui->addressLookupLabel->setPixmap( QPixmap( ":/images/ok.png" ) );
457         else
458                 m_ui->addressLookupLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
459         return result;
460 }
461
462 bool PreprocessingWindow::preprocessAll()
463 {
464         if ( !QFile::exists( m_ui->output->text() ) ) {
465                 qCritical() << "Output Directory Does Not Exist";
466                 return false;
467         }
468         qDebug() << "===Importer===";
469         if ( !importerPreprocessing() ) {
470                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
471                 return false;
472         }
473         qDebug() << "===Router===";
474         if ( !routerPreprocessing() ) {
475                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
476                 return false;
477         }
478         qDebug() << "===Renderer===";
479         if ( !rendererPreprocessing() ) {
480                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
481                 return false;
482         }
483         qDebug() << "===GPS Lookup===";
484         if ( !gpsLookupPreprocessing() ) {
485                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
486                 return false;
487         }
488         qDebug() << "===Address Lookup===";
489         if ( !addressLookupPreprocessing() ) {
490                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
491                 return false;
492         }
493         qDebug() << "===Config File===";
494         if ( !writeConfig() )  {
495                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
496                 return false;
497         }
498         qDebug() << "===Delete Temporary Files===";
499         if ( !deleteTemporary() )  {
500                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
501                 return false;
502         }
503         m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/ok.png" ) );
504         return true;
505 }
506
507 bool PreprocessingWindow::preprocessDaemon()
508 {
509         if ( !QFile::exists( m_ui->output->text() ) ) {
510                 qCritical() << "Output Directory Does Not Exist";
511                 return false;
512         }
513         qDebug() << "===Importer===";
514         if ( !importerPreprocessing() ) {
515                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
516                 return false;
517         }
518         qDebug() << "===Router===";
519         if ( !routerPreprocessing() ) {
520                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
521                 return false;
522         }
523         qDebug() << "===GPS Lookup===";
524         if ( !gpsLookupPreprocessing() ) {
525                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
526                 return false;
527         }
528         qDebug() << "===Config File===";
529         if ( !writeConfig() )  {
530                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
531                 return false;
532         }
533         qDebug() << "===Delete Temporary Files===";
534         if ( !deleteTemporary() )  {
535                 m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
536                 return false;
537         }
538         m_ui->buildAllLabel->setPixmap( QPixmap( ":/images/ok.png" ) );
539         return true;
540 }
541
542 bool PreprocessingWindow::writeConfig()
543 {
544         QSettings pluginSettings( fileInDirectory( m_ui->output->text(), "MoNav.ini" ), QSettings::IniFormat );
545
546         pluginSettings.setValue( "configVersion", 1 );
547
548         pluginSettings.setValue( "router", m_ui->routerComboBox->currentText() );
549         pluginSettings.setValue( "renderer", m_ui->rendererComboBox->currentText() );
550         pluginSettings.setValue( "gpsLookup", m_ui->gpsLookupComboBox->currentText() );
551         pluginSettings.setValue( "addressLookup", m_ui->addressLookupComboBox->currentText() );
552
553         int index = m_ui->routerComboBox->currentIndex();
554         pluginSettings.setValue( "routerFileFormatVersion", m_routerPlugins[index]->GetFileFormatVersion() );
555         index = m_ui->rendererComboBox->currentIndex();
556         pluginSettings.setValue( "rendererFileFormatVersion", m_rendererPlugins[index]->GetFileFormatVersion() );
557         index = m_ui->gpsLookupComboBox->currentIndex();
558         pluginSettings.setValue( "gpsLookupFileFormatVersion", m_gpsLookupPlugins[index]->GetFileFormatVersion() );
559         index = m_ui->addressLookupComboBox->currentIndex();
560         pluginSettings.setValue( "addressLookupFileFormatVersion", m_addressLookupPlugins[index]->GetFileFormatVersion() );
561
562         pluginSettings.setValue( "name", m_ui->name->text() );
563         pluginSettings.setValue( "description", m_ui->description->toPlainText() );
564         QImage image( m_ui->image->text() );
565         if ( !image.isNull() )
566                 pluginSettings.setValue( "image", image );
567
568         pluginSettings.sync();
569         if ( pluginSettings.status() != QSettings::NoError ) {
570                 m_ui->configLabel->setPixmap( QPixmap( ":/images/notok.png" ) );
571                 return false;
572         }
573
574         m_ui->configLabel->setPixmap( QPixmap( ":/images/ok.png" ) );
575         return true;
576 }
577
578 bool PreprocessingWindow::deleteTemporary()
579 {
580         int index = m_ui->importerComboBox->currentIndex();
581         m_importerPlugins[index]->SetOutputDirectory( m_ui->output->text() );
582         m_importerPlugins[index]->DeleteTemporaryFiles();
583         m_ui->deleteTemporaryLabel->setPixmap( QPixmap( ":/images/ok.png" ) );
584         return true;
585 }
586