view src/samer/core_/util/heavy/NumberViewer.java.not @ 0:bf79fb79ee13

Initial Mercurial check in.
author samer
date Tue, 17 Jan 2012 17:50:20 +0000
parents
children
line wrap: on
line source
/*
 *	NumberViewer.java	
 *
 *	Copyright (c) 2000, Samer Abdallah, King's College London.
 *	All rights reserved.
 *
 *	This software is provided AS iS and WITHOUT ANY WARRANTY; 
 *	without even the implied warranty of MERCHANTABILITY or 
 *	FITNESS FOR A PARTICULAR PURPOSE.
 */

package samer.core.viewers;
import  samer.core.util.*;
import  samer.core.*;
import  java.awt.*;
import  java.awt.event.*;
import  java.util.*;

import  samer.tools.VMap;

public class NumberViewer extends VPanel implements
	FocusListener, AdjustmentListener, ActionListener
{
	protected static final VLayout	layout = new VLayout(1,6);

	DoubleModel	dm;
	TextField	t;
	Scrollbar	s;
	VMap			map;

	public detach() { dm=null; super.detach(); }

	protected NumberViewer(Viewer vwr, String label, DoubleModel dm) 
	{ 
		super(vwr);
		setLayout(layout); 
		setName(label);

		s = new Scrollbar( Scrollbar.HORIZONTAL, 0, 10, 0, map.getIntRange());
		s.addAdjustmentListener(this);

		t = new TextField(4); 
		t.addFocusListener(this);
		t.addActionListener(this);

		add(s,"Center");
		add(t,"East");

		this.dm=dm;
	}

	public void set(int num) 
	{ 
		t.setText(String.valueOf(num));
		s.setValue(num);
	}

	public void set(double num)
	{
		t.setText(X.string(num));
		s.setValue(map.toInt(num));
	}

	public Dimension getMinimumSize() { return getPreferredSize(); }
	public Dimension getPreferredSize()
	{
		Dimension d=super.getPreferredSize();
		Dimension dl=l.getPreferredSize();
		Dimension dt=t.getPreferredSize();

		// Need to make room for scroll bar 
		d.width = dl.width + dt.width + 96; // ??
		return d;
	}

	// ----------- event handling -------------

	private void textChanged() 
	{
		double n=X.parseDouble(t.getText());
		s.setValue(map.toInt(num));
		if (model!=null) model.set(n);
	}

	public void adjustmentValueChanged(AdjustmentEvent e) 
	{
		getSlider();
		setText();
		variable.changed(this);
	}

	public void focusGained( FocusEvent e) {}
	public void focusLost( FocusEvent e) {
		if (e.getSource()==t) textChanged();
	}

	public void actionPerformed( ActionEvent e) {
		if (e.getSource()==t) textChanged(); 
	}
}