org.faceless.pdf2.viewer2

## Class DualPageDocumentViewport

- java.lang.Object
- - java.awt.Component
  - - java.awt.Container
    - - javax.swing.JComponent
      - - javax.swing.JPanel
        - - org.faceless.pdf2.viewer2.DocumentViewport
          - - org.faceless.pdf2.viewer2.DualPageDocumentViewport

- All Implemented Interfaces:
    ImageObserver, MenuContainer, PropertyChangeListener, Serializable, EventListener, Accessible

      public class DualPageDocumentViewport
      extends DocumentViewport

  A `DocumentViewport` that displays two pages at a time.

  This code is copyright the Big Faceless Organization. You're welcome to use, modify and distribute it in any form in your own projects, provided those projects continue to make use of the Big Faceless PDF library.

  Since:
    2.13
  See Also:
    `DocumentPanel`, Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class javax.swing.JPanel

      `JPanel.AccessibleJPanel`

    - ### Nested classes/interfaces inherited from class javax.swing.JComponent

      `JComponent.AccessibleJComponent`

    - ### Nested classes/interfaces inherited from class java.awt.Container

      `Container.AccessibleAWTContainer`

    - ### Nested classes/interfaces inherited from class java.awt.Component

      `Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `ODD_PAGES_ON_LEFT` Constant indicating that odd numbered pages should be shown on the left hand side.
    `static int` | `ODD_PAGES_ON_RIGHT` Constant indicating that odd numbered pages should be shown on the right hand side.

    - ### Fields inherited from class org.faceless.pdf2.viewer2.DocumentViewport

      `CURSOR_GRAB, CURSOR_GRABBING, interpagemargin, margin, mouseWheelUnit, ZOOM_FIT, ZOOM_FITHEIGHT, ZOOM_FITWIDTH, ZOOM_NONE`

    - ### Fields inherited from class javax.swing.JComponent

      `listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW`

    - ### Fields inherited from class java.awt.Component

      `accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

    - ### Fields inherited from interface java.awt.image.ImageObserver

      `ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DualPageDocumentViewport()` Constructs a new DualPageDocumentViewport that shows odd numbered pages on the right hand side.
    `DualPageDocumentViewport(int handedness)` Constructs a new DualPageDocumentViewport that shows odd numbered pages on the specified side.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addPagePanelInteractionListener(PagePanelInteractionListener listener)` Add a `PagePanelInteractionListener` to any `PagePanel` objects that have been or will be created by this DocumentViewport
    `void` | `addPagePanelListener(PagePanelListener listener)` Add a `PagePanelListener` to any `PagePanel` objects that have been or will be created by this DocumentViewport
    `void` | `ensureVisible(PDFPage page, double x, double y)` Ensure the specified point on the page is visible.
    `Adjustable` | `getAdjustable(int position)` Return the "Adjustable" object for the specified position - typically this is the horizontal or vertical `JScrollBar`, although this method may return `null` or accept other parameters.
    `int` | `getHandedness()`
    `int` | `getNextSelectablePageIndex(PDFPage page)` Return the index of the page that should be displayed when the specified page is selected in this viewport and the "next page" is requested, via a button or other action.
    `PDFPage` | `getPage()` Return the PDFPage in use by `DocumentViewport.getPagePanel()`
    `PagePanel` | `getPagePanel()` Get the currently displayed PagePanel.
    `Collection<PagePanel>` | `getPagePanels()` Returns a read only Collection containing all the PagePanels currently displayed in this Viewport.
    `int` | `getPreviousSelectablePageIndex(PDFPage page)` Return the index of the page that should be displayed when the specified page is selected in this viewport and the "previous page" is requested, via a button or other action.
    `PDFPage` | `getRenderingPage()` Return the page that is currently in the process of rendering.
    `float` | `getTargetZoom(int zoommode, PDFPage page)` Return the appropriate zoom level when switching to the specified page.
    `JComponent` | `getView()` Get the JComponent that directly contains the PagePanel objects, not including scrollbars or other similar items.
    `Dimension` | `getViewportSize()` Return the size in pixels of the space available to display pages in this viewport, not including scrollbars or other decoration
    `float` | `getZoom()` Get the current zoom level
    `boolean` | `isDraggable()` Indicates whether the contents of this viewport can be dragged with the mouse to position them.
    `boolean` | `isPageVisible(PDFPage page, double x, double y)` Indicates whether the specified point in the specified page is visible in the viewport.
    `void` | `propertyChange(PropertyChangeEvent event)` The viewport implements PropertyChangeListener, and will be called whenever the PDF has been updated.
    `void` | `removePagePanelInteractionListener(PagePanelInteractionListener listener)` Remove a `PagePanelInteractionListener` from any `PagePanel` objects that have been created by this DocumentViewport
    `void` | `removePagePanelListener(PagePanelListener listener)` Remove a `PagePanelListener` from any `PagePanel` objects that have been created by this DocumentViewport
    `void` | `setAdjustableValues(int horizontal, int vertical)` Set the values of the adjustables returned by `DocumentViewport.getAdjustable(int)`.
    `void` | `setDocumentPanel(DocumentPanel panel)` Set the DocumentPanel that contains this DocumentViewport.
    `void` | `setDraggable(boolean draggable)` Sets whether to allow the contents of this viewport to be dragged with the mouse.
    `void` | `setHandedness(int handedness)`
    `void` | `setPage(PDFPage page, double x, double y, double zoom)` Set the currently displayed page.
    `void` | `setRenderingHints(RenderingHints hints)` Set the `RenderingHints` that should be used when rendering the pages
    `void` | `setZoom(float zoom)` Set the zoom level of this DocumentViewport.
    `void` | `setZoomMode(int zoommode)` Control how the document in the viewport is redrawn when the Viewport is resized.

    - ### Methods inherited from class org.faceless.pdf2.viewer2.DocumentViewport

      `getBorderColor, getDefaultRenderingHints, getDocumentPanel, getShadowColor, getZoomMode, isSmoothScrolling, paintPageBorder, smoothScroll`

    - ### Methods inherited from class javax.swing.JPanel

      `getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI`

    - ### Methods inherited from class javax.swing.JComponent

      `addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update`

    - ### Methods inherited from class java.awt.Container

      `add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree`

    - ### Methods inherited from class java.awt.Component

      `action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### ODD_PAGES_ON_RIGHT

          public static final int ODD_PAGES_ON_RIGHT

      Constant indicating that odd numbered pages should be shown on the right hand side.
      See Also:
        Constant Field Values

    - #### ODD_PAGES_ON_LEFT

          public static final int ODD_PAGES_ON_LEFT

      Constant indicating that odd numbered pages should be shown on the left hand side.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### DualPageDocumentViewport

          public DualPageDocumentViewport()

      Constructs a new DualPageDocumentViewport that shows odd numbered pages on the right hand side.

    - #### DualPageDocumentViewport

          public DualPageDocumentViewport(int handedness)

      Constructs a new DualPageDocumentViewport that shows odd numbered pages on the specified side.
      Parameters:
        `handedness` - ODD_PAGES_ON_RIGHT or ODD_PAGES_ON_LEFT

  - ### Method Detail

    - #### getHandedness

          public int getHandedness()

    - #### setHandedness

          public void setHandedness(int handedness)

    - #### setDocumentPanel

          public void setDocumentPanel(DocumentPanel panel)

      Description copied from class: `DocumentViewport`
      Set the DocumentPanel that contains this DocumentViewport. If overriding this method you must first call `super.setDocumentPanel(panel)`
      Overrides:
        `setDocumentPanel` in class `DocumentViewport`

    - #### isDraggable

          public boolean isDraggable()

      Description copied from class: `DocumentViewport`
      Indicates whether the contents of this viewport can be dragged with the mouse to position them.
      Specified by:
        `isDraggable` in class `DocumentViewport`

    - #### setDraggable

          public void setDraggable(boolean draggable)

      Description copied from class: `DocumentViewport`
      Sets whether to allow the contents of this viewport to be dragged with the mouse.
      Specified by:
        `setDraggable` in class `DocumentViewport`
      Parameters:
        `draggable` - if true, contents may be dragged

    - #### getPage

          public PDFPage getPage()

      Description copied from class: `DocumentViewport`
      Return the PDFPage in use by `DocumentViewport.getPagePanel()`
      Overrides:
        `getPage` in class `DocumentViewport`

    - #### setPage

          public void setPage(PDFPage page,
                              double x,
                              double y,
                              double zoom)

      Description copied from class: `DocumentViewport`
      Set the currently displayed page. The exact implementation of this depends on the type of viewport, but the idea is that the specified page and position becomes the primary focus of this viewport.
      Specified by:
        `setPage` in class `DocumentViewport`
      Parameters:
        `page` - the page to display
        `x` - the left-most X position of the page, relative to `PagePanel.getFullPageView(org.faceless.pdf2.PDFPage)`. A value of NaN means keep the current value. 0 means the left edge
        `y` - the top-most Y position of the page, relative to `PagePanel.getFullPageView(org.faceless.pdf2.PDFPage)`. A value of NaN means keep the current value. 0 means the top edge
        `zoom` - the zoom level. A value of <= 0 or NaN means keep the current zoom. A value of one means 72dpi

    - #### ensureVisible

          public void ensureVisible(PDFPage page,
                                    double x,
                                    double y)

      Description copied from class: `DocumentViewport`
      Ensure the specified point on the page is visible. The zoom level of the page is not changed, but the page itself may be changed or repositioned to ensure the specified point is visible in the centre area.
      Overrides:
        `ensureVisible` in class `DocumentViewport`
        `x` - the X position of the page in absolute PDF points (ie measured from the bottom left)
        `y` - the Y position of the page in absolute PDF points (ie measured from the bottom left)

    - #### getNextSelectablePageIndex

          public int getNextSelectablePageIndex(PDFPage page)

      Description copied from class: `DocumentViewport`
      Return the index of the page that should be displayed when the specified page is selected in this viewport and the "next page" is requested, via a button or other action. By default this is just the next page in the PDF
      Overrides:
        `getNextSelectablePageIndex` in class `DocumentViewport`
      Returns:
        the index of the next page to display, or -1 if no such page exists.

    - #### getPreviousSelectablePageIndex

          public int getPreviousSelectablePageIndex(PDFPage page)

      Description copied from class: `DocumentViewport`
      Return the index of the page that should be displayed when the specified page is selected in this viewport and the "previous page" is requested, via a button or other action. By default this is just the previous page in the PDF
      Overrides:
        `getPreviousSelectablePageIndex` in class `DocumentViewport`
      Returns:
        the index of the previous page to display, or -1 if no such page exists.

    - #### isPageVisible

          public boolean isPageVisible(PDFPage page,
                                       double x,
                                       double y)

      Description copied from class: `DocumentViewport`
      Indicates whether the specified point in the specified page is visible in the viewport. If `x` or `y` is `NaN`, indicates whether any part of the page is visible.
      Overrides:
        `isPageVisible` in class `DocumentViewport`
        `x` - the X position of the page in points
        `y` - the Y position of the page in points

    - #### getView

          public JComponent getView()

      Description copied from class: `DocumentViewport`
      Get the JComponent that directly contains the PagePanel objects, not including scrollbars or other similar items.
      Specified by:
        `getView` in class `DocumentViewport`

    - #### getZoom

          public float getZoom()

      Description copied from class: `DocumentViewport`
      Get the current zoom level
      Specified by:
        `getZoom` in class `DocumentViewport`

    - #### setZoom

          public void setZoom(float zoom)

      Description copied from class: `DocumentViewport`
      Set the zoom level of this DocumentViewport. The page and position should remain unchanged if possible.
      Specified by:
        `setZoom` in class `DocumentViewport`

    - #### getViewportSize

          public Dimension getViewportSize()

      Description copied from class: `DocumentViewport`
      Return the size in pixels of the space available to display pages in this viewport, not including scrollbars or other decoration
      Specified by:
        `getViewportSize` in class `DocumentViewport`

    - #### getPagePanel

          public PagePanel getPagePanel()

      Description copied from class: `DocumentViewport`
      Get the currently displayed PagePanel. As for `setPage()`, the exact implementation of this method depends on the type of viewport, but the idea is it returns the PagePanel that is the primary focus of this viewport.
      Specified by:
        `getPagePanel` in class `DocumentViewport`

    - #### getPagePanels

          public Collection<PagePanel> getPagePanels()

      Description copied from class: `DocumentViewport`
      Returns a read only Collection containing all the PagePanels currently displayed in this Viewport.
      Overrides:
        `getPagePanels` in class `DocumentViewport`

    - #### getRenderingPage

          public PDFPage getRenderingPage()

      Description copied from class: `DocumentViewport`
      Return the page that is currently in the process of rendering. If the page has rendered this method returns the same as `DocumentViewport.getPage()`
      Specified by:
        `getRenderingPage` in class `DocumentViewport`

    - #### getAdjustable

          public Adjustable getAdjustable(int position)

      Description copied from class: `DocumentViewport`
      Return the "Adjustable" object for the specified position - typically this is the horizontal or vertical `JScrollBar`, although this method may return `null` or accept other parameters. The adjustable is measured in AWT space (pixels from the top left). This method may return null if there is no adjustable.
      Specified by:
        `getAdjustable` in class `DocumentViewport`
      Parameters:
        `position` - one of `Adjustable.HORIZONTAL` or `Adjustable.VERTICAL`

    - #### setAdjustableValues

          public void setAdjustableValues(int horizontal,
                                          int vertical)

      Description copied from class: `DocumentViewport`
      Set the values of the adjustables returned by `DocumentViewport.getAdjustable(int)`. Calling this method is preferable to setting the values of each adjustable individually when both are to be set
      Specified by:
        `setAdjustableValues` in class `DocumentViewport`
      Parameters:
        `horizontal` - the value for the `Adjustable.HORIZONTAL` adjustable.
        `vertical` - the value for the `Adjustable.VERTICAL` adjustable.

    - #### setRenderingHints

          public void setRenderingHints(RenderingHints hints)

      Description copied from class: `DocumentViewport`
      Set the `RenderingHints` that should be used when rendering the pages
      Specified by:
        `setRenderingHints` in class `DocumentViewport`

    - #### addPagePanelListener

          public void addPagePanelListener(PagePanelListener listener)

      Description copied from class: `DocumentViewport`
      Add a `PagePanelListener` to any `PagePanel` objects that have been or will be created by this DocumentViewport
      Specified by:
        `addPagePanelListener` in class `DocumentViewport`
      Parameters:
        `listener` - the listener

    - #### removePagePanelListener

          public void removePagePanelListener(PagePanelListener listener)

      Description copied from class: `DocumentViewport`
      Remove a `PagePanelListener` from any `PagePanel` objects that have been created by this DocumentViewport
      Specified by:
        `removePagePanelListener` in class `DocumentViewport`
      Parameters:
        `listener` - the listener

    - #### addPagePanelInteractionListener

          public void addPagePanelInteractionListener(PagePanelInteractionListener listener)

      Description copied from class: `DocumentViewport`
      Add a `PagePanelInteractionListener` to any `PagePanel` objects that have been or will be created by this DocumentViewport
      Specified by:
        `addPagePanelInteractionListener` in class `DocumentViewport`
      Parameters:
        `listener` - the listener

    - #### removePagePanelInteractionListener

          public void removePagePanelInteractionListener(PagePanelInteractionListener listener)

      Description copied from class: `DocumentViewport`
      Remove a `PagePanelInteractionListener` from any `PagePanel` objects that have been created by this DocumentViewport
      Specified by:
        `removePagePanelInteractionListener` in class `DocumentViewport`
      Parameters:
        `listener` - the listener

    - #### setZoomMode

          public void setZoomMode(int zoommode)

      Description copied from class: `DocumentViewport`
      Control how the document in the viewport is redrawn when the Viewport is resized. The default is `DocumentViewport.ZOOM_NONE`, which means no action is performed, but other actions include `DocumentViewport.ZOOM_FIT`, `DocumentViewport.ZOOM_FITWIDTH` and `DocumentViewport.ZOOM_FITHEIGHT`, which will ensure that the document is always zoomed to fit completely, fit the width or fit the height of the viewport respectively
      Overrides:
        `setZoomMode` in class `DocumentViewport`

    - #### getTargetZoom

          public float getTargetZoom(int zoommode,
                                     PDFPage page)

      Description copied from class: `DocumentViewport`
      Return the appropriate zoom level when switching to the specified page. If the value of `zoommode` is `DocumentViewport.ZOOM_NONE` then this just returns the value of `DocumentViewport.getZoom()`, otherwise the returned zoom level will correctly fit the page to the Viewport.
      Overrides:
        `getTargetZoom` in class `DocumentViewport`
        `page` - the PDFPage that we are calculating the zoom for.
      See Also:
        `DocumentViewport.getZoomMode()`

    - #### propertyChange

          public void propertyChange(PropertyChangeEvent event)

      Description copied from class: `DocumentViewport`
      The viewport implements PropertyChangeListener, and will be called whenever the PDF has been updated. By default it's a no-op.
      Specified by:
        `propertyChange` in interface `PropertyChangeListener`
      Overrides:
        `propertyChange` in class `DocumentViewport`

Copyright © 2001-2015 Big Faceless Organization