001    package controller;
002    
003    import java.awt.*;
004    
005    /**
006     * Adapter to connect the display and the model.
007     *
008     * @author Mathias Ricken
009     */
010    public interface IDisplayAdapter {
011        /**
012         * Draw model in this region. The graphics object has been set up so that (0,0) represents the top left and
013         * (100,100) the bottom right corner.
014         *
015         * @param g    graphics object
016         * @param comp the component to drawFish on
017         * @param p1   top left edge of the region
018         * @param p2   bottom right edge of the region
019         */
020        void draw(Graphics2D g, Component comp, Point.Double p1, Point.Double p2);
021    
022        /**
023         * Get size of the display.
024         *
025         * @return size of the display in model coordinate units.
026         */
027        Dimension getDisplaySize();
028    
029        /**
030         * The action to be executed if the display should return home.
031         *
032         * @param sa scroll adapter
033         */
034        void returnHome(IScrollAdapter sa);
035    
036        /**
037         * Ask the model where to scroll, given where the user has scrolled. If the environment just acts like a normal
038         * panal, it should return pos without modification. If the environment recenters, it should return a position in
039         * the middle of the pan area. All coordinates are in model coordinate units.
040         *
041         * @param pos position where the user scrolled to
042         *
043         * @return position where the environment wants the view to be
044         *
045         * @see IDisplayAdapter#getPanDelta
046         */
047        Point.Double getViewPosition(Point.Double pos);
048    
049        /**
050         * Ask the model how much to pan, given where the user scrolled. If the environment just acts like a normal panal,
051         * it should return (0,0). If the environment recenters, it should return delta without modification. All
052         * coordinates are in model coordinate units.
053         *
054         * @param delta how far the user scrolled
055         *
056         * @return how far the panel should scroll
057         *
058         * @see IDisplayAdapter#getViewPosition
059         */
060        Point.Double getPanDelta(Point.Double delta);
061    }