View Javadoc

1   /**********************************************
2    * Copyright (C) 2009 Lukas Laag
3    * This file is part of Vectomatic.
4    * 
5    * Vectomatic is free software: you can redistribute it and/or modify
6    * it under the terms of the GNU General Public License as published by
7    * the Free Software Foundation, either version 3 of the License, or
8    * (at your option) any later version.
9    * 
10   * Vectomatic is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   * GNU General Public License for more details.
14   * 
15   * You should have received a copy of the GNU General Public License
16   * along with Vectomatic.  If not, see http://www.gnu.org/licenses/
17   **********************************************/
18  package org.vectomatic.common.model.style;
19  
20  import java.util.ArrayList;
21  import java.util.List;
22  
23  import org.vectomatic.common.events.IPaletteListener;
24  
25  import com.google.gwt.user.client.rpc.IsSerializable;
26  
27  /**
28   * Class to represent a list of colors
29   */
30  public class Palette implements IsSerializable {
31  	/**
32  	 * The name of the palette
33  	 */
34  	private String _name;
35  	/**
36  	 * A List of colors.
37  	 */
38  	private List<Color> _colors;
39  	private transient List<IPaletteListener> _paletteListeners;
40  	public static Palette getEGA() { 
41  		return new Palette("EGA", new Color[] {
42  			Color.fromRGB(0,0,0),
43  			Color.fromRGB(168,0,168),
44  			Color.fromRGB(252,84,84),
45  			Color.fromRGB(252,84,168),
46  			Color.fromRGB(252,84,252),
47  			Color.fromRGB(252,168,252),
48  			Color.fromRGB(252,252,0),
49  			Color.fromRGB(252,252,168),
50  			Color.fromRGB(252,252,252),
51  			Color.fromRGB(168,252,252),
52  			Color.fromRGB(0,252,252),
53  			Color.fromRGB(84,168,252),
54  			Color.fromRGB(0,0,252),
55  			Color.fromRGB(0,84,168),
56  			Color.fromRGB(0,0,84),
57  			Color.fromRGB(84,84,84),
58  			Color.fromRGB(0,0,0),
59  			Color.fromRGB(168,0,168),
60  			Color.fromRGB(252,84,84),
61  			Color.fromRGB(252,84,168),
62  			Color.fromRGB(252,84,252),
63  			Color.fromRGB(252,168,252),
64  			Color.fromRGB(252,252,0),
65  			Color.fromRGB(252,252,168),
66  			Color.fromRGB(252,252,252),
67  			Color.fromRGB(168,252,252),
68  			Color.fromRGB(0,252,252),
69  			Color.fromRGB(84,168,252),
70  			Color.fromRGB(0,0,252),
71  			Color.fromRGB(0,84,168),
72  			Color.fromRGB(0,0,84),
73  			Color.fromRGB(84,84,84),
74  			Color.fromRGB(0,0,0),
75  			Color.fromRGB(168,0,168),
76  			Color.fromRGB(252,84,84),
77  			Color.fromRGB(252,84,168),
78  			Color.fromRGB(252,84,252),
79  			Color.fromRGB(252,168,252),
80  			Color.fromRGB(252,252,0),
81  			Color.fromRGB(252,252,168),
82  			Color.fromRGB(252,252,252),
83  			Color.fromRGB(168,252,252),
84  			Color.fromRGB(0,252,252),
85  			Color.fromRGB(84,168,252),
86  			Color.fromRGB(0,0,252),
87  			Color.fromRGB(0,84,168),
88  			Color.fromRGB(0,0,84),
89  			Color.fromRGB(84,84,84),
90  			Color.fromRGB(0,0,0),
91  			Color.fromRGB(168,0,168),
92  			Color.fromRGB(252,84,84),
93  			Color.fromRGB(252,84,168),
94  			Color.fromRGB(252,84,252),
95  			Color.fromRGB(252,168,252),
96  			Color.fromRGB(252,252,0),
97  			Color.fromRGB(252,252,168),
98  			Color.fromRGB(252,252,252),
99  			Color.fromRGB(168,252,252),
100 			Color.fromRGB(0,252,252),
101 			Color.fromRGB(84,168,252),
102 			Color.fromRGB(0,0,252),
103 			Color.fromRGB(0,84,168),
104 			Color.fromRGB(0,0,84),
105 			Color.fromRGB(84,84,84)
106 		});
107 	}
108 	
109 	public static Palette getGOLD() {
110 		return new Palette("Gold", new Color[] {
111 			Color.fromRGB(252,252,128),
112 			Color.fromRGB(252,252,128),
113 			Color.fromRGB(252,248,124),
114 			Color.fromRGB(252,248,124),
115 			Color.fromRGB(252,244,120),
116 			Color.fromRGB(248,244,120),
117 			Color.fromRGB(248,240,116),
118 			Color.fromRGB(248,240,112),
119 			Color.fromRGB(248,236,112),
120 			Color.fromRGB(244,236,108),
121 			Color.fromRGB(244,232,108),
122 			Color.fromRGB(244,232,104),
123 			Color.fromRGB(244,228,104),
124 			Color.fromRGB(240,228,100),
125 			Color.fromRGB(240,224, 96),
126 			Color.fromRGB(240,224, 96),
127 			Color.fromRGB(240,220, 92),
128 			Color.fromRGB(236,220, 92),
129 			Color.fromRGB(236,216, 88),
130 			Color.fromRGB(236,216, 84),
131 			Color.fromRGB(236,212, 84),
132 			Color.fromRGB(236,212, 80),
133 			Color.fromRGB(232,208, 80),
134 			Color.fromRGB(232,208, 76),
135 			Color.fromRGB(232,204, 76),
136 			Color.fromRGB(232,204, 72),
137 			Color.fromRGB(228,200, 68),
138 			Color.fromRGB(228,200, 68),
139 			Color.fromRGB(228,196, 64),
140 			Color.fromRGB(228,196, 64),
141 			Color.fromRGB(224,192, 60),
142 			Color.fromRGB(224,192, 56),
143 			Color.fromRGB(224,188, 56),
144 			Color.fromRGB(224,188, 52),
145 			Color.fromRGB(220,184, 52),
146 			Color.fromRGB(220,184, 48),
147 			Color.fromRGB(220,180, 48),
148 			Color.fromRGB(220,180, 44),
149 			Color.fromRGB(220,176, 40),
150 			Color.fromRGB(216,176, 40),
151 			Color.fromRGB(216,172, 36),
152 			Color.fromRGB(216,172, 36),
153 			Color.fromRGB(216,168, 32),
154 			Color.fromRGB(212,168, 28),
155 			Color.fromRGB(212,164, 28),
156 			Color.fromRGB(212,164, 24),
157 			Color.fromRGB(212,160, 24),
158 			Color.fromRGB(208,160, 20),
159 			Color.fromRGB(208,156, 20),
160 			Color.fromRGB(208,156, 16),
161 			Color.fromRGB(208,152, 12),
162 			Color.fromRGB(204,152, 12),
163 			Color.fromRGB(204,148,  8),
164 			Color.fromRGB(204,148,  8),
165 			Color.fromRGB(204,144,  4),
166 			Color.fromRGB(200,140,  0),
167 			Color.fromRGB(196,136,  0),
168 			Color.fromRGB(196,136,  0),
169 			Color.fromRGB(196,136,  0),
170 			Color.fromRGB(196,136,  0),
171 			Color.fromRGB(192,132,  0),
172 			Color.fromRGB(192,132,  0),
173 			Color.fromRGB(192,132,  0),
174 			Color.fromRGB(192,132,  0),			
175 		});
176 	}
177 	
178 	public Palette() {
179 		_name = "";
180 		_colors = new ArrayList<Color>();
181 	}
182 	
183 	public Palette(String name, Color[] colors) {
184 		this();
185 		_name = name;
186 		for (int i = 0; i < colors.length; i++) {
187 			addColor(colors[i]);
188 		}
189 	}
190 	
191 	public Palette(Palette palette) {
192 		this();
193 		_name = palette.getName();
194 		for (int i = 0, size = palette.getSize(); i < size; i++) {
195 			addColor(palette.getColor(i));
196 		}
197 	}
198 	
199 	@Override
200 	public boolean equals(Object obj) {
201 		if (obj instanceof Palette) {
202 			Palette palette = (Palette)obj;
203 			return _name.equals(palette._name) && _colors.equals(palette._colors);
204 		}
205 		return false;
206 	}
207 	
208 	@Override
209 	public int hashCode() {
210 		return _name.hashCode() + 37 * _colors.hashCode();
211 	}
212 	
213 	public String getName() {
214 		return _name;
215 	}
216 	
217 	public void setName(String name) {
218 		if (name == null) {
219 			throw new NullPointerException();
220 		}
221 		_name = name;
222 	}
223 	
224 	public Color getColor(int index) {
225 		return _colors.get(index);
226 	}
227 	
228 	public void setColor(int index, Color color) {
229 		color.copyTo(getColor(index));
230 		firePaletteHasChanged();
231 	}
232 	
233 	public void addColor(Color color) {
234 		_colors.add(new Color(color));
235 		firePaletteHasChanged();
236 	}
237 	
238 	public void removeColor(int index) {
239 		_colors.remove(index);
240 		firePaletteHasChanged();
241 	}
242 	
243 	public int getSize() {
244 		return _colors.size();
245 	}
246 	
247 	public void addPaletteListener(IPaletteListener listener) {
248 		if (_paletteListeners == null) {
249 			_paletteListeners = new ArrayList<IPaletteListener>();
250 		}
251 		_paletteListeners.add(listener);
252 	}
253 	
254 	public void removePaletteListener(IPaletteListener listener) {
255 		if (_paletteListeners != null) {
256 			_paletteListeners.remove(listener);
257 		}
258 	}
259 	
260 	public void firePaletteHasChanged() {
261 		if (_paletteListeners != null) {
262 			for (int i = 0, size = _paletteListeners.size(); i < size; i++) {
263 				IPaletteListener listener = _paletteListeners.get(i);
264 				listener.paletteHasChanged(this);
265 			}
266 		}
267 	}
268 	
269 	@Override
270 	public String toString() {
271 		StringBuffer buffer = new StringBuffer();
272 		buffer.append("Palette(name=\"");
273 		buffer.append(_name);
274 		buffer.append("\"");
275 		for (int i = 0, size = _colors.size(); i < size; i++) {
276 			buffer.append(" ");
277 			buffer.append(_colors.get(i).toString());
278 		}
279 		buffer.append(")");
280 		return buffer.toString();
281 	}
282 }