summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-02-03 21:23:24 +0300
committerAndrei Karas <akaras@inbox.ru>2014-02-03 21:23:24 +0300
commit808a0b7aeb9c58724d3ac2e1a8bb8f3d3c2bdb1e (patch)
tree208f3224627dea587f8f87b31459e721153e83ba
parentd0db8d81ebf49b0e3c9872152cb5749f701cb9d6 (diff)
downloadmv-808a0b7aeb9c58724d3ac2e1a8bb8f3d3c2bdb1e.tar.gz
mv-808a0b7aeb9c58724d3ac2e1a8bb8f3d3c2bdb1e.tar.bz2
mv-808a0b7aeb9c58724d3ac2e1a8bb8f3d3c2bdb1e.tar.xz
mv-808a0b7aeb9c58724d3ac2e1a8bb8f3d3c2bdb1e.zip
fix friend tab update in social window if friends was changed.
-rw-r--r--src/being/playerrelations.h17
-rw-r--r--src/being/playerrelationslistener.h41
-rw-r--r--src/gui/windows/socialwindow.cpp14
-rw-r--r--src/gui/windows/socialwindow.h10
4 files changed, 66 insertions, 16 deletions
diff --git a/src/being/playerrelations.h b/src/being/playerrelations.h
index 200cdf311..360930879 100644
--- a/src/being/playerrelations.h
+++ b/src/being/playerrelations.h
@@ -25,6 +25,8 @@
#include "utils/stringvector.h"
+#include "being/playerrelationslistener.h"
+
#include <list>
#include <map>
@@ -97,21 +99,6 @@ class PlayerIgnoreStrategy
}
};
-class PlayerRelationsListener
-{
- public:
- virtual ~PlayerRelationsListener()
- { }
-
- virtual void updatedPlayer(const std::string &name) = 0;
-
- virtual void updateAll() = 0;
-
- protected:
- PlayerRelationsListener()
- { }
-};
-
/**
* Player relations class, represents any particular relations and/or
* preferences the user of the local client has wrt other players (identified
diff --git a/src/being/playerrelationslistener.h b/src/being/playerrelationslistener.h
new file mode 100644
index 000000000..eefd69b9c
--- /dev/null
+++ b/src/being/playerrelationslistener.h
@@ -0,0 +1,41 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2008-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2014 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef BEING_PLAYERRELATIONSLISTENER_H
+#define BEING_PLAYERRELATIONSLISTENER_H
+
+class PlayerRelationsListener
+{
+ public:
+ virtual ~PlayerRelationsListener()
+ { }
+
+ virtual void updatedPlayer(const std::string &name) = 0;
+
+ virtual void updateAll() = 0;
+
+ protected:
+ PlayerRelationsListener()
+ { }
+};
+
+#endif // BEING_PLAYERRELATIONSLISTENER_H
diff --git a/src/gui/windows/socialwindow.cpp b/src/gui/windows/socialwindow.cpp
index 8b1d0d79c..ec7fce182 100644
--- a/src/gui/windows/socialwindow.cpp
+++ b/src/gui/windows/socialwindow.cpp
@@ -1276,6 +1276,7 @@ SocialWindow::SocialWindow() :
// TRANSLATORS: social window name
Window(_("Social"), false, nullptr, "social.xml"),
gcn::ActionListener(),
+ PlayerRelationsListener(),
mGuildInvited(0),
mGuildAcceptDialog(nullptr),
mGuildCreateDialog(nullptr),
@@ -1372,10 +1373,12 @@ void SocialWindow::postInit()
enableVisibleSound(true);
updateButtons();
+ player_relations.addListener(this);
}
SocialWindow::~SocialWindow()
{
+ player_relations.removeListener(this);
if (mGuildAcceptDialog)
{
mGuildAcceptDialog->close();
@@ -1740,6 +1743,7 @@ void SocialWindow::slowLogic()
const unsigned int nowTime = cur_time;
if (mNeedUpdate && nowTime - mLastUpdateTime > 1)
{
+ logger->log("soc update");
mPlayers->updateList();
mFriends->updateList();
mNeedUpdate = false;
@@ -1892,6 +1896,16 @@ void SocialWindow::updateGuildCounter(const int online, const int total)
}
}
+void SocialWindow::updatedPlayer(const std::string &name)
+{
+ mNeedUpdate = true;
+}
+
+void SocialWindow::updateAll()
+{
+ mNeedUpdate = true;
+}
+
#ifdef USE_PROFILER
void SocialWindow::logicChildren()
{
diff --git a/src/gui/windows/socialwindow.h b/src/gui/windows/socialwindow.h
index 018b5f32c..e8dc44043 100644
--- a/src/gui/windows/socialwindow.h
+++ b/src/gui/windows/socialwindow.h
@@ -24,6 +24,8 @@
#include "gui/widgets/window.h"
+#include "being/playerrelationslistener.h"
+
#include <guichan/actionlistener.hpp>
#include <string>
@@ -45,7 +47,9 @@ class TextDialog;
*
* \ingroup Interface
*/
-class SocialWindow final : public Window, private gcn::ActionListener
+class SocialWindow final : public Window,
+ private gcn::ActionListener,
+ public PlayerRelationsListener
{
public:
SocialWindow();
@@ -125,6 +129,10 @@ public:
void updateGuildCounter(const int online = 0, const int total = 0);
+ void updatedPlayer(const std::string &name);
+
+ void updateAll();
+
#ifdef USE_PROFILER
void logicChildren();
#endif