diff options
| author | Eugene Sandulenko | 2009-06-06 17:54:28 +0000 | 
|---|---|---|
| committer | Eugene Sandulenko | 2009-06-06 17:54:28 +0000 | 
| commit | f66da82f0375918c59d6edc6ad806d9530cc1387 (patch) | |
| tree | c658e662d95bfd472272dbaee1d8250457623b6f | |
| parent | 5fc047dddfcad4e712bea97aadd561493f4f388c (diff) | |
| download | scummvm-rg350-f66da82f0375918c59d6edc6ad806d9530cc1387.tar.gz scummvm-rg350-f66da82f0375918c59d6edc6ad806d9530cc1387.tar.bz2 scummvm-rg350-f66da82f0375918c59d6edc6ad806d9530cc1387.zip | |
Improvements to laucher dialog
- Made quicksearch turned off in the launcher game list
- Turn ListWidget into CommandSender
- Turn quicksearch off in launcher game list
- Connect laucher list widget with search box so search is initiated by typing
svn-id: r41269
| -rw-r--r-- | gui/ListWidget.cpp | 51 | ||||
| -rw-r--r-- | gui/ListWidget.h | 9 | ||||
| -rw-r--r-- | gui/launcher.cpp | 10 | 
3 files changed, 42 insertions, 28 deletions
| diff --git a/gui/ListWidget.cpp b/gui/ListWidget.cpp index b96019af04..10e2bc53c3 100644 --- a/gui/ListWidget.cpp +++ b/gui/ListWidget.cpp @@ -33,8 +33,8 @@  namespace GUI { -ListWidget::ListWidget(GuiObject *boss, const String &name) -	: EditableWidget(boss, name) { +ListWidget::ListWidget(GuiObject *boss, const String &name, uint32 cmd) +	: EditableWidget(boss, name), _cmd(cmd) {  	_scrollBar = NULL;  	_textWidth = NULL; @@ -60,10 +60,12 @@ ListWidget::ListWidget(GuiObject *boss, const String &name)  	// FIXME: This flag should come from widget definition  	_editable = true; + +	_quickSelect = true;  } -ListWidget::ListWidget(GuiObject *boss, int x, int y, int w, int h) -	: EditableWidget(boss, x, y, w, h) { +ListWidget::ListWidget(GuiObject *boss, int x, int y, int w, int h, uint32 cmd) +	: EditableWidget(boss, x, y, w, h), _cmd(cmd) {  	_scrollBar = NULL;  	_textWidth = NULL; @@ -234,8 +236,6 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {  		// Quick selection mode: Go to first list item starting with this key  		// (or a substring accumulated from the last couple key presses).  		// Only works in a useful fashion if the list entries are sorted. -		// TODO: Maybe this should be off by default, and instead we add a -		// method "enableQuickSelect()" or so ?  		uint32 time = getMillis();  		if (_quickSelectTime < time) {  			_quickSelectStr = (char)state.ascii; @@ -244,26 +244,29 @@ bool ListWidget::handleKeyDown(Common::KeyState state) {  		}  		_quickSelectTime = time + 300;	// TODO: Turn this into a proper constant (kQuickSelectDelay ?) - -		// FIXME: This is bad slow code (it scans the list linearly each time a -		// key is pressed); it could be much faster. Only of importance if we have -		// quite big lists to deal with -- so for now we can live with this lazy -		// implementation :-) -		int newSelectedItem = 0; -		int bestMatch = 0; -		bool stop; -		for (StringList::const_iterator i = _list.begin(); i != _list.end(); ++i) { -			const int match = matchingCharsIgnoringCase(i->c_str(), _quickSelectStr.c_str(), stop); -			if (match > bestMatch || stop) { -				_selectedItem = newSelectedItem; -				bestMatch = match; -				if (stop) -					break; +		if (_quickSelect) { +			// FIXME: This is bad slow code (it scans the list linearly each time a +			// key is pressed); it could be much faster. Only of importance if we have +			// quite big lists to deal with -- so for now we can live with this lazy +			// implementation :-) +			int newSelectedItem = 0; +			int bestMatch = 0; +			bool stop; +			for (StringList::const_iterator i = _list.begin(); i != _list.end(); ++i) { +				const int match = matchingCharsIgnoringCase(i->c_str(), _quickSelectStr.c_str(), stop); +				if (match > bestMatch || stop) { +					_selectedItem = newSelectedItem; +					bestMatch = match; +					if (stop) +						break; +				} +				newSelectedItem++;  			} -			newSelectedItem++; -		} -		scrollToCurrent(); +			scrollToCurrent(); +		} else { +			sendCommand(_cmd, 0); +		}  	} else if (_editMode) {  		// Class EditableWidget handles all text editing related key presses for us  		handled = EditableWidget::handleKeyDown(state); diff --git a/gui/ListWidget.h b/gui/ListWidget.h index 680a931025..aac853111f 100644 --- a/gui/ListWidget.h +++ b/gui/ListWidget.h @@ -75,10 +75,13 @@ protected:  	int				_scrollBarWidth;  	String			_filter; +	bool			_quickSelect; + +	uint32			_cmd;  public: -	ListWidget(GuiObject *boss, const String &name); -	ListWidget(GuiObject *boss, int x, int y, int w, int h); +	ListWidget(GuiObject *boss, const String &name, uint32 cmd = 0); +	ListWidget(GuiObject *boss, int x, int y, int w, int h, uint32 cmd = 0);  	virtual ~ListWidget();  	virtual Widget *findWidget(int x, int y); @@ -94,6 +97,8 @@ public:  	void setEditable(bool editable)				{ _editable = editable; }  	void scrollTo(int item);  	void scrollToEnd(); +	void enableQuickSelect(bool enable) 		{ _quickSelect = enable; } +	String getQuickSelectString() const 		{ return _quickSelectStr; }  	void setFilter(const String &filter); diff --git a/gui/launcher.cpp b/gui/launcher.cpp index aa147cab16..9cdcbda815 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -65,7 +65,7 @@ enum {  	kLoadGameCmd = 'LOAD',  	kQuitCmd = 'QUIT',  	kSearchCmd = 'SRCH', - +	kListSearchCmd = 'LSSR',  	kCmdGlobalGraphicsOverride = 'OGFX',  	kCmdGlobalAudioOverride = 'OSFX', @@ -523,9 +523,10 @@ LauncherDialog::LauncherDialog()  	_searchWidget = new EditTextWidget(this, "Launcher.Search", _search, kSearchCmd);  	// Add list with game titles -	_list = new ListWidget(this, "Launcher.GameList"); +	_list = new ListWidget(this, "Launcher.GameList", kListSearchCmd);  	_list->setEditable(false);  	_list->setNumberingMode(kListNumberingOff); +	_list->enableQuickSelect(false);  	// Populate the list @@ -923,6 +924,11 @@ void LauncherDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat  	case kSearchCmd:  		_list->setFilter(_searchWidget->getEditString());  		break; +	case kListSearchCmd: +		_searchWidget->setEditString(_list->getQuickSelectString()); +		_searchWidget->draw(); +		_list->setFilter(_list->getQuickSelectString()); +		break;  	default:  		Dialog::handleCommand(sender, cmd, data);  	} | 
