<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,4 +1,5 @@
 2009-09-19 Graeme Gott &lt;graeme@gottcode.org&gt;
+	* Improve settings dialog code.
 	* Add saved game version check.
 	* Add new game dialog.
 </diff>
      <filename>ChangeLog</filename>
    </modified>
    <modified>
      <diff>@@ -28,11 +28,10 @@
 #if !defined(QTOPIA_PHONE)
 #include &lt;QFileDialog&gt;
 #endif
-#include &lt;QGridLayout&gt;
+#include &lt;QFormLayout&gt;
 #include &lt;QHBoxLayout&gt;
 #include &lt;QKeyEvent&gt;
 #include &lt;QLabel&gt;
-#include &lt;QListWidget&gt;
 #include &lt;QMessageBox&gt;
 #include &lt;QPainter&gt;
 #include &lt;QPushButton&gt;
@@ -221,16 +220,11 @@ Settings::Settings(QWidget* parent)
 	m_gameplay_time-&gt;hide();
 #endif
 
-	QGridLayout* gameplay_layout = new QGridLayout(gameplay_tab);
-	gameplay_layout-&gt;setSpacing(6);
-	gameplay_layout-&gt;setRowStretch(0, 1);
-	gameplay_layout-&gt;setRowStretch(5, 1);
-	gameplay_layout-&gt;setColumnStretch(0, 1);
-	gameplay_layout-&gt;setColumnStretch(2, 1);
-	gameplay_layout-&gt;addWidget(m_gameplay_path, 1, 1);
-	gameplay_layout-&gt;addWidget(m_gameplay_steps, 2, 1);
-	gameplay_layout-&gt;addWidget(m_gameplay_time, 3, 1);
-	gameplay_layout-&gt;addWidget(m_gameplay_smooth, 4, 1);
+	QFormLayout* gameplay_layout = new QFormLayout(gameplay_tab);
+	gameplay_layout-&gt;addRow(m_gameplay_path);
+	gameplay_layout-&gt;addRow(m_gameplay_steps);
+	gameplay_layout-&gt;addRow(m_gameplay_time);
+	gameplay_layout-&gt;addRow(m_gameplay_smooth);
 
 
 	// Create Controls tab
@@ -243,65 +237,41 @@ Settings::Settings(QWidget* parent)
 	controls.append(new ControlButton(&quot;Right&quot;, Qt::Key_Right, this));
 	controls.append(new ControlButton(&quot;Flag&quot;, Qt::Key_Space, this));
 
-	QGridLayout * controls_layout = new QGridLayout(controls_tab);
-	controls_layout-&gt;setSpacing(6);
-	controls_layout-&gt;setRowStretch(0, 1);
-	controls_layout-&gt;setRowStretch(6, 1);
-	controls_layout-&gt;setColumnStretch(0, 1);
-	controls_layout-&gt;setColumnStretch(3, 1);
-	controls_layout-&gt;addWidget(new QLabel(tr(&quot;Move Up&quot;), controls_tab), 1, 1, Qt::AlignRight | Qt::AlignVCenter);
-	controls_layout-&gt;addWidget(controls[0], 1, 2);
-	controls_layout-&gt;addWidget(new QLabel(tr(&quot;Move Down&quot;), controls_tab), 2, 1, Qt::AlignRight | Qt::AlignVCenter);
-	controls_layout-&gt;addWidget(controls[1], 2, 2);
-	controls_layout-&gt;addWidget(new QLabel(tr(&quot;Move Left&quot;), controls_tab), 3, 1, Qt::AlignRight | Qt::AlignVCenter);
-	controls_layout-&gt;addWidget(controls[2], 3, 2);
-	controls_layout-&gt;addWidget(new QLabel(tr(&quot;Move Right&quot;), controls_tab), 4, 1, Qt::AlignRight | Qt::AlignVCenter);
-	controls_layout-&gt;addWidget(controls[3], 4, 2);
-	controls_layout-&gt;addWidget(new QLabel(tr(&quot;Toggle Flag&quot;), controls_tab), 5, 1, Qt::AlignRight | Qt::AlignVCenter);
-	controls_layout-&gt;addWidget(controls[4], 5, 2);
+	QFormLayout * controls_layout = new QFormLayout(controls_tab);
+	controls_layout-&gt;addRow(tr(&quot;Move Up:&quot;), controls[0]);
+	controls_layout-&gt;addRow(tr(&quot;Move Down:&quot;), controls[1]);
+	controls_layout-&gt;addRow(tr(&quot;Move Left:&quot;), controls[2]);
+	controls_layout-&gt;addRow(tr(&quot;Move Right:&quot;), controls[3]);
+	controls_layout-&gt;addRow(tr(&quot;Toggle Flag:&quot;), controls[4]);
 
 
 	// Create Themes tab
 	QWidget* themes_tab = new QWidget;
 	tabs-&gt;addTab(themes_tab, tr(&quot;Themes&quot;));
 
