8f72656b145229bafb1ba85c5b42674bc2b1fe77
[scilab.git] / scilab / modules / renderer / src / java / org / scilab / modules / renderer / JoGLView / axes / ruler / RulerDrawerManager.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009-2010 - DIGITEO - Pierre Lando
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  */
11
12 package org.scilab.modules.renderer.JoGLView.axes.ruler;
13
14 import org.scilab.forge.scirenderer.ruler.RulerDrawer;
15 import org.scilab.forge.scirenderer.texture.TextureManager;
16 import org.scilab.modules.graphic_objects.axes.Axes;
17 import org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties;
18
19 import java.util.Arrays;
20 import java.util.HashMap;
21 import java.util.HashSet;
22 import java.util.Map;
23 import java.util.Set;
24
25 /**
26  * This class maintain a set of {@see RulerSpriteManager} for all the {@see Axes} create in the {@see GraphicController}
27  * This {@see RulerSpriteManager} are used to draw the rulers of all {@see Axes}.
28  *
29  * @author Pierre Lando
30  */
31 class RulerDrawerManager {
32
33     /**
34      * Set of properties that affect ruler sprites.
35      */
36     private static final Set<Integer> SPRITE_PROPERTIES = new HashSet<Integer>(Arrays.asList(
37             GraphicObjectProperties.__GO_FONT_SIZE__,
38             GraphicObjectProperties.__GO_FONT_COLOR__,
39             GraphicObjectProperties.__GO_FONT_STYLE__,
40             GraphicObjectProperties.__GO_FONT_FRACTIONAL__,
41             GraphicObjectProperties.__GO_X_AXIS_AUTO_TICKS__,
42             GraphicObjectProperties.__GO_Y_AXIS_AUTO_TICKS__,
43             GraphicObjectProperties.__GO_Z_AXIS_AUTO_TICKS__,
44             GraphicObjectProperties.__GO_X_AXIS_LOG_FLAG__,
45             GraphicObjectProperties.__GO_Y_AXIS_LOG_FLAG__,
46             GraphicObjectProperties.__GO_Z_AXIS_LOG_FLAG__
47     ));
48
49     /**
50      * Map of up to date {@see RulerSpriteManager}
51      * The key are the {@see Axes} id.
52      */
53     private final Map<String, RulerDrawer[]> rulerSpriteManagerMap = new HashMap<String, RulerDrawer[]>();
54
55     /** The {@see TextureManager} of the current {@see Canvas}. */
56     private final TextureManager textureManager;
57
58     /**
59      * Default constructor.
60      * @param textureManager the {@see TextureManager} of the current {@see Canvas}.
61      */
62     public RulerDrawerManager(TextureManager textureManager) {
63         this.textureManager = textureManager;
64     }
65
66     /**
67      * Return the {@see RulerDrawer} for the rulers of the given {@see Axes}.
68      * @param axes the given {@see Axes}
69      * @return the {@see RulerSpriteManager} for the rulers of the given {@see Axes}.
70      */
71     public RulerDrawer[] get(Axes axes) {
72         RulerDrawer[] rulerSpriteManager = rulerSpriteManagerMap.get(axes.getIdentifier());
73         if (rulerSpriteManager == null) {
74             rulerSpriteManager = new RulerDrawer[]{new RulerDrawer(textureManager), new RulerDrawer(textureManager), new RulerDrawer(textureManager)};
75             rulerSpriteManager[0].setSpriteFactory(new AxesRulerSpriteFactory(axes, 0));
76             rulerSpriteManager[1].setSpriteFactory(new AxesRulerSpriteFactory(axes, 1));
77             rulerSpriteManager[2].setSpriteFactory(new AxesRulerSpriteFactory(axes, 2));
78             rulerSpriteManagerMap.put(axes.getIdentifier(), rulerSpriteManager);
79         }
80         return rulerSpriteManager;
81     }
82
83
84     /**
85      * Update the data if needed.
86      * @param id the modified object.
87      * @param property the changed property.
88      */
89     public void update(String id, int property) {
90
91         /**
92          * If update affect {@see Axes} ruler sprites, we clear the corresponding {@see RulerSpriteManager}.
93          * TODO : optimize by an X, Y, Z auto ticks differentiation.
94          */
95         if (SPRITE_PROPERTIES.contains(property)) {
96             dispose(id);
97         }
98     }
99
100     /**
101      * Dispose the {@see RulerSpriteManager} of the given axes.
102      * @param id the {@see Axes} id.
103      */
104     public void dispose(String id) {
105         RulerDrawer[] rulerDrawers = rulerSpriteManagerMap.get(id);
106         if (rulerDrawers != null) {
107             for (RulerDrawer rulerDrawer : rulerDrawers) {
108                 if (rulerDrawer != null) {
109                     rulerDrawer.disposeResources();
110                 }
111             }
112         }
113         rulerSpriteManagerMap.remove(id);
114     }
115
116     /**
117      * Dispose all the {@see RulerSpriteManager}.
118      */
119     public void disposeAll() {
120         for (RulerDrawer[] rulerDrawers : rulerSpriteManagerMap.values()) {
121             if (rulerDrawers != null) {
122                 for (RulerDrawer rulerDrawer : rulerDrawers) {
123                     if (rulerDrawer != null) {
124                         rulerDrawer.disposeResources();
125                     }
126                 }
127             }
128         }
129         rulerSpriteManagerMap.clear();
130     }
131 }