Changeset 1102 for trunk/src/org/apollo/widgets/SampledTrack.java
- Timestamp:
- 05/10/18 16:04:51 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/apollo/widgets/SampledTrack.java
r1007 r1102 5 5 import java.awt.Graphics; 6 6 import java.awt.Graphics2D; 7 import java.awt.Point;8 7 import java.awt.Rectangle; 9 8 import java.awt.Shape; 10 import java.awt.Stroke;11 9 import java.awt.event.ActionEvent; 12 10 import java.awt.event.KeyEvent; … … 27 25 import javax.swing.SwingUtilities; 28 26 29 import org.apollo.A udioFrameKeyboardActions;30 import org.apollo.A udioFrameMouseActions;27 import org.apollo.ApolloGestureActions; 28 import org.apollo.ApolloKBMGestureTranslator; 31 29 import org.apollo.audio.ApolloPlaybackMixer; 32 30 import org.apollo.audio.ApolloSubjectChangedEvent; … … 56 54 import org.apollo.util.AudioMath; 57 55 import org.apollo.util.Mutable; 58 import org.apollo.util.PopupReaper;59 56 import org.apollo.util.TrackModelHandler; 60 57 import org.apollo.util.TrackModelLoadManager; 61 58 import org.apollo.util.TrackNameCreator; 62 import org.expeditee.gui.Browser; 63 import org.expeditee.gui.DisplayIO; 59 import org.expeditee.Util; 60 import org.expeditee.core.Colour; 61 import org.expeditee.core.Point; 62 import org.expeditee.core.Stroke; 63 import org.expeditee.core.bounds.AxisAlignedBoxBounds; 64 import org.expeditee.gio.gesture.StandardGestureActions; 65 import org.expeditee.gio.swing.MouseEventRouter; 66 import org.expeditee.gio.swing.SwingConversions; 67 import org.expeditee.gio.swing.SwingMiscManager; 68 import org.expeditee.gui.DisplayController; 64 69 import org.expeditee.gui.Frame; 65 import org.expeditee.gui.FrameGraphics;66 70 import org.expeditee.gui.FrameIO; 67 import org.expeditee.gui.FrameMouseActions;68 import org.expeditee.gui.MouseEventRouter;69 71 import org.expeditee.gui.PopupManager; 70 72 import org.expeditee.items.ItemParentStateChangedEvent; … … 72 74 import org.expeditee.items.Text; 73 75 import org.expeditee.items.widgets.HeavyDutyInteractiveWidget; 74 import org.expeditee.items.widgets.InteractiveWidget;75 76 import org.expeditee.items.widgets.InteractiveWidgetInitialisationFailedException; 76 77 import org.expeditee.items.widgets.InteractiveWidgetNotAvailableException; 78 import org.expeditee.items.widgets.Widget; 77 79 78 80 /** … … 82 84 * 83 85 */ 84 public class SampledTrack extends HeavyDutyInteractiveWidget 85 implements TrackModelHandler, EffecientInvalidator, Observer { 86 public class SampledTrack extends HeavyDutyInteractiveWidget implements TrackModelHandler, EffecientInvalidator, Observer { 86 87 87 88 /** The observered subject. Can be null */ … … 115 116 private static final Stroke FREESPACE_OUTLINING = Strokes.SOLID_2; 116 117 117 private static final Colo r SEMI_TRANSPARENT_FREESPACE_BACKCOLOR = new Color(118 private static final Colour SEMI_TRANSPARENT_FREESPACE_BACKCOLOR = new Colour( 118 119 FREESPACE_BACKCOLOR.getRed(), FREESPACE_BACKCOLOR.getGreen(), 119 FREESPACE_BACKCOLOR.getBlue(), 128);120 FREESPACE_BACKCOLOR.getBlue(), Colour.FromComponent255(128)); 120 121 121 122 … … 173 174 initObservers(); 174 175 176 } 177 178 @Override 179 public void onMoved() 180 { 181 if (nameLabel != null) nameLabel.setPosition(new Point(getX() + 10, getY() + 20)); 175 182 } 176 183 … … 279 286 280 287 if (nameLabel != null) { 281 nameLabel. onMouseMoved(e, fulltrackView);288 nameLabel.gainFocus(); 282 289 } 283 290 … … 291 298 292 299 // Get rid of all popups 293 PopupManager.getInstance().hideAuto hidePopups();300 PopupManager.getInstance().hideAutoHidePopups(); 294 301 295 302 Rectangle animationSource = _swingComponent.getBounds(); … … 297 304 // Determine where popup should show 298 305 int x = SampledTrack.this.getX(); 299 int y = SampledTrack.this.getY() - playbackControlPopup.get Height() - 2; // by default show above306 int y = SampledTrack.this.getY() - playbackControlPopup.getFullBounds().getHeight() - 2; // by default show above 300 307 301 308 // I get sick.dizzy from the popup expanding from the whole thing... 302 309 animationSource.height = 1; 303 animationSource.width = Math.min(animationSource.width, playbackControlPopup.get Width());310 animationSource.width = Math.min(animationSource.width, playbackControlPopup.getFullBounds().getWidth()); 304 311 305 312 if (y < 0) { … … 309 316 310 317 // Animate the popup 311 PopupManager.getInstance().showPopup( 312 playbackControlPopup, 313 new Point(x, y), 314 fulltrackView, 315 PopupManager.getInstance().new ExpandShrinkAnimator( 316 animationSource, 317 Color.LIGHT_GRAY)); 318 319 PopupReaper.getInstance().initPopupLifetime( 320 playbackControlPopup, 321 PopupManager.getInstance().new ExpandShrinkAnimator( 322 animationSource, 323 Color.LIGHT_GRAY), 324 TrackWidgetCommons.POPUP_LIFETIME); 325 318 playbackControlPopup.getAutoHideTime().setLifetime(TrackWidgetCommons.POPUP_LIFETIME); 319 PopupManager.getInstance().add(playbackControlPopup); 320 playbackControlPopup.show(); 326 321 } else { 327 PopupReaper.getInstance().revivePopup(playbackControlPopup, TrackWidgetCommons.POPUP_LIFETIME);322 playbackControlPopup.show(); 328 323 } 329 324 … … 398 393 fulltrackView.addKeyListener(new KeyListener() { 399 394 400 public void keyPressed(KeyEvent e) { 401 if (!e.isControlDown() && nameLabel != null) { 402 if (nameLabel.onKeyPressed(e, fulltrackView)) { 403 e.consume(); 404 } 405 } 406 } 407 408 public void keyReleased(KeyEvent e) { 409 if (!e.isControlDown() && nameLabel != null) { 410 if (nameLabel.onKeyReleased(e, fulltrackView)) { 411 e.consume(); 412 } 413 } 414 395 public void keyPressed(KeyEvent e) 396 { 397 } 398 399 public void keyReleased(KeyEvent e) 400 { 415 401 // Toggle pitch-track indexing 416 402 if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_I) { 417 403 setShouldOmitIndexAudio(!shouldOmitIndexAudio()); 418 FrameGraphics.refresh(true);404 DisplayController.requestRefresh(true); 419 405 } 420 406 … … 429 415 else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_L) { 430 416 431 Frame current = Display IO.getCurrentFrame();417 Frame current = DisplayController.getCurrentFrame(); 432 418 433 419 if (current != null) { … … 473 459 } 474 460 475 } else if (e.isControlDown() && 476 (e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_RIGHT)) { 477 e.consume(); 478 AudioFrameKeyboardActions.adjustInitationTime(SampledTrack.this, e.getKeyCode() == KeyEvent.VK_LEFT); 479 } else if (e.isControlDown() && 480 (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN)) { 481 e.consume(); 482 AudioFrameKeyboardActions.adjustVerticlePosition(SampledTrack.this, e.getKeyCode() == KeyEvent.VK_UP); 461 } else if (e.isControlDown()) { 462 if (e.getKeyCode() == KeyEvent.VK_LEFT) { 463 e.consume(); 464 ApolloGestureActions.adjustInitiationTime(SampledTrack.this, -ApolloKBMGestureTranslator.TRACK_WIDGET_TIMELINE_ADJUSTMENT); 465 } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { 466 e.consume(); 467 ApolloGestureActions.adjustInitiationTime(SampledTrack.this, ApolloKBMGestureTranslator.TRACK_WIDGET_TIMELINE_ADJUSTMENT); 468 } else if (e.getKeyCode() == KeyEvent.VK_UP) { 469 e.consume(); 470 ApolloGestureActions.adjustVerticalPosition(SampledTrack.this, -ApolloKBMGestureTranslator.TRACK_WIDGET_VERTICAL_ADJUSTMENT); 471 } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { 472 e.consume(); 473 ApolloGestureActions.adjustVerticalPosition(SampledTrack.this, ApolloKBMGestureTranslator.TRACK_WIDGET_VERTICAL_ADJUSTMENT); 474 } 483 475 } 484 476 … … 490 482 }); 491 483 492 493 494 nameLabel = new EmulatedTextItem(_swingComponent, new Point(10, 20)); 495 nameLabel.setBackgroundColor(Color.WHITE); 484 nameLabel = new EmulatedTextItem("", (new Point(10, 20)).add(getBounds().getTopLeft())); 485 nameLabel.setBackgroundColor(Colour.WHITE); 496 486 497 487 String metaName = getStrippedDataString(TrackWidgetCommons.META_NAME_TAG); … … 616 606 Text source = new Text( 617 607 targetFrame.getNextItemID(), 618 ItemUtils.GetTag(ItemUtils.TAG_IWIDGET) + ":" + formatArgs(args));608 ItemUtils.GetTag(ItemUtils.TAG_IWIDGET) + ":" + Util.formatArgs(args)); 619 609 620 610 source.setParent(targetFrame); … … 685 675 686 676 @Override 687 public InteractiveWidget copy()677 public Widget copy() 688 678 throws InteractiveWidgetNotAvailableException, InteractiveWidgetInitialisationFailedException { 689 679 … … 1119 1109 } 1120 1110 1121 public void onGraphDirty(SampledTrackGraphView graph, Rectangle dirty) { 1111 public void onGraphDirty(SampledTrackGraphView graph, Rectangle dirty) 1112 { 1122 1113 dirty.translate(getX(), getY() - 1); 1123 FrameGraphics.invalidateArea(dirty);1124 FrameGraphics.refresh(true);1114 DisplayController.invalidateArea(SwingConversions.fromSwingRectangle(dirty)); 1115 DisplayController.requestRefresh(true); 1125 1116 } 1126 1117 … … 1131 1122 1132 1123 @Override 1133 protected void onSizeChanged() { 1124 protected void onSizeChanged() 1125 { 1134 1126 super.onSizeChanged(); 1135 1127 // Keep meta as constant as possible for best reults … … 1246 1238 1247 1239 @Override 1248 public void paintInFreeSpace(Graphics g) { 1249 paintInFreeSpace(g, false); 1250 } 1251 1252 public void paintInFreeSpace(Graphics g, boolean isAtFinalPass) { 1240 public void paintInFreeSpace() 1241 { 1242 paintInFreeSpace(false); 1243 } 1244 1245 public void paintInFreeSpace(boolean isAtFinalPass) 1246 { 1247 Graphics g = SwingMiscManager.getIfUsingSwingGraphicsManager().getCurrentSurface(); 1253 1248 1254 1249 if (isLoaded()) { … … 1270 1265 1271 1266 1272 Point containerPoint = Swing Utilities.convertPoint(me.getComponent(),1273 new Point(0,0), Browser._theBrowser.getContentPane());1267 Point containerPoint = SwingConversions.fromSwingPoint(SwingUtilities.convertPoint(me.getComponent(), 1268 new java.awt.Point(0,0), SwingMiscManager.getIfUsingSwingGraphicsManager().getContentPane())); 1274 1269 1275 1270 Shape clipBackUp = g.getClip(); 1276 1271 g.setClip(null); 1277 1272 1278 g.setColor( Color.ORANGE);1273 g.setColor(SwingConversions.toSwingColor(Colour.ORANGE)); 1279 1274 ((Graphics2D)g).setStroke(EditableSampledTrackGraphView.GRAPH_BAR_STROKE); 1280 1275 g.drawLine( … … 1284 1279 containerPoint.y + me.getComponent().getHeight()); 1285 1280 1286 FrameGraphics.invalidateArea(new Rectangle(1281 DisplayController.invalidateArea(new AxisAlignedBoxBounds( 1287 1282 containerPoint.x + me.getX(), 1288 1283 containerPoint.y, … … 1293 1288 g.setClip(clipBackUp); 1294 1289 1295 g.setColor(S EMI_TRANSPARENT_FREESPACE_BACKCOLOR);1290 g.setColor(SwingConversions.toSwingColor(SEMI_TRANSPARENT_FREESPACE_BACKCOLOR)); 1296 1291 g.fillRect(getX(), getY(), getWidth(), getHeight()); 1297 1292 1298 1293 if (isAtFinalPass) { // final pass does not draw the borders... so must manually draw them 1299 g.setColor( Color.BLACK);1300 ((Graphics2D)g).setStroke( FREESPACE_OUTLINING);1294 g.setColor(SwingConversions.toSwingColor(Colour.BLACK)); 1295 ((Graphics2D)g).setStroke(SwingConversions.toSwingStroke(FREESPACE_OUTLINING)); 1301 1296 g.drawRect(getX(), getY(), getWidth(), getHeight()); 1302 1297 } … … 1311 1306 } 1312 1307 1313 super.paintInFreeSpace( g);1308 super.paintInFreeSpace(); 1314 1309 1315 1310 if (isLoaded()) { … … 1318 1313 Rectangle tmpClip = (clipBackUp != null) ? clipBackUp.getBounds() : 1319 1314 new Rectangle(0, 0, 1320 Browser._theBrowser.getContentPane().getWidth(),1321 Browser._theBrowser.getContentPane().getHeight());1322 1323 g.setClip(tmpClip.intersection( getBounds()));1315 SwingMiscManager.getIfUsingSwingGraphicsManager().getContentPane().getWidth(), 1316 SwingMiscManager.getIfUsingSwingGraphicsManager().getContentPane().getHeight()); 1317 1318 g.setClip(tmpClip.intersection(SwingConversions.toSwingRectangle(getBounds()))); 1324 1319 1325 1320 // Draw the name … … 1327 1322 if (name == null) name = "Unnamed"; 1328 1323 1329 g.setFont( TrackWidgetCommons.FREESPACE_TRACKNAME_FONT);1330 g.setColor( TrackWidgetCommons.FREESPACE_TRACKNAME_TEXT_COLOR);1324 g.setFont(SwingMiscManager.getIfUsingSwingFontManager().getInternalFont(TrackWidgetCommons.FREESPACE_TRACKNAME_FONT)); 1325 g.setColor(SwingConversions.toSwingColor(TrackWidgetCommons.FREESPACE_TRACKNAME_TEXT_COLOR)); 1331 1326 1332 1327 // Center track name 1333 FontMetrics fm = g.getFontMetrics( TrackWidgetCommons.FREESPACE_TRACKNAME_FONT);1328 FontMetrics fm = g.getFontMetrics(SwingMiscManager.getIfUsingSwingFontManager().getInternalFont(TrackWidgetCommons.FREESPACE_TRACKNAME_FONT)); 1334 1329 Rectangle2D rect = fm.getStringBounds(name, g); 1335 1330 … … 1349 1344 1350 1345 @Override 1351 public void paint(Graphics g) { 1352 super.paint(g); 1346 public void paintHeavyDutyWidget(Graphics2D g) 1347 { 1348 super.paintHeavyDutyWidget(g); 1353 1349 1354 1350 if (isLoaded() && nameLabel != null) { 1355 nameLabel.paint( g);1351 nameLabel.paint(); 1356 1352 1357 1353 if (shouldOmitIndexAudio()) { … … 1360 1356 -20 : 0; 1361 1357 1362 IconRepository.getIcon("omitindexed.png").paintIcon(1358 /*IconRepository.getIcon("omitindexed.png").paintIcon( 1363 1359 _swingComponent, 1364 1360 g, 1365 1361 getX() + getWidth() - EditableSampledTrackGraphView.LOCK_ICON_CORNER_OFFSET + shiftOffset, 1366 getY() + EditableSampledTrackGraphView.LOCK_ICON_CORNER_OFFSET - 16); 1362 getY() + EditableSampledTrackGraphView.LOCK_ICON_CORNER_OFFSET - 16);*/ 1363 1364 g.drawImage(SwingMiscManager.getIfUsingSwingImageManager().getInternalImage(IconRepository.getIcon("omitindexed.png")), 1365 getX() + getWidth() - EditableSampledTrackGraphView.LOCK_ICON_CORNER_OFFSET + shiftOffset, 1366 getY() + EditableSampledTrackGraphView.LOCK_ICON_CORNER_OFFSET - 16, null); 1367 1367 1368 1368 } … … 1404 1404 boolean inferInitTime = true; 1405 1405 1406 if (A udioFrameMouseActions.isYAxisRestictionOn()) {1406 if (ApolloGestureActions.isYAxisRestictionOn()) { 1407 1407 Mutable.Long ms = getInitiationTimeFromMeta(); 1408 1408 if (ms != null) { … … 1417 1417 } 1418 1418 1419 inferInitTime &= 1420 (AudioFrameMouseActions.isMouseAnchoring() || AudioFrameMouseActions.isMouseStamping()); 1421 1419 // Also must not set initiation time if the frame is simply being displayed 1420 //inferInitTime &= (AudioFrameMouseActions.isMouseAnchoring() || AudioFrameMouseActions.isMouseStamping()); 1421 inferInitTime &= (eventType == ItemParentStateChangedEvent.EVENT_TYPE_ADDED); 1422 1422 1423 if (inferInitTime) 1423 1424 initTime = Mutable.createMutableLong(FrameLayoutDaemon.getInstance().getMSAtX(getX(), parent)); … … 1499 1500 MouseEventRouter.getCurrentMouseEvent().getButton() == MouseEvent.BUTTON2 && 1500 1501 MouseEventRouter.getCurrentMouseEvent() != lastInsertME) { 1501 Frame suspended = Display IO.getCurrentFrame();1502 Frame suspended = DisplayController.getCurrentFrame(); 1502 1503 if (suspended != null) { 1503 1504 FrameLayoutDaemon.getInstance().suspendLayout(suspended, this); … … 1682 1683 1683 1684 // Get border color currently used 1684 Colo r oldC = getSource().getBorderColor();1685 1686 Colo r newC = TrackWidgetCommons.getBorderColor(1685 Colour oldC = getSource().getBorderColor(); 1686 1687 Colour newC = TrackWidgetCommons.getBorderColor( 1687 1688 SoundDesk.getInstance().isSolo(trackMix.getChannelID()), 1688 1689 trackMix.isMuted()); … … 1772 1773 // Build the new neighbouring widget 1773 1774 Frame target = getParentFrame(); 1774 if (target == null) target = Display IO.getCurrentFrame();1775 if (target == null) target = DisplayController.getCurrentFrame(); 1775 1776 1776 1777 // Determine init time … … 1811 1812 trackMix); 1812 1813 1813 FrameMouseActions.pickup(extractedTrack.getItems());1814 StandardGestureActions.pickup(extractedTrack.getItems()); 1814 1815 1815 1816 } … … 1840 1841 trackModel, 1841 1842 pfname, 1842 _swingComponent.getBounds(),1843 SwingConversions.fromSwingRectangle(_swingComponent.getBounds()), 1843 1844 trackMix); 1844 1845 … … 1846 1847 1847 1848 // Get rid of all popups 1848 PopupManager.getInstance().hideAuto hidePopups();1849 PopupManager.getInstance().hideAutoHidePopups(); 1849 1850 1850 1851 int start = trackModel.getSelectionStart(); … … 1859 1860 ExpandedTrackManager.getInstance().expandSingleTrack( 1860 1861 trackModel, 1861 _swingComponent.getBounds(),1862 SwingConversions.fromSwingRectangle(_swingComponent.getBounds()), 1862 1863 trackMix, 1863 1864 pfname, … … 1882 1883 * 1883 1884 */ 1884 private class PlaybackPopup extends PlaybackControlPopup implements Observer { 1885 1886 private static final long serialVersionUID = 1L; 1887 1888 public PlaybackPopup() { 1885 private class PlaybackPopup extends PlaybackControlPopup implements Observer 1886 { 1887 public PlaybackPopup() 1888 { 1889 1889 miscButton.setActionCommand("expand"); 1890 miscButton.setIcon(IconRepository.getIcon("expand.png"));1890 SwingMiscManager.setJButtonIcon(miscButton, IconRepository.getIcon("expand.png")); 1891 1891 miscButton.setToolTipText("Expand"); 1892 1893 1892 } 1894 1893 1895 1894 @Override 1896 public void onHide() { 1897 super.onHide(); 1898 1895 public void onHide() 1896 { 1899 1897 // Listen for volume or mute changed events 1900 1898 trackMix.removeObserver(this); … … 1905 1903 1906 1904 @Override 1907 public void onShow() {1908 super.onShow();1905 public void onShow() 1906 { 1909 1907 // Listen for volume or mute changed events 1910 1908 trackMix.addObserver(this); … … 2016 2014 } 2017 2015 2018 public Subject getObservedSubject() { 2016 public Subject getObservedSubject() 2017 { 2019 2018 return null; 2020 2019 } 2021 2020 2022 public void setObservedSubject(Subject parent) { 2021 public void setObservedSubject(Subject parent) 2022 { 2023 2023 } 2024 2024 … … 2026 2026 * Receives events from the track model OR from the observed track sequence. 2027 2027 */ 2028 public void modelChanged(Subject source, SubjectChangedEvent event) {2029 2028 public void modelChanged(Subject source, SubjectChangedEvent event) 2029 { 2030 2030 // Synch GUI with track state 2031 2031 switch (event.getID()) { … … 2049 2049 stopButton.setEnabled(true); 2050 2050 rewindButton.setEnabled(false); 2051 playPauseButton.setIcon(IconRepository.getIcon("pause.png"));2051 SwingMiscManager.setJButtonIcon(playPauseButton, IconRepository.getIcon("pause.png")); 2052 2052 2053 2053 invalidateStateIcons(); … … 2063 2063 rewindButton.setEnabled(true); 2064 2064 stopButton.setEnabled(false); 2065 playPauseButton.setIcon(IconRepository.getIcon("play.png"));2065 SwingMiscManager.setJButtonIcon(playPauseButton, IconRepository.getIcon("play.png")); 2066 2066 2067 2067 // Note: … … 2109 2109 2110 2110 @Override 2111 protected void volumeChanged() { 2111 protected void volumeChanged() 2112 { 2112 2113 trackMix.setVolume(((float)volumeSlider.getValue()) / 100.0f); 2113 2114 } 2114 2115 2115 2116 @Override 2116 protected void muteChanged() { 2117 protected void muteChanged() 2118 { 2117 2119 trackMix.setMuted(muteButton.isSelected()); 2118 2120 } 2119 2121 2120 2122 @Override 2121 protected void soloChanged() { 2123 protected void soloChanged() 2124 { 2122 2125 SoundDesk.getInstance().setSoloIDPrefix(soloButton.isSelected() ? 2123 2126 trackMix.getChannelID() : null 2124 2127 ); 2125 2128 } 2126 2127 2129 } 2128 2130 2129 2131 @Override 2130 public boolean isWidgetEdgeThicknessAdjustable() { 2132 public boolean isWidgetEdgeThicknessAdjustable() 2133 { 2131 2134 return false; 2132 2135 } 2133 2134 2135 2136 2136 }
Note:
See TracChangeset
for help on using the changeset viewer.