/**********************************************
* Copyright (C) 2011 Lukas Laag
* This file is part of svgreal.
*
* svgreal is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* svgreal is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with svgreal. If not, see http://www.gnu.org/licenses/
**********************************************/
package org.vectomatic.svg.edit.client.gxt.binding;
import java.util.HashMap;
import java.util.Map;
import org.vectomatic.dom.svg.OMSVGLength;
import org.vectomatic.dom.svg.OMSVGSVGElement;
import org.vectomatic.dom.svg.utils.SVGConstants;
import org.vectomatic.svg.edit.client.command.GenericEditCommandFactory;
import org.vectomatic.svg.edit.client.engine.SVGModel;
import org.vectomatic.svg.edit.client.gxt.form.ImageHrefField;
import org.vectomatic.svg.edit.client.model.svg.SVGImageElementModel;
import org.vectomatic.svg.edit.client.model.svg.SVGLength;
import com.extjs.gxt.ui.client.binding.FieldBinding;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.util.Size;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
/**
* Binding class for ImageHrefField
* @author laaglu
*/
public class ImageHrefFieldBinding extends FieldBinding implements ValueChangeHandler<Size> {
private HandlerRegistration registration;
public ImageHrefFieldBinding(ImageHrefField field, String property) {
super(field, property);
}
public void updateModel() {
ImageHrefField field = (ImageHrefField)this.field;
SVGImageElementModel model = (SVGImageElementModel)this.model;
model.setResourceName(field.getResourceName());
super.updateModel();
}
@Override
public void onValueChange(ValueChangeEvent<Size> event) {
GenericEditCommandFactory factory = GenericEditCommandFactory.INSTANTIATOR.create();
factory.start(this);
Size size = event.getValue();
SVGImageElementModel imageModel = (SVGImageElementModel) model;
SVGModel owner = imageModel.getOwner();
OMSVGSVGElement svg = owner.getSvgElement();
Map<String, Object> oldValues = new HashMap<String, Object>();
oldValues.put(SVGConstants.SVG_WIDTH_ATTRIBUTE, imageModel.get(SVGConstants.SVG_WIDTH_ATTRIBUTE));
oldValues.put(SVGConstants.SVG_HEIGHT_ATTRIBUTE, imageModel.get(SVGConstants.SVG_HEIGHT_ATTRIBUTE));
imageModel.setSilent(true);
imageModel.set(SVGConstants.SVG_WIDTH_ATTRIBUTE, new SVGLength(svg.createSVGLength(OMSVGLength.SVG_LENGTHTYPE_PX, size.width)));
imageModel.set(SVGConstants.SVG_HEIGHT_ATTRIBUTE, new SVGLength(svg.createSVGLength(OMSVGLength.SVG_LENGTHTYPE_PX, size.height)));
imageModel.setSilent(false);
owner.getCommandStore().addCommand(factory.createCommand(imageModel, oldValues));
}
@Override
public void bind(ModelData model) {
super.bind(model);
ImageHrefField imageField = (ImageHrefField)field;
registration = imageField.addValueChangeHandler(this);
}
@Override
public void unbind() {
super.unbind();
registration.removeHandler();
}
}