001    /*
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: 4-Sep-2002
005     * Time: 1:44:25 PM
006     * To change template for new class use
007     * Code Style | Class Templates options (Tools | IDE Options).
008     */
009    package EVolve.util;
010    
011    import EVolve.visualization.*;
012    import EVolve.data.*;
013    import java.util.ArrayList;
014    import EVolve.Scene;
015    
016    public class LinkedVisualization {
017        private boolean repaint;
018        private ArrayList viz;
019        private int dimension;
020        private int targetType;
021        private Entity[][] entity_defined;
022        private Entity[] entity;
023        private int beginRepaint;
024    
025    
026        public LinkedVisualization(int dimension) {
027            repaint = false;
028            this.dimension = dimension;
029            viz = new ArrayList();
030            targetType = -1;
031            entity_defined = new Entity[Scene.getDataManager().getElementDefinition().length][];
032            for (int i=0; i<entity_defined.length; i++) {
033                entity_defined[i] = null;
034            }
035            beginRepaint = 0;
036        }
037    
038        public boolean getRepaint() {
039            return repaint;
040        }
041    
042        public void setRepaint(boolean repaint) {
043            this.repaint = repaint;
044        }
045    
046        public boolean exists(Visualization visual) {
047            boolean retValue = false;
048            for (int i=0;i<viz.size();i++) {
049                if (((Visualization)viz.get(i)).getVisualizationID() == visual.getVisualizationID()) {
050                    retValue = true;
051                }
052            }
053            return retValue;
054        }
055    
056        private void updateMaxEntity(Visualization visual) {
057            ReferenceDimension referenceDimension = visual.getLinkableDimension(dimension);
058            if (referenceDimension != null)
059                referenceDimension.linkEntities(entity);
060        }
061    
062        public void addVisualization(Visualization [] visuals) {
063            int type,beginRepaint = viz.size();
064    
065            for (int i=0;i<visuals.length;i++) {
066                if (exists(visuals[i])) { beginRepaint =0; continue;}
067                type = visuals[i].getLinkableDimension(dimension).getDataFilter().getTargetType();
068                if ((targetType != type)&&(entity_defined[type]==null)) {
069                    entity_defined[type] = Scene.getDataManager().getEntity()[type];
070                    entity = entity_defined[type];
071                    targetType = type;
072                }
073                viz.add(viz.size(),visuals[i]);
074            }
075            for (int i = beginRepaint; i< viz.size(); i++) {
076                updateMaxEntity((Visualization)viz.get(i));
077            }
078        }
079    
080        public void visualize() {
081            Scene.getVisualizationManager().prepareForLinkedViz(viz,beginRepaint);
082            Scene.visualize();
083            setRepaint(false);
084            beginRepaint = 0;
085        }
086    
087        public void unregisterViz(Visualization visual) {
088            for (int i=0;i<viz.size();i++) {
089                if (((Visualization)viz.get(i)).getVisualizationID() == visual.getVisualizationID()) {
090                    viz.remove(i);
091                }
092            }
093            if (viz.size() == 1) viz.clear();
094        }
095    }