khanat-opennel-code/code/studio/src/settings_dialog.cpp
2014-09-09 17:20:23 -07:00

236 lines
5.7 KiB
C++

// Ryzom Core - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "settings_dialog.h"
#include <QFileDialog>
#include <QSettings>
#include <QStringList>
int findListItem( QListWidget *l, const QString &s )
{
for( int i = 0; i < l->count(); i++ )
{
QListWidgetItem *item = l->item( i );
if( item->text() == s )
return i;
}
return -1;
}
SettingsDialog::SettingsDialog( QDialog *parent ) :
QDialog( parent )
{
setupUi( this );
setupConnections();
settings = NULL;
}
SettingsDialog::~SettingsDialog()
{
}
void SettingsDialog::load()
{
pluginsLE->setText( settings->value( "PluginPath" ).toString() );
settings->beginGroup( "DataPath" );
sheetsLE->setText( settings->value( "LevelDesignPath" ).toString() );
assetsLE->setText( settings->value( "AssetsPath" ).toString() );
primitivesLE->setText( settings->value( "PrimitivesPath" ).toString() );
ligoLE->setText( settings->value( "LigoConfigFile" ).toString() );
QStringList l = settings->value( "SearchPaths" ).toStringList();
{
QStringListIterator itr( l );
while( itr.hasNext() )
{
QString p = itr.next();
if( findListItem( searchLW, p ) == -1 )
searchLW->addItem( p );
}
}
l.clear();
l = settings->value( "RecursiveSearchPathes" ).toStringList();
{
QStringListIterator itr( l );
while( itr.hasNext() )
{
QString p = itr.next();
if( findListItem( recursiveLW, p ) == -1 )
recursiveLW->addItem( p );
}
}
settings->endGroup();
}
void SettingsDialog::saveSearchPaths()
{
QStringList l;
for( int i = 0; i < searchLW->count(); i++ )
{
l.push_back( searchLW->item( i )->text() );
}
settings->setValue( "SearchPaths", l );
}
void SettingsDialog::saveRecursivePaths()
{
QStringList l;
for( int i = 0; i < recursiveLW->count(); i++ )
{
l.push_back( recursiveLW->item( i )->text() );
}
settings->setValue( "RecursiveSearchPathes", l );
}
void SettingsDialog::save()
{
settings->setValue( "PluginPath", pluginsLE->text() );
settings->beginGroup( "DataPath" );
settings->setValue( "LevelDesignPath", sheetsLE->text() );
settings->setValue( "AssetsPath", assetsLE->text() );
settings->setValue( "PrimitivesPath", primitivesLE->text() );
settings->setValue( "LigoConfigFile", ligoLE->text() );
saveSearchPaths();
saveRecursivePaths();
settings->endGroup();
settings->sync();
}
void SettingsDialog::accept()
{
save();
QDialog::accept();
}
void SettingsDialog::reject()
{
QDialog::reject();
}
void SettingsDialog::onOKClicked()
{
accept();
}
void SettingsDialog::onCancelClicked()
{
reject();
}
void SettingsDialog::onPluginBClicked()
{
QString p = QFileDialog::getExistingDirectory( this, tr( "Plugins directory" ), "" );
pluginsLE->setText( p );
}
void SettingsDialog::onSheetsBClicked()
{
QString p = QFileDialog::getExistingDirectory( this, tr( "Sheets directory" ), "" );
sheetsLE->setText( p );
}
void SettingsDialog::onAssetsBClicked()
{
QString p = QFileDialog::getExistingDirectory( this, tr( "Assets directory" ), "" );
assetsLE->setText( p );
}
void SettingsDialog::onPrimitivesBClicked()
{
QString p = QFileDialog::getExistingDirectory( this, tr( "Primitives directory" ), "" );
primitivesLE->setText( p );
}
void SettingsDialog::onLigoBClicked()
{
QString p = QFileDialog::getExistingDirectory( this, tr( "LIGO directory" ), "" );
ligoLE->setText( p );
}
void SettingsDialog::onPathAddClicked()
{
QString p = QFileDialog::getExistingDirectory( this, tr( "Search path" ), "" );
if( p.isEmpty() )
return;
if( findListItem( searchLW, p ) != -1 )
return;
searchLW->addItem( p );
}
void SettingsDialog::onPathRemoveClicked()
{
QListWidgetItem *i = searchLW->currentItem();
if( i == NULL )
return;
delete i;
}
void SettingsDialog::onRecursiveAddClicked()
{
QString p = QFileDialog::getExistingDirectory( this, tr( "Recursive search path" ), "" );
if( p.isEmpty() )
return;
if( findListItem( recursiveLW, p ) != -1 )
return;
recursiveLW->addItem( p );
}
void SettingsDialog::onRecursiveRemoveClicked()
{
QListWidgetItem *i = recursiveLW->currentItem();
if( i == NULL )
return;
delete i;
}
void SettingsDialog::setupConnections()
{
connect( bb, SIGNAL( accepted() ), this, SLOT( onOKClicked() ) );
connect( bb, SIGNAL( rejected() ), this, SLOT( onCancelClicked() ) );
connect( pluginsB, SIGNAL( clicked( bool ) ), this, SLOT( onPluginBClicked() ) );
connect( sheetsB, SIGNAL( clicked( bool ) ), this, SLOT( onSheetsBClicked() ) );
connect( assetsB, SIGNAL( clicked( bool ) ), this, SLOT( onAssetsBClicked() ) );
connect( primitivesB, SIGNAL( clicked( bool ) ), this, SLOT( onPrimitivesBClicked() ) );
connect( ligoB, SIGNAL( clicked( bool ) ), this, SLOT( onLigoBClicked() ) );
connect( pathAddB, SIGNAL( clicked( bool ) ), this, SLOT( onPathAddClicked() ) );
connect( pathRemoveB, SIGNAL( clicked( bool ) ), this, SLOT( onPathRemoveClicked() ) );
connect( recAddB, SIGNAL( clicked( bool ) ), this, SLOT( onRecursiveAddClicked() ) );
connect( recRemoveB, SIGNAL( clicked( bool ) ), this, SLOT( onRecursiveRemoveClicked() ) );
}