view src/econnect/wp3_3/client/widgets/timeplot/Timeplot.java @ 3:cf06b77a8bbd

Committed branch of the e4D repos sti-gwt branch 16384. git-svn-id: http://dev.dariah.eu/svn/repos/eu.dariah.de/ap1/sti-gwt-dariah-geobrowser@36 f2b5be40-def6-11e0-8a09-b3c1cc336c6b
author StefanFunk <StefanFunk@f2b5be40-def6-11e0-8a09-b3c1cc336c6b>
date Tue, 17 Jul 2012 13:34:40 +0000
parents
children
line wrap: on
line source

package econnect.wp3_3.client.widgets.timeplot;

import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;

import econnect.wp3_3.client.slider.Slider;
import econnect.wp3_3.client.core.ApplicationConstants;
import econnect.wp3_3.client.core.StiConstants;
import econnect.wp3_3.client.core.StiCore;
import econnect.wp3_3.client.widgets.timeplot.StiTimeplot;

/**
 * Implementation of the Java component of the timeplot widget
*/
public class Timeplot {

	/**
     * The Javascript timeplot object 
    */
	private StiTimeplot jsTimeplot;

	/**
     * The slider component of the timeplot controls 
    */
	private Slider zoomSlider;
	
	/**
     * The animation control image container 
    */
	private Image animation;

	/**
     * If animation is possible (selected time range)
    */
	private boolean enableAnimation = false;

	/**
     * Constructor for the timeplot widget java component
     *
     * @param core object to allow interaction with all javascript components
     * @param window id of the window to embed the timeplot widget
     * @param container id of the container, the window will be added
    */
	public Timeplot( StiCore core, String window, String container ){
		this.jsTimeplot = StiTimeplot.createStiTimeplot(core, window, container);	    
	}
	
    /**
     * initializes the controls needed for timeplot interaction
     *
     * @return a grid of control elements
    */
	public Grid initPlotControls(){
	    	    
		final ApplicationConstants constants = (ApplicationConstants) GWT.create(ApplicationConstants.class);
		final StiConstants textConstants = (StiConstants) GWT.create(StiConstants.class);		

		this.animation = new Image();
		this.animation.setTitle(textConstants.animation0());
		this.animation.setUrl(constants.playDisabled());
		this.animation.addClickHandler(new ClickHandler() {
		      public void onClick(ClickEvent event) {
		    	  if( enableAnimation ){
		    		  if( jsTimeplot.paused() ){
			    		  jsTimeplot.play();
		    		  }
		    		  else {
			    		  jsTimeplot.pause();
		    		  }
		    	  }
		      }
		    });
		    
	    final Grid controlGrid = new Grid(2,1);
	    controlGrid.setWidget(0, 0, this.animation);

	    DivElement zoomDiv = Document.get().createDivElement();
	    zoomSlider = new Slider(zoomDiv,"vertical");
	    zoomSlider.getSlider().setMaximum(100);
	    zoomSlider.getSlider().setValue(0);
	    zoomSlider.getSlider().addChangeListener(jsTimeplot,Document.get(),false);
	    
	    Image zoomIn = new Image(constants.zoomInImage());
	    zoomIn.addClickHandler(new ClickHandler() {
		      public void onClick(ClickEvent event) {
			        jsTimeplot.zoom(1);
			      }
			    });
	    Image zoomOut = new Image(constants.zoomOutImage());
	    zoomOut.addClickHandler(new ClickHandler() {
		      public void onClick(ClickEvent event) {
			        jsTimeplot.zoom(-1);
			      }
			    });
	    
	    SimplePanel zoom = new SimplePanel();
	    zoom.getElement().appendChild(zoomDiv);
	    
	    AbsolutePanel zoomPanel = new AbsolutePanel();	    
	    zoomPanel.addStyleName("sliderStyle");
	    zoomPanel.addStyleName("cellStyle");
	    zoomPanel.addStyleName("center");
	    zoomPanel.add(zoomIn,2,0);
	    zoomPanel.add(zoom,0,10);
	    zoomPanel.add(zoomOut,2,84);
	    zoomIn.addStyleName("zHigh");
	    zoomOut.addStyleName("zHigh");
	    zoomPanel.setTitle(textConstants.plotZoom());
	    
	    controlGrid.setWidget(1, 0, zoomPanel);
	    return controlGrid;
		
	}

    /**
     * changes images of animation controls
    */
	public void animationImage( boolean enable ){
		final ApplicationConstants constants = (ApplicationConstants) GWT.create(ApplicationConstants.class);
		final StiConstants textConstants = (StiConstants) GWT.create(StiConstants.class);
		this.enableAnimation = enable;
		if( enable ){
			if( jsTimeplot.paused() ){
	    		animation.setUrl(constants.playEnabled());
	    		animation.setTitle(textConstants.animation1());
	    	}
			else {
				animation.setUrl(constants.pauseEnabled());
	    		animation.setTitle(textConstants.animation2());
	    	}			
		}
		else {
			animation.setUrl(constants.playDisabled());
    		animation.setTitle(textConstants.animation0());
		}
	}
	
    /**
     * sets zoom levels of corresponding zoom slider
     *
     * @param levels number of zoom levels
    */
	public void setZoomLevels( int levels ){
	    zoomSlider.getSlider().setMaximum(levels);		
	}
	
    /**
     * sets value of corresponding zoom slider
     *
     * @param value value to set
    */
	public void setValue( int value ){
	    zoomSlider.getSlider().setValue(value);		
	}

    /**
     * Getter for the value of corresponding zoom slider
     *
     * @return actual zoom slider value
    */
	public int getValue(){
	    return zoomSlider.getSlider().getValue();		
	}

    /**
     * Getter for the corresponding Javascript component of the Timeplot
     *
     * @return the Javascript component of the Timeplot
    */
	public StiTimeplot getJsTimeplot(){
		return this.jsTimeplot;
	}

}