View Javadoc
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.Dimension; 24 import java.awt.Graphics; 25 import java.awt.Image; 26 import java.awt.Panel; 27 import java.awt.event.MouseEvent; 28 29 import javax.swing.event.MouseInputAdapter; 30 31 import net.mlw.gfw.client.ClientContext; 32 import net.mlw.gfw.event.Event; 33 import net.mlw.gfw.event.EventHandler; 34 import net.mlw.gfw.event.EventHandlerContainer; 35 import net.mlw.gfw.event.EventHandlerList; 36 import net.mlw.gfw.ext.card.Card; 37 import net.mlw.gfw.ext.card.CardRenderer; 38 import net.mlw.gfw.ext.card.DefaultHandModel; 39 import net.mlw.gfw.ext.card.HandModel; 40 41 /*** 42 * @author Matthew L. Wilson 43 * @version $Revision: 1.9 $ $Date: 2004/06/29 20:32:56 $ 44 */ 45 public class HandPanel extends Panel implements EventHandlerContainer 46 { 47 protected Image buffer; 48 protected Graphics b; 49 50 /*** The model for this component. * */ 51 private HandModel handModel; 52 53 private final CardRenderer cardRenderer; 54 55 private int maxNumberOfCards; 56 57 private ClientContext context; 58 59 private int selectedCard = -1; 60 61 /*** 62 * Default constructor. 63 */ 64 public HandPanel(CardRenderer cardRenderer, int maxNumberOfCards) 65 { 66 this(cardRenderer, maxNumberOfCards, new DefaultHandModel(maxNumberOfCards)); 67 } 68 69 /*** 70 * Default constructor. 71 */ 72 public HandPanel(CardRenderer cardRenderer, int maxNumberOfCards, HandModel handModel) 73 { 74 this.cardRenderer = cardRenderer; 75 this.maxNumberOfCards = maxNumberOfCards; 76 setModel(handModel); 77 } 78 79 /*** 80 * @param g 81 */ 82 public void update(Graphics g) 83 { 84 paint(g); 85 } 86 87 /*** 88 * @param g 89 */ 90 public void paint(Graphics g) 91 { 92 if (buffer == null) 93 { 94 Dimension dimension = getPreferredSize(); 95 buffer = createImage((int) dimension.getWidth(), (int) dimension.getHeight()); 96 b = buffer.getGraphics(); 97 } 98 99 g.drawImage(buffer, 0, 0, this); 100 } 101 102 private synchronized void drawCards() 103 { 104 105 if (b != null) 106 { 107 int offset = 0; 108 b.setColor(getBackground()); 109 b.fillRect(0, 0, (int) dimension.getWidth(), (int) dimension.getHeight()); 110 for (int i = 0; i < handModel.getCards().length; i++) 111 { 112 Card card = handModel.getCards()[i]; 113 if (card != null) 114 { 115 cardRenderer.render( 116 card, 117 b, 118 this, 119 handModel.isSelected(card), 120 offset * cardRenderer.getOffset(), 121 handModel.isSelected(card) ? 0 : cardRenderer.getOffset()); 122 } 123 124 offset++; 125 } 126 } 127 repaint(); 128 } 129 130 private Dimension dimension; 131 132 public Dimension getPreferredSize() 133 { 134 if (dimension == null) 135 { 136 dimension = 137 new Dimension( 138 (int) (2 + maxNumberOfCards * cardRenderer.getOffset() + (cardRenderer.getDimensionOfCard().getWidth() - cardRenderer.getOffset())), 139 (int) (2 + cardRenderer.getDimensionOfCard().getHeight() + cardRenderer.getOffset())); 140 } 141 return dimension; 142 } 143 144 /*** 145 * @see net.mlw.gfw.client.ClientEventHandler#init(net.mlw.gfw.client.ClientContext) 146 */ 147 public void init(ClientContext context) 148 { 149 this.context = context; 150 this.addMouseListener(new MouseInputAdapter() 151 { 152 153 public void mousePressed(MouseEvent e) 154 { 155 if (handModel.getCardSelectionBehavior() != null) 156 { 157 int tempIndex = getSelectedCardIndex(e.getX(), e.getY()); 158 if (selectedCard != tempIndex) 159 { 160 if (tempIndex >= 0 && tempIndex < handModel.getCards().length) 161 { 162 Card card = handModel.getCards()[selectedCard = tempIndex]; 163 handModel.getCardSelectionBehavior().setSelected(card, !handModel.getCardSelectionBehavior().isSelected(card)); 164 drawCards(); 165 } 166 } 167 } 168 } 169 170 public void mouseReleased(MouseEvent e) 171 { 172 if (handModel.getCardSelectionBehavior() != null) 173 { 174 if (selectedCard == getSelectedCardIndex(e.getX(), e.getY())) 175 { 176 if (selectedCard < handModel.getCards().length) 177 { 178 handModel.getCardSelectionBehavior().postProcess(getContext(), eventHandlers); 179 //cardSelection.setSelected(handModel.getCards()[selectedCard], false); 180 } 181 182 } 183 else if (selectedCard >= 0 && selectedCard < handModel.getCards().length) 184 { 185 handModel.getCardSelectionBehavior().setSelected(handModel.getCards()[selectedCard], false); 186 } 187 188 selectedCard = -1; 189 drawCards(); 190 } 191 } 192 }); 193 } 194 195 /*** 196 * Gets the card clicked on. 197 * 198 * @param x 199 * Location of the mouse. 200 * @param y 201 * Location of the mouse. 202 * @return The index of the card selected. 203 */ 204 private int getSelectedCardIndex(int x, int y) 205 { 206 int i = 0, index = (x / cardRenderer.getOffset()); 207 for (int steps = (int) (cardRenderer.getDimensionOfCard().getWidth() / cardRenderer.getOffset()); 208 ((i + 1) < steps) && (index > 0) && ((index - i) >= handModel.getCards().length || handModel.getCards()[index - i] == null); 209 i++); 210 return index - i; 211 } 212 213 /*** 214 * @see net.mlw.gfw.event.EventHandler#onEvent(net.mlw.gfw.event.Event) 215 */ 216 public void onEvent(Event event) 217 { 218 drawCards(); 219 } 220 221 /*** 222 * @return Returns the context. 223 */ 224 public ClientContext getContext() 225 { 226 return context; 227 } 228 229 /*** 230 * @return Returns the handModel. 231 */ 232 public HandModel getModel() 233 { 234 return handModel; 235 } 236 237 /*** 238 * @param handModel The handModel to set. 239 */ 240 public void setModel(HandModel handModel) 241 { 242 if (handModel != null) 243 { 244 handModel.removeEventHandler(eventHandler); 245 } 246 this.handModel = handModel; 247 this.handModel.addEventHandler(eventHandler); 248 } 249 250 private EventHandler eventHandler = new EventHandler() 251 { 252 /*** 253 * @see net.mlw.gfw.event.EventHandler#onEvent(net.mlw.gfw.event.Event) 254 */ 255 public void onEvent(Event event) 256 { 257 drawCards(); 258 } 259 }; 260 261 private EventHandlerList eventHandlers = new EventHandlerList(); 262 /*** 263 * @see net.mlw.gfw.event.EventHandlerContainer#addEventHandler(net.mlw.gfw.event.EventHandler) 264 */ 265 public EventHandler addEventHandler(EventHandler eventHandler) 266 { 267 return eventHandlers.addEventHandler(eventHandler); 268 } 269 270 /*** 271 * @see net.mlw.gfw.event.EventHandlerContainer#removeEventHandler(net.mlw.gfw.event.EventHandler) 272 */ 273 public EventHandler removeEventHandler(EventHandler eventHandler) 274 { 275 return eventHandlers.removeEventHandler(eventHandler); 276 } 277 278 }

This page was automatically generated by Maven