diff --git a/binaries/data/mods/mod/gui/gui.rnc b/binaries/data/mods/mod/gui/gui.rnc index bd075eebae..55e182ad86 100644 --- a/binaries/data/mods/mod/gui/gui.rnc +++ b/binaries/data/mods/mod/gui/gui.rnc @@ -47,6 +47,7 @@ base_settings = # Defaults are not put in here, because it ruins the concept of styles. ex_settings = attribute anchor { valign }?& + attribute auto_scroll { bool }?& attribute buffer_zone { xsd:decimal }?& attribute buffer_width { xsd:decimal }?& attribute button_width { xsd:decimal }?& diff --git a/binaries/data/mods/mod/gui/gui.rng b/binaries/data/mods/mod/gui/gui.rng index 974c95ca96..c1c8338a7e 100644 --- a/binaries/data/mods/mod/gui/gui.rng +++ b/binaries/data/mods/mod/gui/gui.rng @@ -174,6 +174,11 @@ + + + + + diff --git a/binaries/data/mods/mod/gui/modmod/modmod.xml b/binaries/data/mods/mod/gui/modmod/modmod.xml index 5108e7d5ef..765295fa96 100644 --- a/binaries/data/mods/mod/gui/modmod/modmod.xml +++ b/binaries/data/mods/mod/gui/modmod/modmod.xml @@ -62,6 +62,7 @@ selected_column_order="1" size="0 25 100%-2 100%" font="sans-stroke-13" + auto_scroll="true" > showModDescription(this.name); applyFilters(); @@ -113,6 +114,7 @@ size="0 25 96%-5 100%" font="sans-stroke-13" tooltip_style="pgToolTip" + auto_scroll="true" > showModDescription(this.name); disableMod(); diff --git a/binaries/data/mods/public/gui/loadgame/load.xml b/binaries/data/mods/public/gui/loadgame/load.xml index 2b5b34480f..4e5811d2ae 100644 --- a/binaries/data/mods/public/gui/loadgame/load.xml +++ b/binaries/data/mods/public/gui/loadgame/load.xml @@ -22,6 +22,7 @@ sortable="true" size="24 4 100%-24 100%-70" type="olist" + auto_scroll="true" > selectionChanged(); init(); diff --git a/binaries/data/mods/public/gui/lobby/lobby.js b/binaries/data/mods/public/gui/lobby/lobby.js index 6f9bbbc697..b41fdfac47 100644 --- a/binaries/data/mods/public/gui/lobby/lobby.js +++ b/binaries/data/mods/public/gui/lobby/lobby.js @@ -801,6 +801,7 @@ function selectGameFromPlayername() if (g_SelectedPlayer != splitRatingFromNick(player.Name).nick) continue; + gameList.auto_scroll = true; if (player.Team == "observer") { foundAsObserver = true; @@ -1084,6 +1085,8 @@ function updateGameList() // Change these last, otherwise crash gamesBox.list = list; gamesBox.list_data = list_data; + + gamesBox.auto_scroll = false; gamesBox.selected = selectedGameIndex; updateGameSelection(); diff --git a/binaries/data/mods/public/gui/replaymenu/replay_menu.xml b/binaries/data/mods/public/gui/replaymenu/replay_menu.xml index 280e1b34fb..90917ba079 100644 --- a/binaries/data/mods/public/gui/replaymenu/replay_menu.xml +++ b/binaries/data/mods/public/gui/replaymenu/replay_menu.xml @@ -57,6 +57,7 @@ selected_column="months" selected_column_order="-1" font="sans-stroke-13" + auto_scroll="true" > displayReplayDetails(); diff --git a/source/gui/CList.cpp b/source/gui/CList.cpp index 03c8cbd56a..74ea7135f9 100644 --- a/source/gui/CList.cpp +++ b/source/gui/CList.cpp @@ -45,6 +45,7 @@ CList::CList() AddSetting(GUIST_CColor, "textcolor"); AddSetting(GUIST_CColor, "textcolor_selected"); AddSetting(GUIST_int, "selected"); // Index selected. -1 is none. + AddSetting(GUIST_bool, "auto_scroll"); AddSetting(GUIST_int, "hovered"); AddSetting(GUIST_CStrW, "tooltip"); AddSetting(GUIST_CStr, "tooltip_style"); @@ -56,6 +57,7 @@ CList::CList() GUI::SetSetting(this, "scrollbar", false); GUI::SetSetting(this, "selected", -1); GUI::SetSetting(this, "hovered", -1); + GUI::SetSetting(this, "auto_scroll", false); // Add scroll-bar CGUIScrollBarVertical* bar = new CGUIScrollBarVertical(); @@ -161,7 +163,12 @@ void CList::HandleMessage(SGUIMessage& Message) { // TODO: Check range - UpdateAutoScroll(); + bool auto_scroll; + + GUI::GetSetting(this, "auto_scroll", auto_scroll); + + if (auto_scroll) + UpdateAutoScroll(); // TODO only works if lower-case, shouldn't it be made case sensitive instead? ScriptEvent("selectionchange");