-	m_themes_selector = new QListWidget(themes_tab);
-	connect(m_themes_selector, SIGNAL(currentTextChanged(const QString&amp;)), this, SLOT(themeSelected(const QString&amp;)));
-
 	m_themes_preview = new QLabel(themes_tab);
 
+	m_themes_selector = new QComboBox(themes_tab);
+	connect(m_themes_selector, SIGNAL(currentIndexChanged(const QString&amp;)), this, SLOT(themeSelected(const QString&amp;)));
+
+	QHBoxLayout* themes_selector_layout = new QHBoxLayout;
+	themes_selector_layout-&gt;setMargin(0);
+	themes_selector_layout-&gt;addWidget(m_themes_selector, 1);
+
 #if !defined(QTOPIA_PHONE)
-	QPushButton* add_button = new QPushButton(tr(&quot;Add Theme&quot;), themes_tab);
+	QPushButton* add_button = new QPushButton(tr(&quot;Add&quot;), themes_tab);
 	connect(add_button, SIGNAL(clicked()), this, SLOT(addTheme()));
-	m_themes_remove_button = new QPushButton(tr(&quot;Remove Theme&quot;), themes_tab);
+	m_themes_remove_button = new QPushButton(tr(&quot;Remove&quot;), themes_tab);
 	connect(m_themes_remove_button, SIGNAL(clicked()), this, SLOT(removeTheme()));
 
-	QHBoxLayout* themes_preview_layout = new QHBoxLayout;
-	themes_preview_layout-&gt;setMargin(0);
-	themes_preview_layout-&gt;setSpacing(6);
-	themes_preview_layout-&gt;addWidget(m_themes_selector);
-	themes_preview_layout-&gt;addWidget(m_themes_preview);
-
-	QHBoxLayout* themes_button_layout = new QHBoxLayout;
-	themes_button_layout-&gt;setMargin(0);
-	themes_button_layout-&gt;addWidget(add_button);
-	themes_button_layout-&gt;addWidget(m_themes_remove_button);
-
-	QVBoxLayout* themes_layout = new QVBoxLayout(themes_tab);
-	themes_layout-&gt;addLayout(themes_preview_layout);
-	themes_layout-&gt;addLayout(themes_button_layout);
-#else
-	QHBoxLayout* themes_layout = new QHBoxLayout(themes_tab);
-	themes_layout-&gt;addWidget(m_themes_selector);
-	themes_layout-&gt;addWidget(m_themes_preview);
+	themes_selector_layout-&gt;addWidget(add_button, 0);
+	themes_selector_layout-&gt;addWidget(m_themes_remove_button, 0);
 #endif
 
+	QVBoxLayout* themes_layout = new QVBoxLayout(themes_tab);
+	themes_layout-&gt;addWidget(m_themes_preview, 1, Qt::AlignCenter);
+	themes_layout-&gt;addLayout(themes_selector_layout);
 
-	// Set dialog's size
-#if !defined(QTOPIA_PHONE)
-	adjustSize();
-	setMinimumSize(size());
-#endif
 
 	// Load current settings
 	loadSettings();
@@ -311,6 +281,7 @@ Settings::Settings(QWidget* parent)
 
 Settings::~Settings()
 {
+	controls.clear();
 	delete m_theme;
 }
 
