Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2010-09-27 20:03:50 +0000
committerStijn Buys <ingar@osirion.org>2010-09-27 20:03:50 +0000
commit178f0e4a83918df416ac8274b0e845b390772d76 (patch)
treeee3d4bf0a29cfcd32530e2c38353668a42ce509d /src/client/chat.cc
parenta80e501a0a8006034a7dc0cda1fc047f6c37fbd9 (diff)
documentation updates, initial chat window playerlist, trade menu ESC key
Diffstat (limited to 'src/client/chat.cc')
-rw-r--r--src/client/chat.cc84
1 files changed, 45 insertions, 39 deletions
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);
}