Ignore:
Timestamp:
10/26/08 17:05:11 (16 years ago)
Author:
bjn8
Message:

Lots of minor improvements made prior to evluation study, and small things done afterwards for report :)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src_apollo/org/apollo/widgets/SampledTrack.java

    r372 r375  
    6565import org.expeditee.gui.FrameGraphics;
    6666import org.expeditee.gui.FrameIO;
     67import org.expeditee.gui.FrameMouseActions;
    6768import org.expeditee.gui.MouseEventRouter;
    6869import org.expeditee.gui.PopupManager;
     
    381382                                }
    382383                               
     384                                 if (!e.isConsumed() && e.getButton() == MouseEvent.BUTTON2) {
     385                                                if (split(true))
     386                                                        e.consume();
     387                                        }
     388                               
    383389                                // Consume events if track is selected for expansion
    384390                                if (ExpandedTrackManager.getInstance().isTrackInExpansionSelection(trackModel)) {
    385391                                        e.consume();
    386392                                }
    387                                
    388393               
    389394                        }
     
    415420                               
    416421                                // Delete-and-Split audio command
    417                                 else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_DELETE) {
    418                                        
    419                                         // First is selection valid?
    420                                         if (trackModel != null && trackModel.getSelectionLength() > 1
    421                                                         && !fulltrackView.isPlaying()
    422                                                         && (trackModel.getFrameCount() - trackModel.getSelectionLength())  > EditableSampledTrackGraphView.MIN_FRAME_SELECTION_SIZE) {
    423 
    424                                                 // If so... can a slip be performed? i.e. is there unselected audio to
    425                                                 // the left and right of selection
    426                                                 if (trackModel.getSelectionStart() > 0 &&
    427                                                                 (trackModel.getSelectionStart() + trackModel.getSelectionLength()) < trackModel.getFrameCount()) {
    428                                                        
    429                                                         // Perform delete-split
    430                                                         e.consume();
    431                                                        
    432                                                         int rightSideStartFrame = trackModel.getSelectionStart() + trackModel.getSelectionLength();
    433                                                        
    434                                                         // Create a new track widget to contain the right-side audio
    435                                                         byte[] rightsideAudio = new byte[(trackModel.getFrameCount() - rightSideStartFrame) * trackModel.getFormat().getFrameSize()];
    436                                                        
    437                                                         // Copy bytes into new location
    438                                                         System.arraycopy(
    439                                                                         trackModel.getAllAudioBytes(),
    440                                                                         rightSideStartFrame * trackModel.getFormat().getFrameSize(),
    441                                                                         rightsideAudio,
    442                                                                         0, rightsideAudio.length);
    443                                                        
    444                                                         // Let this widget keep the left-side audio
    445                                                         trackModel.setSelection(trackModel.getSelectionStart(), trackModel.getFrameCount() - trackModel.getSelectionStart());
    446                                                         trackModel.removeSelectedBytes();
    447                                                         trackModel.setSelection(0,0);
    448                                                        
    449                                                         // Build the new neighbouring widget
    450                                                         Frame target = getParentFrame();
    451                                                         if (target == null) target = DisplayIO.getCurrentFrame();
    452                                                        
    453                                                         // Determine init time
    454                                                         Mutable.Long initTime = getInitiationTimeFromMeta();
    455                                                        
    456                                                         if (initTime == null) initTime = Mutable.createMutableLong(0);
    457                                                        
    458                                                         initTime.value += AudioMath.framesToMilliseconds(rightSideStartFrame, trackModel.getFormat());
    459                                                        
    460                                                         SampledTrack rightSideTrack = SampledTrack.createFromMemory(
    461                                                                         rightsideAudio,
    462                                                                         trackModel.getFormat(),
    463                                                                         target,
    464                                                                         0, // X Coord overridden
    465                                                                         getY(),
    466                                                                         getName() + " part",
    467                                                                         trackMix);
    468                                                        
    469                                                         // Anchor it
    470                                                         target.addAllItems(rightSideTrack.getItems());
    471                                                        
    472                                                         // Adjust initiation time to be exact
    473                                                         rightSideTrack.setInitiationTime(initTime.value);
    474                                                        
    475                                                         // TODO: FrameLayoutDaemon.getInstance().resumeLayout(this); ?
    476                                                 }
    477                                                
    478                                         }
    479                
    480                                        
     422                                else if (!e.isControlDown() && e.getKeyCode() == KeyEvent.VK_DELETE) {
     423                                       
     424                                        if (split(false))  // try Perform delete-split
     425                                                e.consume();
    481426                                       
    482427                                }
     
    14261371        }
    14271372       
     1373        private boolean ignoreInjection = false;
    14281374        private MouseEvent lastInsertME = null;
    14291375       
     
    14931439                                        MouseEvent me = MouseEventRouter.getCurrentMouseEvent();
    14941440                                       
    1495                                         if (me != null && me != lastInsertME &&
     1441                                        if (!ignoreInjection && me != null && me != lastInsertME &&
    14961442                                                        (me.getButton() == MouseEvent.BUTTON2 ||
    14971443                                                                        me.getButton() == MouseEvent.BUTTON3)) {
     
    15171463                                                }
    15181464                                                       
    1519                                         } else if (me == lastInsertME) {
     1465                                        } else if (!ignoreInjection && me == lastInsertME) {
    15201466                                                // Note due to a injection removing this widget while in the midst of
    15211467                                                // anchoring, the widget parent event filtering will not work thus
     
    17921738//      }
    17931739       
     1740        private boolean split(boolean extractSelection) {
     1741               
     1742                // First is operation valid?
     1743                if (trackModel != null && trackModel.getSelectionLength() > 1
     1744                                && !fulltrackView.isPlaying()
     1745                                && (trackModel.getFrameCount() - trackModel.getSelectionLength())  > EditableSampledTrackGraphView.MIN_FRAME_SELECTION_SIZE) {
     1746
     1747                        // If so... can a slip be performed? i.e. is there unselected audio to
     1748                        // the left and right of selection
     1749                        if (trackModel.getSelectionStart() > 0 &&
     1750                                        (trackModel.getSelectionStart() + trackModel.getSelectionLength()) < trackModel.getFrameCount()) {
     1751                               
     1752                                // Perform split
     1753                                int rightSideStartFrame = trackModel.getSelectionStart() + trackModel.getSelectionLength();
     1754                               
     1755                                // Create a new track widget to contain the right-side audio
     1756                                byte[] rightsideAudio = new byte[(trackModel.getFrameCount() - rightSideStartFrame) * trackModel.getFormat().getFrameSize()];
     1757                               
     1758                                // Copy bytes into new location
     1759                                System.arraycopy(
     1760                                                trackModel.getAllAudioBytes(),
     1761                                                rightSideStartFrame * trackModel.getFormat().getFrameSize(),
     1762                                                rightsideAudio,
     1763                                                0, rightsideAudio.length);
     1764                               
     1765                                byte[] selectedBytes = (extractSelection) ? trackModel.getSelectedFramesCopy() : null;
     1766                               
     1767                                // Let this widget keep the left-side audio
     1768                                trackModel.setSelection(trackModel.getSelectionStart(), trackModel.getFrameCount() - trackModel.getSelectionStart());
     1769                                trackModel.removeSelectedBytes();
     1770                                trackModel.setSelection(0,0);
     1771                               
     1772                                // Build the new neighbouring widget
     1773                                Frame target = getParentFrame();
     1774                                if (target == null) target = DisplayIO.getCurrentFrame();
     1775                               
     1776                                // Determine init time
     1777                                Mutable.Long initTime = getInitiationTimeFromMeta();
     1778                               
     1779                                if (initTime == null) initTime = Mutable.createMutableLong(0);
     1780                               
     1781                                initTime.value += AudioMath.framesToMilliseconds(rightSideStartFrame, trackModel.getFormat());
     1782                               
     1783                                SampledTrack rightSideTrack = SampledTrack.createFromMemory(
     1784                                                rightsideAudio,
     1785                                                trackModel.getFormat(),
     1786                                                target,
     1787                                                0, // X Coord overridden
     1788                                                getY(),
     1789                                                getName() + " part",
     1790                                                trackMix);
     1791       
     1792                                // Anchor it
     1793                                rightSideTrack.ignoreInjection = true;
     1794                                target.addAllItems(rightSideTrack.getItems());
     1795                                rightSideTrack.ignoreInjection = false;
     1796                               
     1797                                // Adjust initiation time to be exact
     1798                                rightSideTrack.setInitiationTime(initTime.value);
     1799                               
     1800                                // If extracting audio then attatch it to the cursor
     1801                                if (selectedBytes != null) {
     1802                                        assert(extractSelection);
     1803       
     1804                                        SampledTrack extractedTrack = SampledTrack.createFromMemory(
     1805                                                        selectedBytes,
     1806                                                        trackModel.getFormat(),
     1807                                                        target,
     1808                                                        getX(), // X Coord overridden
     1809                                                        getY(),
     1810                                                        getName() + " part",
     1811                                                        trackMix);
     1812                                       
     1813                                        FrameMouseActions.pickup(extractedTrack.getItems());
     1814                                       
     1815                                }
     1816                        }
     1817               
     1818                        return true;
     1819                }
     1820               
     1821                return false;
     1822               
     1823        }
    17941824        /**
    17951825         * Doesn't expand if not anchored ...
Note: See TracChangeset for help on using the changeset viewer.