@@ -332,7 +303,7 @@ void Settings::accept()
 	}
 
 	// Write theme to disk
-	settings.setValue(&quot;Theme&quot;, m_themes_selector-&gt;currentItem()-&gt;text());
+	settings.setValue(&quot;Theme&quot;, m_themes_selector-&gt;currentText());
 
 	emit settingsChanged();
 
@@ -341,14 +312,6 @@ void Settings::accept()
 
 // ============================================================================
 
-void Settings::reject()
-{
-	loadSettings();
-	QDialog::reject();
-}
-
-// ============================================================================
-
 void Settings::themeSelected(const QString&amp; theme)
 {
 	if (!theme.isEmpty()) {
@@ -393,13 +356,13 @@ void Settings::addTheme()
 
 	// Add theme to list
 	QStringList themes = m_theme-&gt;available();
-	int theme = themes.indexOf(m_themes_selector-&gt;currentItem()-&gt;text());
+	int theme = themes.indexOf(m_themes_selector-&gt;currentText());
 	if (theme == -1) {
 		theme = themes.indexOf(&quot;Mouse&quot;);
 	}
 	m_themes_selector-&gt;clear();
 	m_themes_selector-&gt;addItems(themes);
-	m_themes_selector-&gt;setCurrentRow(theme);
+	m_themes_selector-&gt;setCurrentIndex(theme);
 }
 
 // ============================================================================
@@ -407,11 +370,11 @@ void Settings::addTheme()
 void Settings::removeTheme()
 {
 	// Find theme
-	if (!m_themes_selector-&gt;currentItem()) {
+	if (m_themes_selector-&gt;currentIndex() == -1) {
 		return;
 	}
 	QString dirpath = homeDataPath();
-	QString file = m_themes_selector-&gt;currentItem()-&gt;text() + &quot;.svg&quot;;
+	QString file = m_themes_selector-&gt;currentText() + &quot;.svg&quot;;
 	if (!QFileInfo(dirpath + '/' + file).exists()) {
 		return;
 	}
@@ -425,13 +388,13 @@ void Settings::removeTheme()
 		}
 
 		// Delete theme from list
-		if (!m_theme-&gt;available().contains(m_themes_selector-&gt;currentItem()-&gt;text())) {
-			delete m_themes_selector-&gt;currentItem();
+		if (!m_theme-&gt;available().contains(m_themes_selector-&gt;currentText())) {
+			m_themes_selector-&gt;removeItem(m_themes_selector-&gt;currentIndex());
 		}
 
 		// Force change to next theme in list
-		themeSelected(m_themes_selector-&gt;currentItem()-&gt;text());
-		QSettings().setValue(&quot;Theme&quot;, m_themes_selector-&gt;currentItem()-&gt;text());
+		themeSelected(m_themes_selector-&gt;currentText());
+		QSettings().setValue(&quot;Theme&quot;, m_themes_selector-&gt;currentText());
 		emit settingsChanged();
 	}
 }
@@ -462,7 +425,7 @@ void Settings::loadSettings()
 	}
 	m_themes_selector-&gt;clear();
 	m_themes_selector-&gt;addItems(themes);
-	m_themes_selector-&gt;setCurrentRow(theme);
+	m_themes_selector-&gt;setCurrentIndex(theme);
 }
 
 // ============================================================================</diff>
      <filename>src/settings.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -24,7 +24,6 @@
 class QCheckBox;
 class QComboBox;
 class QLabel;
-class QListWidget;
 class QPushButton;
 class Theme;
 
@@ -40,7 +39,6 @@ signals:
 
 public slots:
 	virtual void accept();
-	virtual void reject();
 
 private slots:
 	void themeSelected(const QString&amp; theme);
@@ -56,7 +54,7 @@ private:
 	QCheckBox* m_gameplay_time;
 	QCheckBox* m_gameplay_smooth;
 
