Package org.waveprotocol.wave.client.doodad.attachment.render

Source Code of org.waveprotocol.wave.client.doodad.attachment.render.ImageThumbnailRenderer

/**
* Copyright 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package org.waveprotocol.wave.client.doodad.attachment.render;

import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.Widget;

import org.waveprotocol.wave.client.doodad.attachment.AttachmentConstants;
import org.waveprotocol.wave.client.doodad.attachment.ImageThumbnail;
import org.waveprotocol.wave.client.doodad.attachment.ImageThumbnailAttachmentHandler;
import org.waveprotocol.wave.client.doodad.attachment.SimpleAttachmentManager;
import org.waveprotocol.wave.client.doodad.attachment.SimpleAttachmentManager.Attachment;
import org.waveprotocol.wave.client.editor.content.ContentElement;
import org.waveprotocol.wave.client.editor.gwt.GwtRenderingMutationHandler;

/**
* Renderer implementation for ImageThumbnails.
*
*/
public class ImageThumbnailRenderer extends GwtRenderingMutationHandler {

  private final SimpleAttachmentManager manager;
  private final ImageThumbnailAttachmentHandler attachmentHandler;

  /**
   * Constructor
   */
  public ImageThumbnailRenderer(SimpleAttachmentManager manager,
      ImageThumbnailAttachmentHandler handler) {
    super(Flow.USE_WIDGET);
    this.manager = manager;
    this.attachmentHandler = handler;
  }

  @Override
  protected Widget createGwtWidget(Renderable element) {
    ImageThumbnailWidget widget = new ImageThumbnailWidget();

    // TODO(danilatos/reuben): Can we remove the dependency on this max size constant?
    int maxSize = AttachmentConstants.MAX_THUMBNAIL_SIZE;
    widget.setThumbnailSize(maxSize, maxSize * 3 / 4);

    return widget;
  }

  private ImageThumbnailWidget getWidget(ContentElement e) {
    return (ImageThumbnailWidget) getGwtWidget(e);
  }

  @Override
  public Element getContainerNodelet(Widget w) {
    return ((ImageThumbnailWidget) w).getCaptionContainer();
  }

  /**
   * @param e an element
   * @return the view for the element
   */
  public ImageThumbnailView getView(ContentElement e) {
    return getWidget(e);
  }

  @Override
  public void onActivationStart(ContentElement element) {
    element.setProperty(ImageThumbnailWrapper.PROPERTY, new ImageThumbnailWrapper(element));

    fanoutAttrs(element);
  }

  @Override
  public void onDeactivated(ContentElement element) {
    ImageThumbnailWrapper w = ImageThumbnailWrapper.of(element);
    if (w.getAttachment() != null) {
      attachmentHandler.cleanup(element, w.getAttachment());
    }
    element.setProperty(ImageThumbnailWrapper.PROPERTY, null);
  }

  @Override
  public void onAttributeModified(ContentElement element, String name,
      String oldValue, String newValue) {
    if (ImageThumbnail.STYLE_ATTR.equals(name)) {
      ImageThumbnailView view = getView(element);
      view.setFullSizeMode(ImageThumbnail.STYLE_FULL.equals(newValue));
    } else if (ImageThumbnail.ATTACHMENT_ATTR.equals(name)) {
      ImageThumbnailWrapper w = ImageThumbnailWrapper.of(element);
      assert w != null;

      Attachment newAttachment = manager.getAttachment(newValue);
      Attachment oldAttachment = w.getAttachment();
      if (newAttachment != oldAttachment) {
        if (oldAttachment != null) {
          attachmentHandler.cleanup(element, oldAttachment);
        }
        if (newAttachment != null) {
          ImageThumbnailWrapper.of(element).setAttachment(newAttachment);
          attachmentHandler.init(element, newAttachment);
        }
      }
    }
    super.onAttributeModified(element, name, oldValue, newValue);
  }
}
TOP

Related Classes of org.waveprotocol.wave.client.doodad.attachment.render.ImageThumbnailRenderer

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.