summaryrefslogtreecommitdiff
path: root/java/src/org/singinst/uf/view/TextScalarBinder.java
blob: c5d8903ca0565e261a593f20bad2ed6665bec228 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package org.singinst.uf.view;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.ParseException;

import javax.swing.JFormattedTextField;

import org.singinst.uf.common.LogUtil;
import org.singinst.uf.model.ScalarValueHolder;
import org.singinst.uf.model.ValueListener;

public class TextScalarBinder {
	private boolean userEntry = true;
	
	public void bind(final ScalarValueHolder scalarValueHolder,
			final JFormattedTextField propertyValueDisplay) {
		scalarValueHolder.unshiftUpdateListener(new ValueListener() {
			public void fireUpdate(double value) {
				userEntry = false;
				try {
					String formattedString = scalarValueHolder.getScalar().getLineBounds().userFormat(value);
					propertyValueDisplay.setText(formattedString);
					try {
						propertyValueDisplay.commitEdit();
					} catch (ParseException e) {
						LogUtil.error(e);
					}
				} finally {
					userEntry = true;
				}
			}
		});
		
		propertyValueDisplay.addPropertyChangeListener(new PropertyChangeListener() {
			public void propertyChange(PropertyChangeEvent evt) {
				if (userEntry) {
					if ("value".equals(evt.getPropertyName())) {
						scalarValueHolder.setValueFromUser(((Number) evt.getNewValue()).doubleValue());					
					}
				}
			}			
		});
	}

}