📄 defaulttimescalebasedviewer.java
字号:
* * @return the current interval end time */ public long getIntervalEndTime() { return intervalEndTime; } /** * Checks whether this viewer is TimeScale connected and changes the * interval begin time globally or locally. * * @param begin the new interval begin time */ public void setIntervalBeginTime(long begin) { if (timeScaleConnected) { setGlobalTimeScaleIntervalBeginTime(begin); setGlobalTimeScaleIntervalEndTime(intervalEndTime); } else { setLocalTimeScaleIntervalBeginTime(begin); } } /** * Calculates the new interval begin and/or end time.<br> * There are two special cases taken into account:<br> * * <ul> * <li> * when the player is playing attempts are made to shift the interval * <i>n</i> times the interval size to the left or to the right, until the * new interval contains the new mediatime. * </li> * <li> * when the player is not playing and the new interval begin time coincides * with the selection begin time, the interval is shifted a certain offset * away from the image edge. Same thing when the interval end time * coincides with the selection end time. * </li> * </ul> * * * @param mediaTime */ protected void recalculateInterval(final long mediaTime) { long newBeginTime = intervalBeginTime; long newEndTime = intervalEndTime; if (playerIsPlaying()) { // we might be in a selection outside the new interval // shift the interval n * intervalsize to the left or right if (mediaTime > intervalEndTime) { newBeginTime = intervalEndTime; newEndTime = newBeginTime + (int) (intervalWidth * msPerPixel); while ((newEndTime += (intervalWidth + msPerPixel)) < mediaTime) { newBeginTime += (intervalWidth * msPerPixel); } } else if (mediaTime < intervalBeginTime) { newEndTime = intervalBeginTime; newBeginTime = newEndTime - (int) (intervalWidth * msPerPixel); while ((newEndTime -= (intervalWidth * msPerPixel)) > mediaTime) { newBeginTime -= (intervalWidth * msPerPixel); } if (newBeginTime < 0) { newBeginTime = 0; newEndTime = (long) (intervalWidth * msPerPixel); } } else { // the new time appears to be in the current interval after all return; } } else { //player is not playing // is the new media time to the left or to the right of the current interval if (mediaTime < intervalBeginTime) { newBeginTime = mediaTime - (int) (SCROLL_OFFSET * msPerPixel); if (newBeginTime < 0) { newBeginTime = 0; } newEndTime = newBeginTime + (int) (intervalWidth * msPerPixel); } else if (mediaTime > intervalEndTime) { newEndTime = mediaTime + (int) (SCROLL_OFFSET * msPerPixel); newBeginTime = newEndTime - (int) (intervalWidth * msPerPixel); if (newBeginTime < 0) { // something would be wrong?? newBeginTime = 0; newEndTime = newBeginTime + (int) (intervalWidth * msPerPixel); } } if ((newBeginTime == getSelectionBeginTime()) && (newBeginTime > (SCROLL_OFFSET * msPerPixel))) { newBeginTime -= (SCROLL_OFFSET * msPerPixel); newEndTime = newBeginTime + (int) (intervalWidth * msPerPixel); } if (newEndTime == getSelectionEndTime()) { newEndTime += (SCROLL_OFFSET * msPerPixel); newBeginTime = newEndTime - (int) (intervalWidth * msPerPixel); if (newBeginTime < 0) { // something would be wrong?? newBeginTime = 0; newEndTime = newBeginTime + (int) (intervalWidth * msPerPixel); } } } if (timeScaleConnected) { //System.out.println("SV new begin time: " + newBeginTime); //System.out.println("SV new end time: " + newEndTime); setGlobalTimeScaleIntervalBeginTime(newBeginTime); setGlobalTimeScaleIntervalEndTime(newEndTime); } else { setLocalTimeScaleIntervalBeginTime(newBeginTime); } } /** * To be implemented by each extending class. * * @param begin the interval begintime */ protected void setLocalTimeScaleIntervalBeginTime(long begin) { } /** * To be implemented by each extending class. * * @param step new msPerPixel value */ protected void setLocalTimeScaleMsPerPixel(float step) { } /** * Checks whether this viewer is TimeScale connected and changes the * milliseconds per pixel value globally or locally. * * @param mspp the new milliseconds per pixel value */ public void setMsPerPixel(float mspp) { if (timeScaleConnected) { setGlobalTimeScaleMsPerPixel((int) mspp); setGlobalTimeScaleIntervalBeginTime(intervalBeginTime); setGlobalTimeScaleIntervalEndTime(intervalEndTime); } else { setLocalTimeScaleMsPerPixel(mspp); } } /** * @see mpi.eudico.client.annotator.viewer.AbstractViewer#controllerUpdate(mpi.eudico.client.mediacontrol.ControllerEvent) */ public void controllerUpdate(ControllerEvent event) { if (event instanceof TimeEvent || event instanceof StopEvent) { crossHairTime = getMediaTime(); if (!playerIsPlaying()) { //if (scroller == null) { to do: drag scrolling recalculateInterval(crossHairTime); crossHairPos = xAt(crossHairTime); repaint(); //} else { // recalculateInterval(crossHairTime); //} } else { if ((crossHairTime < intervalBeginTime) || (crossHairTime > intervalEndTime)) { recalculateInterval(crossHairTime); } else { // repaint a part of the viewer int oldPos = crossHairPos; crossHairPos = xAt(crossHairTime); int newPos = crossHairPos; if (newPos >= oldPos) { repaint(oldPos - 2, 0, newPos - oldPos + 4, getHeight()); //repaint(); } else { repaint(newPos - 2, 0, oldPos - newPos + 4, getHeight()); //repaint(); } } } } } /** * Gets the selection begintime and endtime and calculates pixel positions. * * @see mpi.eudico.client.annotator.viewer.AbstractViewer#updateSelection() */ public void updateSelection() { selectionBeginPos = (int) (getSelectionBeginTime() / msPerPixel); selectionEndPos = (int) (getSelectionEndTime() / msPerPixel); } /** * @see mpi.eudico.client.annotator.viewer.AbstractViewer#updateActiveAnnotation() */ public void updateActiveAnnotation() { // stub } /** * Update menu item labels; here only the zoom menu is updated. * * @see mpi.eudico.client.annotator.viewer.AbstractViewer#updateLocale() */ public void updateLocale() { if (popup != null) { zoomMI.setText(ElanLocale.getString("TimeScaleBasedViewer.Zoom")); timeScaleConMI.setText(ElanLocale.getString( "TimeScaleBasedViewer.Connected")); } } /** * @see java.awt.event.ComponentListener#componentHidden(java.awt.event.ComponentEvent) */ public void componentHidden(ComponentEvent e) { // stub } /** * @see java.awt.event.ComponentListener#componentMoved(java.awt.event.ComponentEvent) */ public void componentMoved(ComponentEvent e) { // stub } /** * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent) */ public void componentResized(ComponentEvent e) { // stub } /** * @see java.awt.event.ComponentListener#componentShown(java.awt.event.ComponentEvent) */ public void componentShown(ComponentEvent e) { // stub } /** * Handle zoom menu events. * * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("connect")) { boolean connected = ((JCheckBoxMenuItem) e.getSource()).getState(); setTimeScaleConnected(connected); } else { /* the rest are zoom menu items*/ String zoomString = e.getActionCommand(); int zoom = 100; try { zoom = Integer.parseInt(zoomString); } catch (NumberFormatException nfe) { System.err.println("Error parsing the zoom level"); return; } float newMsPerPixel = ((100f / zoom) * 10); setMsPerPixel(newMsPerPixel); } } /** * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) */ public void mouseClicked(MouseEvent e) { if (SwingUtilities.isRightMouseButton(e) || e.isPopupTrigger()) { return; } setMediaTime(timeAt(e.getPoint().x)); } /** * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent) */ public void mouseEntered(MouseEvent e) { // stub } /** * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent) */ public void mouseExited(MouseEvent e) { // stub } /** * Handles the popmenu positioning. * * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent) */ public void mousePressed(MouseEvent e) { Point pp = e.getPoint(); // HS nov 04: e.isPopupTrigger always returns false on my PC... if (SwingUtilities.isRightMouseButton(e) || e.isPopupTrigger()) { if (popup == null) { createPopupMenu(); } updatePopup(pp); if ((popup.getWidth() == 0) || (popup.getHeight() == 0)) { popup.show(this, pp.x, pp.y); } else { popup.show(this, pp.x, pp.y); SwingUtilities.convertPointToScreen(pp, this); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); Window w = SwingUtilities.windowForComponent(this); if ((pp.x + popup.getWidth()) > d.width) { pp.x -= popup.getWidth(); } //this does not account for a desktop taskbar if ((pp.y + popup.getHeight()) > d.height) { pp.y -= popup.getHeight(); } //keep it in the window then if ((pp.y + popup.getHeight()) > (w.getLocationOnScreen().y + w.getHeight())) { pp.y -= popup.getHeight(); } popup.setLocation(pp); } return; } if (playerIsPlaying()) { stopPlayer(); } dragStartPoint = e.getPoint(); dragStartTime = timeAt(dragStartPoint.x); if (e.isAltDown() && pointInHorizontalRuler(dragStartPoint.y)) { dragStartTime = timeAt(dragStartPoint.x); panMode = true; setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); } else { panMode = false; /* just to be sure a running scroll thread can be stopped */ //stopScroll(); } } /** * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent) */ public void mouseReleased(MouseEvent e) { // changing the selection might have changed the intervalBeginTime if (timeScaleConnected) { setGlobalTimeScaleIntervalBeginTime(intervalBeginTime); setGlobalTimeScaleIntervalEndTime(intervalEndTime); } if (panMode) { panMode = false; setCursor(Cursor.getDefaultCursor()); } } /** * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent) */ public void mouseDragged(MouseEvent e) { if (SwingUtilities.isRightMouseButton(e)) { return; } dragEndPoint = e.getPoint(); if (panMode) { int scrolldiff = dragEndPoint.x - dragStartPoint.x; // some other viewer may have a media offset... long newTime = intervalBeginTime - (int) (scrolldiff * msPerPixel); if ((intervalBeginTime < 0) && (newTime < intervalBeginTime)) { newTime = intervalBeginTime; } setIntervalBeginTime(newTime); dragStartPoint = dragEndPoint; return; } // only the 'normal' drag-selection implemented here if (timeAt(dragEndPoint.x) > dragStartTime) { //left to right selectionEndTime = timeAt(dragEndPoint.x); if (selectionEndTime > getMediaDuration()) { selectionEndTime = getMediaDuration(); } selectionBeginTime = dragStartTime; if (selectionBeginTime < 0) { selectionBeginTime = 0L; } if (selectionEndTime < 0) { selectionEndTime = 0L; } setMediaTime(selectionEndTime); } else { //right to left selectionBeginTime = timeAt(dragEndPoint.x); if (selectionBeginTime > getMediaDuration()) { selectionBeginTime = getMediaDuration(); } selectionEndTime = dragStartTime; if (selectionEndTime > getMediaDuration()) { selectionEndTime = getMediaDuration(); } if (selectionBeginTime < 0) { selectionBeginTime = 0L; } if (selectionEndTime < 0) { selectionEndTime = 0L; } setMediaTime(selectionBeginTime); } setSelection(selectionBeginTime, selectionEndTime); updateSelection(); repaint(); } /** * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent) */ public void mouseMoved(MouseEvent e) { // stub } /** * The use of a mousewheel needs Java 1.4!<br> * Typically scroll vertically. * * @param e the event */ public void mouseWheelMoved(MouseWheelEvent e) { }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -