Package org.yaac.client.ui

Source Code of org.yaac.client.ui.EditorViewImpl$EditorViewUiBinder

package org.yaac.client.ui;

import static com.google.common.collect.Lists.newLinkedList;

import java.util.LinkedList;
import java.util.List;

import javax.inject.Inject;

import org.yaac.client.activity.EditorActivity;
import org.yaac.client.ui.EditorEntityNotFoundPanel.CreateButtonHandler;
import org.yaac.client.widget.ToggleButtonGroup;
import org.yaac.client.widget.ToggleButtonGroup.SelectionChangeListener;
import org.yaac.shared.editor.EntityHierarchy;
import org.yaac.shared.editor.EntityInfo;
import org.yaac.shared.editor.EntityUpdateInfo;
import org.yaac.shared.property.KeyInfo;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.uibinder.client.UiTemplate;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DeckLayoutPanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.ToggleButton;
import com.google.gwt.user.client.ui.Widget;

/**
* @author Max Zhu (thebbsky@gmail.com)
*
*/
public class EditorViewImpl extends Composite implements EditorView {

  private static EditorViewUiBinder uiBinder = GWT.create(EditorViewUiBinder.class);

  @UiTemplate("EditorView.ui.xml")
  interface EditorViewUiBinder extends UiBinder<Widget, EditorViewImpl> {
  }

  @UiField
  TextBox keyStringTxt;
 
  private String keyString;
 
  @UiField
  FlowPanel switchControlPanel;
 
  @UiField
  Button saveBtn;
 
  @UiField
  Button deleteBtn;
 
  @UiField
  Button copyToNewBtn;
 
  @UiField
  DeckLayoutPanel mainDeck;
 
  private EditorActivity listener;
 
  // internal status
  private boolean waitingForFirstClick;
 
  private final EditorPropertyManager editorManager;
 
  @Inject
  EditorViewImpl(EditorPropertyManager editorManager) {
    this.editorManager = editorManager;
   
    initWidget(uiBinder.createAndBindUi(this));
   
    mainDeck.setAnimationDuration(500);
   
    this.waitingForFirstClick = true;
  }

  @Override
  public void setPresenter(EditorActivity listener) {
    this.listener = listener;
  }

  @UiHandler("keyStringTxt")
  void onKeyStringTxtClick(ClickEvent event) {
    if (waitingForFirstClick) {
      keyStringTxt.setText("");
      waitingForFirstClick = false;
    }
  }
 
  @UiHandler("keyStringTxt")
  void onKeyStringTxtKeyPress(KeyPressEvent event) {
    char key = event.getCharCode();
    if (KeyCodes.KEY_ENTER == key) {
      keyString = keyStringTxt.getText().trim();
      listener.startLoad(keyString);
    }
  }

  @UiHandler("saveBtn")
  void onSaveBtnClick(ClickEvent event) {
    List<EntityUpdateInfo> changes = newLinkedList();
   
    for (Widget w : this.mainDeck) {
      if (w instanceof EditorEntityPanel) {  // can be label as well, when the entity doesn't actualy exist
        EditorEntityPanel editor = ((EditorEntityPanel) w);
        EntityUpdateInfo updateInfo = editor.updatedInfo();
       
        if (updateInfo != null) {
          changes.add(updateInfo);
        }
      }
    }
   
    if (changes.isEmpty()) {
      Window.alert("Nothing changed");
    } else {
      this.listener.update(changes);
    }
  }
 
  @UiHandler("deleteBtn")
  void onDeleteBtnClick(ClickEvent event) {
    Widget w = this.mainDeck.getVisibleWidget();
   
    if (w instanceof EditorEntityPanel) {
      if (Window.confirm("Are you sure you want to delete this entity?")) {
        KeyInfo key = ((EditorEntityPanel) w).getOrigKey();
        this.listener.delete(key);
      }
    }
  }
 
  @UiHandler("copyToNewBtn")
  void onCopyToNewBtnClick(ClickEvent event) {
    Widget w = this.mainDeck.getVisibleWidget();
   
    if (w instanceof EditorEntityPanel) {
      if (Window.confirm("Are you sure you want to copy to new entity? Unsaved changes will be discarded")) {
        KeyInfo key = ((EditorEntityPanel) w).getOrigKey();
        this.listener.copyToNew(key);
      }
    }
  }
 
  @Override
  public void setKeyString(String keyString) {
    this.keyString = keyString;
    this.keyStringTxt.setText(keyString);
    this.waitingForFirstClick = false;
  }
 
  private ToggleButtonGroup<KeyInfo> btnGroup; 
  private List<KeyInfo> keys;
 
  @Override
  public void onDataReady(EntityHierarchy hierarchy) {
    // step 1 : clear previous entity hierarchy
    btnGroup = new ToggleButtonGroup<KeyInfo>();
    keys = new LinkedList<KeyInfo>();
    switchControlPanel.clear();
    mainDeck.clear();
   
    // step 2 : render UIs
    KeyInfo key = hierarchy.getKey();
   
    while (key != null) {
      keys.add(0, key);
     
      // render buttons on control panel
      ToggleButton btn = new ToggleButton(key.asSingleNodeDesc());
      btn.getElement().getStyle().setFloat(Style.Float.LEFT);
     
      // parent always goes the first
      switchControlPanel.insert(btn, 0);
      btnGroup.addButton(key, btn);

      // render contents on main deck
      final KeyInfo thisKey = key;
      EntityInfo e = hierarchy.lookupAncester(key);
      Widget w = e != null ? new EditorEntityPanel(e, editorManager) :
        new EditorEntityNotFoundPanel(
            new CreateButtonHandler() {
          @Override
          public void onButtonClick() {
            listener.create(thisKey);
          }
        });
     
      mainDeck.insert(w, 0);
     
      key = key.getParent();
    }
   
    // step 3 : subscribe selection change listener
    btnGroup.subscribe(new SelectionChangeListener<KeyInfo>() {
      @Override
      public void onSelect(KeyInfo selectedKey) {
        mainDeck.showWidget(keys.indexOf(selectedKey));
      }
    });
   
    // step 4 : select current entity as default
    btnGroup.select(hierarchy.getKey());
    mainDeck.showWidget(keys.indexOf(hierarchy.getKey()));
  }

 
 
  @Override
  public String getKeyString() {
    return this.keyString;
  }
}
TOP

Related Classes of org.yaac.client.ui.EditorViewImpl$EditorViewUiBinder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.