Mercurial > hg > ristipolku
view game/IDMContainer.java @ 103:8d5cb9e58301
Added tag dev-0_65 for changeset d5f51370617b
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 03 Mar 2011 18:36:16 +0200 |
parents | b586ce4f6d97 |
children | 4c0dec72e2f0 |
line wrap: on
line source
/* * Ristipolku IDM widget container * (C) Copyright 2011 Matti 'ccr' Hämäläinen <ccr@tnsp.org> */ package game; import java.awt.*; import java.awt.event.*; import java.util.*; public class IDMContainer extends IDMWidget { private ArrayList<IDMWidget> children, queue; private IDMWidget modal; private int iterated; private boolean modified; public IDMContainer() { children = new ArrayList<IDMWidget>(); iterated = 0; modified = false; } synchronized public void add(IDMWidget widget) { widget.setParent(this); if (iterated > 0) { queue.add(0, widget); modified = true; } else children.add(widget); } synchronized public void remove(IDMWidget widget) { widget.setParent(null); if (iterated > 0) { queue.remove(widget); modified = true; } else children.remove(widget); } synchronized private void beginIteration() { modified = false; if (iterated == 0) { queue = new ArrayList<IDMWidget>(); for (IDMWidget widget : children) queue.add(widget); } iterated++; } synchronized private void endIteration() { if (modified && iterated == 1) { children = queue; queue = null; } iterated--; } synchronized public void paint(Graphics2D g) { // Paint in reverse order ListIterator<IDMWidget> iter = children.listIterator(children.size()); while (iter.hasPrevious()) { final IDMWidget widget = iter.previous(); widget.paint(g); } } synchronized public boolean mousePressed(MouseEvent e) { try { beginIteration(); for (IDMWidget widget : children) { if (widget.contains(e.getPoint())) { if (widget.mousePressed(e)) return true; } } } finally { endIteration(); } return false; } synchronized public boolean mouseReleased(MouseEvent e) { try { beginIteration(); for (IDMWidget widget : children) { if (widget.mouseReleased(e)) return true; } } finally { endIteration(); } return false; } synchronized public boolean mouseExited(MouseEvent e) { try { beginIteration(); for (IDMWidget widget : children) { if (widget.mouseExited(e)) return true; } } finally { endIteration(); } return false; } synchronized public boolean mouseEntered(MouseEvent e) { try { beginIteration(); for (IDMWidget widget : children) { if (widget.contains(e.getPoint())) { if (widget.mouseEntered(e)) return true; } } } finally { endIteration(); } return false; } synchronized public boolean keyPressed(KeyEvent e) { try { beginIteration(); for (IDMWidget widget : children) { if (widget.keyPressed(e)) return true; } } finally { endIteration(); } return false; } synchronized public void setScale(IDMPoint scale) { beginIteration(); for (IDMWidget widget : children) { widget.setScale(scale); } endIteration(); } synchronized public boolean hasObject(Class c) { for (IDMWidget widget : children) { if (widget.getClass() == c) return true; } return false; } synchronized public boolean containsObject(Object o) { for (IDMWidget widget : children) { if (widget == o) return true; } return false; } }