package scrum.client.collaboration;
import ilarkesto.core.scope.Scope;
import scrum.client.admin.User;
import scrum.client.common.AScrumWidget;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
public class ChatWidget extends AScrumWidget {
private Chat chat;
private HTML output;
private ScrollPanel outputScroller;
private TextBox input;
@Override
protected Widget onInitialization() {
chat = Scope.get().getComponent(Chat.class);
output = new HTML();
output.setStyleName("ChatWidget-output");
outputScroller = new ScrollPanel(output);
outputScroller.setStyleName("ChatWidget-outputScroller");
outputScroller.setHeight("100px");
input = new TextBox();
input.setStyleName("ChatWidget-input");
input.addKeyboardListener(new KeyboardListenerAdapter() {
@Override
public void onKeyPress(Widget sender, char keyCode, int modifiers) {
super.onKeyPress(sender, keyCode, modifiers);
if (keyCode == KeyboardListener.KEY_ENTER) postMessage();
}
});
FlowPanel panel = new FlowPanel();
panel.setStyleName("ChatWidget");
panel.add(outputScroller);
panel.add(input);
return panel;
}
@Override
protected void onUpdate() {
StringBuilder sb = new StringBuilder();
for (ChatMessage m : chat.getChatMessages()) {
appendMessage(m, sb);
}
output.setHTML(sb.toString());
outputScroller.scrollToBottom();
}
private void postMessage() {
String text = input.getText();
if (text.trim().length() == 0) return;
chat.postMessage(text);
input.setText("");
input.setFocus(true);
}
private void appendMessage(ChatMessage m, StringBuilder sb) {
User author = m.getAuthor();
String authorLabel = author != null ? author.getName() : "System";
String authorClass = author != null ? (author.equals(getCurrentUser()) ? "author-me" : "author")
: "author-system";
String authorStyle = author != null ? "color: " + author.getProjectConfig().getColor() + ";" : "";
String text = m.getText();
sb.append("<p class='").append(authorClass).append("' style='").append(authorStyle).append(
" margin-bottom: 2px;'>").append(authorLabel).append(", ").append(
m.getDateAndTime().getTime().toString(false)).append("</p>");
sb.append("<div class='ChatWidget-message'>");
sb.append(Wiki.toHtml(text));
sb.append("</div>");
}
}