[Scummvm-cvs-logs] SF.net SVN: scummvm:[50971] scummvm/branches/gsoc2010-testbed/engines/ testbed

sud03r at users.sourceforge.net sud03r at users.sourceforge.net
Sun Jul 18 00:32:32 CEST 2010


Revision: 50971
          http://scummvm.svn.sourceforge.net/scummvm/?rev=50971&view=rev
Author:   sud03r
Date:     2010-07-17 22:32:31 +0000 (Sat, 17 Jul 2010)

Log Message:
-----------
Implemented scrollable checkbox like behaviour using ListWidget

Modified Paths:
--------------
    scummvm/branches/gsoc2010-testbed/engines/testbed/config.cpp
    scummvm/branches/gsoc2010-testbed/engines/testbed/config.h
    scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.h

Modified: scummvm/branches/gsoc2010-testbed/engines/testbed/config.cpp
===================================================================
--- scummvm/branches/gsoc2010-testbed/engines/testbed/config.cpp	2010-07-17 22:11:35 UTC (rev 50970)
+++ scummvm/branches/gsoc2010-testbed/engines/testbed/config.cpp	2010-07-17 22:32:31 UTC (rev 50971)
@@ -27,49 +27,71 @@
 
 namespace Testbed {
 
-TestbedOptionsDialog::TestbedOptionsDialog() : GUI::OptionsDialog("Select", 120, 120, 360, 200), _hOffset(15), _vOffset(15), _boxWidth(300), _boxHeight(10) {
-	new GUI::StaticTextWidget(this, _hOffset, _vOffset, _boxWidth, _boxHeight, "Select testsuites to Execute", Graphics::kTextAlignCenter);
-	_vOffset += 20;
-	addCheckbox("FS");
-	addCheckbox("GFX");
-	addCheckbox("Savegames");
-	addCheckbox("Misc");
-	addCheckbox("Events");
-	new GUI::ButtonWidget(this, 80 , _vOffset + 10, 80, 25, "Continue", GUI::kOKCmd, 'C');
-	new GUI::ButtonWidget(this, 200, _vOffset + 10, 80, 25, "Exit", GUI::kCloseCmd, 'X');
+TestbedOptionsDialog::TestbedOptionsDialog(Common::Array<Testsuite *> &tsList, TestbedConfigManager *tsConfMan) : GUI::Dialog("Browser") {
+	
+	_testbedConfMan = tsConfMan;
+	
+	new GUI::StaticTextWidget(this, "Browser.Headline", "Select testsuites to Execute, selected entries are shown in dark");
+	_testListDisplay = new TestbedListWidget(this, "Browser.List");
+	_testListDisplay->setNumberingMode(GUI::kListNumberingOff);
+
+	// Construct a String Array
+	Common::Array<Testsuite *>::const_iterator iter;
+
+	for (iter = tsList.begin(); iter != tsList.end(); iter++) {
+		_testSuiteArray.push_back((*iter)->getName());
+		_colors.push_back(GUI::ThemeEngine::kFontColorAlternate);
+	}
+	
+	_testListDisplay->setList(_testSuiteArray, &_colors);
+
+	new GUI::ButtonWidget(this, "Browser.Cancel", "Continue", GUI::kCloseCmd, 'C');
+	// XXX: Add more commands for this
+	new GUI::ButtonWidget(this, "Browser.Choose", "Exit", GUI::kCloseCmd, 'X');
 }
 
 TestbedOptionsDialog::~TestbedOptionsDialog() {}
 
-void TestbedOptionsDialog::addCheckbox(const Common::String &tsName) {
-	_checkBoxes.push_back(new GUI::CheckboxWidget(this, _hOffset, _vOffset, _boxWidth, _boxHeight, tsName));
-	_vOffset += 20;
+void TestbedOptionsDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) {
+	Testsuite *ts;
+	switch (cmd) {
+	case kSelectionToggle:
+		ts  = _testbedConfMan->getTestsuiteByName(_testListDisplay->getSelectedString());
+		if (ts) {
+			ts->enable(!ts->isEnabled());
+			_testListDisplay->changeColor();
+		}
+	default:
+		GUI::Dialog::handleCommand(sender, cmd, data);
+	}
 }
 
-bool TestbedOptionsDialog::isEnabled(const Common::String &tsName) {
-	for (uint i = 0; i < _checkBoxes.size(); i++) {
-		if (_checkBoxes[i]->getLabel().equalsIgnoreCase(tsName)) {
-			return _checkBoxes[i]->getState();
-		}
+bool TestbedConfigManager::isEnabled(const Common::String &tsName) {
+	Testsuite *ts = getTestsuiteByName(tsName);
+	return ts ? ts->isEnabled() : false;
+}
+
+
+void TestbedConfigManager::enableTestsuite(const Common::String &name, bool enable) {
+	Testsuite *ts = getTestsuiteByName(name);
+	if (ts) {
+		ts->enable(enable);
+	} else {
+		warning("No matches found for %s\n", name.c_str());
 	}
-	return false;
 }
 
-void TestbedConfigManager::enableTestsuite(const Common::String &name, bool enable) {
+Testsuite *TestbedConfigManager::getTestsuiteByName(const Common::String &name) {
 	Common::Array<Testsuite *>::const_iterator iter;
 
 	for (iter = _testsuiteList.begin(); iter != _testsuiteList.end(); iter++) {
 		if (name.equalsIgnoreCase((*iter)->getName())) {
-			(*iter)->enable(enable);
-			break;
+			return *iter;
 		}
 	}
-
-	return;
+	return 0;
 }
 
-
-
 void TestbedConfigManager::selectTestsuites() {
 
 
@@ -96,7 +118,7 @@
 	if (Testsuite::handleInteractiveInput(prompt, "Proceed?", "Customize", kOptionRight)) {
 
 		// Select testsuites using checkboxes
-		TestbedOptionsDialog tbd;
+		TestbedOptionsDialog tbd(_testsuiteList, this);
 		tbd.runModal();
 
 		// check if user wanted to exit.
@@ -104,15 +126,6 @@
 			return;
 		}
 
-		// Enable selected testsuites
-		Common::String tsName;
-		for (uint i = 0; i < _testsuiteList.size(); i++) {
-			tsName = _testsuiteList[i]->getName();
-			if (tbd.isEnabled(tsName)) {
-				enableTestsuite(tsName, true);
-			}
-		}
-
 	}
 }
 

Modified: scummvm/branches/gsoc2010-testbed/engines/testbed/config.h
===================================================================
--- scummvm/branches/gsoc2010-testbed/engines/testbed/config.h	2010-07-17 22:11:35 UTC (rev 50970)
+++ scummvm/branches/gsoc2010-testbed/engines/testbed/config.h	2010-07-17 22:32:31 UTC (rev 50971)
@@ -25,36 +25,70 @@
 #ifndef TESTBED_CONFIG_H
 #define TESTBED_CONFIG_H
 
-#include "testbed/testsuite.h"
+
 #include "common/array.h"
+#include "common/str-array.h"
+#include "common/tokenizer.h"
+
 #include "gui/options.h"
+#include "gui/ThemeEngine.h"
+#include "gui/ListWidget.h"
 
+#include "testbed/testsuite.h"
+
 namespace Testbed {
 
+enum {
+	kSelectionToggle = 99 // Some random Number
+};
+
 class TestbedConfigManager {
 public:
 	TestbedConfigManager(Common::Array<Testsuite *> &tList) : _testsuiteList(tList) {}
 	~TestbedConfigManager() {}
 	void selectTestsuites();
+	Testsuite *getTestsuiteByName(const Common::String &name);
+	bool isEnabled(const Common::String &tsName);
 private:
 	Common::Array<Testsuite *> &_testsuiteList;
 	void enableTestsuite(const Common::String &name, bool enable);
 	void parseConfigFile() {}
 };
 
-class TestbedOptionsDialog : public GUI::OptionsDialog {
+class TestbedListWidget : public GUI::ListWidget {
 public:
-	TestbedOptionsDialog();
+	TestbedListWidget(GUI::Dialog *boss, const Common::String &name) : GUI::ListWidget(boss, name){}
+	void handleMouseUp(int x, int y, int button, int clickCount) {
+		// If the mouse is clicked once, toggle the selection as it happens in checkboxes.
+		sendCommand(kSelectionToggle, _selectedItem);
+	}
+
+	void changeColor() {
+		// Using Font Color Mechanism to highlight selected entries.
+		// Might not be detectable in some cases
+		if (_listColors.size() >= 2) {
+			if (GUI::ThemeEngine::kFontColorNormal == _listColors[_selectedItem]) {
+				_listColors[_selectedItem] = GUI::ThemeEngine::kFontColorAlternate;
+			} else if (GUI::ThemeEngine::kFontColorAlternate == _listColors[_selectedItem]) {
+				_listColors[_selectedItem] = GUI::ThemeEngine::kFontColorNormal;
+			}
+			draw();
+		}
+	}
+
+};
+
+class TestbedOptionsDialog : public GUI::Dialog {
+public:
+	TestbedOptionsDialog(Common::Array<Testsuite *> &tsList, TestbedConfigManager *tsConfMan);
 	~TestbedOptionsDialog();
-	void addCheckbox(const Common::String &tsName);
-	bool isEnabled(const Common::String &tsName);
+	void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data);
 
 private:
-	Common::Array<GUI::CheckboxWidget *> _checkBoxes;
-	const int _hOffset; // current offset from left
-	int _vOffset; // current offset from top
-	const int _boxWidth;
-	const int _boxHeight;
+	GUI::ListWidget::ColorList _colors;
+	Common::StringArray _testSuiteArray;
+	TestbedListWidget *_testListDisplay;
+	TestbedConfigManager *_testbedConfMan;
 };
 
 } // End of namespace Testbed

Modified: scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.h
===================================================================
--- scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.h	2010-07-17 22:11:35 UTC (rev 50970)
+++ scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.h	2010-07-17 22:32:31 UTC (rev 50971)
@@ -46,12 +46,6 @@
 	virtual Common::Error run();
 
 	/**
-	 * All testsuites are disabled by default
-	 * To enable testsuite X, call enableTestsuite("X", true);
-	 */
-	void enableTestsuite(const Common::String &name, bool enable);
-
-	/**
 	 * Invokes configured testsuites.
 	 */
 	void invokeTestsuites();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list