package net.thesocialos.client.presenter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import net.thesocialos.client.TheSocialOS;
import net.thesocialos.client.desktop.AppManagerCloseEvent;
import net.thesocialos.client.desktop.AppManagerEvent;
import net.thesocialos.client.desktop.AppManagerEventHandler;
import net.thesocialos.client.desktop.AppManagerOpenEvent;
import net.thesocialos.client.desktop.DesktopEventOnClose;
import net.thesocialos.client.desktop.DesktopEventOnMinimize;
import net.thesocialos.client.desktop.DesktopUnit;
import net.thesocialos.client.desktop.IsTypeInfo;
import net.thesocialos.client.view.Aplication;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
public class ApplicationManagerPresenter extends DesktopUnit implements IsTypeInfo {
Display display;
HashMap<Aplication, DesktopUnit> applications = new HashMap<Aplication, DesktopUnit>();
Aplication mainApp;
public ApplicationManagerPresenter(int programID, Display display, TypeUnit typeUnit, boolean isSubApplication) {
super(programID, "Aplication Manager", null, typeUnit, isSubApplication);
this.display = display;
display.asWidget().setVisible(false);
handler();
}
public interface Display {
Widget asWidget();
SimplePanel getHtmlPanel();
boolean addApplication(Aplication aplication);
boolean removeApplication(Aplication aplication);
}
private void handler() {
TheSocialOS.getEventBus().addHandler(AppManagerEvent.TYPE, new AppManagerEventHandler() {
@Override
public void onOpen(AppManagerOpenEvent event) {
addUnit(event.getDesktopUnit());
}
@Override
public void onClose(AppManagerCloseEvent event) {
removeUnit(event.getDesktopUnit());
}
});
}
private void addUnit(DesktopUnit desktopUnit) {
if (!applications.containsValue(desktopUnit)) {
Aplication aplication = new Aplication(desktopUnit.name, null, this);
display.addApplication(aplication);
applications.put(aplication, desktopUnit);
}
}
private void removeUnit(DesktopUnit desktopUnit) {
if (applications.containsValue(desktopUnit)) {
Iterator<Entry<Aplication, DesktopUnit>> iterator = applications.entrySet().iterator();
while (iterator.hasNext()) {
Entry<Aplication, DesktopUnit> appDesktop = iterator.next();
if (appDesktop.getValue().equals(desktopUnit)) {
display.removeApplication(appDesktop.getKey());
applications.remove(appDesktop.getKey());
}
}
}
}
private void removeUnit(Aplication app) {
if (applications.containsKey(app)) {
display.removeApplication(app);
applications.remove(app);
}
}
public void showHideApp(Aplication aplication) {
if (applications.containsKey(aplication))
TheSocialOS.getEventBus().fireEvent(new DesktopEventOnMinimize(applications.get(aplication), false));
}
public void closeApp(Aplication application) {
if (applications.containsKey(application)) {
TheSocialOS.getEventBus().fireEvent(new DesktopEventOnClose(applications.get(application)));
removeUnit(application);
}
}
@Override
public int getZposition() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void open(AbsolutePanel absolutePanel) {
if (absolutePanel.getWidgetIndex(display.asWidget()) == -1) {
absolutePanel.add(display.asWidget(), x, y);
display.asWidget().setVisible(true);
display.getHtmlPanel().setStyleName("appManager_open", true);
display.getHtmlPanel().setStyleName("appManager_close", false);
} else {
}
// absolutePanel.setWidgetPosition(display.asWidget(), x, 0);
// display.asWidget().getElement().setAttribute("position", "absolute");
}
@Override
public void close(final AbsolutePanel absolutePanel) {
// alert(display.asWidget().getElement(), listener(display.asWidget().getElement()));
// display.getHtmlPanel().setStyleName("appManager_open", false);
// absolutePanel.remove(display.asWidget());
// absolutePanel.add(display.asWidget(), x, -360);
Timer timer = new Timer() {
@Override
public void run() {
absolutePanel.remove(display.asWidget());
display.asWidget().setVisible(false);
}
};
display.getHtmlPanel().setStyleName("appManager_close", true);
display.getHtmlPanel().setStyleName("appManager_open", false);
timer.schedule(500);
// absolutePanel.remove(display.asWidget());
}
public static native JavaScriptObject listener(Element element) /*-{
switch (element.type) {
case "animationstart":
$wnd.alert("Termino");
break;
case "animationend":
$wnd.alert("Termino");
break;
case "animationiteration":
$wnd.alert("Termino");
break;
}
$wnd.alert(element.type);
return this;
}-*/;
public static native void alert(Element element, JavaScriptObject javascriptObject) /*-{
element.addEventListener("animationiteration", javascriptObject, false);
}-*/;
@Override
public void toZPosition(int position) {
// TODO Auto-generated method stub
}
@Override
public int getWidth() {
return display.asWidget().getOffsetWidth();
}
@Override
public int getHeight() {
return display.asWidget().getOffsetHeight();
}
@Override
public int getAbsoluteLeft() {
return display.asWidget().getAbsoluteLeft();
}
@Override
public int getAbsoluteTop() {
return display.asWidget().getAbsoluteTop();
}
@Override
public void toBack() {
}
@Override
public void toFront() {
}
@Override
public void setPosition(int x, int y) {
this.x = x;
this.y = y;
}
}