package framework.RWT; import java.awt.AWTEvent; import java.awt.Container; import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.event.MouseEvent; import java.util.ArrayList; import javax.swing.event.MouseInputListener; import framework.model3D.Universe; /** * GUI部品(RWTWidget)を配置可能なコンテナ、GUI部品のアクティベーションも管理できる * * @author 新田直也 * */ @SuppressWarnings("serial") public abstract class RWTContainer extends Container { private ArrayList<RWTCanvas3D> canvases = null; private ArrayList<RWTWidget> widgetList = new ArrayList<RWTWidget>(); private RWTSelectionManager active = new RWTSelectionManager(); public abstract void build(GraphicsConfiguration gc); public abstract void keyPressed(RWTVirtualKey key); public abstract void keyReleased(RWTVirtualKey key); public abstract void keyTyped(RWTVirtualKey key); public RWTContainer() { setLayout(null); setFocusable(false); widgetList.add(active.getSelector()); enableEvents(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK); } public void addCanvas(RWTCanvas3D cavas) { if (canvases == null) canvases = new ArrayList<RWTCanvas3D>(); canvases.add(cavas); cavas.adjust(this); add(cavas.getDisplayCanvas()); } public void paint(Graphics g) { super.paint(g); if (canvases != null) { for (int i = 0; i < canvases.size(); i++) { canvases.get(i).adjust(this); canvases.get(i).getDisplayCanvas().paint(g); } } for (int i = 0; i < widgetList.size(); i++) { RWTWidget widget = widgetList.get(i); if (widget.isVisible()) { widget.adjust(this); widget.paint(g); } } } public RWTCanvas3D getPrimaryRWTCanvas3D() { if (canvases == null) return null; return canvases.get(0); } public int getNumberOfRWTCanvas3D() { if (canvases == null) return 0; return canvases.size(); } public RWTCanvas3D getRWTCanvas3D(int index) { return canvases.get(index); } /** * カーソルで選べないWidgetを加えます。 * * @param widget */ public void addWidget(RWTWidget widget) { widgetList.add(widget); } /** * カーソルで選べないWidgetを加えます。 * * @param widget */ public void addWidgetOnBack(RWTWidget widget) { widgetList.add(0, widget); } /** * アクティベーションを操作するマネージャーを設定する。 * * @param manager */ public void setActiveManager(RWTSelectionManager manager) { active = manager; } /** * カーソルで選べるWidgetを加えます。 * * @param w * @param n * @param m */ public void addSelectableWidget(RWTSelectableWidget r, int n, int m) { active.add(r, n, m); widgetList.add(0, (RWTWidget) r); } /** * カーソルで選べるWidgetを前面に加えます。 * * @param w * @param n * @param m */ public void addSelectableWidgetOnFront(RWTSelectableWidget r, int n, int m) { active.add(r, n, m); widgetList.add((RWTWidget) r); } /** * カーソルをひとつ上に動かします。 */ public void cursorMoveUp() { active.up(); repaint(); } /** * カーソルをひとつ下に動かします。 */ public void cursorMoveDown() { active.down(); repaint(); } /** * カーソルをひとつ左に動かします。 */ public void cursorMoveLeft() { active.left(); repaint(); } /** * カーソルをひとつ右に動かします。 */ public void cursorMoveRight() { active.right(); repaint(); } public RWTWidget getSelectedWidget() { return active.getSelectedWidget(); } public void processEvent(AWTEvent e) { // イベントを RWTFrame3D に返す Container c = this.getParent(); while (c != null && !(c instanceof RWTFrame3D)) { c = c.getParent(); } if (c != null) ((RWTFrame3D)c).processEvent(e); super.processEvent(e); } }