--- a/src/config.cpp Wed Jul 17 01:55:18 2013 +0300 +++ b/src/config.cpp Wed Jul 17 03:06:21 2013 +0300 @@ -1,18 +1,56 @@ +#include <QLabel> #include <QFileDialog> +#include <QFormLayout> #include "config.h" #include "ui_configbox.h" // ============================================================================= // ----------------------------------------------------------------------------- +class FindPathButton : public QPushButton { +public: + explicit FindPathButton( QWidget* parent = null ) : QPushButton( parent ) { + setText( "..." ); + } + + QLineEdit* editWidget() const { return m_editWidget; } + void setEditWidget( QLineEdit* edit ) { m_editWidget = edit; } + +private: + QLineEdit* m_editWidget; +}; + +// ============================================================================= +// ----------------------------------------------------------------------------- ConfigBox::ConfigBox( QWidget* parent, Qt::WindowFlags f ) : QDialog( parent, f ) { ui = new Ui_ConfigBox; ui->setupUi( this ); - setWindowTitle( fmt( APPNAME " %1", versionString())); + QFormLayout* layout = new QFormLayout( ui->zandronumVersions ); + + for( str ver : g_zanVersions ) { + QLabel* lb = new QLabel( ver + ":" ); + QLineEdit* ledit = new QLineEdit; + FindPathButton* btn = new FindPathButton; + btn->setEditWidget( ledit ); + + QWidget* wdg = new QWidget; + QHBoxLayout* leditLayout = new QHBoxLayout( wdg ); + leditLayout->addWidget( ledit ); + leditLayout->addWidget( btn ); + + m_zanBinaries << ledit; + layout->addRow( lb, wdg ); + connect( btn, SIGNAL( clicked() ), this, SLOT( findZanBinary() )); + } + + initFromSettings(); connect( ui->wad_add, SIGNAL( clicked() ), this, SLOT( addPath() )); connect( ui->wad_pathEntry, SIGNAL( returnPressed() ), this, SLOT( addPath() )); connect( ui->wad_findPath, SIGNAL( clicked() ), this, SLOT( findPath() )); connect( ui->wad_del, SIGNAL( clicked() ), this, SLOT( delPath() )); + connect( ui->buttonBox, SIGNAL( accepted() ), this, SLOT( okPressed() )); + connect( ui->buttonBox, SIGNAL( rejected() ), this, SLOT( cancelPressed() )); + setWindowTitle( fmt( APPNAME " %1", versionString())); } // ============================================================================= @@ -24,11 +62,17 @@ // ============================================================================= // ----------------------------------------------------------------------------- void ConfigBox::initFromSettings() { + QSettings cfg; + ui->wad_pathsList->clear(); - list<var> paths = cfg->value( "wads/paths", list<var>() ).toList(); + list<var> paths = cfg.value( "wads/paths", list<var>() ).toList(); for( const var& it : paths ) addPath( it.toString() ); + + int i = 0; + for( str ver : g_zanVersions ) + m_zanBinaries[i++]->setText( cfg.value( binaryConfigName( ver ), "" ).toString() ); } // ============================================================================= @@ -42,6 +86,8 @@ // ----------------------------------------------------------------------------- void ConfigBox::addPath( str path ) { ui->wad_pathsList->addItem( path ); + QListWidgetItem* item = ui->wad_pathsList->item( ui->wad_pathsList->count() - 1 ); + item->setFlags( item->flags() | Qt::ItemIsEditable ); } // ============================================================================= @@ -59,3 +105,55 @@ void ConfigBox::delPath() { delete ui->wad_pathsList->currentItem(); } + +// ============================================================================= +// ----------------------------------------------------------------------------- +void ConfigBox::findZanBinary() { + FindPathButton* btn = dynamic_cast<FindPathButton*>( sender() ); + str path; + + if( !btn ) + return; + + str filter; +#ifdef _WIN32 + filter = "Zandronum Binaries (zandronum.exe)(zandronum.exe);;All files (*.*)(*.*)"; +#else + filter = "Zandronum Binaries (zandronum)(zandronum);;All files (*.*)(*.*)"; +#endif + + if(( path = QFileDialog::getOpenFileName( this, QString(), QString(), filter )).isEmpty() ) + return; + + btn->editWidget()->setText( path ); +} + +// ============================================================================= +// ----------------------------------------------------------------------------- +void ConfigBox::okPressed() { + QSettings cfg; + list<var> wadPathList; + + for( int i = 0; i < ui->wad_pathsList->count(); ++i ) + wadPathList << ui->wad_pathsList->item( i )->text(); + + cfg.setValue( "wads/paths", wadPathList ); + + int i = 0; + for( str ver : g_zanVersions ) + cfg.setValue( binaryConfigName( ver ), m_zanBinaries[i++]->text() ); + + accept(); +} + +// ============================================================================= +// ----------------------------------------------------------------------------- +void ConfigBox::cancelPressed() { + reject(); +} + +// ============================================================================= +// ----------------------------------------------------------------------------- +str ConfigBox::binaryConfigName( str ver ) const { + return fmt( "binaries/%1", ver ); +} \ No newline at end of file