📄 viewporttime.java
字号:
/* * (C) 2001 by Argonne National Laboratory * See COPYRIGHT in top-level directory. *//* * @author Anthony Chan */package viewer.zoomable;import java.util.List;import java.util.ArrayList;import java.util.Iterator;import java.util.Stack;import java.net.URL;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import base.drawable.TimeBoundingBox;import viewer.common.Const;import viewer.common.CustomCursor;import viewer.common.Routines;import viewer.common.Parameters;public class ViewportTime extends JViewport implements TimeListener, ComponentListener, MouseInputListener, KeyListener// HierarchyBoundsListener{ private static final Color INFO_LINE_COLOR = Color.green; private static final Color INFO_AREA_COLOR = new Color(255,255, 0,64); private static final Color ZOOM_LINE_COLOR = Color.white; private static final Color ZOOM_AREA_COLOR = new Color(132,112,255,96); private static final Color FOCUS_LINE_COLOR = Color.red; private Point view_pt; // view_img is both a Component and ScrollableView object private ScrollableView view_img = null; private ModelTime time_model = null; private ToolBarStatus toolbar = null; private TimeBoundingBox vport_timebox = null; protected CoordPixelImage coord_xform = null; private TimeBoundingBox zoom_timebox = null; private TimeBoundingBox info_timebox = null; // info_dialogs list is used to keep track of all InfoDialog boxes. private List info_dialogs; private InfoDialogActionListener info_action_listener; private InfoDialogWindowListener info_window_listener; protected boolean isLeftMouseClick4Zoom; private JRadioButton zoom_btn; private JRadioButton hand_btn; public ViewportTime( final ModelTime in_model ) { time_model = in_model; view_pt = new Point( 0, 0 ); isLeftMouseClick4Zoom = false; // default to Scroll with left mouse zoom_btn = null; hand_btn = null; /* For resizing of the viewport => resizing of the ScrollableView */ addComponentListener( this ); /* HierarchyBoundsListener is for the case when this class is moved but NOT resized. That it checks for situation to reinitialize the size of ScrollableView when the scrollable image's size is reset for some obscure reason. However, defining getPreferredSize() of ScrollableView seems to make HierarchyBoundsListener of this class unnecessary. */ // addHierarchyBoundsListener( this ); // setDebugGraphicsOptions( DebugGraphics.LOG_OPTION ); vport_timebox = new TimeBoundingBox(); } public void setView( Component view ) { super.setView( view ); // Assume "view" has implemented the ComponentListener interface Dimension min_sz = view.getMinimumSize(); if ( min_sz != null ) setMinimumSize( min_sz ); Dimension max_sz = view.getMaximumSize(); if ( max_sz != null ) setMaximumSize( max_sz ); Dimension pref_sz = view.getPreferredSize(); if ( pref_sz != null ) setPreferredSize( pref_sz ); view_img = (ScrollableView) view; coord_xform = new CoordPixelImage( (ScrollableObject) view_img ); super.addMouseListener( this ); super.addMouseMotionListener( this ); super.addKeyListener( this ); info_dialogs = new ArrayList(); info_action_listener = new InfoDialogActionListener( this, info_dialogs ); info_window_listener = new InfoDialogWindowListener( this, info_dialogs ); } public void setToolBarStatus( ToolBarStatus in_toolbar ) { toolbar = in_toolbar; } // For Debugging Profiling public Dimension getMinimumSize() { Dimension min_sz = super.getMinimumSize(); if ( Debug.isActive() ) Debug.println( "ViewportTime: min_size = " + min_sz ); return min_sz; } // For Debugging Profiling public Dimension getMaximumSize() { Dimension max_sz = super.getMaximumSize(); if ( Debug.isActive() ) Debug.println( "ViewportTime: max_size = " + max_sz ); return max_sz; } // For Debugging Profiling public Dimension getPreferredSize() { Dimension pref_sz = super.getPreferredSize(); if ( Debug.isActive() ) Debug.println( "ViewportTime: pref_size = " + pref_sz ); return pref_sz; } protected void setYaxisViewPosition( int new_y_view_pos ) { view_pt.y = new_y_view_pos; } protected int getXaxisViewPosition() { return view_pt.x; } /* timeChanged() is invoked by ModelTime's fireTimeChanged(); Since ModelTime is the Model for the scroll_bar, timeChanged() will be called everytime when scroll_bar is moved/changed. */ public void timeChanged( TimeEvent evt ) { if ( Debug.isActive() ) { Debug.println( "ViewportTime: timeChanged()'s START: " ); Debug.println( "time_evt = " + evt ); } if ( view_img != null ) { // view_img.checkToXXXXView() assumes constant image size view_img.checkToZoomView(); view_img.checkToScrollView(); if ( Debug.isActive() ) Debug.println( "ViewportTime:timeChanged()'s view_img = " + view_img ); view_pt.x = view_img.getXaxisViewPosition(); super.setViewPosition( view_pt ); /* calling view.repaint() to ensure the view is repainted after setViewPosition is called. -- apparently, super.repaint(), the RepaintManager, has invoked ( (Component) view_img ).repaint(); -- JViewport.setViewPosition() may have invoked super.repaint() */ this.repaint(); } if ( Debug.isActive() ) { if ( view_img != null ) { Debug.println( "ViewportTime: " + "view_img.getXaxisViewPosition() = " + view_pt.x ); Debug.println( "ViewportTime: [after] getViewPosition() = " + super.getViewPosition() ); } Debug.println( "ViewportTime: timeChanged()'s END: " ); } } public void componentResized( ComponentEvent evt ) { if ( Debug.isActive() ) { Debug.println( "ViewportTime: componentResized()'s START: " ); Debug.println( "comp_evt = " + evt ); } if ( view_img != null ) { /* Instead of informing the view by ComponentEvent, i.e. doing addComponentListener( (ComponentListener) view ), ( (ComponentListener) view ).componentResized() is called directly here to ensure that view is resized before super.setViewPosition() is called on view. This is done to ensure the correct sequence of componentResized(). This also means the "view" does NOT need to implement ComponentListener interface. */ view_img.componentResized( this ); /* It is very IMPORTANT to do setPreferredSize() for JViewport with custom JComponent view. If PreferredSize is NOT set, the top-level container, JFrame, will have difficulty to compute the size final display window when calling Window.pack(). The consequence will be the initial view of JViewport has its getViewPosition() set to (0,0) in view coordinates during program starts up. Apparently, Window.pack() uses PreferredSize to compute window size. */ this.setPreferredSize( getSize() ); if ( Debug.isActive() ) Debug.println( "ViewportTime: componentResized()'s view_img = " + view_img ); view_pt.x = view_img.getXaxisViewPosition(); super.setViewPosition( view_pt ); /* calling view.repaint() to ensure the view is repainted after setViewPosition is called. -- apparently, this.repaint(), the RepaintManager, has invoked ( (Component) view_img ).repaint(); -- JViewport.setViewPosition() may have invoked super.repaint() */ this.repaint(); } if ( Debug.isActive() ) { if ( view_img != null ) { Debug.println( "ViewportTime: " + "view_img.getXaxisViewPosition() = " + view_pt.x ); Debug.println( "ViewportTime: [after] getViewPosition() = " + super.getViewPosition() ); } Debug.println( "ViewportTime: componentResized()'s END: " ); } } public void componentMoved( ComponentEvent evt ) { if ( Debug.isActive() ) { Debug.println( "ViewportTime: componentMoved()'s START: " ); Debug.println( "comp_evt = " + evt ); Debug.println( "ViewportTime: componentMoved()'s END: " ); } } public void componentHidden( ComponentEvent evt ) { if ( Debug.isActive() ) { Debug.println( "ViewportTime: componentHidden()'s START: " ); Debug.println( "comp_evt = " + evt ); Debug.println( "ViewportTime: componentHidden()'s END: " ); } } public void componentShown( ComponentEvent evt ) { if ( Debug.isActive() ) { Debug.println( "ViewportTime: componentShown()'s START: " ); Debug.println( "comp_evt = " + evt ); Debug.println( "ViewportTime: componentShown()'s END: " ); } } private void drawShadyTimeBoundingBox( Graphics g, final TimeBoundingBox timebox, Color line_color, Color area_color ) { double line_time; int x1_pos, x2_pos; if ( vport_timebox.overlaps( timebox ) ) { line_time = timebox.getEarliestTime(); if ( coord_xform.contains( line_time ) ) { x1_pos = coord_xform.convertTimeToPixel( line_time ); g.setColor( line_color ); g.drawLine( x1_pos, 0, x1_pos, this.getHeight() ); } else x1_pos = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -