Package com.totsp.gwittir.client.fx.ui

Source Code of com.totsp.gwittir.client.fx.ui.ReflectedImageGroup

/*
* ReflectedImageGroup.java
*
* Created on November 7, 2007, 8:43 PM
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

package com.totsp.gwittir.client.fx.ui;

import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.MouseListener;
import com.google.gwt.user.client.ui.Widget;
import com.totsp.gwittir.client.log.Level;
import com.totsp.gwittir.client.ui.AbstractBoundCollectionWidget;
import com.totsp.gwittir.client.ui.Renderer;
import com.totsp.gwittir.client.ui.ToStringRenderer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
*
* @author cooper
*/
public class ReflectedImageGroup<T> extends AbstractBoundCollectionWidget<T,String> {
   
    private Collection value;
    final private double maxScalar = 1.25D;
    private transient ReflectedImage[] images;
    final private int baseWidth;
    final private int baseHeight;
    final private double reflectHeight;
    final private double opacity;
    final private Grid grid = new Grid(1,3);
    final private FlexTable imagesPanel = new FlexTable();
    private Object selected;
    private int lastSelectedIndex = -1;
   
    /** Creates a new instance of ReflectedImageGroup */
    public ReflectedImageGroup(final int baseWidth,
            final int baseHeight, final double reflectHeight, final double opacity) {
        super();
        this.baseWidth = baseWidth;
        this.baseHeight = baseHeight;
        this.reflectHeight = reflectHeight;
        this.opacity = opacity;
        this.imagesPanel.setHeight("100%");
        final int  padding = ((int)(baseHeight * maxScalar) - baseHeight )/4;
        this.grid.setCellSpacing( padding );
        this.grid.setHeight("100%");
        this.grid.setStyleName("gwittir-ReflectedFisheyeImageGroup");
        this.grid.getRowFormatter().setVerticalAlign(0, HasVerticalAlignment.ALIGN_MIDDLE);
        this.imagesPanel.getRowFormatter().setVerticalAlign(0, HasVerticalAlignment.ALIGN_MIDDLE);
        this.grid.setWidget(0,1, imagesPanel );
        this.imagesPanel.setCellPadding(0);
        this.imagesPanel.setCellSpacing(2);
        Renderer<T, String> renderer = (Renderer<T, String>) ToStringRenderer.INSTANCE;
        this.setRenderer( renderer );
        super.initWidget( grid );
    }
   
   
    public Collection<T> getValue() {
        return this.value;
    }
   
    public void setValue(Collection<T> value) {
        this.value = value;
        this.changes.firePropertyChange( "value", null, value );
        this.render( this.value == null ? new ArrayList() : this.value );
    }
   
    protected void render(Collection value){
        this.images = new ReflectedImage[ value.size() ];
        this.lastSelectedIndex = -1;
        this.imagesPanel.clear();
        if( this.imagesPanel.getRowCount() > 0 ){
            this.imagesPanel.removeRow(0);
        }
        if( value == null ){
            return;
        }
        Iterator<T> it = value.iterator();
        final int maxSize = (int)(baseWidth*maxScalar) +4;
        this.imagesPanel.setWidth( maxSize * value.size() +"px");
        for( int i=0; it.hasNext(); i++ ){
            final int index = i;
            final T selectObject = it.next();
            this.images[i] = new ReflectedImage(
                    this.getRenderer().render( selectObject ).toString(),
                    this.baseWidth, this.baseHeight,
                    this.reflectHeight, this.opacity );
           
            this.imagesPanel.getCellFormatter().setWidth(0, index, maxSize+"px");
            this.imagesPanel.getCellFormatter().setHorizontalAlignment(0, index, HasHorizontalAlignment.ALIGN_CENTER);
            this.imagesPanel.setWidget( 0, index, this.images[i] );
           
           
            this.images[i].addMouseListener( new MouseListener(){
                final Timer t = new Timer(){
                    public void run() {
                        if( selectObject != selected ){
                            images[index].setHeight( (int) (baseHeight * maxScalar) );
                            images[index].setWidth( (int) (baseWidth * maxScalar) );
                        }
                    }
                   
                };
                public void onMouseUp(Widget sender, int x, int y) {
                }
               
                public void onMouseMove(Widget sender, int x, int y) {
                }
               
                public void onMouseDown(Widget sender, int x, int y) {
                    setSelected( selectObject );
                }
               
                public void onMouseLeave(Widget sender) {
                    t.cancel();
                    if( selectObject != selected ){
                        images[index].setHeight( baseHeight );
                        images[index].setWidth( baseWidth );
                    }
                }
               
                public void onMouseEnter(Widget sender) {
                    t.schedule(50);
                }
               
            });
        }
    }
   
    public Object getSelected() {
        return selected;
    }
   
    public void setSelected(Object selected) {
        LOG.log( Level.SPAM, selected + " :: " + selected.getClass(), null);
        if( selected == this.selected ){
            return;
        }
        Object old = this.selected;
       
        Object[] arr = value.toArray();
        if( lastSelectedIndex != -1 ){
            this.imagesPanel.getCellFormatter()
            .removeStyleName(0, lastSelectedIndex, "selected");
            this.images[lastSelectedIndex].setHeight( baseHeight );
            this.images[lastSelectedIndex].setWidth( baseWidth );  
        }
        this.selected = selected;
       
        boolean found = false;
        int index;
        for( index = 0 ; selected != null &&  index < arr.length; index++ ){
            if( arr[index] == selected ){
                found = true;
                break;
            }
        }
        if( !found && selected !=null ){
            throw new RuntimeException("Not an option");
        }
        images[index].setHeight( (int) (baseHeight * maxScalar) );
        images[index].setWidth( (int) (baseWidth * maxScalar) );
        this.imagesPanel.getCellFormatter().setStyleName(0, index, "selected");
        this.changes.firePropertyChange( "selected", old, selected );
        this.lastSelectedIndex = index;
    }
   
   
}
TOP

Related Classes of com.totsp.gwittir.client.fx.ui.ReflectedImageGroup

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.