View Javadoc

1   /**********************************************
2    * Copyright (C) 2011 Lukas Laag
3    * This file is part of svgreal.
4    * 
5    * svgreal is free software: you can redistribute it and/or modify
6    * it under the terms of the GNU General Public License as published by
7    * the Free Software Foundation, either version 3 of the License, or
8    * (at your option) any later version.
9    * 
10   * svgreal is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   * GNU General Public License for more details.
14   * 
15   * You should have received a copy of the GNU General Public License
16   * along with svgreal.  If not, see http://www.gnu.org/licenses/
17   **********************************************/
18  package org.vectomatic.svg.edit.client.gxt.binding;
19  
20  import org.vectomatic.svg.edit.client.gxt.form.ResetButtonField;
21  import org.vectomatic.svg.edit.client.model.CssMetadata;
22  import org.vectomatic.svg.edit.client.model.svg.SVGStyledElementModel;
23  
24  import com.extjs.gxt.ui.client.binding.FieldBinding;
25  
26  /**
27   * Binds a reset CSS property button with a 
28   * CSS property of an SVGStyleElementModel.
29   * @author laaglu
30   */
31  public class ResetButtonBinding extends FieldBinding {
32  	
33  	public ResetButtonBinding(ResetButtonField field, String property) {
34  		super(field, property);
35  	}
36  	
37  	private static boolean equals(Object v1, Object v2) {
38  		if (v1 != null) {
39  			return v1.equals(v2);
40  		}
41  		return v2 == null;
42  	}
43  	
44  	@Override
45  	protected Object onConvertModelValue(Object value) {
46  		// Enable the reset button only if the field does not
47  		// have the default value.
48  		CssMetadata<?> metadata = (CssMetadata<?>) ((SVGStyledElementModel)model).getMetaModel().getMetadata(property);
49  		field.setEnabled(!equals(metadata.getDefaultValue(), value));
50  		return value;
51  	}
52  
53  	@Override
54  	public void updateModel() {
55  		// create a command to record the update to the default value
56  		super.updateModel();
57  		
58  		// since the model value is now the default value, the CSS
59  		// property can be removed
60  		model.remove(ResetButtonBinding.this.property);
61  	}
62  }