Răsfoiți Sursa

Fixed #577. New BlockingDialog functionality - only accept.

DjWarmonger 15 ani în urmă
părinte
comite
48b262756b
5 a modificat fișierele cu 39 adăugiri și 34 ștergeri
  1. 6 15
      VCMI_VC9.sln
  2. 8 0
      client/CPlayerInterface.cpp
  3. 7 3
      client/GUIClasses.cpp
  4. 17 16
      hch/CObjectHandler.cpp
  5. 1 0
      hch/CObjectHandler.h

+ 6 - 15
VCMI_VC9.sln

@@ -1,22 +1,13 @@
 
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VCMI_client", "client\VCMI_client.vcproj", "{8355EBA8-65C2-44A4-BC2D-78053E1BF2D6}"
-	ProjectSection(ProjectDependencies) = postProject
-		{B952FFC5-3039-4DE1-9F08-90ACDA483D8F} = {B952FFC5-3039-4DE1-9F08-90ACDA483D8F}
-	EndProjectSection
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C++ Express 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VCMI_client", "client\VCMI_client.vcxproj", "{8355EBA8-65C2-44A4-BC2D-78053E1BF2D6}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VCMI_lib", "lib\VCMI_lib.vcproj", "{B952FFC5-3039-4DE1-9F08-90ACDA483D8F}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VCMI_lib", "lib\VCMI_lib.vcxproj", "{B952FFC5-3039-4DE1-9F08-90ACDA483D8F}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VCMI_server", "server\VCMI_server.vcproj", "{8AF697C3-465E-4910-B31B-576A9ECDB309}"
-	ProjectSection(ProjectDependencies) = postProject
-		{B952FFC5-3039-4DE1-9F08-90ACDA483D8F} = {B952FFC5-3039-4DE1-9F08-90ACDA483D8F}
-	EndProjectSection
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VCMI_server", "server\VCMI_server.vcxproj", "{8AF697C3-465E-4910-B31B-576A9ECDB309}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genius", "AI\GeniusAI\genius.vcproj", "{B6A14ED9-E7C1-411B-A596-2FE90B3145B4}"
-	ProjectSection(ProjectDependencies) = postProject
-		{B952FFC5-3039-4DE1-9F08-90ACDA483D8F} = {B952FFC5-3039-4DE1-9F08-90ACDA483D8F}
-	EndProjectSection
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genius", "AI\GeniusAI\genius.vcxproj", "{B6A14ED9-E7C1-411B-A596-2FE90B3145B4}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+ 8 - 0
client/CPlayerInterface.cpp

@@ -914,6 +914,14 @@ void CPlayerInterface::showBlockingDialog( const std::string &text, const std::v
 		GH.pushInt(temp);
 		intComps[0]->clickLeft(true, false);
 	}
+	else //only accept
+	{
+		std::vector<SComponent*> intComps;
+		for(int i=0;i<components.size();i++)
+			intComps.push_back(new SComponent(components[i])); //will be deleted by close in window
+
+		showYesNoDialog(text,intComps,boost::bind(&CCallback::selectionMade,cb,1,askID),NULL,true);
+	}
 
 }
 

+ 7 - 3
client/GUIClasses.cpp

@@ -679,12 +679,16 @@ void CInfoWindow::showYesNoDialog(const std::string & text, const std::vector<SC
 	assert(!LOCPLINT || LOCPLINT->showingDialog->get());
 	std::vector<std::pair<std::string,CFunctionList<void()> > > pom;
 	pom.push_back(std::pair<std::string,CFunctionList<void()> >("IOKAY.DEF",0));
-	pom.push_back(std::pair<std::string,CFunctionList<void()> >("ICANCEL.DEF",0));
+	if (onNo)
+		pom.push_back(std::pair<std::string,CFunctionList<void()> >("ICANCEL.DEF",0));
 	CInfoWindow * temp = new CInfoWindow(text, player, components ? *components : std::vector<SComponent*>(), pom, DelComps);
 	for(int i=0;i<onYes.funcs.size();i++)
 		temp->buttons[0]->callback += onYes.funcs[i];
-	for(int i=0;i<onNo.funcs.size();i++)
-		temp->buttons[1]->callback += onNo.funcs[i];
+	if (onNo)
+	{
+		for(int i=0;i<onNo.funcs.size();i++)
+			temp->buttons[1]->callback += onNo.funcs[i];
+	}
 
 	GH.pushInt(temp);
 }

+ 17 - 16
hch/CObjectHandler.cpp

@@ -6050,17 +6050,26 @@ void CGMagi::initObj()
 void CGMagi::onHeroVisit(const CGHeroInstance * h) const
 {
 	if (ID == 37)
+	{
+		BlockingDialog bd (false, false); //only accept
+		bd.soundID = soundBase::LIGHTHOUSE;
+		bd.player = h->tempOwner;
+		bd.text.addTxt (MetaString::ADVOB_TXT, 61);
+		cb->showBlockingDialog (&bd, boost::bind (&CGMagi::showEyes, this, h, _1));	
+	}
+	else if (ID == 27)
 	{
 		InfoWindow iw;
-		CenterView cv;
-		FoWChange fw;
-		cv.player = iw.player = fw.player = h->tempOwner;
-
-		iw.soundID = soundBase::LIGHTHOUSE;
 		iw.player = h->tempOwner;
-		iw.text.addTxt (MetaString::ADVOB_TXT, 61);
+		iw.text.addTxt (MetaString::ADVOB_TXT, 48);
 		cb->showInfoDialog(&iw);
-
+	}
+}
+void CGMagi::showEyes(const CGHeroInstance * h, ui32 accept) const
+{
+		CenterView cv;
+		FoWChange fw;
+		cv.player = fw.player = h->tempOwner;
 		fw.mode = 1;
 		std::vector<si32>::iterator it;
 		for (it = eyelist[subID].begin(); it < eyelist[subID].end(); it++)
@@ -6075,16 +6084,8 @@ void CGMagi::onHeroVisit(const CGHeroInstance * h) const
 		}	
 		cv.pos = h->getPosition(false);
 		cb->sendAndApply(&cv);	
-	}
-	else if (ID == 27)
-	{
-		InfoWindow iw;
-		iw.player = h->tempOwner;
-		iw.text.addTxt (MetaString::ADVOB_TXT, 48);
-		cb->showInfoDialog(&iw);
-	}
-
 }
+
 void CGBoat::initObj()
 {
 	hero = NULL;

+ 1 - 0
hch/CObjectHandler.h

@@ -1110,6 +1110,7 @@ public:
 
 	void initObj();
 	void onHeroVisit(const CGHeroInstance * h) const;
+	void showEyes(const CGHeroInstance * h, ui32 accept) const;
 
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{