package conteggi;

import java.awt.*;
import java.awt.event.*;
import conteggi.*;

public class IncDecListener implements ActionListener{
	/* costanti */
	public static final int INC1LISTENER = 1;
	public static final int DEC1LISTENER = -1;
	public static final int INC2LISTENER = 2;
	public static final int DEC2LISTENER = -2;

	/* var. istanza */

	/* _listenertype_ è anche il valore (<0 o >0) da sommare al valore del contatore. NB: queste sono caratteristiche dell'implementazione, ma non sono visibili all'esterno a patto di usare le costanti. */

	private int listenertype;	
	private Counter counterrif;
	private Container containerrif;	//rif. al container dell'interf.graf.del counter

	/* costruttori e metodi */
	public IncDecListener(Container c, Counter cr, int lt){
		listenertype=lt;
		counterrif=cr;
		containerrif=c;
	}

	public void actionPerformed(ActionEvent e){
/* 
qui avrei potuto lasciare al CounterWithDisplay la briga di ridefinire i metodi inc() e dec() del Counter; era più logico (e immediato), forse. Tuttavia anche così l'aggiornamento della GUI è interamente interno al Controllo, e CounterWithDisplay non deve ridefinire niente. Inoltre ciò mi ha permesso di riusare lo stesso codice degli ascoltatori (IncDecListener e ResetListener) che già avevo creato per CounterApplet; ed infine questa soluzione mi permette di pensare a Contatori all'interno di altri Container: un Applet nel caso di CounterApplet, ma potrei avere Counter senza la loro finestra dedicata ma bensì inseriti in un'altra finestra (p.e. in un suo Panel) che magari ne contiene tanti: in tutti questi casi potrei (ri)usare sempre questi ascoltatori. Ovviamente il contenitore del contatore dovrà ridefinire il metodo repaint() ! 
*/

		int i=listenertype;
		while(i>0){
			counterrif.inc();
			i--;
		}
		i=listenertype;
		while(i<0){
			counterrif.dec();
			i++;
		}
		containerrif.repaint();
	}

	public int getListenerType(){
		return listenertype;
	}
	
	public Container getContainerRif(){
		return containerrif;
	}
}

