📄 viewporttime.java
字号:
toolbar.resetZoomButtons(); } else this.repaint(); } } super.requestFocus(); } /* mouse_press_time is a temporary variable among mousePressed(), mouseDragged() & mouseReleased() */ private double mouse_pressed_time; private int mouse_pressed_Xloc; private int mouse_last_Xloc; private boolean hasControlKeyBeenPressed = false; public void mousePressed( MouseEvent mouse_evt ) { Point vport_click; double click_time; // Ignore all mouse events when Control or Escape key is pressed if ( mouse_evt.isControlDown() ) { hasControlKeyBeenPressed = true; return; } vport_timebox.setEarliestTime( time_model.getTimeViewPosition() ); vport_timebox.setLatestFromEarliest( time_model.getTimeViewExtent() ); coord_xform.resetTimeBounds( vport_timebox ); vport_click = mouse_evt.getPoint(); click_time = coord_xform.convertPixelToTime( vport_click.x ); if ( SwingUtilities.isLeftMouseButton( mouse_evt ) ) { if ( isLeftMouseClick4Zoom ) { // Zoom Mode zoom_timebox = new TimeBoundingBox(); zoom_timebox.setZeroDuration( click_time ); this.repaint(); super.setCursor( CustomCursor.ZoomPlus ); } else // Hand Mode super.setCursor( CustomCursor.HandClose ); } else if ( SwingUtilities.isRightMouseButton( mouse_evt ) ) { info_timebox = new TimeBoundingBox(); info_timebox.setZeroDuration( click_time ); this.repaint(); } mouse_pressed_time = click_time; mouse_pressed_Xloc = vport_click.x; mouse_last_Xloc = vport_click.x; } public void mouseDragged( MouseEvent mouse_evt ) { Point vport_click; double click_time; double focus_time; // Ignore all mouse events when Control key is pressed if ( mouse_evt.isControlDown() || hasControlKeyBeenPressed ) { hasControlKeyBeenPressed = true; return; } if ( mouse_evt.isShiftDown() ) if ( super.getCursor() == CustomCursor.ZoomMinus ) super.setCursor( CustomCursor.ZoomPlus ); vport_click = mouse_evt.getPoint(); click_time = coord_xform.convertPixelToTime( vport_click.x ); if ( SwingUtilities.isLeftMouseButton( mouse_evt ) ) { if ( isLeftMouseClick4Zoom ) { // Zoom Mode if ( zoom_timebox != null ) { // i.e., Zoom has NOT been cancelled yet if ( click_time > mouse_pressed_time ) zoom_timebox.setLatestTime( click_time ); else zoom_timebox.setEarliestTime( click_time ); this.repaint(); // super.setCursor( CustomCursor.ZoomPlus ); } } else { // Hand Mode if ( vport_click.x != mouse_last_Xloc ) { time_model.scroll( mouse_last_Xloc - vport_click.x ); mouse_last_Xloc = vport_click.x; super.setCursor( CustomCursor.HandClose ); } } } else if ( SwingUtilities.isRightMouseButton( mouse_evt ) ) { if ( click_time > mouse_pressed_time ) info_timebox.setLatestTime( click_time ); else info_timebox.setEarliestTime( click_time ); this.repaint(); } } public void mouseReleased( MouseEvent mouse_evt ) { ScrollableObject scrollable; InfoDialog info_popup; Window window; Point vport_click, view_click, global_click; double click_time, focus_time; // Ignore all mouse events when Control key is pressed if ( mouse_evt.isControlDown() || hasControlKeyBeenPressed ) { hasControlKeyBeenPressed = false; return; } vport_click = mouse_evt.getPoint(); click_time = coord_xform.convertPixelToTime( vport_click.x ); if ( SwingUtilities.isLeftMouseButton( mouse_evt ) ) { if ( isLeftMouseClick4Zoom ) { // Zoom Mode if ( zoom_timebox != null ) { // i.e., Zoom has NOT been cancelled yet if ( click_time > mouse_pressed_time ) zoom_timebox.setLatestTime( click_time ); else zoom_timebox.setEarliestTime( click_time ); this.repaint(); // if ( zoom_timebox.getDuration() > 0.0d ) { if ( Math.abs(vport_click.x - mouse_pressed_Xloc) >= Parameters.MIN_WIDTH_TO_DRAG ) { time_model.zoomRapidly( zoom_timebox.getEarliestTime(), zoom_timebox.getDuration() ); focus_time = ( zoom_timebox.getEarliestTime() + zoom_timebox.getLatestTime() ) / 2.0d; time_model.setTimeZoomFocus( focus_time ); } zoom_timebox = null; this.repaint(); super.setCursor( CustomCursor.ZoomPlus ); if ( toolbar != null ) toolbar.resetZoomButtons(); } } else { // Hand Mode if ( vport_click.x != mouse_last_Xloc ) { time_model.scroll( mouse_last_Xloc - vport_click.x ); mouse_last_Xloc = vport_click.x; } super.setCursor( CustomCursor.HandOpen ); } } else if ( SwingUtilities.isRightMouseButton( mouse_evt ) ) { if ( click_time > mouse_pressed_time ) info_timebox.setLatestTime( click_time ); else info_timebox.setEarliestTime( click_time ); scrollable = (ScrollableObject) view_img; // if ( info_timebox.getDuration() > 0.0d ) { if ( Math.abs(vport_click.x - mouse_pressed_Xloc) >= Parameters.MIN_WIDTH_TO_DRAG ) { window = SwingUtilities.windowForComponent( this ); if ( window instanceof Frame ) info_popup = new InfoDialogForDuration( (Frame) window, info_timebox, scrollable ); else // if ( window instanceof Dialog ) info_popup = new InfoDialogForDuration( (Dialog) window, info_timebox, scrollable ); } else { view_click = SwingUtilities.convertPoint( this, vport_click, scrollable ); info_popup = scrollable.getPropertyAt( view_click, vport_timebox ); } global_click = new Point( vport_click ); SwingUtilities.convertPointToScreen( global_click, this ); info_popup.setVisibleAtLocation( global_click ); info_popup.getCloseButton().addActionListener( info_action_listener ); info_popup.addWindowListener( info_window_listener ); info_dialogs.add( info_popup ); info_timebox = null; // remove to avoid redundant drawing this.repaint(); } } /* Interface to fulfill KeyListener() */ public void keyTyped( KeyEvent evt ) {} public void keyReleased( KeyEvent evt ) { if ( evt.getKeyCode() == KeyEvent.VK_SHIFT ) { if ( super.getCursor() == CustomCursor.ZoomMinus ) super.setCursor( CustomCursor.ZoomPlus ); } } public void keyPressed( KeyEvent evt ) { if ( evt.getKeyCode() == KeyEvent.VK_SHIFT ) { if ( super.getCursor() == CustomCursor.ZoomPlus ) super.setCursor( CustomCursor.ZoomMinus ); } else if ( evt.getKeyCode() == KeyEvent.VK_ESCAPE ) { if ( zoom_timebox != null ) { zoom_timebox = null; this.repaint(); } } } public void resetToolBarZoomButtons() { if ( toolbar != null ) toolbar.resetZoomButtons(); } protected InfoDialog getLastInfoDialog() { int info_dialogs_size = info_dialogs.size(); if ( info_dialogs_size > 0 ) return (InfoDialog) info_dialogs.get( info_dialogs_size - 1 ); else return null; } private class InfoDialogActionListener implements ActionListener { private ViewportTime viewport; private List info_dialogs; public InfoDialogActionListener( ViewportTime vport, List dialogs ) { viewport = vport; info_dialogs = dialogs; } public void actionPerformed( ActionEvent evt ) { InfoDialog info_popup; Object evt_src = evt.getSource(); Iterator itr = info_dialogs.iterator(); while ( itr.hasNext() ) { info_popup = (InfoDialog) itr.next(); if ( evt_src == info_popup.getCloseButton() ) { info_dialogs.remove( info_popup ); info_popup.dispose(); viewport.repaint(); break; } } } } // InfoDialogActionListener private class InfoDialogWindowListener extends WindowAdapter { private ViewportTime viewport; private List info_dialogs; public InfoDialogWindowListener( ViewportTime vport, List dialogs ) { viewport = vport; info_dialogs = dialogs; } public void windowClosing( WindowEvent evt ) { InfoDialog info_popup; Object evt_src = evt.getSource(); Iterator itr = info_dialogs.iterator(); while ( itr.hasNext() ) { info_popup = (InfoDialog) itr.next(); if ( evt_src == info_popup ) { info_dialogs.remove( info_popup ); info_popup.dispose(); viewport.repaint(); break; } } } } // Class InfoDialogWindowListener}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -