Package com.gloopics.g3viewer.client

Source Code of com.gloopics.g3viewer.client.Item

package com.gloopics.g3viewer.client;

import java.util.Iterator;
import java.util.List;

import com.gloopics.g3viewer.client.dnddesktop.DesktopDropFile;
import com.gloopics.g3viewer.client.dnddesktop.DesktopDroppableWidget;
import com.gloopics.g3viewer.client.dnddesktop.DndDesktopFactory;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ContextMenuEvent;
import com.google.gwt.event.dom.client.ContextMenuHandler;
import com.google.gwt.event.dom.client.DoubleClickEvent;
import com.google.gwt.event.dom.client.DoubleClickHandler;
import com.google.gwt.event.dom.client.HasAllMouseHandlers;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
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.event.dom.client.MouseWheelEvent;
import com.google.gwt.event.dom.client.MouseWheelHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.gears.client.desktop.File;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONNumber;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.MenuItem;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.Widget;


public class Item extends Composite implements HasAllMouseHandlers, DesktopDroppableWidget{

  private final int m_ID;
 
  private String m_Title;
 
  private String m_Thumb;
 
  private String m_Resized;
 
  private final String m_Type;
 
  private final Album m_Parent;
 
  private Album m_LinkedAlbum = null;
 
  private final G3Viewer m_Container;
 
  private final boolean m_IsAlbum;

  private final boolean m_IsPhoto;
 
  private final View m_View;
 
  private AlbumItemDropContainer m_DropContainer = null;
 
  private final Image m_ThumbImage;
  private final Label m_TitleLabel;
 
  public Item(Album a_Parent, JSONObject a_Value, G3Viewer a_Container){
    m_Container = a_Container;
    m_View = a_Container.getView();
    m_Parent = a_Parent;
    m_ID = Utils.extractId(a_Value.get("id"));
    m_Title = ((JSONString)a_Value.get("title")).stringValue();
    m_Thumb = ((JSONString)a_Value.get("thumb")).stringValue();
    m_Type = ((JSONString)a_Value.get("type")).stringValue();
    m_Resized = ((JSONString)a_Value.get("resize")).stringValue();
    m_IsAlbum = m_Type.equals("album");
    m_IsPhoto = m_Type.equals("photo");
    FlowPanel dp = new FlowPanel();
   
   
    m_ThumbImage = new Image(m_Thumb);
    dp.add(m_ThumbImage);
   
    m_TitleLabel = new Label(m_Title);
    dp.add(m_TitleLabel);
   
    initWidget(dp);
   
    this.setStylePrimaryName("item");
    this.addStyleName("i" + m_Type);
   
    addDomHandler(new ContextMenuHandler() {
     
      @Override
      public void onContextMenu(ContextMenuEvent event) {
        showPopupMenu(event);
        event.stopPropagation();
        event.preventDefault();
      }
    }, ContextMenuEvent.getType());
   
    addDomHandler(new DoubleClickHandler() {
     
      @Override
      public void onDoubleClick(DoubleClickEvent event) {
        if (isAlbum()){
          m_Parent.selectSubAlbum(m_ID);
        }
        else if (isPhoto()){
          m_Container.showImage(m_Resized);
        }
       
      }
    },DoubleClickEvent.getType());
   
    a_Container.getDragController().makeDraggable(this);

    if (m_IsAlbum)
    {
      if (m_Container.isUploadEnabled())
      {
        ((DndDesktopFactory)GWT.create(DndDesktopFactory.class)).getInstance(this);
      }
    }
   
  }
 
  public void showing(){
    if (isAlbum() && m_LinkedAlbum != null){
      m_DropContainer = new AlbumItemDropContainer(this, m_LinkedAlbum);
      m_Container.getDragController().registerDropController(
          m_DropContainer);
    }
  }

  public void hidding(){
    if (m_DropContainer != null){
      m_Container.getDragController().unregisterDropController(m_DropContainer);
    }
  }

  public void updateValues(JSONValue aValue){
    JSONObject jso = aValue.isObject();
   
    if (jso != null) {
      m_Title = ((JSONString)jso.get("title")).stringValue();
      m_Thumb = ((JSONString)jso.get("thumb")).stringValue();
      m_Resized = ((JSONString)jso.get("resize")).stringValue();
      if (m_LinkedAlbum != null){
        m_LinkedAlbum.updateValues(jso);
      }
   
      m_TitleLabel.setText(m_Title);
      m_ThumbImage.setUrl(m_Thumb);
    }
  }
 
  public void updateImages(JSONValue a_Value){
    JSONObject jso = a_Value.isObject();
   
    if (jso != null) {
      m_Thumb = ((JSONString)jso.get("thumb")).stringValue();
      m_ThumbImage.setUrl(m_Thumb);
      m_Resized = ((JSONString)jso.get("resize")).stringValue();
    }
   
  }
 
  public void refresh(){
   
    m_Container.doJSONRequest(G3Viewer.VIEW_ITEM_URL + getID(),
        new HttpSuccessHandler() {
         
          @Override
          public void success(JSONValue aValue) {
            updateValues(aValue);
          }
        },false,true);
   
  }
 
  public void setLinkedAlbum(Album a_Album){
    m_LinkedAlbum = a_Album;
  }
 
