package org.apollo.items; import org.apollo.ApolloSystem; import org.apollo.gui.Strokes; import org.apollo.io.IconRepository; import org.apollo.widgets.SampleRecorder; import org.expeditee.core.Colour; import org.expeditee.core.Dimension; import org.expeditee.core.Fill; import org.expeditee.core.GradientFill; import org.expeditee.core.Point; import org.expeditee.core.Stroke; import org.expeditee.core.bounds.AxisAlignedBoxBounds; import org.expeditee.core.bounds.Bounds; import org.expeditee.gio.EcosystemManager; import org.expeditee.gio.GraphicsManager; import org.expeditee.gui.Browser; import org.expeditee.gui.DisplayController; import org.expeditee.gui.Frame; import org.expeditee.items.Item; import org.expeditee.items.ItemParentStateChangedEvent; import org.expeditee.items.Text; public class RecordOverdubLauncher extends Item { private static int WIDTH = 80; private static int HEIGHT = 80; private static Stroke BORDER_STROKE = Strokes.SOLID_1; private int countdown; private static final Colour BASE_COLOR = Colour.FromRGB255(255, 100, 100); private static final Colour HIGHLIGHT_COLOR = Colour.FromRGB255(253, 255, 201); public RecordOverdubLauncher(int countdown) { this.setID(getParentOrCurrentFrame().getNextItemID()); this.countdown = countdown; } @Override public Item copy() { RecordOverdubLauncher copy = new RecordOverdubLauncher(countdown); DuplicateItem(this, copy); return copy; } @Override public Item merge(Item merger, int mouseX, int mouseY) { return null; } @Override public void paint() { if (Browser._theBrowser == null) return; GraphicsManager g = EcosystemManager.getGraphicsManager(); Fill fill = null; if (ApolloSystem.useQualityGraphics) { Point fromPoint = new Point(_x + (WIDTH / 2), _y); Point toPoint = new Point(_x + (WIDTH / 2), _y + HEIGHT - (HEIGHT / 5)); fill = new GradientFill(HIGHLIGHT_COLOR, fromPoint, BASE_COLOR, toPoint); } else { fill = new Fill(BASE_COLOR); } Point topLeft = new Point((int)_x, (int)_y); Dimension size = new Dimension(WIDTH, HEIGHT); g.drawRectangle(topLeft, size, 0.0, fill, Colour.BLACK, BORDER_STROKE, null); /*IconRepository.getIcon("recordplay.png").paintIcon( Browser._theBrowser.getContentPane(), g, getX() + 25, getY() + 25);*/ g.drawImage(IconRepository.getIcon("recordplay.png"), new Point(getX() + 25, getY() + 25)); } @Override public void setAnnotation(boolean val) { } @Override public int getHeight() { return HEIGHT; } @Override public Integer getWidth() { return WIDTH; } @Override public Bounds updateBounds() { return new AxisAlignedBoxBounds((int) _x, (int) _y, WIDTH, HEIGHT); } @Override public void onParentStateChanged(ItemParentStateChangedEvent e) { super.onParentStateChanged(e); switch (e.getEventType()) { case ItemParentStateChangedEvent.EVENT_TYPE_ADDED: case ItemParentStateChangedEvent.EVENT_TYPE_ADDED_VIA_OVERLAY: case ItemParentStateChangedEvent.EVENT_TYPE_SHOWN: case ItemParentStateChangedEvent.EVENT_TYPE_SHOWN_VIA_OVERLAY: // TODO: Invoke later for concurrent modification possibility? selfDestruct(); break; } } private void selfDestruct() { Frame parent = getParent(); parent.removeItem(this); Frame currentFrame = DisplayController.getCurrentFrame(); if (currentFrame != null) { Text source = new Text(currentFrame.getNextItemID()); source.setParent(currentFrame); SampleRecorder destructableRecorder = new SampleRecorder(source, null, true); destructableRecorder.setCountdown(countdown); destructableRecorder.setPosition((int)_x, (int)_y); currentFrame.addAllItems(destructableRecorder.getItems()); destructableRecorder.commenceOverdubRecording(); } } }