-	QListWidget* m_themes_selector;
+	QComboBox* m_themes_selector;
 	QLabel* m_themes_preview;
 	QPushButton* m_themes_remove_button;
 	Theme* m_theme;</diff>
      <filename>src/settings.h</filename>
    </modified>
    <modified>
      <diff>@@ -69,10 +69,6 @@ Window::Window()
 	connect(qApp, SIGNAL(aboutToQuit()), m_board, SLOT(saveGame()));
 #endif
 
-	// Create settings window
-	m_settings = new Settings(this);
-	connect(m_settings, SIGNAL(settingsChanged()), m_board, SLOT(loadSettings()));
-
 	// Create scores window
 	m_scores = new Scores(this);
 	connect(m_board, SIGNAL(finished(int, int, int, int)), m_scores, SLOT(addScore(int, int, int, int)));
@@ -136,7 +132,7 @@ void Window::initActions()
 	QMenu* game_menu = QSoftMenuBar::menuFor(this);
 
 	game_menu-&gt;addAction(tr(&quot;Quit Game&quot;), qApp, SLOT(quit()));
-	game_menu-&gt;addAction(tr(&quot;Settings&quot;), m_settings, SLOT(exec()));
+	game_menu-&gt;addAction(tr(&quot;Settings&quot;), this, SLOT(showSettings()));
 	m_hint_action = game_menu-&gt;addAction(tr(&quot;Hint&quot;), m_board, SLOT(hint()));
 	game_menu-&gt;addAction(tr(&quot;High Scores&quot;), m_scores, SLOT(exec()));
 	m_pause_action = game_menu-&gt;addAction(tr(&quot;Pause Game&quot;));
@@ -155,7 +151,7 @@ void Window::initActions()
 	game_menu-&gt;addSeparator();
 	game_menu-&gt;addAction(fetchIcon(&quot;games-highscores&quot;), tr(&quot;High Scores&quot;), m_scores, SLOT(exec()));
 	game_menu-&gt;addSeparator();
-	game_menu-&gt;addAction(fetchIcon(&quot;games-config-options&quot;), tr(&quot;Settings&quot;), m_settings, SLOT(exec()));
+	game_menu-&gt;addAction(fetchIcon(&quot;games-config-options&quot;), tr(&quot;Settings&quot;), this, SLOT(showSettings()));
 	game_menu-&gt;addSeparator();
 	game_menu-&gt;addAction(fetchIcon(&quot;application-exit&quot;), tr(&quot;Quit&quot;), this, SLOT(close()), tr(&quot;Ctrl+Q&quot;));
 
@@ -211,3 +207,12 @@ void Window::newGame()
 }
 
 // ============================================================================
+
+void Window::showSettings()
+{
+	Settings settings(this);
+	connect(&amp;settings, SIGNAL(settingsChanged()), m_board, SLOT(loadSettings()));
+	settings.exec();
+}
+
+// ============================================================================</diff>
      <filename>src/window.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -23,7 +23,6 @@
 #include &lt;QMainWindow&gt;
 class Board;
 class Scores;
-class Settings;
 class QAction;
 
 class Window : public QMainWindow
@@ -40,13 +39,13 @@ protected:
 private slots:
 	void about();
 	void newGame();
+	void showSettings();
 
 private:
 	void initActions();
 
 	Board* m_board;
 	Scores* m_scores;
-	Settings* m_settings;
 	QAction* m_pause_action;
 	QAction* m_hint_action;
 };</diff>
      <filename>src/window.h</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>65eb41af9532e59394dfcd9e2bf9184df2fbd340</id>
    </parent>
  </parents>
  <author>
    <name>Graeme Gott</name>
    <email>graeme@gottcode.org</email>
  </author>
  <url>http://github.com/gottcode/cutemaze/commit/014544f1ab71c989cd64a77b908f4541eaaec63f</url>
  <id>014544f1ab71c989cd64a77b908f4541eaaec63f</id>
  <committed-date>2009-09-21T08:23:54-07:00</committed-date>
  <authored-date>2009-09-19T14:14:13-07:00</authored-date>
  <message>Improve settings dialog code.</message>
  <tree>09eec576d3996f5099e971937975f71159d412ae</tree>
  <committer>
    <name>Graeme Gott</name>
    <email>graeme@gottcode.org</email>
  </committer>
</commit>
