diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/gui/widgets/tabs/socialplayerstab.h | 193 | ||||
-rw-r--r-- | src/gui/windows/socialwindow.cpp | 166 |
4 files changed, 196 insertions, 165 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b6d0961bb..217a2754b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -263,6 +263,7 @@ SET(SRCS gui/widgets/tabs/socialguildtab.h gui/widgets/tabs/socialguildtab2.h gui/widgets/tabs/socialpartytab.h + gui/widgets/tabs/socialplayerstab.h gui/widgets/tabs/socialtab.h gui/widgets/tabs/tab.cpp gui/widgets/tabs/tab.h diff --git a/src/Makefile.am b/src/Makefile.am index 5de9b24ba..47e54ee56 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -361,6 +361,7 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ gui/widgets/tabs/socialguildtab.h \ gui/widgets/tabs/socialguildtab2.h \ gui/widgets/tabs/socialpartytab.h \ + gui/widgets/tabs/socialplayerstab.h \ gui/widgets/tabs/socialtab.h \ gui/widgets/tabs/tab.cpp \ gui/widgets/tabs/tab.h \ diff --git a/src/gui/widgets/tabs/socialplayerstab.h b/src/gui/widgets/tabs/socialplayerstab.h new file mode 100644 index 000000000..50ce1210e --- /dev/null +++ b/src/gui/widgets/tabs/socialplayerstab.h @@ -0,0 +1,193 @@ +/* + * The ManaPlus Client + * Copyright (C) 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 GUI_WIDGETS_TABS_SOCIALPLAYERSTAB_H +#define GUI_WIDGETS_TABS_SOCIALPLAYERSTAB_H + +#include "gui/widgets/tabs/socialtab.h" + +#include "localconsts.h" + +class SocialPlayersTab final : public SocialTab +{ + public: + SocialPlayersTab(const Widget2 *const widget, + std::string name, + const bool showBackground) : + SocialTab(widget), + mBeings(new BeingsListModel) + { + mList = new AvatarListBox(this, mBeings); + mList->postInit(); + mScroll = new ScrollArea(this, mList, showBackground, + "social_background.xml"); + + mScroll->setHorizontalScrollPolicy(ScrollArea::SHOW_AUTO); + mScroll->setVerticalScrollPolicy(ScrollArea::SHOW_ALWAYS); + + getPlayersAvatars(); + setCaption(name); + } + + A_DELETE_COPY(SocialPlayersTab) + + ~SocialPlayersTab() + { + delete2(mList) + delete2(mScroll) + delete2(mBeings) + } + + void updateList() override final + { + getPlayersAvatars(); + } + + void updateAvatar(const std::string &name) override final + { + if (!actorManager) + return; + + Avatar *const avatar = findAvatarbyName(name); + if (!avatar) + return; + if (Party::getParty(1)) + { + const PartyMember *const pm = Party::getParty(1)->getMember(name); + if (pm && pm->getMaxHp() > 0) + { + avatar->setMaxHp(pm->getMaxHp()); + avatar->setHp(pm->getHp()); + } + } + const Being *const being = actorManager->findBeingByName( + name, ActorType::PLAYER); + if (being) + { + avatar->setDamageHp(being->getDamageTaken()); + avatar->setLevel(being->getLevel()); + avatar->setGender(being->getGender()); + avatar->setIp(being->getIp()); + avatar->setPoison(being->getPoison()); + } + } + + void resetDamage(const std::string &name) override final + { + if (!actorManager) + return; + + Avatar *const avatar = findAvatarbyName(name); + if (!avatar) + return; + avatar->setDamageHp(0); + Being *const being = actorManager->findBeingByName( + name, ActorType::PLAYER); + + if (being) + being->setDamageTaken(0); + } + + Avatar* findAvatarbyName(const std::string &name) + { + std::vector<Avatar*> *const avatars = mBeings->getMembers(); + if (!avatars) + return nullptr; + + Avatar *ava = nullptr; + std::vector<Avatar*>::const_iterator i = avatars->begin(); + const std::vector<Avatar*>::const_iterator i_end = avatars->end(); + while (i != i_end) + { + ava = (*i); + if (ava && ava->getName() == name) + return ava; + ++i; + } + ava = new Avatar(name); + ava->setOnline(true); + avatars->push_back(ava); + return ava; + } + + void getPlayersAvatars() + { + std::vector<Avatar*> *const avatars = mBeings->getMembers(); + if (!avatars) + return; + + if (actorManager) + { + StringVect names; + actorManager->getPlayerNames(names, false); + + std::vector<Avatar*>::iterator ai = avatars->begin(); + while (ai != avatars->end()) + { + bool finded = false; + const Avatar *const ava = (*ai); + if (!ava) + break; + + StringVectCIter i = names.begin(); + const StringVectCIter i_end = names.end(); + while (i != i_end) + { + if (ava->getName() == (*i) && (*i) != "") + { + finded = true; + break; + } + ++i; + } + + if (!finded) + { + delete *ai; + ai = avatars->erase(ai); + } + else + { + ++ai; + } + } + + StringVectCIter i = names.begin(); + const StringVectCIter i_end = names.end(); + + while (i != i_end) + { + if ((*i) != "") + updateAvatar(*i); + ++i; + } + } + // TRANSLATORS: social window label + mCounterString = strprintf(_("Visible players: %d"), + static_cast<int>(avatars->size())); + updateCounter(); + } + + private: + BeingsListModel *mBeings; +}; + +#endif // GUI_WIDGETS_TABS_SOCIALPLAYERSTAB_H diff --git a/src/gui/windows/socialwindow.cpp b/src/gui/windows/socialwindow.cpp index b2cc5610f..e878e0368 100644 --- a/src/gui/windows/socialwindow.cpp +++ b/src/gui/windows/socialwindow.cpp @@ -58,6 +58,7 @@ #include "gui/widgets/tabs/socialguildtab.h" #include "gui/widgets/tabs/socialguildtab2.h" #include "gui/widgets/tabs/socialpartytab.h" +#include "gui/widgets/tabs/socialplayerstab.h" #include "net/net.h" #include "net/guildhandler.h" @@ -97,171 +98,6 @@ namespace } friendSorter; } // namespace -class SocialPlayersTab final : public SocialTab -{ -public: - SocialPlayersTab(const Widget2 *const widget, - std::string name, - const bool showBackground) : - SocialTab(widget), - mBeings(new BeingsListModel) - { - mList = new AvatarListBox(this, mBeings); - mList->postInit(); - mScroll = new ScrollArea(this, mList, showBackground, - "social_background.xml"); - - mScroll->setHorizontalScrollPolicy(ScrollArea::SHOW_AUTO); - mScroll->setVerticalScrollPolicy(ScrollArea::SHOW_ALWAYS); - - getPlayersAvatars(); - setCaption(name); - } - - A_DELETE_COPY(SocialPlayersTab) - - ~SocialPlayersTab() - { - delete2(mList) - delete2(mScroll) - delete2(mBeings) - } - - void updateList() override final - { - getPlayersAvatars(); - } - - void updateAvatar(const std::string &name) override final - { - if (!actorManager) - return; - - Avatar *const avatar = findAvatarbyName(name); - if (!avatar) - return; - if (Party::getParty(1)) - { - const PartyMember *const pm = Party::getParty(1)->getMember(name); - if (pm && pm->getMaxHp() > 0) - { - avatar->setMaxHp(pm->getMaxHp()); - avatar->setHp(pm->getHp()); - } - } - const Being *const being = actorManager->findBeingByName( - name, ActorType::PLAYER); - if (being) - { - avatar->setDamageHp(being->getDamageTaken()); - avatar->setLevel(being->getLevel()); - avatar->setGender(being->getGender()); - avatar->setIp(being->getIp()); - avatar->setPoison(being->getPoison()); - } - } - - void resetDamage(const std::string &name) override final - { - if (!actorManager) - return; - - Avatar *const avatar = findAvatarbyName(name); - if (!avatar) - return; - avatar->setDamageHp(0); - Being *const being = actorManager->findBeingByName( - name, ActorType::PLAYER); - - if (being) - being->setDamageTaken(0); - } - - Avatar* findAvatarbyName(const std::string &name) - { - std::vector<Avatar*> *const avatars = mBeings->getMembers(); - if (!avatars) - return nullptr; - - Avatar *ava = nullptr; - std::vector<Avatar*>::const_iterator i = avatars->begin(); - const std::vector<Avatar*>::const_iterator i_end = avatars->end(); - while (i != i_end) - { - ava = (*i); - if (ava && ava->getName() == name) - return ava; - ++i; - } - ava = new Avatar(name); - ava->setOnline(true); - avatars->push_back(ava); - return ava; - } - - void getPlayersAvatars() - { - std::vector<Avatar*> *const avatars = mBeings->getMembers(); - if (!avatars) - return; - - if (actorManager) - { - StringVect names; - actorManager->getPlayerNames(names, false); - - std::vector<Avatar*>::iterator ai = avatars->begin(); - while (ai != avatars->end()) - { - bool finded = false; - const Avatar *const ava = (*ai); - if (!ava) - break; - - StringVectCIter i = names.begin(); - const StringVectCIter i_end = names.end(); - while (i != i_end) - { - if (ava->getName() == (*i) && (*i) != "") - { - finded = true; - break; - } - ++i; - } - - if (!finded) - { - delete *ai; - ai = avatars->erase(ai); - } - else - { - ++ai; - } - } - - StringVectCIter i = names.begin(); - const StringVectCIter i_end = names.end(); - - while (i != i_end) - { - if ((*i) != "") - updateAvatar(*i); - ++i; - } - } - // TRANSLATORS: social window label - mCounterString = strprintf(_("Visible players: %d"), - static_cast<int>(avatars->size())); - updateCounter(); - } - -private: - BeingsListModel *mBeings; -}; - - class SocialNavigationTab final : public SocialTab { public: |