From e996e261f4c10bf85f037d5823724430be247089 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Tue, 13 Nov 2007 22:55:10 +0000 Subject: [PATCH] Please excuse my unilateral action, but I hate sliders. Use a ComboBox for player count selection and for any range parameter of less than 16 elements. git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@497 c613c5cb-e716-0410-b11b-feb51c14d237 --- .../ezgame/client/EZGameConfigurator.as | 30 ++++++++++---- .../client/DefaultFlexTableConfigurator.as | 39 ++++++++++--------- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/as/com/threerings/ezgame/client/EZGameConfigurator.as b/src/as/com/threerings/ezgame/client/EZGameConfigurator.as index 83881057..80efa253 100644 --- a/src/as/com/threerings/ezgame/client/EZGameConfigurator.as +++ b/src/as/com/threerings/ezgame/client/EZGameConfigurator.as @@ -61,13 +61,29 @@ public class EZGameConfigurator extends FlexGameConfigurator for each (var param :Parameter in params) { if (param is RangeParameter) { var range :RangeParameter = (param as RangeParameter); - var slider :HSlider = new HSlider(); - slider.minimum = range.minimum; - slider.maximum = range.maximum; - slider.value = range.start; - slider.liveDragging = true; - slider.snapInterval = 1; - addLabeledControl(param, new LabeledSlider(slider)); + if ((range.maximum - range.minimum) < 16) { + var combo :ComboBox = new ComboBox(); + var values :Array = []; + var startDex :int = 0; + for (var ii :int = range.minimum; ii <= range.maximum; ii++) { + if (ii == range.start) { + startDex = ii; + } + values.push(ii); + } + combo.dataProvider = values; + combo.selectedIndex = startDex; + addLabeledControl(param, combo); + + } else { + var slider :HSlider = new HSlider(); + slider.minimum = range.minimum; + slider.maximum = range.maximum; + slider.value = range.start; + slider.liveDragging = true; + slider.snapInterval = 1; + addLabeledControl(param, new LabeledSlider(slider)); + } } else if (param is ChoiceParameter) { var choice :ChoiceParameter = (param as ChoiceParameter); diff --git a/src/as/com/threerings/parlor/client/DefaultFlexTableConfigurator.as b/src/as/com/threerings/parlor/client/DefaultFlexTableConfigurator.as index 85ceefa4..63131c75 100644 --- a/src/as/com/threerings/parlor/client/DefaultFlexTableConfigurator.as +++ b/src/as/com/threerings/parlor/client/DefaultFlexTableConfigurator.as @@ -24,11 +24,10 @@ package com.threerings.parlor.client { import mx.containers.Grid; import mx.controls.CheckBox; -import mx.controls.HSlider; +import mx.controls.ComboBox; import mx.controls.Label; import com.threerings.flex.GridUtil; -import com.threerings.flex.LabeledSlider; import com.threerings.parlor.data.TableConfig; import com.threerings.parlor.util.ParlorContext; @@ -51,25 +50,28 @@ public class DefaultFlexTableConfigurator extends TableConfigurator allowWatchable :Boolean = true, playersXlate :String = "Players: ", watchableXlate :String = "Watchable: ", privateXlate :String = "Private: ") { - var partyGame :Boolean = minPlayers < 0 && maxPlayers < 0; - + var partyGame :Boolean = (minPlayers < 0) && (maxPlayers < 0); if (minPlayers < 0) { minPlayers = desiredPlayers; } if (maxPlayers < 0) { maxPlayers = desiredPlayers; } - _config.minimumPlayerCount = minPlayers; // create a slider for players, if applicable if (minPlayers != maxPlayers) { - _playerSlider = new HSlider(); - _playerSlider.value = desiredPlayers; - _playerSlider.minimum = minPlayers; - _playerSlider.maximum = maxPlayers; - _playerSlider.liveDragging = true; - _playerSlider.snapInterval = 1; + _players = new ComboBox(); + var values :Array = []; + var startDex :int = 0; + for (var ii :int = minPlayers; ii <= maxPlayers; ii++) { + if (ii == desiredPlayers) { + startDex = ii; + } + values.push(ii); + } + _players.dataProvider = values; + _players.selectedIndex = startDex; } else { _config.desiredPlayerCount = desiredPlayers; @@ -98,12 +100,11 @@ public class DefaultFlexTableConfigurator extends TableConfigurator var gconf :FlexGameConfigurator = (_gameConfigurator as FlexGameConfigurator); - if (_playerSlider != null) { + if (_players != null) { var playerLabel :Label = new Label(); playerLabel.text = _playersXlate; playerLabel.styleName = "lobbyLabel"; - - gconf.addControl(playerLabel, new LabeledSlider(_playerSlider)); + gconf.addControl(playerLabel, _players); } if (_watchableCheck != null) { @@ -122,7 +123,7 @@ public class DefaultFlexTableConfigurator extends TableConfigurator // documentation inherited override public function isEmpty () :Boolean { - return (_playerSlider == null) && (_watchableCheck == null); + return (_players == null) && (_watchableCheck == null); } // documentation inherited @@ -130,8 +131,8 @@ public class DefaultFlexTableConfigurator extends TableConfigurator { super.flushTableConfig(); - if (_playerSlider != null) { - _config.desiredPlayerCount = _playerSlider.value; + if (_players != null) { + _config.desiredPlayerCount = int(_players.selectedItem); } // TODO - it is wacky for the TableConfig.privateTable to mean two different things. // It should be extended to have separate privateTable and watchableTable options. @@ -142,8 +143,8 @@ public class DefaultFlexTableConfigurator extends TableConfigurator } } - /** A slider for configuring the number of players at the table. */ - protected var _playerSlider :HSlider; + /** A component for configuring the number of players at the table. */ + protected var _players :ComboBox; /** A checkbox to allow the table creator to specify if the table is watchable */ protected var _watchableCheck :CheckBox;