From 808a0b7aeb9c58724d3ac2e1a8bb8f3d3c2bdb1e Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 3 Feb 2014 21:23:24 +0300 Subject: fix friend tab update in social window if friends was changed. --- src/being/playerrelations.h | 17 ++------------- src/being/playerrelationslistener.h | 41 +++++++++++++++++++++++++++++++++++++ src/gui/windows/socialwindow.cpp | 14 +++++++++++++ src/gui/windows/socialwindow.h | 10 ++++++++- 4 files changed, 66 insertions(+), 16 deletions(-) create mode 100644 src/being/playerrelationslistener.h (limited to 'src') 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 #include @@ -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 . + */ + +#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 #include @@ -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 -- cgit v1.2.3-60-g2f50