diff options
Diffstat (limited to 'src/gui/windows')
-rw-r--r-- | src/gui/windows/socialwindow.cpp | 118 |
1 files changed, 1 insertions, 117 deletions
diff --git a/src/gui/windows/socialwindow.cpp b/src/gui/windows/socialwindow.cpp index 4c19a18f5..9b828aac0 100644 --- a/src/gui/windows/socialwindow.cpp +++ b/src/gui/windows/socialwindow.cpp @@ -56,6 +56,7 @@ #include "gui/widgets/tabs/chattab.h" #include "gui/widgets/tabs/socialattacktab.h" +#include "gui/widgets/tabs/socialfriendstab.h" #include "gui/widgets/tabs/socialguildtab.h" #include "gui/widgets/tabs/socialguildtab2.h" #include "gui/widgets/tabs/socialnavigationtab.h" @@ -74,123 +75,6 @@ extern unsigned int tmwServerVersion; -namespace -{ - static class SortFriendsFunctor final - { - public: - bool operator() (const Avatar *const m1, - const Avatar *const m2) const - { - if (!m1 || !m2) - return false; - - if (m1->getOnline() != m2->getOnline()) - return m1->getOnline() > m2->getOnline(); - - if (m1->getName() != m2->getName()) - { - std::string s1 = m1->getName(); - std::string s2 = m2->getName(); - toLower(s1); - toLower(s2); - return s1 < s2; - } - return false; - } - } friendSorter; -} // namespace - -class SocialFriendsTab final : public SocialTab -{ -public: - SocialFriendsTab(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(SocialFriendsTab) - - ~SocialFriendsTab() - { - delete2(mList) - delete2(mScroll) - delete2(mBeings) - } - - void updateList() override final - { - getPlayersAvatars(); - } - - void getPlayersAvatars() - { - if (!actorManager) - return; - - std::vector<Avatar*> *const avatars = mBeings->getMembers(); - if (!avatars) - return; - - std::vector<Avatar*>::iterator ia = avatars->begin(); - while (ia != avatars->end()) - { - delete *ia; - ++ ia; - } - avatars->clear(); - - const StringVect *const players - = player_relations.getPlayersByRelation(PlayerRelation::FRIEND); - - const std::set<std::string> &players2 = whoIsOnline->getOnlineNicks(); - - if (!players) - return; - - int online = 0; - int total = 0; - - FOR_EACHP (StringVectCIter, it, players) - { - Avatar *const ava = new Avatar(*it); - if (actorManager->findBeingByName(*it, ActorType::PLAYER) - || players2.find(*it) != players2.end()) - { - ava->setOnline(true); - online ++; - } - total ++; - avatars->push_back(ava); - } - std::sort(avatars->begin(), avatars->end(), friendSorter); - delete players; - - // TRANSLATORS: social window label - mCounterString = strprintf(_("Friends: %u/%u"), - static_cast<uint32_t>(online), - static_cast<uint32_t>(total)); - updateCounter(); - } - -private: - BeingsListModel *mBeings; -}; - - class CreatePopup final : public Popup, public LinkHandler { public: |