package net.thesocialos.client.chat.view;
import net.thesocialos.client.TheSocialOS;
import net.thesocialos.client.chat.events.ChatHideConversation;
import net.thesocialos.shared.model.User;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.MouseMoveEvent;
import com.google.gwt.event.dom.client.MouseMoveHandler;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.event.dom.client.MouseUpEvent;
import com.google.gwt.event.dom.client.MouseUpHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.Widget;
import com.googlecode.objectify.Key;
public class ChatBlockView extends Composite {
/*
* private class ChangeColor implements RepeatingCommand { Boolean isColored = false;
* @Override public boolean execute() { if (isColored) { background.setStyleName("chatBlock_background_red", false);
* background.setStyleName("chatBlock_background_white", true); isColored = false; } else {
* background.setStyleName("chatBlock_background_red", true); background.setStyleName("chatBlock_background_white",
* false); isColored = true; } return true; } }
*/
interface ChatBlockViewUiBinder extends UiBinder<Widget, ChatBlockView> {
}
private static ChatBlockViewUiBinder uiBinder = GWT.create(ChatBlockViewUiBinder.class);
@UiField Image lblImage;
@UiField AbsolutePanel background;
@UiField HTMLPanel htmlPanel;
@UiField Button lblUnreadMsg;
Key<User> userKey;
private boolean activated = false;
private Integer messageCont = 0;
PopupPanel popupPanel = new PopupPanel(true);
private ChatBlockView() {
initWidget(uiBinder.createAndBindUi(this));
// Scheduler.get().scheduleFixedPeriod(new ChangeColor(), 3000);
// background.setStyleName("chatBlock_activated", true);
handlers();
lblUnreadMsg.setText(String.valueOf(messageCont));
lblUnreadMsg.setVisible(false);
}
public ChatBlockView(Key<User> userKey, String urlAvatar) {
this();
this.userKey = userKey;
CreatePopUP();
if (urlAvatar == null) lblImage.setUrl("./images/anonymous_avatar.png");
else
lblImage.setUrl(urlAvatar);
}
private void CreatePopUP() {
popupPanel.setStyleName("chatBlock_Popup", true);
Label lblname = new Label(userKey.getName());
popupPanel.add(lblname);
}
private void handlers() {
getBackground().addDomHandler(new MouseOverHandler() {
@Override
public void onMouseOver(MouseOverEvent event) {
// TODO Auto-generated method stub
popupPanel.setPopupPosition(event.getClientX(), event.getClientY() - 20);
popupPanel.show();
}
}, MouseOverEvent.getType());
getBackground().addDomHandler(new MouseOutHandler() {
@Override
public void onMouseOut(MouseOutEvent event) {
// TODO Auto-generated method stub
popupPanel.hide();
}
}, MouseOutEvent.getType());
getBackground().addDomHandler(new MouseMoveHandler() {
@Override
public void onMouseMove(MouseMoveEvent event) {
// TODO Auto-generated method stub
popupPanel.setPopupPosition(event.getClientX(), event.getClientY() - 20);
}
}, MouseMoveEvent.getType());
getBackground().addDomHandler(new MouseUpHandler() {
@Override
public void onMouseUp(MouseUpEvent event) {
// messagesPending(false);
TheSocialOS.getEventBus().fireEvent(new ChatHideConversation(userKey));
}
}, MouseUpEvent.getType());
}
public AbsolutePanel getBackground() {
return background;
}
public Image getimgAvatar() {
return lblImage;
}
/**
* Makes the ChatBlock animate or not
*
* @param pending
* true to animate
*/
public void messagesPending(Boolean pending) {
if (activated) htmlPanel.setStyleName("chatBlock_activated", pending);
if (activated && pending) {
lblUnreadMsg.setVisible(true);
messageCont++;
lblUnreadMsg.setText(String.valueOf(messageCont));
} else {
messageCont = 0;
lblUnreadMsg.setText(String.valueOf(messageCont));
}
}
/**
* @return the activated
*/
public boolean isActivated() {
return activated;
}
/**
* @param activated
* the activated to set
*/
public void setActivated(boolean activated) {
if (!activated) {
htmlPanel.setStyleName("chatBlock_activated", activated);
messageCont = 0;
lblUnreadMsg.setVisible(false);
lblUnreadMsg.setText(String.valueOf(messageCont));
}
this.activated = activated;
}
}