Changeset 375 for trunk/src_apollo/org/apollo/widgets
- Timestamp:
- 10/26/08 17:05:11 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src_apollo/org/apollo/widgets/SampledTrack.java
r372 r375 65 65 import org.expeditee.gui.FrameGraphics; 66 66 import org.expeditee.gui.FrameIO; 67 import org.expeditee.gui.FrameMouseActions; 67 68 import org.expeditee.gui.MouseEventRouter; 68 69 import org.expeditee.gui.PopupManager; … … 381 382 } 382 383 384 if (!e.isConsumed() && e.getButton() == MouseEvent.BUTTON2) { 385 if (split(true)) 386 e.consume(); 387 } 388 383 389 // Consume events if track is selected for expansion 384 390 if (ExpandedTrackManager.getInstance().isTrackInExpansionSelection(trackModel)) { 385 391 e.consume(); 386 392 } 387 388 393 389 394 } … … 415 420 416 421 // 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(); 481 426 482 427 } … … 1426 1371 } 1427 1372 1373 private boolean ignoreInjection = false; 1428 1374 private MouseEvent lastInsertME = null; 1429 1375 … … 1493 1439 MouseEvent me = MouseEventRouter.getCurrentMouseEvent(); 1494 1440 1495 if ( me != null && me != lastInsertME &&1441 if (!ignoreInjection && me != null && me != lastInsertME && 1496 1442 (me.getButton() == MouseEvent.BUTTON2 || 1497 1443 me.getButton() == MouseEvent.BUTTON3)) { … … 1517 1463 } 1518 1464 1519 } else if ( me == lastInsertME) {1465 } else if (!ignoreInjection && me == lastInsertME) { 1520 1466 // Note due to a injection removing this widget while in the midst of 1521 1467 // anchoring, the widget parent event filtering will not work thus … … 1792 1738 // } 1793 1739 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 } 1794 1824 /** 1795 1825 * Doesn't expand if not anchored ...
Note:
See TracChangeset
for help on using the changeset viewer.