diff options
author | David Athay <ko2fan@gmail.com> | 2008-04-16 12:59:02 +0000 |
---|---|---|
committer | David Athay <ko2fan@gmail.com> | 2008-04-16 12:59:02 +0000 |
commit | 0d9ac84ca12fbf0dc1592c9f13d0f4b700743f01 (patch) | |
tree | 6f1911b6d5e8a0e2d43b46c79add9bb0c544f93c /src/gui | |
parent | e2e4ceb9fa8a72ad94853f74724676fff82b15c0 (diff) | |
download | mana-client-0d9ac84ca12fbf0dc1592c9f13d0f4b700743f01.tar.gz mana-client-0d9ac84ca12fbf0dc1592c9f13d0f4b700743f01.tar.bz2 mana-client-0d9ac84ca12fbf0dc1592c9f13d0f4b700743f01.tar.xz mana-client-0d9ac84ca12fbf0dc1592c9f13d0f4b700743f01.zip |
Fixed online status so that users are shown as online
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/chat.cpp | 7 | ||||
-rw-r--r-- | src/gui/guildlistbox.cpp | 17 | ||||
-rw-r--r-- | src/gui/guildlistbox.h | 3 | ||||
-rw-r--r-- | src/gui/guildwindow.cpp | 10 | ||||
-rw-r--r-- | src/gui/guildwindow.h | 3 | ||||
-rw-r--r-- | src/gui/widgets/tabbedarea.cpp | 10 |
6 files changed, 39 insertions, 11 deletions
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp index 0602c671..f6e95059 100644 --- a/src/gui/chat.cpp +++ b/src/gui/chat.cpp @@ -475,6 +475,7 @@ ChatWindow::removeChannel(short channelId) void ChatWindow::createNewChannelTab(std::string channelName) { + // Create new channel BrowserBox *textOutput = new BrowserBox(BrowserBox::AUTO_WRAP); textOutput->setOpaque(false); textOutput->disableLinksAndUserColors(); @@ -483,11 +484,17 @@ ChatWindow::createNewChannelTab(std::string channelName) scrollArea->setScrollPolicy(gcn::ScrollArea::SHOW_NEVER, gcn::ScrollArea::SHOW_ALWAYS); scrollArea->setOpaque(false); + // Add channel to the tabbed area mChatTabs->addTab(channelName, scrollArea); mChannelOutput[channelName] = textOutput; mChannelScroll[channelName] = scrollArea; mScrollArea = scrollArea; mTextOutput = textOutput; + + // Ask for channel users + Net::ChatServer::getUserList(channelName); + + // Update UI logic(); } diff --git a/src/gui/guildlistbox.cpp b/src/gui/guildlistbox.cpp index 1c14fd55..3f540cc5 100644 --- a/src/gui/guildlistbox.cpp +++ b/src/gui/guildlistbox.cpp @@ -61,7 +61,12 @@ void GuildListBox::draw(gcn::Graphics *gcnGraphics) ++i, y += fontHeight) { // Draw online status - bool online = mUsers[mListModel->getElementAt(i)]; + bool online = false; + UserMap::iterator itr = mUsers.find(mListModel->getElementAt(i)); + if (itr != mUsers.end()) + { + online = itr->second; + } Image *icon = online ? onlineIcon : offlineIcon; if (icon) graphics->drawImage(icon, 1, y); @@ -110,5 +115,13 @@ void GuildListBox::mousePressed(gcn::MouseEvent &event) void GuildListBox::setOnlineStatus(const std::string &user, bool online) { - mUsers[user] = online; + UserMap::iterator itr = mUsers.find(user); + if (itr == mUsers.end()) + { + mUsers.insert(std::pair<std::string, bool>(user, online)); + } + else + { + itr->second = online; + } } diff --git a/src/gui/guildlistbox.h b/src/gui/guildlistbox.h index 0f030d0a..b3892955 100644 --- a/src/gui/guildlistbox.h +++ b/src/gui/guildlistbox.h @@ -60,7 +60,8 @@ public: private: Image *onlineIcon; Image *offlineIcon; - std::map<std::string, bool> mUsers; + typedef std::map<std::string, bool> UserMap; + UserMap mUsers; }; #endif diff --git a/src/gui/guildwindow.cpp b/src/gui/guildwindow.cpp index 7237a870..0e9a066a 100644 --- a/src/gui/guildwindow.cpp +++ b/src/gui/guildwindow.cpp @@ -170,13 +170,15 @@ void GuildWindow::action(const gcn::ActionEvent &event) void GuildWindow::newGuildTab(const std::string &guildName) { - // Create new tab GuildListBox *list = new GuildListBox(); list->setListModel(player_node->getGuild(guildName)); ScrollArea *sa = new ScrollArea(list); sa->setDimension(gcn::Rectangle(5, 5, 135, 250)); + // Add the listbox to the map + mGuildLists.insert(std::pair<std::string, GuildListBox*>(guildName, list)); + mGuildTabs->addTab(guildName, sa); mGuildTabs->setDimension(gcn::Rectangle(28,35,140,250)); @@ -257,9 +259,9 @@ void GuildWindow::removeTab(int guildId) void GuildWindow::setOnline(const std::string &guildName, const std::string &member, bool online) { - GuildListBox *box = dynamic_cast<GuildListBox*>(mGuildTabs->getWidget(guildName)); - if (box) + GuildListMap::iterator itr = mGuildLists.find(guildName); + if (itr != mGuildLists.end()) { - box->setOnlineStatus(member, online); + itr->second->setOnlineStatus(member, online); } } diff --git a/src/gui/guildwindow.h b/src/gui/guildwindow.h index b85ca3a5..7e7a313a 100644 --- a/src/gui/guildwindow.h +++ b/src/gui/guildwindow.h @@ -32,6 +32,7 @@ #define _TMW_GUI_GUILDWINDOW_H #include <iosfwd> +#include <map> #include <vector> #include <guichan/actionlistener.hpp> @@ -134,6 +135,8 @@ private: ScrollArea *mScrollArea; bool mFocus; std::string invitedGuild; + typedef std::map<std::string, GuildListBox*> GuildListMap; + GuildListMap mGuildLists; }; extern GuildWindow *guildWindow; diff --git a/src/gui/widgets/tabbedarea.cpp b/src/gui/widgets/tabbedarea.cpp index 20c100e5..a22c795c 100644 --- a/src/gui/widgets/tabbedarea.cpp +++ b/src/gui/widgets/tabbedarea.cpp @@ -73,13 +73,15 @@ void TabbedArea::draw(gcn::Graphics *graphics) gcn::Widget* TabbedArea::getWidget(const std::string &name) { - unsigned int i; - for (i = 0; i < mTabs.size(); i++) + std::vector< std::pair<gcn::Tab*, gcn::Widget*> >::iterator itr = mTabs.begin(), + itr_end = mTabs.end(); + while (itr != itr_end) { - if (mTabs[i].first->getCaption() == name) + if ((*itr).first->getCaption() == name) { - return mTabs[i].second; + return (*itr).second; } + ++itr; } return NULL; |