[atlantik-cvs] CVS: kdegames/atlantik/client atlantik.cpp,1.135,1.136 atlantik.h,1.53,1.54

[email protected]
Newsgroups gmane.comp.kde.devel.atlantik
Message-ID <[email protected]>
Update of /home/kde/kdegames/atlantik/client
In directory office:/tmp/cvs-serv20549/client

Modified Files:
	atlantik.cpp atlantik.h 
Log Message:
better handling of portfolioview add/remove's

Index: atlantik.cpp
===================================================================
RCS file: /home/kde/kdegames/atlantik/client/atlantik.cpp,v
retrieving revision 1.135
retrieving revision 1.136
diff -u -d -r1.135 -r1.136
--- atlantik.cpp	19 Jan 2003 23:58:59 -0000	1.135
+++ atlantik.cpp	20 Jan 2003 00:57:23 -0000	1.136
@@ -174,20 +174,13 @@
 	initBoard();
 	m_board->addToken(player);
 
-	PortfolioView *portfolioView = new PortfolioView(m_atlanticCore, player, m_config.activeColor, m_config.inactiveColor, m_portfolioWidget);
-	m_portfolioViews.append(portfolioView);
+	addPortfolioView(player);
 
 	if (player->isSelf())
 		m_playerSelf = player;
 
 	connect(player, SIGNAL(changed(Player *)), this, SLOT(playerChanged(Player *)));
-	connect(player, SIGNAL(changed(Player *)), portfolioView, SLOT(playerChanged()));
 	connect(player, SIGNAL(changed(Player *)), m_board, SLOT(playerChanged(Player *)));
-	connect(portfolioView, SIGNAL(newTrade(Player *)), m_atlantikNetwork, SLOT(newTrade(Player *)));
-	connect(portfolioView, SIGNAL(estateClicked(Estate *)), m_board, SLOT(prependEstateDetails(Estate *)));
-
-	m_portfolioLayout->addWidget(portfolioView);
-	portfolioView->show();
 }
 
 void Atlantik::newEstate(Estate *estate)
@@ -212,6 +205,13 @@
 void Atlantik::removeGUI(Player *player)
 {
 	// Find and remove portfolioview
+	PortfolioView *portfolioView = findPortfolioView(player);
+	if (portfolioView)
+	{
+		m_portfolioViews.remove(portfolioView);
+		delete portfolioView;
+	}
+
 	// TODO: Remove tokens from board
 }
 
@@ -507,10 +507,14 @@
 
 void Atlantik::playerChanged(Player *player)
 {
-	if (player->gameId() == -1)
+	PortfolioView *portfolioView = findPortfolioView(player);
+	if (portfolioView && player->gameId() == -1)
 	{
-		// Find and remove portfolioview
+		m_portfolioViews.remove(portfolioView);
+		delete portfolioView;
 	}
+	else if (!portfolioView && player->gameId() != -1)
+		addPortfolioView(player);
 
 	if (player == m_playerSelf)
 	{
@@ -559,4 +563,27 @@
 	connect(this, SIGNAL(jailCard()), m_atlantikNetwork, SLOT(jailCard()));
 	connect(this, SIGNAL(jailPay()), m_atlantikNetwork, SLOT(jailPay()));
 	connect(this, SIGNAL(jailRoll()), m_atlantikNetwork, SLOT(jailRoll()));
+}
+
+void Atlantik::addPortfolioView(Player *player)
+{
+	PortfolioView *portfolioView = new PortfolioView(m_atlanticCore, player, m_config.activeColor, m_config.inactiveColor, m_portfolioWidget);
+	m_portfolioViews.append(portfolioView);
+
+	connect(player, SIGNAL(changed(Player *)), portfolioView, SLOT(playerChanged()));
+	connect(portfolioView, SIGNAL(newTrade(Player *)), m_atlantikNetwork, SLOT(newTrade(Player *)));
+	connect(portfolioView, SIGNAL(estateClicked(Estate *)), m_board, SLOT(prependEstateDetails(Estate *)));
+
+	m_portfolioLayout->addWidget(portfolioView);
+	portfolioView->show();
+}
+
+PortfolioView *Atlantik::findPortfolioView(Player *player)
+{
+	PortfolioView *portfolioView = 0;
+	for (QPtrListIterator<PortfolioView> it(m_portfolioViews); (portfolioView = *it) ; ++it)
+		if (player == portfolioView->player())
+			return portfolioView;
+
+	return 0;
 }

Index: atlantik.h
===================================================================
RCS file: /home/kde/kdegames/atlantik/client/atlantik.h,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- atlantik.h	19 Jan 2003 23:58:59 -0000	1.53
+++ atlantik.h	20 Jan 2003 00:57:23 -0000	1.54
@@ -186,6 +186,8 @@
 
 private:
 	void initNetworkObject();
+	void addPortfolioView(Player *player);
+	PortfolioView *findPortfolioView(Player *player);
 
 	QWidget *m_mainWidget, *m_portfolioWidget;
 	QGridLayout *m_mainLayout;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.