Ignore:
Timestamp:
05/10/18 16:04:51 (6 years ago)
Author:
davidb
Message:

Reworking of the code-base to separate logic from graphics. This version of Expeditee now supports a JFX graphics as an alternative to SWING

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/apollo/gui/FrameLayoutDaemon.java

    r1061 r1102  
    11package org.apollo.gui;
    22
    3 import java.awt.Point;
    4 import java.awt.event.ComponentEvent;
    5 import java.awt.event.ComponentListener;
    6 import java.awt.event.MouseEvent;
    73import java.io.File;
    8 import java.lang.reflect.InvocationTargetException;
    94import java.util.Collection;
    105import java.util.HashMap;
    116import java.util.Map;
    12 
    13 import javax.swing.SwingUtilities;
    147
    158import org.apollo.audio.ApolloSubjectChangedEvent;
     
    3023import org.apollo.widgets.LinkedTrack;
    3124import org.apollo.widgets.SampledTrack;
    32 import org.expeditee.gui.Browser;
    33 import org.expeditee.gui.DisplayIO;
    34 import org.expeditee.gui.DisplayIOObserver;
     25import org.expeditee.core.Point;
     26import org.expeditee.gio.EcosystemManager;
     27import org.expeditee.gio.InputManager.WindowEventListener;
     28import org.expeditee.gio.InputManager.WindowEventType;
     29import org.expeditee.gio.gesture.StandardGestureActions;
     30import org.expeditee.gui.DisplayController;
     31import org.expeditee.gui.DisplayObserver;
    3532import org.expeditee.gui.Frame;
    36 import org.expeditee.gui.FrameMouseActions;
    3733import org.expeditee.gui.FreeItems;
    38 import org.expeditee.gui.MouseEventRouter;
    3934import org.expeditee.items.Item;
    4035import org.expeditee.items.ItemUtils;
    41 import org.expeditee.items.widgets.InteractiveWidget;
     36import org.expeditee.items.widgets.Widget;
    4237import org.expeditee.items.widgets.WidgetCorner;
    4338import org.expeditee.items.widgets.WidgetEdge;
     
    4641 * A daemon that lays out overdubbed frames.
    4742 *
    48  * It is a singletone. Also it is a subject which raises empty events whenever
     43 * It is a singleton. Also it is a subject which raises empty events whenever
    4944 * a new timeline is created.
    5045 *
     
    5247 *
    5348 */
    54 public class FrameLayoutDaemon extends AbstractSubject implements Observer, DisplayIOObserver {
     49public class FrameLayoutDaemon extends AbstractSubject implements Observer, DisplayObserver {
    5550       
    5651        /** The frame that should not be layout out at any point in time. */
     
    9893                daemon.start();
    9994                AudioStructureModel.getInstance().addObserver(this);
    100                 DisplayIO.addDisplayIOObserver(this);
    101                
    102                 // Listen for resize events
    103                 SwingUtilities.invokeLater(new Runnable() {
    104                         public void run() {
    105 
    106                                 // Keep expanded view centered to the browser window
    107                                 if (Browser._theBrowser != null) {
    108                                         Browser._theBrowser.addComponentListener(new ComponentListener() {
    109 
    110                                                 public void componentHidden(ComponentEvent e) {
    111                                                 }
    112 
    113                                                 public void componentMoved(ComponentEvent e) {
    114                                                 }
    115 
    116                                                 public void componentResized(ComponentEvent e) {
    117                                                         forceRecheck();
    118                                                 }
    119 
    120                                                 public void componentShown(ComponentEvent e) {
    121                                                 }
    122                                                
    123                                         });
    124                                 }
    125                                
     95                DisplayController.addDisplayObserver(this);
     96               
     97                EcosystemManager.getInputManager().addWindowEventListener(new WindowEventListener()
     98                {
     99                        @Override
     100                        public void onWindowEvent(WindowEventType type)
     101                        {
     102                                if (type == WindowEventType.WINDOW_RESIZED) forceRecheck();
    126103                        }
    127104                });
     
    321298                                // Note that accessing expeditee model in another thread --
    322299                                // Being real careful not to do anything unsafe
    323                                 Frame currentFrame = DisplayIO.getCurrentFrame();
     300                                Frame currentFrame = DisplayController.getCurrentFrame();
    324301                                if (currentFrame == null) continue;
    325302
     
    340317                               
    341318                                try {
    342                                         SwingUtilities.invokeAndWait(trackFormatter);
    343                                 } catch (InterruptedException e) {
     319                                        EcosystemManager.getMiscManager().runOnGIOThread(trackFormatter);
     320                                } catch (Throwable e) {
    344321                                        e.printStackTrace();
    345                                 } catch (InvocationTargetException e) {
    346                                         e.printStackTrace();
    347322                                }
    348323                               
     
    359334                                assert(toFormat != null);
    360335                               
    361                                 // To late?
    362                                 if (toFormat != DisplayIO.getCurrentFrame()) return;
     336                                // Too late?
     337                                if (toFormat != DisplayController.getCurrentFrame()) return;
    363338                               
    364339                                boolean supressSpatialLayout = suspendedFrame == toFormat;
     
    370345                                boolean hasRunningTime = false; // A flag set to true if there is actual audio to [lay
    371346                               
    372                                 Map<InteractiveWidget, AbstractTrackGraphNode> widgetsToFormat = new HashMap<InteractiveWidget, AbstractTrackGraphNode>();
    373        
    374                                 for (InteractiveWidget iw : toFormat.getInteractiveWidgets()) {
     347                                Map<Widget, AbstractTrackGraphNode> widgetsToFormat = new HashMap<Widget, AbstractTrackGraphNode>();
     348       
     349                                for (Widget iw : toFormat.getInteractiveWidgets()) {
    375350                                       
    376351                                        AbstractTrackGraphNode abinf = null;
     
    429404                               
    430405                                // Anything to format?
    431                                 if (!hasRunningTime ||
    432                                                 widgetsToFormat.isEmpty() ||
    433                                                 longestEndTime == firstInitiationTime) {
     406                                if (!hasRunningTime || widgetsToFormat.isEmpty() || longestEndTime == firstInitiationTime) {
    434407                                       
    435408                                        // NOTE: longestEndTime == firstInitiationTime indicates linked tracks
     
    450423                                        // Ensure that left most pixel is at a reasonable position
    451424                                        if (!supressSpatialLayout && (initiationXPixel < 0 ||
    452                                                         (initiationXPixel > Browser._theBrowser.getWidth() && Browser._theBrowser.getWidth() > leftMargin))) {
     425                                                        (initiationXPixel > DisplayController.getFramePaintArea().getWidth() && DisplayController.getFramePaintArea().getWidth() > leftMargin))) {
    453426                                                initiationXPixel = leftMargin;
    454427                                        } else if (!supressSpatialLayout && initiationXPixel > LAYOUT_MAX_INITIATION_PIXEL) {
     
    459432                                                timelineWidth = rightMostPixel - initiationXPixel;
    460433                                        } else {
    461                                                 timelineWidth = Browser._theBrowser.getWidth() - initiationXPixel - rightMargin;
     434                                                timelineWidth = DisplayController.getFramePaintArea().getWidth() - initiationXPixel - rightMargin;
    462435                                        }
    463436                                       
     
    483456                                if (!supressSpatialLayout) {
    484457                                       
    485                                         for (InteractiveWidget iw : widgetsToFormat.keySet()) {
     458                                        for (Widget iw : widgetsToFormat.keySet()) {
    486459                                               
    487460                                                AbstractTrackGraphNode atgi = widgetsToFormat.get(iw);
     
    545518                       
    546519                                Item i = FreeItems.getItemAttachedToCursor();
    547                                 InteractiveWidget freespaceTrackToFormat = null;
     520                                Widget freespaceTrackToFormat = null;
    548521                                if (i != null && i instanceof WidgetEdge) {
    549522                                        freespaceTrackToFormat = ((WidgetEdge)i).getWidgetSource();
     
    573546                                        if (width > 0) {
    574547                                               
    575                                                 if (width > (Browser._theBrowser.getWidth() - (2 * FREE_SPACE_MARGINS)))
    576                                                         width = Browser._theBrowser.getWidth() - (2 * FREE_SPACE_MARGINS);
     548                                                if (width > (DisplayController.getFramePaintArea().getWidth() - (2 * FREE_SPACE_MARGINS))) {
     549                                                        width = DisplayController.getFramePaintArea().getWidth() - (2 * FREE_SPACE_MARGINS);
     550                                                }
    577551
    578552                                                freespaceTrackToFormat.setSize(
     
    582556                                               
    583557                                                // Keep the floating track on the cursor
    584                                                 MouseEvent me = MouseEventRouter.getCurrentMouseEvent();
    585                                                 Point containerPoint = SwingUtilities.convertPoint(me.getComponent(), me.getPoint(), Browser._theBrowser.getContentPane());
    586                                                
     558                                                Point containerPoint = EcosystemManager.getInputManager().getCursorPosition();
     559                                               
     560                                                // If due to resize the track is not longer over the cursor then just center it.
    587561                                                if (!ItemUtils.expandRectangle(freespaceTrackToFormat.getBounds(), 20).contains(containerPoint)) {
    588                                                         // If due to resize the track is not longer over the cursor then just center it.
    589562                                                        int offsetX = width / 2;
    590563                                                        int offsetY = freespaceTrackToFormat.getHeight() / 2;
    591                                                         freespaceTrackToFormat.setPosition(
    592                                                                         containerPoint.x - offsetX,
    593                                                                         containerPoint.y - offsetY);
    594                                                         FrameMouseActions.resetOffset();
    595                
     564                                                        freespaceTrackToFormat.setPosition(containerPoint.x - offsetX, containerPoint.y - offsetY);
     565                                                        StandardGestureActions.resetOffset();
    596566                                                }
    597567                                               
     
    756726
    757727                // Look for all track widgets
    758                 for (InteractiveWidget iw : frame.getInteractiveWidgets()) {
     728                for (Widget iw : frame.getInteractiveWidgets()) {
    759729                       
    760730                        if (iw instanceof SampledTrack) {
     
    928898        public static long inferCurrentTotalMSTime() {
    929899               
    930                 Frame currentFrame = DisplayIO.getCurrentFrame();
     900                Frame currentFrame = DisplayController.getCurrentFrame();
    931901                String currentFrameName = (currentFrame != null) ? currentFrame.getName() : null;
    932902               
Note: See TracChangeset for help on using the changeset viewer.