/**
*
*/
package com.piki.client.ui;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceChangeEvent;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.SimpleLayoutPanel;
import com.google.gwt.user.client.ui.Widget;
import com.piki.client.event.AddWikiPageEvent;
import com.piki.client.event.AddWikiPageEventHandler;
import com.piki.client.event.DeleteWikiPageEvent;
import com.piki.client.mvp.HasEventBus;
import com.piki.client.mvp.place.HasPlaceController;
import com.piki.client.presenter.WikiPagePlace;
import com.piki.client.storage.WikiStorage;
public class DesktopImplPiki100 extends Composite implements Desktop, HasEventBus, HasPlaceController {
interface DesktopUiBinder extends UiBinder<Widget, DesktopImplPiki100> {
}
private static DesktopUiBinder uiBinder = GWT.create(DesktopUiBinder.class);
private EventBus eventBus = null;
private PlaceController placeController = null;
private WikiStorage storage = new WikiStorage();
@UiField
SimpleLayoutPanel workspace;
@UiField
WikiPageBox wikiPageBox;
public DesktopImplPiki100() {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void setWidget(IsWidget w) {
workspace.setWidget(w);
}
@Override
public void setEventBus(EventBus eventBus) {
this.eventBus = eventBus;
}
@Override
public void setPlaceController(PlaceController placeController) {
this.placeController = placeController;
}
@Override
public void initDesktop() {
wikiPageBox.addNewWikiPageHandler(new WikiPageBox.WikiPageBoxHandler() {
@Override
public void onWikiPage(String wikiPageName) {
Place place = new WikiPagePlace(wikiPageName);
placeController.goTo(place);
}
});
wikiPageBox.addSelectWikiPageHandler(new WikiPageBox.WikiPageBoxHandler() {
@Override
public void onWikiPage(String wikiPageName) {
Place place = new WikiPagePlace(wikiPageName);
placeController.goTo(place);
}
});
wikiPageBox.addDeleteWikiPageHandler(new WikiPageBox.WikiPageBoxHandler() {
@Override
public void onWikiPage(String wikiPageName) {
eventBus.fireEvent(new DeleteWikiPageEvent(wikiPageName));
storage.delete(wikiPageName);
wikiPageBox.removeWikiPage(wikiPageName);
}
});
for (String wikiPageName: storage.findAll()) {
wikiPageBox.addWikiPage(wikiPageName);
}
if (eventBus != null) {
eventBus.addHandler(AddWikiPageEvent.TYPE, new AddWikiPageEventHandler() {
@Override
public void onAddWikiPage(AddWikiPageEvent event) {
wikiPageBox.addWikiPage(event.getWikiPageName());
}
});
eventBus.addHandler(PlaceChangeEvent.TYPE, new PlaceChangeEvent.Handler() {
@Override
public void onPlaceChange(PlaceChangeEvent event) {
if (event != null) {
Place place = event.getNewPlace();
if (place instanceof WikiPagePlace) {
WikiPagePlace p = (WikiPagePlace) place;
wikiPageBox.focusOnWikiPage(p.getWikiPageName());
}
}
}
});
}
}
}