package net.thesocialos.client.presenter; import java.util.HashSet; import java.util.Map; import java.util.Set; import net.thesocialos.client.CacheLayer; import net.thesocialos.client.api.FacebookAPI; import net.thesocialos.client.api.TwitterAPI; import net.thesocialos.shared.model.Columns; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.Widget; import com.googlecode.objectify.Key; public class SocialDeckPresenter implements Presenter { TwitterAPI twitter = new TwitterAPI(); FacebookAPI facebook = new FacebookAPI(); public interface Display { Widget asWidget(); HasWidgets getAllPostColumnsPanel(); HasClickHandlers getPostButton(); TextArea getTextField(); } private final Display display; public SocialDeckPresenter(Display display) { this.display = display; } private void bind() { display.getPostButton().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String postText = display.getTextField().getValue(); // Tweet it twitter.post(postText); // Post it in Facebook facebook.post(postText); display.getTextField().setValue(""); } }); } @Override public void go(HasWidgets container) { container.add(display.asWidget()); display.asWidget().setVisible(false); switchVisible(); loadColumns(); bind(); } private void loadColumns() { Map<Key<Columns>, Columns> columns = CacheLayer.UserCalls.getColumns(); Set<Columns> columnsSet = new HashSet<Columns>(columns.values()); twitter.loadColumns(display, columnsSet); } public void switchVisible() { if (display.asWidget().isVisible()) { final int minus = display.asWidget().getOffsetHeight() / 20; new Timer() { @Override public void run() { int oldHeight = display.asWidget().getOffsetHeight(); display.asWidget().setHeight(display.asWidget().getOffsetHeight() - minus + "px"); if (display.asWidget().getOffsetHeight() <= 0 || oldHeight == display.asWidget().getOffsetHeight()) { display.asWidget().setHeight("0px"); display.asWidget().setVisible(false); cancel(); } } }.scheduleRepeating(10); } else { display.asWidget().setVisible(true); display.asWidget().setHeight("100%"); final int max = display.asWidget().getOffsetHeight(); final int plus = max / 20; display.asWidget().setHeight("0px"); new Timer() { @Override public void run() { display.asWidget().setHeight(display.asWidget().getOffsetHeight() + plus + "px"); if (display.asWidget().getOffsetHeight() >= max) { display.asWidget().setHeight("100%"); cancel(); } } }.scheduleRepeating(10); } } }