Browse Source

Add improvements

nordsoft 2 years ago
parent
commit
5e3504f578

+ 0 - 8
client/gui/InterfaceBuilder.cpp

@@ -42,14 +42,6 @@ void InterfaceBuilder::addCallback(const std::string & callbackName, std::functi
 	callbacks[callbackName] = callback;
 }
 
-const std::shared_ptr<CIntObject> InterfaceBuilder::widget(const std::string & name) const
-{
-	auto iter = widgets.find(name);
-	if(iter == widgets.end())
-		return nullptr;
-	return iter->second;
-}
-
 void InterfaceBuilder::init(const JsonNode &config)
 {
 	OBJ_CONSTRUCTION;

+ 8 - 1
client/gui/InterfaceBuilder.h

@@ -26,7 +26,14 @@ protected:
 	
 	void addCallback(const std::string & callbackName, std::function<void(int)> callback);
 	
-	const std::shared_ptr<CIntObject> widget(const std::string &) const;
+	template<class T>
+	const std::shared_ptr<T> widget(const std::string & name) const
+	{
+		auto iter = widgets.find(name);
+		if(iter == widgets.end())
+			return nullptr;
+		return dynamic_pointer_cast<T>(iter->second);
+	}
 	
 private:
 	

+ 16 - 16
client/lobby/RandomMapTab.cpp

@@ -53,11 +53,11 @@ RandomMapTab::RandomMapTab():
 	{
 		mapGenOptions->setPlayerCount(btnId);
 	
-		if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupMaxTeams")))
+		if(auto w = widget<CToggleGroup>("groupMaxTeams"))
 			deactivateButtonsFrom(w.get(), btnId);
 
 		// deactive some CompOnlyPlayers buttons to prevent total number of players exceeds PlayerColor::PLAYER_LIMIT_I
-		if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupCompOnlyPlayers")))
+		if(auto w = widget<CToggleGroup>("groupCompOnlyPlayers"))
 			deactivateButtonsFrom(w.get(), PlayerColor::PLAYER_LIMIT_I - btnId + 1);
 
 		validatePlayersCnt(btnId);
@@ -75,10 +75,10 @@ RandomMapTab::RandomMapTab():
 		mapGenOptions->setCompOnlyPlayerCount(btnId);
 
 		// deactive some MaxPlayers buttons to prevent total number of players exceeds PlayerColor::PLAYER_LIMIT_I
-		if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupMaxPlayers")))
+		if(auto w = widget<CToggleGroup>("groupMaxPlayers"))
 			deactivateButtonsFrom(w.get(), PlayerColor::PLAYER_LIMIT_I - btnId + 1);
 		
-		if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupCompOnlyTeams")))
+		if(auto w = widget<CToggleGroup>("groupCompOnlyTeams"))
 			deactivateButtonsFrom(w.get(), (btnId == 0 ? 1 : btnId));
 		validateCompOnlyPlayersCnt(btnId);
 		updateMapInfoByHost();
@@ -96,7 +96,7 @@ RandomMapTab::RandomMapTab():
 		updateMapInfoByHost();
 	});
 	
-	addCallback("setMonsterStrenght", [&](int btnId)
+	addCallback("setMonsterStrength", [&](int btnId)
 	{
 		if(btnId < 0)
 			mapGenOptions->setMonsterStrength(EMonsterStrength::RANDOM);
@@ -165,21 +165,21 @@ void RandomMapTab::updateMapInfoByHost()
 
 void RandomMapTab::setMapGenOptions(std::shared_ptr<CMapGenOptions> opts)
 {
-	if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupMapSize")))
+	if(auto w = widget<CToggleGroup>("groupMapSize"))
 		w->setSelected(vstd::find_pos(getPossibleMapSizes(), opts->getWidth()));
-	if(auto w = dynamic_pointer_cast<CToggleButton>(widget("buttonTwoLevels")))
+	if(auto w = widget<CToggleButton>("buttonTwoLevels"))
 		w->setSelected(opts->getHasTwoLevels());
-	if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupMaxPlayers")))
+	if(auto w = widget<CToggleGroup>("groupMaxPlayers"))
 		w->setSelected(opts->getPlayerCount());
-	if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupMaxTeams")))
+	if(auto w = widget<CToggleGroup>("groupMaxTeams"))
 		w->setSelected(opts->getTeamCount());
-	if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupCompOnlyPlayers")))
+	if(auto w = widget<CToggleGroup>("groupCompOnlyPlayers"))
 		w->setSelected(opts->getCompOnlyPlayerCount());
-	if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupCompOnlyTeams")))
+	if(auto w = widget<CToggleGroup>("groupCompOnlyTeams"))
 		w->setSelected(opts->getCompOnlyTeamCount());
-	if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupWaterContent")))
+	if(auto w = widget<CToggleGroup>("groupWaterContent"))
 		w->setSelected(opts->getWaterContent());
-	if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupgroupMonsterStrengthMaxTeams")))
+	if(auto w = widget<CToggleGroup>("groupMonsterStrength"))
 		w->setSelected(opts->getMonsterStrength());
 }
 
@@ -212,14 +212,14 @@ void RandomMapTab::validatePlayersCnt(int playersCnt)
 	if(mapGenOptions->getTeamCount() >= playersCnt)
 	{
 		mapGenOptions->setTeamCount(playersCnt - 1);
-		if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupMaxTeams")))
+		if(auto w = widget<CToggleGroup>("groupMaxTeams"))
 			w->setSelected(mapGenOptions->getTeamCount());
 	}
 	// total players should not exceed PlayerColor::PLAYER_LIMIT_I (8 in homm3)
 	if(mapGenOptions->getCompOnlyPlayerCount() + playersCnt > PlayerColor::PLAYER_LIMIT_I)
 	{
 		mapGenOptions->setCompOnlyPlayerCount(PlayerColor::PLAYER_LIMIT_I - playersCnt);
-		if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupCompOnlyPlayers")))
+		if(auto w = widget<CToggleGroup>("groupCompOnlyPlayers"))
 			w->setSelected(mapGenOptions->getCompOnlyPlayerCount());
 	}
 
@@ -238,7 +238,7 @@ void RandomMapTab::validateCompOnlyPlayersCnt(int compOnlyPlayersCnt)
 		int compOnlyTeamCount = compOnlyPlayersCnt == 0 ? 0 : compOnlyPlayersCnt - 1;
 		mapGenOptions->setCompOnlyTeamCount(compOnlyTeamCount);
 		updateMapInfoByHost();
-		if(auto w = dynamic_pointer_cast<CToggleGroup>(widget("groupCompOnlyTeams")))
+		if(auto w = widget<CToggleGroup>("groupCompOnlyTeams"))
 			w->setSelected(compOnlyTeamCount);
 	}
 }

+ 1 - 1
config/windows/randomMapTab.json

@@ -462,7 +462,7 @@
 				}
 			],
 			"selected": 3,
-			"callback": "setMonsterStrenght"
+			"callback": "setMonsterStrength"
 		},
 
 		{