From 178f0e4a83918df416ac8274b0e845b390772d76 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Mon, 27 Sep 2010 20:03:50 +0000 Subject: documentation updates, initial chat window playerlist, trade menu ESC key --- src/client/chat.cc | 84 +++++++++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 39 deletions(-) (limited to 'src/client/chat.cc') diff --git a/src/client/chat.cc b/src/client/chat.cc index c1fc78f..8191e52 100644 --- a/src/client/chat.cc +++ b/src/client/chat.cc @@ -29,21 +29,19 @@ Chat::Chat(ui::Widget *parent) : ui::Window(parent) chat_scrollpane->set_border(false); chat_scrollpane->set_label("text"); - chat_playerpane = new ui::ScrollPane(this, chat_players); - chat_playerpane->set_border(false); - chat_playerpane->set_label("players"); - chat_playerpane->set_alignment(ui::AlignLeft | ui::AlignTop); + chat_playerlist = new ui::ListView(this); + chat_playerlist->set_label("playerlist"); chat_input = new ui::InputBox(this); chat_input->set_border(false); chat_input->set_prompt("^BSay^F:^B "); - chat_input->set_focus(); set_background(true); set_visible(false); chat_small = false; + chat_playerlist_timestamp = 0; } Chat::~Chat() @@ -53,15 +51,17 @@ Chat::~Chat() void Chat::clear() { - chat_players.clear(); chat_log.clear(); chat_input->clear(); + chat_playerlist->clear(); + chat_playerlist_timestamp = 0; } void Chat::set_small_view(bool small_chat_view) { chat_small = small_chat_view; + resize(); } void Chat::event_text(const std::string & text) @@ -164,8 +164,11 @@ bool Chat::on_keypress(const int key, const unsigned int modifier) return false; } -void Chat::event_draw() +void Chat::draw() { + /* + * this never worked before, event_draw is NOT virtual + if (ui::console()->visible()) return; @@ -178,48 +181,51 @@ void Chat::event_draw() hide(); return; } + */ + + if (!chat_small && (chat_playerlist_timestamp != core::game()->playerlist_timestamp())) { + update_player_list(); + } + + ui::Window::draw(); +} - if (chat_small) { - chat_playerpane->hide(); - chat_scrollpane->hide(); - } else { - chat_playerpane->show(); - chat_scrollpane->show(); - - chat_players.clear(); - std::ostringstream ostr; - - ostr << "^B" << core::game()->players().size() << " " << aux::plural("player", core::game()->players().size()); - chat_players.push_back(ostr.str()); - - for (core::GameInterface::Players::iterator it = core::game()->players().begin(); it != core::game()->players().end(); it++) { - core::Player *player = (*it); - chat_players.push_back(player->name() + "^N"); - } +void Chat::update_player_list() +{ + chat_playerlist->clear(); + + for (core::GameInterface::Players::const_iterator it = core::game()->players().begin(); it != core::game()->players().end(); it++) { + ui::ListItem *listitem = new ui::ListItem(chat_playerlist, (*it)->name().c_str()); + listitem->set_height(listitem->font()->height() * 1.5f); } - Widget::event_draw(); + chat_playerlist_timestamp = core::game()->playerlist_timestamp(); } void Chat::resize() { - const float margin = 8.0f; - math::Vector2f s(size()); - - s[0] -= margin * 2; - s[1] -= margin * 2; - - // player names - chat_playerpane->set_size(ui::UI::elementsize.width() , s.height() - font()->height() * 2.5f); - chat_playerpane->set_location(s.width() - chat_playerpane->width() + 2.0f * margin, margin + font()->height()); + const float fontmargin = ui::root()->font_large()->height(); + + if (chat_small) { + chat_playerlist->hide(); + chat_scrollpane->hide(); + + } else { + chat_playerlist->show(); + chat_scrollpane->show(); + + // player names + chat_playerlist->set_size(ui::UI::elementsize.width(), height() - fontmargin * 3.0f); + chat_playerlist->set_location(width() - ui::UI::elementsize.width() - fontmargin, fontmargin); - // chat text - chat_scrollpane->set_size(s.width() - chat_playerpane->width() - margin, s.height() - font()->height() * 1.5f); - chat_scrollpane->set_location(margin, margin); + // chat text + chat_scrollpane->set_size(width() - ui::UI::elementsize.width() - fontmargin * 3.0f, height() - fontmargin * 3.0f); + chat_scrollpane->set_location(fontmargin, fontmargin); + } // input bar - chat_input->set_location(margin, height() - font()->height() - margin); - chat_input->set_size(s.width(), font()->height()); + chat_input->set_location(fontmargin, height() - fontmargin); + chat_input->set_size(width() - 2.0f * fontmargin , fontmargin); } -- cgit v1.2.3