  public void removeLinkedAlbum()
  {
    if (m_LinkedAlbum != null){
      m_LinkedAlbum.remove();
    }
  }
 
 
  public void showPopupMenu(ContextMenuEvent event){
    // show views popup menu if items are selected
    if (m_Container.getDragController().getSelectedWidgetcount() > 1)
    {
      m_View.showPopupMenu(event);
      return;
    }
   
    this.addStyleName("popped");
    final PopupPanel popupPanel = new PopupPanel(true);   
    popupPanel.setAnimationEnabled(true);
    popupPanel.setStyleName("popup");
    MenuBar popupMenuBar = new MenuBar(true);
   
    MenuItem deleteItem = new MenuItem("Delete " + m_Type, true, new Command() {
     
      @Override
      public void execute() {
        m_Container.doDialog("index.php/quick/form_delete/" + m_ID, new HttpDialogHandler() {
          public void success(String aResult) {
            m_View.removeFromView(Item.this);
            if (m_LinkedAlbum != null){
              m_LinkedAlbum.remove();
            }
          }
        });
        popupPanel.hide();
       
      }
    });
    deleteItem.addStyleName("popup-item");
    popupMenuBar.addItem(deleteItem);
   
    MenuItem editItem = new MenuItem("Edit " + m_Type, true, new Command() {
     
      @Override
      public void execute() {
        m_Container.doDialog("index.php/form/edit/" + m_Type + "s/" + m_ID,
          new HttpDialogHandler() {
            public void success(String aResult) {
              refresh();
            }
          });
        popupPanel.hide();
       
      }
    });
    editItem.addStyleName("popup-item");
    popupMenuBar.addItem(editItem);
    
    MenuItem albumCover = new MenuItem("Make Album Cover", true, new Command() {
     
      @Override
      public void execute() {
        m_Container.doJSONRequest(G3Viewer.MAKE_ALBUM_COVER_URL + m_ID, new HttpSuccessHandler() {
         
          public void success(JSONValue aValue) {
            // nothing to do
          }
        },false,true);
        popupPanel.hide();
      }
    });
    albumCover.addStyleName("popup-item");
    popupMenuBar.addItem(albumCover);

    if (isPhoto())
    {
      MenuItem rotateCW = new MenuItem("Rotate Clockwise", true, new Command() {
        @Override
        public void execute() {
          setLoadingThumb();
          m_Container.doJSONRequest(G3Viewer.ROTATE_URL + m_ID + "/cw", new HttpSuccessHandler() {
           
            public void success(JSONValue aValue) {
              updateImages(aValue);
            }
          },false,true);
          popupPanel.hide();
        }
      });
      rotateCW.addStyleName("popup-item");
      popupMenuBar.addItem(rotateCW);
 
      MenuItem rotateCCW = new MenuItem("Rotate Couter-Clockwise", true, new Command() {
        @Override
        public void execute() {
          setLoadingThumb();
          m_Container.doJSONRequest(G3Viewer.ROTATE_URL + m_ID + "/ccw", new HttpSuccessHandler() {
           
            public void success(JSONValue aValue) {
              updateImages(aValue);
            }
          },false,true);
          popupPanel.hide();
        }
      });
      rotateCCW.addStyleName("popup-item");
      popupMenuBar.addItem(rotateCCW);
    }
   
   
    
    
    popupMenuBar.setVisible(true);
    popupPanel.add(popupMenuBar);
   
    int x = DOM.eventGetClientX((Event)event.getNativeEvent());
    int y = DOM.eventGetClientY((Event)event.getNativeEvent());
    popupPanel.setPopupPosition(x, y);
    popupPanel.addCloseHandler(new CloseHandler<PopupPanel>() {
     
      @Override
      public void onClose(CloseEvent<PopupPanel> event) {
       
        Item.this.removeStyleName("popped");
      }
    });
   
    popupPanel.show();   
  }
 
  public void setLoadingThumb()
  {
    m_ThumbImage.setUrl(Loading.URL);
  }
 
  public boolean isAlbum(){
    return m_IsAlbum;
  }

  public boolean isPhoto(){
    return m_IsPhoto;
  }
 
  public int getID()
  {
    return m_ID;
  }

  @Override
  public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) {
    return addDomHandler(handler, MouseDownEvent.getType());
  }

  @Override
  public HandlerRegistration addMouseUpHandler(MouseUpHandler handler) {
    return addDomHandler(handler, MouseUpEvent.getType());
  }

  @Override
  public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) {
    return addDomHandler(handler, MouseOutEvent.getType());
  }

  @Override
  public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) {
    return addDomHandler(handler, MouseOverEvent.getType());
  }

  @Override
  public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler) {
    return addDomHandler(handler, MouseMoveEvent.getType());
  }

  @Override
  public HandlerRegistration addMouseWheelHandler(MouseWheelHandler handler) {
    return addDomHandler(handler, MouseWheelEvent.getType());
  }

  @Override
  public void dropFiles(File[] aFile) {
    if (m_IsAlbum)
    {
      m_LinkedAlbum.uploadFiles(aFile);
    }
   
  }

  @Override
  public Widget getActualWidget() {
    return this;
  }
 
 

}
TOP

Related Classes of com.gloopics.g3viewer.client.Item

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.