1 /***
2 * Copyright (c) 2003 held jointly by the individual authors.
3 *
4 * This library is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License as published
6 * by the Free Software Foundation; either version 2.1 of the License, or
7 * (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; with out even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this library; if not, write to the Free Software Foundation,
16 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17 *
18 * > http://www.gnu.org/copyleft/lesser.html
19 * > http://www.opensource.org/licenses/lgpl-license.php
20 */
21 package net.mlw.gfw.ext.card.component;
22
23 import java.awt.Color;
24 import java.awt.Dimension;
25 import java.awt.Font;
26 import java.awt.Graphics;
27 import java.awt.Image;
28 import java.awt.Panel;
29
30 import javax.swing.JDialog;
31 import javax.swing.JFrame;
32
33 import net.mlw.gfw.client.ClientContext;
34 import net.mlw.gfw.event.Event;
35 import net.mlw.gfw.event.EventHandler;
36 import net.mlw.gfw.ext.PaintUtils;
37 import net.mlw.gfw.ext.card.CardRenderer;
38 import net.mlw.gfw.ext.card.DefaultTableModel;
39 import net.mlw.gfw.ext.card.TableModel;
40
41 /***
42 * @author Matthew L. Wilson
43 * @version $Revision: 1.8 $ $Date: 2004/06/29 20:32:56 $
44 */
45 public class TablePanel extends Panel
46 {
47 protected Image buffer;
48 protected Graphics b;
49
50 private final Font USER_NAME_FONT = new Font("Arial", Font.BOLD, 12);
51
52 private final CardRenderer cardRenderer;
53 private TableModel model;
54
55 private final int[] offset = { 0, 1, 2, 3 };
56
57 /***
58 * @param cardRenderer
59 */
60 public TablePanel(final CardRenderer cardRenderer)
61 {
62 this(cardRenderer, new DefaultTableModel(4));
63 }
64
65 /***
66 * @param cardRenderer
67 */
68 public TablePanel(final CardRenderer cardRenderer, final TableModel tableModel)
69 {
70 this.cardRenderer = cardRenderer;
71 setModel(tableModel);
72 }
73
74 /*** Sets the current view of the table. Makes your card be the one in the
75 * SOUTH.
76 *
77 * @param seat Your seat.
78 */
79 public void setLocalView(int seat)
80 {
81 for (int i = 0; i < 4; i++)
82 {
83 offset[i] = (i + seat) % 4;
84 }
85 }
86
87 /***
88 * @param g
89 */
90 public void update(Graphics g)
91 {
92 paint(g);
93 }
94
95 /***
96 * @param g
97 */
98 public void paint(Graphics g)
99 {
100 if (buffer == null)
101 {
102 Dimension dimension = getPreferredSize();
103 buffer = createImage((int) dimension.getWidth(), (int) dimension.getHeight());
104 b = buffer.getGraphics();
105 b.setColor(getBackground());
106 b.fillRect(0, 0, (int) dimension.getWidth(), (int) dimension.getHeight());
107 drawTable();
108 }
109
110 g.drawImage(buffer, 0, 0, this);
111 }
112
113 public void drawTable()
114 {
115 if (buffer == null)
116 {
117 return;
118 }
119
120 int topOfSideCards = (int) ((getPreferredSize().getHeight() / 2) - (cardRenderer.getDimensionOfCard().getHeight()) / 2);
121 int leftOfMiddleCards = (int) (cardRenderer.getDimensionOfCard().getWidth() + 27);
122
123 b.setColor(Color.LIGHT_GRAY);
124 b.draw3DRect(10, 10, (int) (getPreferredSize().getWidth() - 22), (int) (getPreferredSize().getHeight() - 22), true);
125
126 if (model.getPlayersName(offset[0]) != null)
127 {
128 //Player 0
129 b.setColor(getBackground());
130 b.fillRect(
131 (int) (getPreferredSize().getWidth() / 2) - (b.getFontMetrics().stringWidth(model.getPlayersName(offset[0])) / 2) - 5,
132 (int) (cardRenderer.getDimensionOfCard().getHeight() * 2 + 15 + b.getFontMetrics().getHeight()),
133 10 + b.getFontMetrics().stringWidth(model.getPlayersName(offset[0])),
134 b.getFontMetrics().getHeight() + 2);
135 b.setColor(getForeground());
136 b.setFont(USER_NAME_FONT);
137 b.drawString(
138 model.getPlayersName(offset[0]),
139 (int) (getPreferredSize().getWidth() / 2) - (b.getFontMetrics().stringWidth(model.getPlayersName(offset[0])) / 2),
140 (int) (cardRenderer.getDimensionOfCard().getHeight() * 2 + 29 + b.getFontMetrics().getHeight()));
141 //Card 0
142
143 if (model.getCard(offset[0]) != null)
144 {
145 cardRenderer.render(model.getCard(offset[0]), b, this, false, leftOfMiddleCards, (int) (cardRenderer.getDimensionOfCard().getHeight() + 27));
146 }
147 else
148 {
149 b.setColor(getBackground());
150 b.fillRect(
151 leftOfMiddleCards,
152 (int) (cardRenderer.getDimensionOfCard().getHeight() + 27),
153 (int) cardRenderer.getDimensionOfCard().getWidth(),
154 (int) cardRenderer.getDimensionOfCard().getHeight());
155 }
156 }
157 if (model.getPlayersName(offset[1]) != null)
158 {
159 //Player 1
160 b.setColor(getForeground());
161 b.setFont(USER_NAME_FONT);
162 PaintUtils.drawVerticalString(b, getBackground(), model.getPlayersName(offset[1]), 8, (int) getPreferredSize().getHeight() / 2 + 5);
163
164 //Card 1
165 if (model.getCard(offset[1]) != null)
166 {
167 cardRenderer.render(model.getCard(offset[1]), b, this, false, 25, topOfSideCards);
168 }
169 else
170 {
171 b.setColor(getBackground());
172 b.fillRect(25, topOfSideCards, (int) cardRenderer.getDimensionOfCard().getWidth(), (int) cardRenderer.getDimensionOfCard().getHeight());
173 }
174 }
175
176 if (model.getPlayersName(offset[2]) != null)
177 {
178 //Player 2
179 b.setFont(USER_NAME_FONT);
180 b.setColor(getBackground());
181 b.fillRect(
182 (int) (getPreferredSize().getWidth() / 2) - (b.getFontMetrics().stringWidth(model.getPlayersName(offset[2])) / 2) - 5,
183 2,
184 10 + b.getFontMetrics().stringWidth(model.getPlayersName(offset[2])),
185 b.getFontMetrics().getHeight() + 2);
186 b.setColor(getForeground());
187
188 b.drawString(
189 model.getPlayersName(offset[2]),
190 (int) (getPreferredSize().getWidth() / 2) - (b.getFontMetrics().stringWidth(model.getPlayersName(offset[2])) / 2),
191 b.getFontMetrics().getHeight() + 2);
192 //Card 2
193 if (model.getCard(offset[2]) != null)
194 {
195 cardRenderer.render(model.getCard(offset[2]), b, this, false, leftOfMiddleCards, 25);
196 }
197 else
198 {
199 b.setColor(getBackground());
200 b.fillRect(leftOfMiddleCards, 25, (int) cardRenderer.getDimensionOfCard().getWidth(), (int) cardRenderer.getDimensionOfCard().getHeight());
201 }
202 }
203
204 if (model.getPlayersName(offset[3]) != null)
205 {
206 //Player 3
207 b.setColor(getForeground());
208 b.setFont(USER_NAME_FONT);
209 PaintUtils.drawVerticalString(
210 b,
211 getBackground(),
212 model.getPlayersName(offset[3]),
213 (int) (35 + cardRenderer.getDimensionOfCard().getWidth() * 3),
214 (int) getPreferredSize().getHeight() / 2 + 10);
215 //Card 3
216 if (model.getCard(offset[3]) != null)
217 {
218 cardRenderer.render(model.getCard(offset[3]), b, this, false, (int) (29 + cardRenderer.getDimensionOfCard().getWidth() * 2), topOfSideCards);
219 // topOfSideCards);
220 }
221 else
222 {
223 b.setColor(getBackground());
224 b.fillRect(
225 (int) (29 + cardRenderer.getDimensionOfCard().getWidth() * 2),
226 topOfSideCards,
227 (int) cardRenderer.getDimensionOfCard().getWidth(),
228 (int) cardRenderer.getDimensionOfCard().getHeight());
229 }
230 }
231 repaint();
232 }
233
234 private Dimension dimension;
235 public Dimension getPreferredSize()
236 {
237 if (dimension == null)
238 {
239 dimension =
240 new Dimension((int) (50 + cardRenderer.getDimensionOfCard().getWidth() * 3), (int) (50 + cardRenderer.getDimensionOfCard().getHeight() * 2));
241 }
242 return dimension;
243 }
244
245 /***
246 * @see net.mlw.gfw.client.ClientEventHandler#init(net.mlw.gfw.client.ClientContext)
247 */
248 public void init(ClientContext context)
249 {
250 }
251
252 /***
253 * @see net.mlw.gfw.event.EventHandler#onEvent(net.mlw.gfw.event.Event)
254 */
255 public void onEvent(Event event)
256 {
257 drawTable();
258 }
259
260 /***
261 * @return Returns the model.
262 */
263 public TableModel getModel()
264 {
265 return model;
266 }
267
268 /***
269 * @param model The model to set.
270 */
271 public void setModel(TableModel model)
272 {
273 if (this.model != null)
274 {
275 this.model.removeEventHandler(eventHandler);
276 }
277 this.model = model;
278 this.model.addEventHandler(eventHandler);
279 }
280
281 private EventHandler eventHandler = new EventHandler()
282 {
283 /***
284 * @see net.mlw.gfw.event.EventHandler#onEvent(net.mlw.gfw.event.Event)
285 */
286 public void onEvent(Event event)
287 {
288 drawTable();
289 }
290 };
291
292 private JDialog dialog = null;
293 public JDialog toJDialog(JFrame owner)
294 {
295 if (dialog == null)
296 {
297 dialog = new JDialog(owner);
298 dialog.getContentPane().add(this);
299 dialog.pack();
300 }
301
302 return dialog;
303 }
304 }
This page was automatically generated by Maven