src/config.cpp

changeset 5
3c04e05ab24f
parent 4
3c23aa03190d
child 6
67b6ef6917ba
--- 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

mercurial