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.FloatSliderField;
21  
22  import com.extjs.gxt.ui.client.data.ModelData;
23  import com.extjs.gxt.ui.client.event.DragEvent;
24  import com.extjs.gxt.ui.client.event.DragListener;
25  import com.extjs.gxt.ui.client.event.Events;
26  import com.extjs.gxt.ui.client.event.Listener;
27  import com.extjs.gxt.ui.client.event.SliderEvent;
28  import com.extjs.gxt.ui.client.widget.Slider;
29  
30  /**
31   * Binds a slider with a 
32   * CSS property of an SVGStyleElementModel.
33   * @author laaglu
34   */
35  public class FloatSliderFieldBinding extends DelayedBindingBase {
36  	private Listener<SliderEvent> sliderClickListener;
37  	private DragListener dragListener;
38  
39  	public FloatSliderFieldBinding(FloatSliderField field, String property) {
40  		super(field, property);
41  		sliderClickListener = new Listener<SliderEvent>() {
42  			public void handleEvent(SliderEvent be) {
43  //				GWT.log("FloatSliderFieldBinding.click");
44  				commitChanges();
45  			}
46  		};
47  
48  		
49  		// This listener will temporarily disable the capture
50  		// of model changes to avoid generating dozens of
51  		// commands as one drags the slider knob. Only one
52  		// command should be generated, when the knob is released.
53  		dragListener = new DragListener() {
54  			@Override
55  			public void dragEnd(DragEvent de) {
56  //				GWT.log("FloatSliderFieldBinding.dragEnd");
57  				commitChanges();
58  			}
59  		};
60  	}
61  	
62  	@Override
63  	public void bind(ModelData model) {
64  		super.bind(model);
65  		Slider slider = ((FloatSliderField)field).getSlider();
66  		slider.addListener(Events.DragEnd, dragListener);
67  		slider.addListener(Events.OnClick, sliderClickListener);
68  	}
69  	
70  	@Override
71  	public void unbind() {
72  		Slider slider = ((FloatSliderField)field).getSlider();
73  		slider.removeListener(Events.DragEnd, dragListener);
74  		slider.removeListener(Events.OnClick, sliderClickListener);
75  		super.unbind();
76  	}
77  }