diff --git a/changelog b/changelog
index 2240e577fae..6733f804917 100644
--- a/changelog
+++ b/changelog
@@ -43,6 +43,7 @@ Version 1.13.2+dev:
* Implemented a new GUI2 Attack dialog
* Added gui2 comboboxes.
* Removed prompt when purging the WML cache from Preferences.
+ * Implemented a new GUI2 Preferences dialog
* WML engine:
* Added new event "unit placed", which triggers when (and regardless of how)
a unit appears on the map.
@@ -56,6 +57,7 @@ Version 1.13.2+dev:
* Added {CURRENT_FILE} and {CURRENT_DIRECTORY} macros.
* add support for relative dirs in wesnoth.dofile/require
* Added name= and write_name= attributes in [item]
+ * Added description_alignment= key to [campaign]
* Miscellaneous and bug fixes:
* Fix the new log code on Windows to actually use Unicode-aware functions
in a couple of places so Wesnoth does not quit on startup when trying to
diff --git a/data/campaigns/An_Orcish_Incursion/scenarios/01_Defend_the_Forest.cfg b/data/campaigns/An_Orcish_Incursion/scenarios/01_Defend_the_Forest.cfg
index 640a4967bd1..8c11f774260 100644
--- a/data/campaigns/An_Orcish_Incursion/scenarios/01_Defend_the_Forest.cfg
+++ b/data/campaigns/An_Orcish_Incursion/scenarios/01_Defend_the_Forest.cfg
@@ -68,7 +68,6 @@
id=Lomarfel
name= _ "Lomarfel"
profile=portraits/lomarfel.png
- unrenamable=yes
x,y=15,18
[modifications]
{TRAIT_LOYAL}
diff --git a/data/campaigns/An_Orcish_Incursion/scenarios/07_Showdown.cfg b/data/campaigns/An_Orcish_Incursion/scenarios/07_Showdown.cfg
index 004896bfeca..9beac1cecdc 100644
--- a/data/campaigns/An_Orcish_Incursion/scenarios/07_Showdown.cfg
+++ b/data/campaigns/An_Orcish_Incursion/scenarios/07_Showdown.cfg
@@ -119,7 +119,6 @@
id=Lomarfel
name= _ "Lomarfel"
profile=portraits/lomarfel.png
- unrenamable=yes
x,y=16,18
[modifications]
{TRAIT_LOYAL}
@@ -140,7 +139,6 @@
id=Celodith
name= _ "Celodith"
gender=female
- unrenamable=yes
x,y=17,18
side=1
[modifications]
@@ -161,7 +159,6 @@
id=Earanduil
name= _ "Earanduil"
gender=male
- unrenamable=yes
x,y=17,19
side=1
[modifications]
@@ -182,7 +179,6 @@
id=Elvyniel
name= _ "Elvyniel"
gender=female
- unrenamable=yes
x,y=18,18
side=1
[modifications]
@@ -203,7 +199,6 @@
id=Delorfilith
name= _ "Delorfilith"
gender=male
- unrenamable=yes
x,y=18,19
side=1
[modifications]
diff --git a/data/campaigns/Delfadors_Memoirs/scenarios/12_Terror_at_the_Ford_of_Parthyn.cfg b/data/campaigns/Delfadors_Memoirs/scenarios/12_Terror_at_the_Ford_of_Parthyn.cfg
index 8283a5f81cf..8bfd1b24820 100644
--- a/data/campaigns/Delfadors_Memoirs/scenarios/12_Terror_at_the_Ford_of_Parthyn.cfg
+++ b/data/campaigns/Delfadors_Memoirs/scenarios/12_Terror_at_the_Ford_of_Parthyn.cfg
@@ -100,7 +100,6 @@
type=Orcish Warlord
id=Upgar
name= _ "Upgar"
- unrenamable=yes
side=2
controller=ai
canrecruit=yes
@@ -155,7 +154,6 @@
type=Lieutenant
id=Niktor
name= _ "Niktor"
- unrenamable=yes
side=4
controller=ai
canrecruit=yes
@@ -182,7 +180,6 @@
type=White Mage
id=Arpus
name= _ "Arpus"
- unrenamable=yes
side=5
controller=ai
canrecruit=yes
diff --git a/data/campaigns/Descent_Into_Darkness/scenarios/07_A_Small_Favor.cfg b/data/campaigns/Descent_Into_Darkness/scenarios/07_A_Small_Favor.cfg
index b3d678de4d2..42e7f56ca07 100644
--- a/data/campaigns/Descent_Into_Darkness/scenarios/07_A_Small_Favor.cfg
+++ b/data/campaigns/Descent_Into_Darkness/scenarios/07_A_Small_Favor.cfg
@@ -156,7 +156,6 @@
id=Taylor
name= _ "Taylor"
canrecruit=yes
- unrenamable=yes
fog=yes
color=green
diff --git a/data/campaigns/Eastern_Invasion/scenarios/04c_Mal-Ravanals_Capital.cfg b/data/campaigns/Eastern_Invasion/scenarios/04c_Mal-Ravanals_Capital.cfg
index f437ddb9c5e..aedfe032f6c 100644
--- a/data/campaigns/Eastern_Invasion/scenarios/04c_Mal-Ravanals_Capital.cfg
+++ b/data/campaigns/Eastern_Invasion/scenarios/04c_Mal-Ravanals_Capital.cfg
@@ -222,6 +222,7 @@
type=Paladin
id=Terraent
name= _ "Terraent"
+ unrenamable=yes
x,y=$prison_locations[$i].x,$prison_locations[$i].y
random_traits=no
facing=sw
diff --git a/data/campaigns/Eastern_Invasion/scenarios/07a_The_Crossing.cfg b/data/campaigns/Eastern_Invasion/scenarios/07a_The_Crossing.cfg
index 5d4118721f1..5a2cefc070e 100644
--- a/data/campaigns/Eastern_Invasion/scenarios/07a_The_Crossing.cfg
+++ b/data/campaigns/Eastern_Invasion/scenarios/07a_The_Crossing.cfg
@@ -73,6 +73,7 @@
type=Ogre
id=Grug
name= _ "Grug"
+ unrenamable=yes
side=4
canrecruit=yes
facing=sw
diff --git a/data/campaigns/Eastern_Invasion/scenarios/12_Evacuation.cfg b/data/campaigns/Eastern_Invasion/scenarios/12_Evacuation.cfg
index ee6f9de9c96..5adc8335482 100644
--- a/data/campaigns/Eastern_Invasion/scenarios/12_Evacuation.cfg
+++ b/data/campaigns/Eastern_Invasion/scenarios/12_Evacuation.cfg
@@ -185,6 +185,7 @@
[unit]
id=Engineer
name= _ "Engineer"
+ unrenamable=yes
type=Red Mage
x,y=18,5
side=1
diff --git a/data/campaigns/Heir_To_The_Throne/scenarios/04_The_Bay_of_Pearls.cfg b/data/campaigns/Heir_To_The_Throne/scenarios/04_The_Bay_of_Pearls.cfg
index 747142d823d..d89b604ff2e 100644
--- a/data/campaigns/Heir_To_The_Throne/scenarios/04_The_Bay_of_Pearls.cfg
+++ b/data/campaigns/Heir_To_The_Throne/scenarios/04_The_Bay_of_Pearls.cfg
@@ -326,7 +326,6 @@
id=Gwaba
type=Merman Fighter
name= _ "Gwaba"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_STRONG}
@@ -340,7 +339,6 @@
id=Nepba
type=Merman Fighter
name= _ "Nepba"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_INTELLIGENT}
@@ -354,7 +352,6 @@
id=Triram
type=Merman Fighter
name= _ "Triram"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_RESILIENT}
@@ -370,7 +367,6 @@
id=Mriram
type=Merman Fighter
name= _ "Mriram"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_STRONG}
@@ -403,7 +399,6 @@
id=Mabooa
type=Merman Fighter
name= _ "Mabooa"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_RESILIENT}
@@ -419,7 +414,6 @@
id=Earooa
type=Merman Fighter
name= _ "Earooa"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_STRONG}
@@ -433,7 +427,6 @@
id=Nethuns
type=Merman Fighter
name= _ "Nethuns"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_INTELLIGENT}
@@ -448,7 +441,6 @@
id=Gwoama
type=Merman Fighter
name= _ "Gwoama"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_RESILIENT}
@@ -481,7 +473,6 @@
id=Kaba
type=Merman Fighter
name= _ "Kaba"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_QUICK}
@@ -497,7 +488,6 @@
id=Kwaboo
type=Merman Fighter
name= _ "Kwaboo"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_INTELLIGENT}
@@ -531,7 +521,6 @@
id=Gwimli
type=Merman Fighter
name= _ "Gwimli"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_STRONG}
@@ -545,7 +534,6 @@
id=Jarla
type=Merman Fighter
name= _ "Jarla"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_INTELLIGENT}
@@ -561,7 +549,6 @@
id=Gwarloa
type=Merman Fighter
name= _ "Gwarloa"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_RESILIENT}
@@ -594,7 +581,6 @@
id=Heldaga
type=Merman Fighter
name= _ "Heldaga"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_QUICK}
@@ -608,7 +594,6 @@
id=Apalala
type=Merman Hunter
name= _ "Apalala"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_STRONG}
@@ -622,7 +607,6 @@
id=Oceania
type=Mermaid Initiate
name= _ "Oceania"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_INTELLIGENT}
@@ -637,7 +621,6 @@
id=Elcmar
type=Merman Fighter
name= _ "Elcmar"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_STRONG}
@@ -651,7 +634,6 @@
id=Aigaion
type=Merman Fighter
name= _ "Aigaion"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_QUICK}
@@ -666,7 +648,6 @@
id=Tini
type=Merman Fighter
name= _ "Tini"
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
{TRAIT_RESILIENT}
diff --git a/data/campaigns/Heir_To_The_Throne/scenarios/08_The_Princess_of_Wesnoth.cfg b/data/campaigns/Heir_To_The_Throne/scenarios/08_The_Princess_of_Wesnoth.cfg
index cc7d6d1c1ca..ef96fbc7062 100644
--- a/data/campaigns/Heir_To_The_Throne/scenarios/08_The_Princess_of_Wesnoth.cfg
+++ b/data/campaigns/Heir_To_The_Throne/scenarios/08_The_Princess_of_Wesnoth.cfg
@@ -85,7 +85,6 @@
type=Princess
id="Li'sar"
name= _ "Li’sar"
- unrenamable=yes
profile=portraits/lisar.png
side=2
canrecruit=yes
diff --git a/data/campaigns/Heir_To_The_Throne/scenarios/15_The_Lost_General.cfg b/data/campaigns/Heir_To_The_Throne/scenarios/15_The_Lost_General.cfg
index 00fddb0f1ac..e8729131b86 100644
--- a/data/campaigns/Heir_To_The_Throne/scenarios/15_The_Lost_General.cfg
+++ b/data/campaigns/Heir_To_The_Throne/scenarios/15_The_Lost_General.cfg
@@ -190,7 +190,6 @@
side=2
x,y=2,21
random_traits=no
- unrenamable=yes
[modifications]
{TRAIT_LOYAL}
diff --git a/data/campaigns/Sceptre_of_Fire/scenarios/1_A_Bargain_is_Struck.cfg b/data/campaigns/Sceptre_of_Fire/scenarios/1_A_Bargain_is_Struck.cfg
index 9fdc7814b67..2d942099c4d 100644
--- a/data/campaigns/Sceptre_of_Fire/scenarios/1_A_Bargain_is_Struck.cfg
+++ b/data/campaigns/Sceptre_of_Fire/scenarios/1_A_Bargain_is_Struck.cfg
@@ -16,6 +16,7 @@
type=Dwarvish Fighter
id=Rugnur
name= _ "Rugnur"
+ unrenamable=yes
side=1
canrecruit=yes
facing=sw
@@ -305,6 +306,7 @@
side=1
id=Alanin
name= _ "Alanin"
+ unrenamable=yes
{IS_HERO}
profile=portraits/alanin.png
[modifications]
diff --git a/data/campaigns/Sceptre_of_Fire/scenarios/2_Closing_the_Gates.cfg b/data/campaigns/Sceptre_of_Fire/scenarios/2_Closing_the_Gates.cfg
index a0ec832060f..0dccf3e1aaf 100644
--- a/data/campaigns/Sceptre_of_Fire/scenarios/2_Closing_the_Gates.cfg
+++ b/data/campaigns/Sceptre_of_Fire/scenarios/2_Closing_the_Gates.cfg
@@ -211,6 +211,7 @@
side=1
id=Baglur
name= _ "Baglur"
+ unrenamable=yes
{IS_HERO}
profile=portraits/baglur.png
facing=sw
diff --git a/data/campaigns/Sceptre_of_Fire/scenarios/3_Searching_for_the_Runecrafter.cfg b/data/campaigns/Sceptre_of_Fire/scenarios/3_Searching_for_the_Runecrafter.cfg
index 48fc50b86f0..380980094ae 100644
--- a/data/campaigns/Sceptre_of_Fire/scenarios/3_Searching_for_the_Runecrafter.cfg
+++ b/data/campaigns/Sceptre_of_Fire/scenarios/3_Searching_for_the_Runecrafter.cfg
@@ -286,6 +286,7 @@
type=Gryphon
id=Krawg
name= _ "Krawg"
+ unrenamable=yes
{IS_HERO}
x,y=5,24
side=1
@@ -494,6 +495,7 @@
type=Dwarvish Runemaster
id=Thursagan
name= _ "Thursagan"
+ unrenamable=yes
{IS_HERO}
profile=portraits/thursagan.png
advances_to=Dwarvish Arcanister
diff --git a/data/campaigns/Sceptre_of_Fire/scenarios/5_Hills_of_the_Shorbear_Clan.cfg b/data/campaigns/Sceptre_of_Fire/scenarios/5_Hills_of_the_Shorbear_Clan.cfg
index 665b293952b..9b2c9e67894 100644
--- a/data/campaigns/Sceptre_of_Fire/scenarios/5_Hills_of_the_Shorbear_Clan.cfg
+++ b/data/campaigns/Sceptre_of_Fire/scenarios/5_Hills_of_the_Shorbear_Clan.cfg
@@ -183,6 +183,7 @@
type=Dwarvish Lord
id=Durstorn
name= _ "Durstorn"
+ unrenamable=yes
side=1
{IS_HERO}
profile=portraits/durstorn-insane.png
diff --git a/data/campaigns/Son_Of_The_Black_Eye/scenarios/01_End_of_Peace.cfg b/data/campaigns/Son_Of_The_Black_Eye/scenarios/01_End_of_Peace.cfg
index 72b9eb4ab98..4469a2b8c40 100644
--- a/data/campaigns/Son_Of_The_Black_Eye/scenarios/01_End_of_Peace.cfg
+++ b/data/campaigns/Son_Of_The_Black_Eye/scenarios/01_End_of_Peace.cfg
@@ -54,6 +54,7 @@
type=Orcish Leader
id="Kapou'e"
name= _ "Kapou’e"
+ unrenamable=yes
profile=portraits/kapoue.png
side=1
canrecruit=yes
diff --git a/data/campaigns/Son_Of_The_Black_Eye/scenarios/03_Toward_Mountains_of_Haag.cfg b/data/campaigns/Son_Of_The_Black_Eye/scenarios/03_Toward_Mountains_of_Haag.cfg
index b0c12793cdc..08939e3eac7 100644
--- a/data/campaigns/Son_Of_The_Black_Eye/scenarios/03_Toward_Mountains_of_Haag.cfg
+++ b/data/campaigns/Son_Of_The_Black_Eye/scenarios/03_Toward_Mountains_of_Haag.cfg
@@ -246,6 +246,7 @@
[unit]
id=Grüü
name= _ "Grüü"
+ unrenamable=yes
type=Troll Hero
side=3
x=30
diff --git a/data/campaigns/Son_Of_The_Black_Eye/scenarios/10_Saving_Inarix.cfg b/data/campaigns/Son_Of_The_Black_Eye/scenarios/10_Saving_Inarix.cfg
index f0c07111635..629dbede146 100644
--- a/data/campaigns/Son_Of_The_Black_Eye/scenarios/10_Saving_Inarix.cfg
+++ b/data/campaigns/Son_Of_The_Black_Eye/scenarios/10_Saving_Inarix.cfg
@@ -238,6 +238,7 @@
[+unit]
random_traits=no
profile=portraits/inarix.png
+ unrenamable=yes
[/unit]
{GENERIC_UNIT 1 "Saurian Skirmisher" 8 42}
diff --git a/data/campaigns/Son_Of_The_Black_Eye/utils/utils.cfg b/data/campaigns/Son_Of_The_Black_Eye/utils/utils.cfg
index f346163ffb1..7e84b1a8746 100644
--- a/data/campaigns/Son_Of_The_Black_Eye/utils/utils.cfg
+++ b/data/campaigns/Son_Of_The_Black_Eye/utils/utils.cfg
@@ -4,6 +4,7 @@
[unit]
id={ID_STRING}
name={NAME_STRING}
+ unrenamable=yes
type=Old Orcish Shaman
profile=portraits/old_orcish_shaman.png
side={SIDE}
@@ -21,6 +22,7 @@
[unit]
id={ID_STRING}
name={NAME_STRING}
+ unrenamable=yes
type=Novice Orcish Shaman
profile=portraits/young_orcish_shaman.png
side={SIDE}
@@ -38,6 +40,7 @@
[unit]
id={ID_STRING}
name={NAME_STRING}
+ unrenamable=yes
type=Orcish Shaman
profile=portraits/orcish_shaman.png
side={SIDE}
@@ -72,6 +75,7 @@
type=Orcish Warlord
id="Al'Brock"
name= _ "Al’Brock"
+ unrenamable=yes
side=2
canrecruit=yes
profile=portraits/albrock.png
@@ -85,6 +89,7 @@
type=Orcish Warlord
id="Flar'Tar"
name= _ "Flar’Tar"
+ unrenamable=yes
side=3
canrecruit=yes
profile=portraits/flartar.png
diff --git a/data/campaigns/The_Rise_Of_Wesnoth/scenarios/02_The_Fall.cfg b/data/campaigns/The_Rise_Of_Wesnoth/scenarios/02_The_Fall.cfg
index ea7fa10a0cf..e33cf131188 100644
--- a/data/campaigns/The_Rise_Of_Wesnoth/scenarios/02_The_Fall.cfg
+++ b/data/campaigns/The_Rise_Of_Wesnoth/scenarios/02_The_Fall.cfg
@@ -322,6 +322,7 @@
[unit]
id=Lady Outlaw
name= _ "Lady Outlaw"
+ unrenamable=yes
type=$wesfolk_leader_store.type
gender=female
side=1
diff --git a/data/campaigns/The_Rise_Of_Wesnoth/scenarios/04a_The_Swamp_of_Esten.cfg b/data/campaigns/The_Rise_Of_Wesnoth/scenarios/04a_The_Swamp_of_Esten.cfg
index 2509aaa62a0..0b8bb93d58f 100644
--- a/data/campaigns/The_Rise_Of_Wesnoth/scenarios/04a_The_Swamp_of_Esten.cfg
+++ b/data/campaigns/The_Rise_Of_Wesnoth/scenarios/04a_The_Swamp_of_Esten.cfg
@@ -401,7 +401,6 @@
id=Minister Edren
name= _ "Minister Edren"
profile="portraits/edmond.png"
- unrenamable=yes
x={X}
y={Y}
[modifications]
@@ -576,7 +575,6 @@ Enter at Your Own Risk!"
id=Sir Ruddry
name= _ "Sir Ruddry"
profile="portraits/ruddry.png"
- unrenamable=yes
x=35
y=35
[modifications]
diff --git a/data/campaigns/The_Rise_Of_Wesnoth/scenarios/07_Return_to_Oldwood.cfg b/data/campaigns/The_Rise_Of_Wesnoth/scenarios/07_Return_to_Oldwood.cfg
index bc76b053852..fb85a4959e0 100644
--- a/data/campaigns/The_Rise_Of_Wesnoth/scenarios/07_Return_to_Oldwood.cfg
+++ b/data/campaigns/The_Rise_Of_Wesnoth/scenarios/07_Return_to_Oldwood.cfg
@@ -256,6 +256,7 @@
[unit]
id=Lady Jessene
name= _ "Lady Jessene"
+ unrenamable=yes
type=$lady_store.type
gender=female
variation=unmasked
diff --git a/data/campaigns/The_Rise_Of_Wesnoth/scenarios/15_A_New_Land.cfg b/data/campaigns/The_Rise_Of_Wesnoth/scenarios/15_A_New_Land.cfg
index d425819dedf..a7238932c37 100644
--- a/data/campaigns/The_Rise_Of_Wesnoth/scenarios/15_A_New_Land.cfg
+++ b/data/campaigns/The_Rise_Of_Wesnoth/scenarios/15_A_New_Land.cfg
@@ -197,6 +197,10 @@
description= _ "Death of Lady Jessene"
condition=lose
[/objective]
+ [objective]
+ description= _ "Death of Lord Typhon"
+ condition=lose
+ [/objective]
#textdomain wesnoth
notes_string = _"Gold carryover:"
#textdomain wesnoth-trow
diff --git a/data/campaigns/The_South_Guard/scenarios/01_Born_to_the_Banner.cfg b/data/campaigns/The_South_Guard/scenarios/01_Born_to_the_Banner.cfg
index 6c983f86a32..3a606f1455d 100644
--- a/data/campaigns/The_South_Guard/scenarios/01_Born_to_the_Banner.cfg
+++ b/data/campaigns/The_South_Guard/scenarios/01_Born_to_the_Banner.cfg
@@ -165,6 +165,7 @@
{QUANTITY type Pikeman Spearman Peasant}
id=Moreth
name= _ "Moreth"
+ unrenamable=yes
side=1
x,y=19,5
[modifications]
@@ -235,6 +236,7 @@
type=Infantry Lieutenant
id=Sir Gerrick
name= _ "Sir Gerrick"
+ unrenamable=yes
profile=portraits/sir-gerrick.png
{IS_HERO}
x,y=14,9
diff --git a/data/campaigns/The_South_Guard/scenarios/02_Proven_by_the_Sword.cfg b/data/campaigns/The_South_Guard/scenarios/02_Proven_by_the_Sword.cfg
index 7ecbd00b220..b760cfaf0ee 100644
--- a/data/campaigns/The_South_Guard/scenarios/02_Proven_by_the_Sword.cfg
+++ b/data/campaigns/The_South_Guard/scenarios/02_Proven_by_the_Sword.cfg
@@ -285,6 +285,7 @@
id=Minister Hylas
profile=portraits/hylas.png
name= _ "Minister Hylas"
+ unrenamable=yes
{IS_HERO}
side=1
x,y=21,16
diff --git a/data/campaigns/The_South_Guard/scenarios/03_A_Desparate_Errand.cfg b/data/campaigns/The_South_Guard/scenarios/03_A_Desparate_Errand.cfg
index 46103cd2718..46f8bf0e2fd 100644
--- a/data/campaigns/The_South_Guard/scenarios/03_A_Desparate_Errand.cfg
+++ b/data/campaigns/The_South_Guard/scenarios/03_A_Desparate_Errand.cfg
@@ -305,6 +305,7 @@
#endif
id=Ethiliel
name= _ "Ethiliel"
+ unrenamable=yes
profile=portraits/ethiliel.png
{IS_HERO}
side=1
diff --git a/data/campaigns/The_South_Guard/scenarios/05_Choice_In_The_Fog.cfg b/data/campaigns/The_South_Guard/scenarios/05_Choice_In_The_Fog.cfg
index 44021434315..31f8799bfe9 100644
--- a/data/campaigns/The_South_Guard/scenarios/05_Choice_In_The_Fog.cfg
+++ b/data/campaigns/The_South_Guard/scenarios/05_Choice_In_The_Fog.cfg
@@ -61,6 +61,7 @@
type=Outlaw
id=Urza Afalas
name= _ "Urza Afalas"
+ unrenamable=yes
profile=portraits/urza-afalas-masked.png
{GOLD 50 70 90}
diff --git a/data/campaigns/Two_Brothers/scenarios/03_Guarded_Castle.cfg b/data/campaigns/Two_Brothers/scenarios/03_Guarded_Castle.cfg
index c58296ef846..9c2bee7ee96 100644
--- a/data/campaigns/Two_Brothers/scenarios/03_Guarded_Castle.cfg
+++ b/data/campaigns/Two_Brothers/scenarios/03_Guarded_Castle.cfg
@@ -89,7 +89,6 @@ Yet for some reason I fear these brothers more. If Mordak were here it would be
id=Rotharik
name= _ "Rotharik"
canrecruit=yes
- unrenamable=yes
facing=sw
@@ -141,7 +140,6 @@ Yet for some reason I fear these brothers more. If Mordak were here it would be
id=Knago-Brek
name= _ "Knago-Brek"
type=Orcish Warrior
- unrenamable=yes
x,y=19,17
ai_special=guardian
facing=se
diff --git a/data/campaigns/Two_Brothers/scenarios/04_Return_to_the_Village.cfg b/data/campaigns/Two_Brothers/scenarios/04_Return_to_the_Village.cfg
index ebecb4bf29b..af5d7f9a775 100644
--- a/data/campaigns/Two_Brothers/scenarios/04_Return_to_the_Village.cfg
+++ b/data/campaigns/Two_Brothers/scenarios/04_Return_to_the_Village.cfg
@@ -89,7 +89,6 @@ But I am still troubled. I wonder... is this sense of foreboding I feel merely a
id=Tairach
name= _ "Tairach"
canrecruit=yes
- unrenamable=yes
facing=sw
@@ -120,7 +119,6 @@ But I am still troubled. I wonder... is this sense of foreboding I feel merely a
id=Reeve Hoban
name= _ "Reeve Hoban"
canrecruit=yes
- unrenamable=yes
facing=se
[/side]
diff --git a/data/campaigns/Under_the_Burning_Suns/scenarios/02_Across_the_Harsh_Sands.cfg b/data/campaigns/Under_the_Burning_Suns/scenarios/02_Across_the_Harsh_Sands.cfg
index 4b62009fd0d..83fafb5884d 100644
--- a/data/campaigns/Under_the_Burning_Suns/scenarios/02_Across_the_Harsh_Sands.cfg
+++ b/data/campaigns/Under_the_Burning_Suns/scenarios/02_Across_the_Harsh_Sands.cfg
@@ -1091,7 +1091,7 @@
{VARIABLE shooters {ON_DIFFICULTY 1 1 2} }
{VARIABLE revenants {ON_DIFFICULTY 0 1 1} }
- {PLACE_UNITS_RANDOMLY 1 4 "Revenant" "ElyssaUndead" ( _ "Go’hag") ( id="Go_hag" )}
+ {PLACE_UNITS_RANDOMLY 1 4 "Revenant" "ElyssaUndead" ( _ "Go’hag") ( id="Go'hag" )}
{PLACE_UNITS_RANDOMLY $skeletons 4 "Skeleton" "ElyssaUndead" ( _ "Undead Raider") ()}
{PLACE_UNITS_RANDOMLY $archers 4 "Skeleton Archer" "ElyssaUndead" ( _ "Undead Raider") ()}
{PLACE_UNITS_RANDOMLY $revenants 4 "Revenant" "ElyssaUndead" ( _ "Undead Raider") ()}
@@ -1113,14 +1113,14 @@
#ifdef HARD
[message]
- id="Go_hag"
+ speaker="Go'hag"
message= _ "You have defied our master for the last time. Now you shall die! And I shall personally make it slow and painful, to thank you for that scorching you gave me."
[/message]
#else
[message]
- id="Go_hag"
+ speaker="Go'hag"
message= _ "You have defied our master for the last time. Now you shall die!"
[/message]
diff --git a/data/campaigns/tutorial/lua/character_selection.lua b/data/campaigns/tutorial/lua/character_selection.lua
index f8fe1f36382..fa095eb6101 100644
--- a/data/campaigns/tutorial/lua/character_selection.lua
+++ b/data/campaigns/tutorial/lua/character_selection.lua
@@ -93,6 +93,7 @@ function wml_actions.select_character()
type = "Fighteress",
id = unit.id,
name = _"Li’sar",
+ unrenamable = true,
profile = "portraits/lisar.png",
canrecruit = true,
facing = unit.facing,
diff --git a/data/campaigns/tutorial/scenarios/01_Tutorial_part_1.cfg b/data/campaigns/tutorial/scenarios/01_Tutorial_part_1.cfg
index fe02264b06d..dca07a84ea6 100644
--- a/data/campaigns/tutorial/scenarios/01_Tutorial_part_1.cfg
+++ b/data/campaigns/tutorial/scenarios/01_Tutorial_part_1.cfg
@@ -32,6 +32,7 @@
type=Fighter
id=student
name= _"Konrad"
+ unrenamable=yes
profile=portraits/konrad.png
canrecruit=yes
@@ -75,9 +76,11 @@
type=Elder Mage
profile=portraits/delfador.png~RIGHT()
x,y=13,6
+ random_traits=no
facing=nw
{IS_HERO}
[modifications]
+ {TRAIT_INTELLIGENT}
[object]
[effect]
apply_to=new_animation
diff --git a/data/campaigns/tutorial/scenarios/02_Tutorial_part_2.cfg b/data/campaigns/tutorial/scenarios/02_Tutorial_part_2.cfg
index 62a8ad329f9..6ee651f3e5e 100644
--- a/data/campaigns/tutorial/scenarios/02_Tutorial_part_2.cfg
+++ b/data/campaigns/tutorial/scenarios/02_Tutorial_part_2.cfg
@@ -29,6 +29,7 @@
type=Fighter
id=student
name= _ "Konrad"
+ unrenamable=yes
canrecruit=yes
facing=se
diff --git a/data/gui/default/macros/_initial.cfg b/data/gui/default/macros/_initial.cfg
index 982fb184f6c..48f61603b86 100644
--- a/data/gui/default/macros/_initial.cfg
+++ b/data/gui/default/macros/_initial.cfg
@@ -229,6 +229,14 @@
[/stacked_widget]
#enddef
+#define GUI_WINDOW_FULLSCREEN
+ automatic_placement = "false"
+ x = 0
+ y = 0
+ width = "(screen_width)"
+ height = "(screen_height)"
+#enddef
+
###############################################################################
### ###
### Macros for the normal gui. ###
diff --git a/data/gui/default/window/advanced_graphics_options.cfg b/data/gui/default/window/advanced_graphics_options.cfg
index 9f35e22ae19..15f5d85ae95 100644
--- a/data/gui/default/window/advanced_graphics_options.cfg
+++ b/data/gui/default/window/advanced_graphics_options.cfg
@@ -162,7 +162,20 @@
[button]
id = "ok"
definition = "default"
- label = _ "Close"
+ label = _ "OK"
+ [/button]
+
+ [/column]
+
+ [column]
+ border = "all"
+ border_size = 5
+ horizontal_alignment = "right"
+
+ [button]
+ id = "cancel"
+ definition = "default"
+ label = _ "Cancel"
[/button]
[/column]
diff --git a/data/gui/default/window/gamestate_inspector.cfg b/data/gui/default/window/gamestate_inspector.cfg
index d197003add7..43b43a46b60 100644
--- a/data/gui/default/window/gamestate_inspector.cfg
+++ b/data/gui/default/window/gamestate_inspector.cfg
@@ -8,10 +8,9 @@
description = "Gamestate inspector dialog."
[resolution]
- definition = "default"
- automatic_placement = "true"
- vertical_placement = "top"
- horizontal_placement = "left"
+ definition = "borderless"
+
+ {GUI_WINDOW_FULLSCREEN}
[linked_group]
id = "name"
@@ -65,11 +64,12 @@
[/row]
[row] #stack-title
- grow_factor = 4
+ grow_factor = 1
[column]
- grow_factor = 7
+ grow_factor = 1
horizontal_grow = "true"
+ vertical_alignment = "top"
[grid]
[row]
[column]
@@ -78,7 +78,7 @@
[grid]
[row]
[column]
- grow_factor = 3
+ grow_factor = 1
border = "all"
border_size = 5
horizontal_grow = "true"
@@ -86,6 +86,7 @@
[listbox]
id = "stuff_types_list"
definition = "default"
+ horizontal_scrollbar_mode = "never"
[header]
[row]
[column]
@@ -140,7 +141,7 @@
[row]
[column]
- grow_factor = 3
+ grow_factor = 1
border = "all"
border_size = 5
horizontal_grow = "false"
@@ -148,6 +149,7 @@
[listbox]
id = "stuff_list"
definition = "default"
+ horizontal_scrollbar_mode = "never"
[header]
[row]
[column]
@@ -203,9 +205,9 @@
[/column]
[column]
- grow_factor = 6
+ grow_factor = 1
vertical_alignment = "top"
- horizontal_alignment = "left"
+ horizontal_grow = "true"
[grid]
[row]
[column]
@@ -250,7 +252,7 @@
[column]
border = "left,bottom,right"
border_size = 5
- horizontal_alignment = "left"
+ horizontal_grow = "true"
[scroll_label]
id = "inspect"
diff --git a/data/gui/default/window/lobby_main.cfg b/data/gui/default/window/lobby_main.cfg
index 88c00965e6c..40ab99087bd 100644
--- a/data/gui/default/window/lobby_main.cfg
+++ b/data/gui/default/window/lobby_main.cfg
@@ -725,11 +725,7 @@
description = "Lobby screen."
[resolution]
definition = "borderless"
- automatic_placement = "false"
- x = 0
- y = 0
- width = "(screen_width)"
- height = "(screen_height)"
+ {GUI_WINDOW_FULLSCREEN}
[tooltip]
id = "tooltip_large"
[/tooltip]
diff --git a/data/gui/default/window/title_screen.cfg b/data/gui/default/window/title_screen.cfg
index 689c9e70d22..a8eb55f5bc2 100644
--- a/data/gui/default/window/title_screen.cfg
+++ b/data/gui/default/window/title_screen.cfg
@@ -278,11 +278,7 @@
[resolution]
definition = "title_screen"
- automatic_placement = "false"
- x = 0
- y = 0
- width = "(screen_width)"
- height = "(screen_height)"
+ {GUI_WINDOW_FULLSCREEN}
[tooltip]
id = "tooltip_large"
diff --git a/images/editor/brush.png b/images/editor/brush.png
index 56392d5ac2d..04a8713784f 100644
Binary files a/images/editor/brush.png and b/images/editor/brush.png differ
diff --git a/images/editor/selection-overlay.png b/images/editor/selection-overlay.png
index 9e42efbcad8..afa4aa222a8 100644
Binary files a/images/editor/selection-overlay.png and b/images/editor/selection-overlay.png differ
diff --git a/projectfiles/CodeBlocks/wesnoth.cbp b/projectfiles/CodeBlocks/wesnoth.cbp
index 24a668a0bd2..c2b01ac6a59 100644
--- a/projectfiles/CodeBlocks/wesnoth.cbp
+++ b/projectfiles/CodeBlocks/wesnoth.cbp
@@ -36,6 +36,7 @@
+
@@ -759,6 +760,7 @@
+
diff --git a/projectfiles/VC9/wesnoth.vcproj b/projectfiles/VC9/wesnoth.vcproj
index 83a6743534b..131c2a26177 100644
--- a/projectfiles/VC9/wesnoth.vcproj
+++ b/projectfiles/VC9/wesnoth.vcproj
@@ -5411,6 +5411,10 @@
RelativePath="..\..\src\gui\widgets\grid_private.hpp"
>
+
+
diff --git a/projectfiles/Xcode/Wesnoth.xcodeproj/project.pbxproj b/projectfiles/Xcode/Wesnoth.xcodeproj/project.pbxproj
index 50744b8043c..84f052bade7 100644
--- a/projectfiles/Xcode/Wesnoth.xcodeproj/project.pbxproj
+++ b/projectfiles/Xcode/Wesnoth.xcodeproj/project.pbxproj
@@ -1493,6 +1493,7 @@
91F4628F1C7116E30050A9C9 /* combobox.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = combobox.hpp; sourceTree = ""; };
91F462921C7117400050A9C9 /* drop_down_list.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = drop_down_list.cpp; sourceTree = ""; };
91F462931C7117400050A9C9 /* drop_down_list.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = drop_down_list.hpp; sourceTree = ""; };
+ 91FAC70B1C80168600DAB2C3 /* group.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = group.hpp; sourceTree = ""; };
B504B94A1284C06B00261FE9 /* tips.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tips.cpp; sourceTree = ""; };
B504B94B1284C06B00261FE9 /* tips.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tips.hpp; sourceTree = ""; };
B508D13E10013BF900B12852 /* Growl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Growl.framework; path = lib/Growl.framework; sourceTree = ""; };
@@ -4230,6 +4231,7 @@
B5A9BCF70ECA805A002BE442 /* grid.cpp */,
B5A9BCF80ECA805A002BE442 /* grid.hpp */,
B54AC6F70FEA9FA5006F6FBD /* grid_private.hpp */,
+ 91FAC70B1C80168600DAB2C3 /* group.hpp */,
B5A9BCF90ECA805A002BE442 /* helper.cpp */,
B5A9BCFA0ECA805A002BE442 /* helper.hpp */,
B5795A610F05858100EB190E /* horizontal_scrollbar.cpp */,
diff --git a/src/actions/unit_creator.cpp b/src/actions/unit_creator.cpp
index 6e545014e2b..360bb186da7 100644
--- a/src/actions/unit_creator.cpp
+++ b/src/actions/unit_creator.cpp
@@ -217,7 +217,10 @@ void unit_creator::post_create(const map_location &loc, const unit &new_unit, bo
}
}
- resources::game_events->pump().fire("unit placed", loc);
+ // Only fire the events if it's safe; it's not if we're in the middle of play_controller::reset_gamestate()
+ if (resources::lua_kernel != NULL) {
+ resources::game_events->pump().fire("unit placed", loc);
+ }
if (resources::screen!=NULL) {
diff --git a/src/ai/testing/stage_sf_with_rca.cpp b/src/ai/testing/stage_sf_with_rca.cpp
index 577e0caa17e..28e5afce114 100644
--- a/src/ai/testing/stage_sf_with_rca.cpp
+++ b/src/ai/testing/stage_sf_with_rca.cpp
@@ -278,7 +278,7 @@ void strategy_formulation_with_rca::switch_side()
else
this->set_side(1);
- resources::tod_manager->next_turn(*resources::gamedata);
+ resources::tod_manager->next_turn(resources::gamedata);
DBG_AI_TESTING_SF_WITH_RCA << "switch to turn " << resources::tod_manager->turn() << std::endl;
DBG_AI_TESTING_SF_WITH_RCA << "------switch_side() end------" << std::endl;
diff --git a/src/editor/controller/editor_controller.cpp b/src/editor/controller/editor_controller.cpp
index ef677bfd5dc..826a63ad4ba 100644
--- a/src/editor/controller/editor_controller.cpp
+++ b/src/editor/controller/editor_controller.cpp
@@ -83,7 +83,7 @@ editor_controller::editor_controller(const config &game_config, CVideo& video)
init_gui();
toolkit_.reset(new editor_toolkit(*gui_.get(), key_, game_config_, *context_manager_.get()));
help_manager_.reset(new help::help_manager(&game_config));
- context_manager_->switch_context(0);
+ context_manager_->switch_context(0, true);
init_tods(game_config);
init_music(game_config);
context_manager_->get_map_context().set_starting_position_labels(gui());
diff --git a/src/editor/editor_display.cpp b/src/editor/editor_display.cpp
index 23276717a59..25b4bb2fa83 100644
--- a/src/editor/editor_display.cpp
+++ b/src/editor/editor_display.cpp
@@ -122,10 +122,6 @@ void editor_display::draw_hex(const map_location& loc)
drawing_buffer_add(LAYER_SELECTED_HEX, loc, xpos, ypos,
image::get_texture(brush, image::SCALED_TO_HEX));
}
- if (map().on_board(loc) && loc == mouseoverHex_) {
- drawing_buffer_add(LAYER_MOUSEOVER_BOTTOM, loc, xpos, ypos,
- image::get_texture("misc/hover-hex.png", image::SCALED_TO_HEX));
- }
#else
if (map().in_selection(loc)) {
drawing_buffer_add(LAYER_FOG_SHROUD, loc, xpos, ypos,
@@ -137,10 +133,6 @@ void editor_display::draw_hex(const map_location& loc)
drawing_buffer_add(LAYER_SELECTED_HEX, loc, xpos, ypos,
image::get_image(brush, image::SCALED_TO_HEX));
}
- if (map().on_board(loc) && loc == mouseoverHex_) {
- drawing_buffer_add(LAYER_MOUSEOVER_BOTTOM, loc, xpos, ypos,
- image::get_image("misc/hover-hex.png", image::SCALED_TO_HEX));
- }
#endif
}
}
diff --git a/src/editor/map/context_manager.cpp b/src/editor/map/context_manager.cpp
index 2607d0b2b92..8c45d27d5e7 100644
--- a/src/editor/map/context_manager.cpp
+++ b/src/editor/map/context_manager.cpp
@@ -699,7 +699,6 @@ void context_manager::generate_map_dialog()
gui2::teditor_generate_map dialog;
dialog.set_map_generators(map_generators_);
dialog.select_map_generator(last_map_generator_);
- dialog.set_gui(&gui_);
dialog.show(gui_.video());
if (dialog.get_retval() == gui2::twindow::OK) {
std::string map_string;
@@ -903,9 +902,7 @@ bool context_manager::check_switch_open_map(const std::string& fn)
size_t i = check_open_map(fn);
if (i < map_contexts_.size()) {
gui2::show_transient_message(gui_.video(), _("This map is already open."), fn);
- if (i != static_cast(current_context_index_)) {
- switch_context(i);
- }
+ switch_context(i);
return true;
}
return false;
@@ -997,12 +994,15 @@ void context_manager::reload_map()
refresh_all();
}
-void context_manager::switch_context(const int index)
+void context_manager::switch_context(const int index, const bool force)
{
if (index < 0 || static_cast(index) >= map_contexts_.size()) {
WRN_ED << "Invalid index in switch map context: " << index << std::endl;
return;
}
+ if (index == current_context_index_ && !force) {
+ return;
+ }
map_context_refresher mcr(*this, *map_contexts_[index]);
current_labels = &get_map_context().get_labels();
current_context_index_ = index;
diff --git a/src/editor/map/context_manager.hpp b/src/editor/map/context_manager.hpp
index 2b63ed93317..3ef678974c2 100644
--- a/src/editor/map/context_manager.hpp
+++ b/src/editor/map/context_manager.hpp
@@ -219,7 +219,7 @@ public:
void close_current_context();
/** Switches the context to the one under the specified index. */
- void switch_context(const int index);
+ void switch_context(const int index, const bool force = false);
private:
/**
diff --git a/src/game_events/action_wml.cpp b/src/game_events/action_wml.cpp
index f2df28f9618..c442f02df90 100644
--- a/src/game_events/action_wml.cpp
+++ b/src/game_events/action_wml.cpp
@@ -409,7 +409,7 @@ WML_HANDLER_FUNCTION(modify_turns, /*event_info*/, cfg)
if(new_turn_number_u < 1 || (new_turn_number > tod_man.number_of_turns() && tod_man.number_of_turns() != -1)) {
ERR_NG << "attempted to change current turn number to one out of range (" << new_turn_number << ")" << std::endl;
} else if(new_turn_number_u != current_turn_number) {
- tod_man.set_turn_by_wml(new_turn_number_u, *resources::gamedata);
+ tod_man.set_turn_by_wml(new_turn_number_u, resources::gamedata);
resources::screen->new_turn();
}
}
diff --git a/src/game_initialization/multiplayer_ui.cpp b/src/game_initialization/multiplayer_ui.cpp
index 62e17e862f5..023b70b97e7 100644
--- a/src/game_initialization/multiplayer_ui.cpp
+++ b/src/game_initialization/multiplayer_ui.cpp
@@ -613,7 +613,9 @@ void ui::layout_children(const SDL_Rect& /*rect*/)
entry_textbox_.set_width(xscale(833) - 8);
}
-bool ui::user_info::operator> (const user_info& b) const {
+bool ui::user_info::operator> (const user_info& b) const
+{
+ //FIXME: to cmpare names, use translation::compare from gettext.hpp
user_info const& a = *this;
// ME always on top
diff --git a/src/gettext.hpp b/src/gettext.hpp
index e76a6a1a7bc..48e3310dc6a 100644
--- a/src/gettext.hpp
+++ b/src/gettext.hpp
@@ -75,6 +75,7 @@ namespace translation
void set_language(const std::string& language, const std::vector* alternates);
void init();
+ int compare(const std::string& s1,const std::string& s2);
}
//#define _(String) translation::dsgettext(GETTEXT_DOMAIN,String)
diff --git a/src/gettext_boost.cpp b/src/gettext_boost.cpp
index 7fe787ed3d7..f721ca6a049 100644
--- a/src/gettext_boost.cpp
+++ b/src/gettext_boost.cpp
@@ -82,7 +82,7 @@ namespace
}
generator_.use_ansi_encoding(false);
- generator_.categories(bl::message_facet | bl::information_facet);
+ generator_.categories(bl::message_facet | bl::information_facet | bl::collation_facet);
generator_.characters(bl::char_facet);
//we cannot have current_locale_ beeing a non boost gerenerated locale since it might not suppy
//the boost::locale::info facet. as soon as we add message paths update_locale_internal might fail
@@ -266,6 +266,10 @@ void set_language(const std::string& language, const std::vector* /
LOG_G << "setting language to '" << language << "' \n";
get_manager().set_language(language);
}
+int compare(const std::string& s1, const std::string& s2)
+{
+ return std::use_facet >(get_manager().get_locale()).compare(s1.c_str(), s1.c_str() + s1.size(), s2.c_str(), s2.c_str() + s2.size());
+}
void init()
{
diff --git a/src/gui/dialogs/addon/filter_options.cpp b/src/gui/dialogs/addon/filter_options.cpp
index 7d3984c6e55..d576052d7c5 100644
--- a/src/gui/dialogs/addon/filter_options.cpp
+++ b/src/gui/dialogs/addon/filter_options.cpp
@@ -175,38 +175,14 @@ void taddon_filter_options::toggle_all_displayed_types_button_callback(
}
}
-void taddon_filter_options::toggle_sort_callback(ttoggle_button* active)
+void taddon_filter_options::toggle_sort_callback()
{
- FOREACH(const AUTO & e, sort_tgroup_)
- {
- ttoggle_button* const b = e.first;
- if(b == NULL) {
- continue;
- } else if(b == active && !b->get_value()) {
- b->set_value(true);
- } else if(b == active) {
- sort_ = e.second;
- } else if(b != active && b->get_value()) {
- b->set_value(false);
- }
- }
+ sort_ = sort_tgroup_.get_active_member_value();
}
-void taddon_filter_options::toggle_dir_callback(ttoggle_button* active)
+void taddon_filter_options::toggle_dir_callback()
{
- FOREACH(const AUTO & e, dir_tgroup_)
- {
- ttoggle_button* const b = e.first;
- if(b == NULL) {
- continue;
- } else if(b == active && !b->get_value()) {
- b->set_value(true);
- } else if(b == active) {
- dir_ = e.second;
- } else if(b != active && b->get_value()) {
- b->set_value(false);
- }
- }
+ dir_ = dir_tgroup_.get_active_member_value();
}
void taddon_filter_options::pre_show(CVideo& /*video*/, twindow& window)
@@ -251,11 +227,12 @@ void taddon_filter_options::register_sort_toggle(twindow& window,
= &find_widget(&window, "sort_" + toggle_id, false);
b->set_value(value == sort_);
+
+ sort_tgroup_.add_member(b, value);
+
connect_signal_mouse_left_click(
*b,
- boost::bind(&taddon_filter_options::toggle_sort_callback, this, b));
-
- sort_tgroup_.push_back(std::make_pair(b, value));
+ boost::bind(&taddon_filter_options::toggle_sort_callback, this));
}
void taddon_filter_options::register_dir_toggle(twindow& window,
@@ -266,11 +243,12 @@ void taddon_filter_options::register_dir_toggle(twindow& window,
= &find_widget(&window, "sort_" + toggle_id, false);
b->set_value(value == dir_);
+
+ dir_tgroup_.add_member(b, value);
+
connect_signal_mouse_left_click(
*b,
- boost::bind(&taddon_filter_options::toggle_dir_callback, this, b));
-
- dir_tgroup_.push_back(std::make_pair(b, value));
+ boost::bind(&taddon_filter_options::toggle_dir_callback, this));
}
void taddon_filter_options::post_show(twindow& window)
diff --git a/src/gui/dialogs/addon/filter_options.hpp b/src/gui/dialogs/addon/filter_options.hpp
index f94ba37d95f..e0b47f9d72b 100644
--- a/src/gui/dialogs/addon/filter_options.hpp
+++ b/src/gui/dialogs/addon/filter_options.hpp
@@ -16,6 +16,7 @@
#define GUI_DIALOGS_ADDON_FILTER_OPTIONS_HPP_INCLUDED
#include "gui/dialogs/dialog.hpp"
+#include "gui/widgets/group.hpp"
#include "addon/validation.hpp"
#include "addon/state.hpp"
@@ -85,8 +86,8 @@ private:
typedef std::pair dir_toggle;
// Dialog display state variables.
- std::vector sort_tgroup_;
- std::vector dir_tgroup_;
+ tgroup sort_tgroup_;
+ tgroup dir_tgroup_;
void register_displayed_type_field(const std::string& field_id,
ADDON_TYPE addon_type);
@@ -102,8 +103,8 @@ private:
const std::string& toggle_id,
ADDON_SORT_DIRECTION value);
- void toggle_sort_callback(ttoggle_button* active);
- void toggle_dir_callback(ttoggle_button* active);
+ void toggle_sort_callback();
+ void toggle_dir_callback();
/** Inherited from tdialog, implemented by REGISTER_DIALOG. */
virtual const std::string& window_id() const;
diff --git a/src/gui/dialogs/addon_connect.cpp b/src/gui/dialogs/addon_connect.cpp
index 349ad40bf9b..0b1fd36b23b 100644
--- a/src/gui/dialogs/addon_connect.cpp
+++ b/src/gui/dialogs/addon_connect.cpp
@@ -54,8 +54,7 @@ namespace gui2
REGISTER_DIALOG(addon_connect)
taddon_connect::taddon_connect(std::string& host_name,
- const bool allow_remove,
- display*)
+ const bool allow_remove)
: allow_remove_(allow_remove)
{
set_restore(true);
diff --git a/src/gui/dialogs/addon_connect.hpp b/src/gui/dialogs/addon_connect.hpp
index c0a7ab5dd3f..d86c54a5f4e 100644
--- a/src/gui/dialogs/addon_connect.hpp
+++ b/src/gui/dialogs/addon_connect.hpp
@@ -39,8 +39,7 @@ public:
* in-game help when requested.
*/
taddon_connect(std::string& host_name,
- const bool allow_remove,
- display* disp = NULL);
+ const bool allow_remove);
private:
/** Enable the addon remove button? */
diff --git a/src/gui/dialogs/advanced_graphics_options.cpp b/src/gui/dialogs/advanced_graphics_options.cpp
index df2f2d501c9..580461576a6 100644
--- a/src/gui/dialogs/advanced_graphics_options.cpp
+++ b/src/gui/dialogs/advanced_graphics_options.cpp
@@ -38,83 +38,42 @@
namespace gui2
{
-/*WIKI
- * @page = GUIWindowDefinitionWML
- * @order = 2_mp_alerts_options
- *
- * == Lobby sounds options ==
- *
- * A Preferences subdialog permitting to configure the sounds and notifications
- * generated in response to various mp lobby / game events.
- *
- * @begin{table}{dialog_widgets}
- *
- * _label & & label & m &
- * Item name. $
- *
- * _sound & & toggle_button & m &
- * Toggles whether to play the item sound. $
- *
- * _notif & & toggle_button & m &
- * Toggles whether to give a notification. $
- *
- * _lobby & & toggle_button & m &
- * Toggles whether to take actions for this item when in the lobby. $
- *
- * @end{table}
- */
-
REGISTER_DIALOG(advanced_graphics_options)
const std::vector tadvanced_graphics_options::scale_cases = boost::assign::list_of("zoom")("hex");
-void tadvanced_graphics_options::setup_scale_button(const std::string & case_id, SCALING_ALGORITHM button, twindow & window )
+tadvanced_graphics_options::SCALING_ALGORITHM tadvanced_graphics_options::get_scale_pref(const std::string& pref_id)
+{
+ SCALING_ALGORITHM algo = SCALING_ALGORITHM::LINEAR;
+ try {
+ algo = SCALING_ALGORITHM::string_to_enum(preferences::get(pref_id));
+ } catch (bad_enum_cast &) {
+ preferences::set(pref_id, algo.to_string());
+ }
+ // algo is now synced with preference, and default value of linear if something went wrong
+ return algo;
+}
+
+void tadvanced_graphics_options::setup_scale_case(const std::string & case_id, twindow & window)
{
std::string pref_id = "scale_" + case_id;
-
- tadvanced_graphics_options::SCALING_ALGORITHM algo = tadvanced_graphics_options::SCALING_ALGORITHM::LINEAR;
- try {
- algo = SCALING_ALGORITHM::string_to_enum(preferences::get(pref_id));
- } catch (bad_enum_cast &) {
- preferences::set(pref_id, algo.to_string());
+ tgroup& group = groups_[case_id];
+ for (size_t x = 0; x < SCALING_ALGORITHM::count; ++x) {
+ SCALING_ALGORITHM scale = SCALING_ALGORITHM::from_int(x);
+ ttoggle_button* button = &find_widget(&window, pref_id + "_" + scale.to_string(), false);
+ group.add_member(button, scale);
}
-
- // algo is now synced with preference, and default value of linear if something went wrong
-
- ttoggle_button * b = &find_widget(&window, pref_id + "_" + button.to_string(), false);
- b->set_value(algo == button);
-
- connect_signal_mouse_left_click(*b, boost::bind(&tadvanced_graphics_options::scale_button_callback, this, pref_id, button, boost::ref(window)));
+ group.set_member_states(get_scale_pref(pref_id));
}
-void tadvanced_graphics_options::scale_button_callback(std::string pref_id, SCALING_ALGORITHM me, twindow & window)
+void tadvanced_graphics_options::update_scale_case(const std::string & case_id)
{
- tadvanced_graphics_options::SCALING_ALGORITHM algo = tadvanced_graphics_options::SCALING_ALGORITHM::LINEAR;
- try {
- algo = SCALING_ALGORITHM::string_to_enum(preferences::get(pref_id));
- } catch (bad_enum_cast &) {
- preferences::set(pref_id, algo.to_string());
- }
-
- if (algo != me) {
+ std::string pref_id = "scale_" + case_id;
+ SCALING_ALGORITHM new_val = groups_[case_id].get_active_member_value();
+ if(new_val != get_scale_pref(pref_id)) {
image::flush_cache();
}
-
- preferences::set(pref_id, me.to_string());
-
- for (size_t x = 0; x < SCALING_ALGORITHM::count; ++x) {
- ttoggle_button * b = &find_widget(&window, pref_id + "_" + SCALING_ALGORITHM::from_int(x).to_string(), false);
- b->set_value(x == me.cast());
- }
-
- image::update_from_preferences();
-}
-
-void tadvanced_graphics_options::setup_scale_case(const std::string & i, twindow & window)
-{
- for (size_t x = 0; x < SCALING_ALGORITHM::count; ++x) {
- setup_scale_button(i, SCALING_ALGORITHM::from_int(x), window);
- }
+ preferences::set(pref_id, new_val.to_string());
}
tadvanced_graphics_options::tadvanced_graphics_options()
@@ -136,6 +95,12 @@ void tadvanced_graphics_options::pre_show(CVideo& /*video*/, twindow& window)
void tadvanced_graphics_options::post_show(twindow& /*window*/)
{
+ if(get_retval() == twindow::OK) {
+ BOOST_FOREACH(const std::string & i, scale_cases) {
+ update_scale_case(i);
+ }
+ image::update_from_preferences();
+ }
}
} // end namespace gui2
diff --git a/src/gui/dialogs/advanced_graphics_options.hpp b/src/gui/dialogs/advanced_graphics_options.hpp
index 191cfc670f9..6f63c4358c6 100644
--- a/src/gui/dialogs/advanced_graphics_options.hpp
+++ b/src/gui/dialogs/advanced_graphics_options.hpp
@@ -16,6 +16,7 @@
#define GUI_DIALOGS_ADVANCED_GRAPHICS_OPTIONS_HPP_INCLUDED
#include "gui/dialogs/dialog.hpp"
+#include "gui/widgets/group.hpp"
#include "make_enum.hpp"
namespace gui2
@@ -61,8 +62,10 @@ private:
void post_show(twindow& window);
void setup_scale_case(const std::string &, twindow &);
- void setup_scale_button(const std::string &, SCALING_ALGORITHM, twindow &);
- void scale_button_callback(std::string, SCALING_ALGORITHM, twindow &);
+ void update_scale_case(const std::string &);
+ SCALING_ALGORITHM get_scale_pref(const std::string& pref_id);
+
+ std::map > groups_;
};
} // end namespace gui2
diff --git a/src/gui/dialogs/editor/editor_edit_side.cpp b/src/gui/dialogs/editor/editor_edit_side.cpp
index c05bbddc8f9..21c069cc3bc 100644
--- a/src/gui/dialogs/editor/editor_edit_side.cpp
+++ b/src/gui/dialogs/editor/editor_edit_side.cpp
@@ -88,45 +88,29 @@ teditor_edit_side::teditor_edit_side(int side,
void teditor_edit_side::pre_show(CVideo& /*video*/, twindow& window)
{
- register_radio_toggle(window, "controller_human", team::CONTROLLER::HUMAN, controller_, controller_tgroup_);
- register_radio_toggle(window, "controller_ai", team::CONTROLLER::AI, controller_, controller_tgroup_);
- register_radio_toggle(window, "controller_null", team::CONTROLLER::EMPTY, controller_, controller_tgroup_);
+ register_radio_toggle("controller_human", controller_group, team::CONTROLLER::HUMAN, controller_, window);
+ register_radio_toggle("controller_ai", controller_group, team::CONTROLLER::AI, controller_, window);
+ register_radio_toggle("controller_null", controller_group, team::CONTROLLER::EMPTY, controller_, window);
- register_radio_toggle(window, "vision_all", team::SHARE_VISION::ALL, share_vision_, vision_tgroup_);
- register_radio_toggle(window, "vision_shroud", team::SHARE_VISION::SHROUD, share_vision_, vision_tgroup_);
- register_radio_toggle(window, "vision_null", team::SHARE_VISION::NONE, share_vision_, vision_tgroup_);
+ register_radio_toggle("vision_all", vision_group, team::SHARE_VISION::ALL, share_vision_, window);
+ register_radio_toggle("vision_shroud", vision_group, team::SHARE_VISION::SHROUD, share_vision_, window);
+ register_radio_toggle("vision_null", vision_group, team::SHARE_VISION::NONE, share_vision_, window);
}
template
-void teditor_edit_side::register_radio_toggle(twindow& window, const std::string& toggle_id, T enum_value, T& current_value, std::vector >& dst)
+void teditor_edit_side::register_radio_toggle(const std::string& toggle_id, tgroup& group, const T& enum_value, T& current_value, twindow& window)
{
- ttoggle_button* b = &find_widget(
- &window, toggle_id, false);
+ ttoggle_button& b = find_widget(&window, toggle_id, false);
- b->set_value(enum_value == current_value);
- connect_signal_mouse_left_click(*b,
- boost::bind(
- &teditor_edit_side::toggle_radio_callback, this, boost::ref(dst), boost::ref(current_value), b));
+ b.set_value(enum_value == current_value);
- dst.push_back(std::make_pair(b, enum_value));
+ group.add_member(&b, enum_value);
}
-template
-void teditor_edit_side::toggle_radio_callback(const std::vector >& vec, C& value, ttoggle_button* active)
+void teditor_edit_side::post_show(twindow&)
{
- FOREACH(const AUTO & e, vec)
- {
- ttoggle_button* const b = e.first;
- if(b == NULL) {
- continue;
- } else if(b == active && !b->get_value()) {
- b->set_value(true);
- } else if(b == active) {
- value = e.second;
- } else if(b != active && b->get_value()) {
- b->set_value(false);
- }
- }
+ controller_ = controller_group.get_active_member_value();
+ share_vision_ = vision_group.get_active_member_value();
}
} // end namespace gui2
diff --git a/src/gui/dialogs/editor/editor_edit_side.hpp b/src/gui/dialogs/editor/editor_edit_side.hpp
index ae235bdb86d..f80521364cb 100644
--- a/src/gui/dialogs/editor/editor_edit_side.hpp
+++ b/src/gui/dialogs/editor/editor_edit_side.hpp
@@ -16,6 +16,7 @@
#define GUI_DIALOGS_EDITOR_EDIT_SIDE_HPP_INCLUDED
#include "gui/dialogs/dialog.hpp"
+#include "gui/widgets/group.hpp"
#include "team.hpp"
namespace gui2
@@ -73,22 +74,16 @@ public:
private:
void pre_show(CVideo& /*video*/, twindow& window);
+ void post_show(twindow& window);
template
- void register_radio_toggle(twindow& window, const std::string& toggle_id, T enum_value, T& current_value, std::vector >& dst);
+ void register_radio_toggle(const std::string& toggle_id, tgroup& group, const T& enum_value, T& current_value, twindow& window);
team::CONTROLLER& controller_;
+ tgroup controller_group;
team::SHARE_VISION& share_vision_;
-
- typedef std::pair controller_toggle;
- std::vector controller_tgroup_;
-
- typedef std::pair vision_toggle;
- std::vector vision_tgroup_;
-
- template
- void toggle_radio_callback(const std::vector >& vec, C& value, ttoggle_button* active);
+ tgroup vision_group;
/** Inherited from tdialog, implemented by REGISTER_DIALOG. */
virtual const std::string& window_id() const;
diff --git a/src/gui/dialogs/editor_generate_map.cpp b/src/gui/dialogs/editor_generate_map.cpp
index 0100c7d93fd..f6153d99195 100644
--- a/src/gui/dialogs/editor_generate_map.cpp
+++ b/src/gui/dialogs/editor_generate_map.cpp
@@ -68,7 +68,6 @@ teditor_generate_map::teditor_generate_map()
, last_map_generator_(NULL)
, current_map_generator_(0)
, random_seed_()
- , gui_(NULL)
{
}
@@ -87,9 +86,9 @@ void teditor_generate_map::do_generator_selected(twindow& window)
current_map_generator_ = current;
}
-void teditor_generate_map::do_settings(twindow&)
+void teditor_generate_map::do_settings(twindow& window)
{
- get_selected_map_generator()->user_config(gui_->video());
+ get_selected_map_generator()->user_config(window.video());
}
map_generator* teditor_generate_map::get_selected_map_generator()
@@ -107,7 +106,6 @@ void teditor_generate_map::select_map_generator(map_generator* mg)
void teditor_generate_map::pre_show(CVideo& /*video*/, twindow& window)
{
assert(!map_generators_.empty());
- assert(gui_);
register_text("seed_textbox", false, random_seed_, false);
diff --git a/src/gui/dialogs/editor_generate_map.hpp b/src/gui/dialogs/editor_generate_map.hpp
index 1013a73829f..b861da1af95 100644
--- a/src/gui/dialogs/editor_generate_map.hpp
+++ b/src/gui/dialogs/editor_generate_map.hpp
@@ -48,14 +48,6 @@ public:
void select_map_generator(map_generator* mg);
- void set_gui(display* d)
- {
- gui_ = d;
- }
- display* get_gui()
- {
- return gui_;
- }
boost::optional get_seed();
private:
@@ -82,9 +74,6 @@ private:
/** random seed integer input*/
std::string random_seed_;
-
- /** Needed for the old-style map generator settings dialog */
- display* gui_;
};
} // namespace gui2
diff --git a/src/gui/dialogs/preferences_dialog.cpp b/src/gui/dialogs/preferences_dialog.cpp
index 381a60dfd9b..a253f016191 100644
--- a/src/gui/dialogs/preferences_dialog.cpp
+++ b/src/gui/dialogs/preferences_dialog.cpp
@@ -248,22 +248,24 @@ void tpreferences::setup_combobox(
callback, options.second));
}
+template
void tpreferences::setup_radio_toggle(
const std::string& toggle_id,
- LOBBY_JOINS enum_value,
- int start_value,
- std::vector >& vec,
+ const T& enum_value,
+ const int start_value,
+ tgroup& group,
+ boost::function callback,
twindow& window)
{
ttoggle_button& button = find_widget(&window, toggle_id, false);
button.set_value(enum_value == start_value);
- connect_signal_mouse_left_click(button, boost::bind(
- &tpreferences::toggle_radio_callback,
- this, boost::ref(vec), boost::ref(start_value), &button));
+ group.add_member(&button, enum_value);
- vec.push_back(std::make_pair(&button, enum_value));
+ connect_signal_mouse_left_click(button, boost::bind(
+ &tpreferences::toggle_radio_callback,
+ this, group, callback));
}
template
@@ -629,11 +631,11 @@ void tpreferences::initialize_members(twindow& window)
/* LOBBY JOIN NOTIFICATIONS */
setup_radio_toggle("lobby_joins_none", SHOW_NONE,
- lobby_joins(), lobby_joins_, window);
+ lobby_joins(), lobby_joins_group, _set_lobby_joins, window);
setup_radio_toggle("lobby_joins_friends", SHOW_FRIENDS,
- lobby_joins(), lobby_joins_, window);
+ lobby_joins(), lobby_joins_group, _set_lobby_joins, window);
setup_radio_toggle("lobby_joins_all", SHOW_ALL,
- lobby_joins(), lobby_joins_, window);
+ lobby_joins(), lobby_joins_group, _set_lobby_joins, window);
/* FRIENDS LIST */
setup_friends_list(window);
@@ -1022,25 +1024,12 @@ void tpreferences::font_scaling_slider_callback(tslider& slider)
font_scaling_ = slider.get_value();
}
+template
void tpreferences::toggle_radio_callback(
- const std::vector >& vec,
- int& value,
- ttoggle_button* active)
+ tgroup& group,
+ boost::function setter)
{
- FOREACH(const AUTO & e, vec)
- {
- ttoggle_button* const b = e.first;
- if(b == NULL) {
- continue;
- } else if(b == active && !b->get_value()) {
- b->set_value(true);
- } else if(b == active) {
- value = e.second;
- _set_lobby_joins(value);
- } else if(b != active && b->get_value()) {
- b->set_value(false);
- }
- }
+ setter(group.get_active_member_value());
}
void tpreferences::on_page_select(twindow& window)
diff --git a/src/gui/dialogs/preferences_dialog.hpp b/src/gui/dialogs/preferences_dialog.hpp
index ca35767d8e8..cc24e992e23 100644
--- a/src/gui/dialogs/preferences_dialog.hpp
+++ b/src/gui/dialogs/preferences_dialog.hpp
@@ -20,6 +20,7 @@
#include "game_preferences.hpp"
#include "make_enum.hpp"
#include "gui/dialogs/dialog.hpp"
+#include "gui/widgets/group.hpp"
// This file is not named preferences.hpp in order -I conflicts with
// src/preferences.hpp.
@@ -67,7 +68,7 @@ private:
void edit_friend_list_entry(tlistbox& friends, ttext_box& textbox);
- void remove_friend_list_entry(tlistbox& friends_list,
+ void remove_friend_list_entry(tlistbox& friends_list,
ttext_box& textbox, twindow& window);
void add_tab(tlistbox& tab_bar, const std::string& label);
@@ -152,17 +153,21 @@ private:
* If (at a later date) more groups need to be added, this will have to be
* generalized.
*/
+ tgroup lobby_joins_group;
+
+ template
void setup_radio_toggle(
const std::string& toggle_id,
- preferences::LOBBY_JOINS enum_value,
- int start_value,
- std::vector >& vec,
+ const T& enum_value,
+ const int start_value,
+ tgroup& group,
+ boost::function callback,
twindow& window);
+ template
void toggle_radio_callback(
- const std::vector >& vec,
- int& value,
- ttoggle_button* active);
+ tgroup& group,
+ boost::function setter);
/**
* Sets up a label that always displays the value of another widget.
@@ -183,10 +188,7 @@ private:
void status_label_callback(T& parent_widget,
tcontrol& label_widget, const std::string& suffix = "");
- typedef std::pair lobby_radio_toggle;
- std::vector lobby_joins_;
-
- MAKE_ENUM(ADVANCED_PREF_TYPE,
+ MAKE_ENUM(ADVANCED_PREF_TYPE,
(TOGGLE, "boolean")
(SLIDER, "int")
(COMBO, "combo")
diff --git a/src/gui/dialogs/select_orb_colors.cpp b/src/gui/dialogs/select_orb_colors.cpp
index 327f6240158..51c37bd12df 100644
--- a/src/gui/dialogs/select_orb_colors.cpp
+++ b/src/gui/dialogs/select_orb_colors.cpp
@@ -38,21 +38,16 @@ tselect_orb_colors::tselect_orb_colors()
, show_moved_(preferences::show_moved_orb())
, show_ally_(preferences::show_allied_orb())
, show_enemy_(preferences::show_enemy_orb())
- , unmoved_(preferences::unmoved_color())
- , partial_(preferences::partial_color())
- , moved_(preferences::moved_color())
- , ally_(preferences::allied_color())
- , enemy_(preferences::enemy_color())
{
}
void tselect_orb_colors::pre_show(CVideo&, twindow& window)
{
- setup_orb_group("unmoved", show_unmoved_, unmoved_, window);
- setup_orb_group("partial", show_partial_, partial_, window);
- setup_orb_group("moved", show_moved_, moved_, window);
- setup_orb_group("ally", show_ally_, ally_, window);
- setup_orb_group("enemy", show_enemy_, enemy_, window);
+ setup_orb_group("unmoved", show_unmoved_, preferences::unmoved_color(), window);
+ setup_orb_group("partial", show_partial_, preferences::partial_color(), window);
+ setup_orb_group("moved", show_moved_, preferences::moved_color(), window);
+ setup_orb_group("ally", show_ally_, preferences::allied_color(), window);
+ setup_orb_group("enemy", show_enemy_, preferences::enemy_color(), window);
tbutton& reset = find_widget(&window, "orb_defaults", false);
connect_signal_mouse_left_click(reset, boost::bind(
@@ -70,17 +65,18 @@ void tselect_orb_colors::post_show(twindow&)
preferences::set_show_allied_orb(show_ally_);
preferences::set_show_enemy_orb(show_enemy_);
- preferences::set_unmoved_color(unmoved_);
- preferences::set_partial_color(partial_);
- preferences::set_moved_color(moved_);
- preferences::set_allied_color(ally_);
- preferences::set_enemy_color(enemy_);
+ preferences::set_unmoved_color(groups_["unmoved"].get_active_member_value());
+ preferences::set_partial_color(groups_["partial"].get_active_member_value());
+ preferences::set_moved_color(groups_["moved"].get_active_member_value());
+ preferences::set_allied_color(groups_["ally"].get_active_member_value());
+ preferences::set_enemy_color(groups_["enemy"].get_active_member_value());
}
}
-void tselect_orb_colors::setup_orb_group(const std::string& base_id, bool& shown, std::string& color, twindow& window, bool connect)
+void tselect_orb_colors::setup_orb_group(const std::string& base_id, bool& shown, const std::string& initial, twindow& window, bool connect)
{
- ttoggle_button& toggle = find_widget(&window, "orb_" + base_id + "_show", false);
+ std::string prefix = "orb_" + base_id + "_";
+ ttoggle_button& toggle = find_widget(&window, prefix + "show", false);
toggle.set_value_bool(shown);
if(connect) {
connect_signal_mouse_left_click(toggle, boost::bind(
@@ -90,44 +86,20 @@ void tselect_orb_colors::setup_orb_group(const std::string& base_id, bool& shown
));
}
- tgrid& selection = find_widget(&window, "orb_" + base_id + "_selection", false);
- std::vector& group = groups_[base_id];
+ tgrid& selection = find_widget(&window, prefix + "selection", false);
+ tgroup& group = groups_[base_id];
using iterator::twalker_;
twalker_* iter = selection.create_walker();
while(!iter->at_end(twalker_::child)) {
twidget* next = iter->get(twalker_::child);
if(ttoggle_button* button = dynamic_cast(next)) {
- group.push_back(button);
- if(button->id().rfind("_" + color) != std::string::npos) {
- button->set_value_bool(true);
- } else {
- button->set_value_bool(false);
- }
- if(connect) {
- connect_signal_mouse_left_click(*button, boost::bind(
- &tselect_orb_colors::handle_orb_click,
- this,
- button,
- boost::ref(group),
- boost::ref(color)
- ));
- }
+ const std::string& id = button->id();
+ group.add_member(button, id.substr(prefix.size()));
}
iter->next(twalker_::child);
}
-}
-
-void tselect_orb_colors::handle_orb_click(ttoggle_button* clicked, const std::vector& group, std::string& storage)
-{
- int split = clicked->id().find_last_of('_');
- storage = clicked->id().substr(split + 1);
-
- FOREACH(const AUTO& button, group) {
- button->set_value_bool(false);
- }
-
- clicked->set_value_bool(true);
+ group.set_member_states(initial);
}
void tselect_orb_colors::handle_toggle_click(bool& storage)
@@ -143,17 +115,11 @@ void tselect_orb_colors::handle_reset_click(twindow& window)
show_ally_ = game_config::show_ally_orb;
show_enemy_ = game_config::show_enemy_orb;
- unmoved_ = game_config::colors::unmoved_orb_color;
- partial_ = game_config::colors::partial_orb_color;
- moved_ = game_config::colors::moved_orb_color;
- ally_ = game_config::colors::ally_orb_color;
- enemy_ = game_config::colors::enemy_orb_color;
-
- setup_orb_group("unmoved", show_unmoved_, unmoved_, window, false);
- setup_orb_group("partial", show_partial_, partial_, window, false);
- setup_orb_group("moved", show_moved_, moved_, window, false);
- setup_orb_group("ally", show_ally_, ally_, window, false);
- setup_orb_group("enemy", show_enemy_, enemy_, window, false);
+ setup_orb_group("unmoved", show_unmoved_, game_config::colors::unmoved_orb_color, window, false);
+ setup_orb_group("partial", show_partial_, game_config::colors::partial_orb_color, window, false);
+ setup_orb_group("moved", show_moved_, game_config::colors::moved_orb_color, window, false);
+ setup_orb_group("ally", show_ally_, game_config::colors::ally_orb_color, window, false);
+ setup_orb_group("enemy", show_enemy_, game_config::colors::enemy_orb_color, window, false);
}
-}
\ No newline at end of file
+}
diff --git a/src/gui/dialogs/select_orb_colors.hpp b/src/gui/dialogs/select_orb_colors.hpp
index 713eea93234..40baf37b516 100644
--- a/src/gui/dialogs/select_orb_colors.hpp
+++ b/src/gui/dialogs/select_orb_colors.hpp
@@ -15,6 +15,7 @@
#define GUI_DIALOGS_SELECT_ORB_COLORS_HPP_INCLUDED
#include "gui/dialogs/dialog.hpp"
+#include "gui/widgets/group.hpp"
#include