/**
* 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);
}
}