Class ImageViewerDialog
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.JPanel
-
- org.openstreetmap.josm.gui.dialogs.ToggleDialog
-
- org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog
-
- All Implemented Interfaces:
java.awt.event.AWTEventListener,java.awt.image.ImageObserver,java.awt.MenuContainer,java.io.Serializable,java.util.EventListener,javax.accessibility.Accessible,Helpful,LayerManager.LayerChangeListener,MainLayerManager.ActiveLayerChangeListener,ShowHideButtonListener,PreferenceChangedListener,Destroyable
public final class ImageViewerDialog extends ToggleDialog implements LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener
Dialog to view and manipulate geo-tagged images from aGeoImageLayer.- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classImageViewerDialog.CloseableTabA tab title renderer forHideableTabbedPanethat allows us to close tabs.private classImageViewerDialog.ImageActionprivate classImageViewerDialog.ImageCenterViewActionprivate classImageViewerDialog.ImageCollapseActionprivate classImageViewerDialog.ImageCopyPathActionprivate classImageViewerDialog.ImageExtendedInfoActionprivate classImageViewerDialog.ImageFirstActionprivate classImageViewerDialog.ImageLastActionprivate classImageViewerDialog.ImageNextActionprivate classImageViewerDialog.ImageOpenExternalActionprivate classImageViewerDialog.ImagePreviousActionprivate classImageViewerDialog.ImageRememberActionThis class exists to remember the last entry, and go back if clicked again when it would not otherwise be enabledprivate classImageViewerDialog.ImageRemoveActionprivate classImageViewerDialog.ImageRemoveFromDiskActionprivate classImageViewerDialog.ImageZoomActionprivate static classImageViewerDialog.MoveImgDisplayPanel<T extends Layer & IGeoImageLayer>A JPanel whose entire purpose is to display an image by (a) moving the imgDisplay around and (b) setting the imgDisplay as a child for this panel.private static interfaceImageViewerDialog.SerializableUnaryOperator<I>This literally exists to silence sonarlint complaints.-
Nested classes/interfaces inherited from class org.openstreetmap.josm.gui.dialogs.ToggleDialog
ToggleDialog.ButtonHidingType, ToggleDialog.TitleBar, ToggleDialog.ToggleDialogAction
-
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
-
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
-
-
Field Summary
-
Fields inherited from class org.openstreetmap.josm.gui.dialogs.ToggleDialog
button, buttonHiding, detachedDialog, dialogsPanel, isCollapsed, isDocked, isShowing, name, preferenceClass, preferencePrefix, PROP_DYNAMIC_BUTTONS, titleBar, toggleAction, windowMenuItem
-
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
-
-
Constructor Summary
Constructors Modifier Constructor Description privateImageViewerDialog()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidactiveOrEditLayerChanged(MainLayerManager.ActiveLayerChangeEvent e)Called whenever the active or edit layer changed.private static voidaddButtonGroup(javax.swing.JPanel buttonPanel, javax.swing.AbstractButton... buttons)Add a button group to a panelprivate voidaddButtonsForImageLayers()Add the buttons for image layersprivate voidbuild()private voidcancelLoadingImage()private static javax.swing.JButtoncreateButton(javax.swing.AbstractAction action, java.awt.Dimension buttonDim)(package private) static voidcreateInstance()private static javax.swing.JButtoncreateNavigationButton(javax.swing.AbstractAction action, java.awt.Dimension buttonDim)voiddestroy()Called when the object has been destroyed.private static voiddestroyInstance()Destroy the current dialogvoiddisplayImage(ImageData ignoredData, ImageEntry entry)Displays a single image for the given layer.voiddisplayImage(IImageEntry<?> entry)Displays a single image for the given layer.voiddisplayImages(java.util.List<? extends IImageEntry<?>> entries)Displays images for the given layer.protected booleandockWhenClosingDetachedDlg()When an image is closed, really close it and do not pop up the side dialog.static IImageEntry<?>getCurrentImage()Returns the currently displayed image.private java.util.stream.Stream<ImageViewerDialog.MoveImgDisplayPanel<?>>getImageTabs()Get theImageViewerDialog.MoveImgDisplayPanelobjects inlayers.static ImageViewerDialoggetInstance()Replies the unique instance of this dialogVector3DgetRotation(IImageEntry<?> entry)Returns the rotation of the currently displayed image.booleanhasImage()Returns whether an image is currently displayedstatic booleanhasInstance()Check if there is an instance for theImageViewerDialogstatic booleanisCenterView()Returns whether the center view is currently active.private static booleanisFirstImageSelected(java.util.List<? extends IImageEntry<?>> data)private static booleanisLastImageSelected(java.util.List<? extends IImageEntry<?>> data)voidlayerAdded(LayerManager.LayerAddEvent e)Notifies this listener that a layer has been added.voidlayerOrderChanged(LayerManager.LayerOrderChangeEvent e)Notifies this listener that the order of layers was changed.voidlayerRemoving(LayerManager.LayerRemoveEvent e)Notifies this listener that a layer was just removed.voidrefresh()Reload the image.voidrefresh(boolean imageChanged)Reload the image or reload only the image info.private voidregisterOnLayer(Layer layer)private voidremoveImageTab(Layer layer)Remove a tab for a layer from thelayerstab panestatic booleansetCentreEnabled(boolean value)Enables (or disables) the "Center view" button.voidsetNextEnabled(boolean value)Enables (or disables) the "Next" button.voidsetPreviousEnabled(boolean value)Enables (or disables) the "Previous" button.private voidshowLayer(Layer newLayer)voidshowNotify()Called when toggle dialog is shown (after it was created or expanded).protected voidstateChanged()primitive stateChangedListener for subclassesprivate voidupdateButtonsNonNullEntry(IImageEntry<?> entry, boolean imageChanged)Update the image viewer buttons for the new entryprivate voidupdateButtonsNullEntry(java.util.List<? extends IImageEntry<?>> entries)Update buttons for null entryprivate voidupdateLayers(boolean changed)Update the tabs for the different image layersprivate voidupdateTitle()-
Methods inherited from class org.openstreetmap.josm.gui.dialogs.ToggleDialog
buttonHidden, buttonShown, clearButtonActions, closeDetachedDialog, collapse, createLayout, createLayout, detach, dock, eventDispatched, expand, getButton, getDefaultDetachedSize, getLastHeight, getName, getPreferencePrefix, getPreferredHeight, getToggleAction, helpTopic, hideDialog, hideNotify, isDialogInCollapsedView, isDialogInDefaultView, isDialogShowing, preferenceChanged, registerInWindowMenu, rememberHeight, setButton, setContentVisible, setDialogsPanel, setIsButtonHiding, setIsCollapsed, setIsDocked, setIsShowing, setTitle, showDialog, toggleButtonHook, toString, unfurlDialog
-
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, getParent, 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, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, transferFocus, transferFocusBackward, transferFocusUpCycle
-
-
-
-
Field Detail
-
GEOIMAGE_FILLER
private static final java.lang.String GEOIMAGE_FILLER
-
DIALOG_FOLDER
private static final java.lang.String DIALOG_FOLDER
- See Also:
- Constant Field Values
-
imageryFilterSettings
private final ImageryFilterSettings imageryFilterSettings
-
imageZoomAction
private final ImageViewerDialog.ImageZoomAction imageZoomAction
-
imageCenterViewAction
private final ImageViewerDialog.ImageCenterViewAction imageCenterViewAction
-
imageExtendedInfoAction
private final ImageViewerDialog.ImageExtendedInfoAction imageExtendedInfoAction
-
imageNextAction
private final ImageViewerDialog.ImageNextAction imageNextAction
-
imageRemoveAction
private final ImageViewerDialog.ImageRemoveAction imageRemoveAction
-
imageRemoveFromDiskAction
private final ImageViewerDialog.ImageRemoveFromDiskAction imageRemoveFromDiskAction
-
imagePreviousAction
private final ImageViewerDialog.ImagePreviousAction imagePreviousAction
-
imageCollapseAction
private final ImageViewerDialog.ImageCollapseAction imageCollapseAction
-
imageFirstAction
private final ImageViewerDialog.ImageFirstAction imageFirstAction
-
imageLastAction
private final ImageViewerDialog.ImageLastAction imageLastAction
-
imageCopyPathAction
private final ImageViewerDialog.ImageCopyPathAction imageCopyPathAction
-
imageOpenExternalAction
private final ImageViewerDialog.ImageOpenExternalAction imageOpenExternalAction
-
visibilityAction
private final LayerVisibilityAction visibilityAction
-
imgDisplay
private final ImageDisplay imgDisplay
-
imgLoadingFuture
private java.util.concurrent.Future<?> imgLoadingFuture
-
centerView
private boolean centerView
-
extendedImgInfo
private boolean extendedImgInfo
-
dialog
private static volatile ImageViewerDialog dialog
-
collapseButtonClicked
private boolean collapseButtonClicked
-
btnLast
private javax.swing.JButton btnLast
-
btnNext
private javax.swing.JButton btnNext
-
btnPrevious
private javax.swing.JButton btnPrevious
-
btnFirst
private javax.swing.JButton btnFirst
-
btnCollapse
private javax.swing.JButton btnCollapse
-
btnDelete
private javax.swing.JButton btnDelete
-
btnCopyPath
private javax.swing.JButton btnCopyPath
-
btnOpenExternal
private javax.swing.JButton btnOpenExternal
-
btnDeleteFromDisk
private javax.swing.JButton btnDeleteFromDisk
-
tbCentre
private javax.swing.JToggleButton tbCentre
-
tbImgExtInfo
private javax.swing.JToggleButton tbImgExtInfo
-
layers
private final HideableTabbedPane layers
The layer tab (used to select images when multiple layers provide images, makes for easy switching)
-
currentEntry
private transient IImageEntry<? extends IImageEntry<?>> currentEntry
-
-
Constructor Detail
-
ImageViewerDialog
private ImageViewerDialog()
-
-
Method Detail
-
createInstance
static void createInstance()
-
getInstance
public static ImageViewerDialog getInstance()
Replies the unique instance of this dialog- Returns:
- the unique instance
-
hasInstance
public static boolean hasInstance()
Check if there is an instance for theImageViewerDialog- Returns:
trueif there is a static singleton instance ofImageViewerDialog- Since:
- 18613
-
destroyInstance
private static void destroyInstance()
Destroy the current dialog
-
showNotify
public void showNotify()
Description copied from class:ToggleDialogCalled when toggle dialog is shown (after it was created or expanded). Descendants may overwrite this method, it's a good place to register listeners needed to keep dialog updated- Overrides:
showNotifyin classToggleDialog
-
createButton
private static javax.swing.JButton createButton(javax.swing.AbstractAction action, java.awt.Dimension buttonDim)
-
createNavigationButton
private static javax.swing.JButton createNavigationButton(javax.swing.AbstractAction action, java.awt.Dimension buttonDim)
-
build
private void build()
-
addButtonGroup
private static void addButtonGroup(javax.swing.JPanel buttonPanel, javax.swing.AbstractButton... buttons)
Add a button group to a panel- Parameters:
buttonPanel- The panel holding the buttonsbuttons- The button group to add
-
updateLayers
private void updateLayers(boolean changed)
Update the tabs for the different image layers- Parameters:
changed-trueif the tabs changed
-
addButtonsForImageLayers
private void addButtonsForImageLayers()
Add the buttons for image layers
-
removeImageTab
private void removeImageTab(Layer layer)
Remove a tab for a layer from thelayerstab pane- Parameters:
layer- The layer to remove
-
getImageTabs
private java.util.stream.Stream<ImageViewerDialog.MoveImgDisplayPanel<?>> getImageTabs()
Get theImageViewerDialog.MoveImgDisplayPanelobjects inlayers.- Returns:
- The individual panels
-
destroy
public void destroy()
Description copied from interface:DestroyableCalled when the object has been destroyed.- Specified by:
destroyin interfaceDestroyable- Overrides:
destroyin classToggleDialog
-
setPreviousEnabled
public void setPreviousEnabled(boolean value)
Enables (or disables) the "Previous" button.- Parameters:
value-trueto enable the button,falseotherwise
-
setNextEnabled
public void setNextEnabled(boolean value)
Enables (or disables) the "Next" button.- Parameters:
value-trueto enable the button,falseotherwise
-
setCentreEnabled
public static boolean setCentreEnabled(boolean value)
Enables (or disables) the "Center view" button.- Parameters:
value-trueto enable the button,falseotherwise- Returns:
- the old enabled value. Can be used to restore the original enable state
-
displayImage
public void displayImage(ImageData ignoredData, ImageEntry entry)
Displays a single image for the given layer.- Parameters:
ignoredData- the image dataentry- image entry- See Also:
displayImages(java.util.List<? extends org.openstreetmap.josm.data.imagery.street_level.IImageEntry<?>>)
-
displayImage
public void displayImage(IImageEntry<?> entry)
Displays a single image for the given layer.- Parameters:
entry- image entry- See Also:
displayImages(java.util.List<? extends org.openstreetmap.josm.data.imagery.street_level.IImageEntry<?>>)
-
displayImages
public void displayImages(java.util.List<? extends IImageEntry<?>> entries)
Displays images for the given layer.- Parameters:
entries- image entries- Since:
- 18246
-
updateButtonsNullEntry
private void updateButtonsNullEntry(java.util.List<? extends IImageEntry<?>> entries)
Update buttons for null entry- Parameters:
entries-trueif multiple images are selected
-
updateButtonsNonNullEntry
private void updateButtonsNonNullEntry(IImageEntry<?> entry, boolean imageChanged)
Update the image viewer buttons for the new entry- Parameters:
entry- The new entryimageChanged-trueif it is not the same image as the previous image.
-
updateTitle
private void updateTitle()
-
isLastImageSelected
private static boolean isLastImageSelected(java.util.List<? extends IImageEntry<?>> data)
-
isFirstImageSelected
private static boolean isFirstImageSelected(java.util.List<? extends IImageEntry<?>> data)
-
dockWhenClosingDetachedDlg
protected boolean dockWhenClosingDetachedDlg()
When an image is closed, really close it and do not pop up the side dialog.- Overrides:
dockWhenClosingDetachedDlgin classToggleDialog
-
stateChanged
protected void stateChanged()
Description copied from class:ToggleDialogprimitive stateChangedListener for subclasses- Overrides:
stateChangedin classToggleDialog
-
hasImage
public boolean hasImage()
Returns whether an image is currently displayed- Returns:
- If image is currently displayed
-
getCurrentImage
public static IImageEntry<?> getCurrentImage()
Returns the currently displayed image.- Returns:
- Currently displayed image or
null - Since:
- 18246 (signature)
-
getRotation
public Vector3D getRotation(IImageEntry<?> entry)
Returns the rotation of the currently displayed image.- Parameters:
entry- The entry to get the rotation for. May benull.- Returns:
- the rotation of the currently displayed image, or
null - Since:
- 18263
-
isCenterView
public static boolean isCenterView()
Returns whether the center view is currently active.- Returns:
trueif the center view is active,falseotherwise- Since:
- 9416
-
layerAdded
public void layerAdded(LayerManager.LayerAddEvent e)
Description copied from interface:LayerManager.LayerChangeListenerNotifies this listener that a layer has been added.Listeners are called in the EDT thread. You should not do blocking or long-running tasks in this method.
- Specified by:
layerAddedin interfaceLayerManager.LayerChangeListener- Parameters:
e- The new added layer event
-
layerRemoving
public void layerRemoving(LayerManager.LayerRemoveEvent e)
Description copied from interface:LayerManager.LayerChangeListenerNotifies this listener that a layer was just removed.Listeners are called in the EDT thread after the layer was removed. Use
LayerManager.LayerRemoveEvent.scheduleRemoval(Collection)to remove more layers. You should not do blocking or long-running tasks in this method.- Specified by:
layerRemovingin interfaceLayerManager.LayerChangeListener- Parameters:
e- The layer to be removed (as event)
-
layerOrderChanged
public void layerOrderChanged(LayerManager.LayerOrderChangeEvent e)
Description copied from interface:LayerManager.LayerChangeListenerNotifies this listener that the order of layers was changed.Listeners are called in the EDT thread. You should not do blocking or long-running tasks in this method.
- Specified by:
layerOrderChangedin interfaceLayerManager.LayerChangeListener- Parameters:
e- The order change event.
-
activeOrEditLayerChanged
public void activeOrEditLayerChanged(MainLayerManager.ActiveLayerChangeEvent e)
Description copied from interface:MainLayerManager.ActiveLayerChangeListenerCalled whenever the active or edit layer changed.You can be sure that this layer is still contained in this set.
Listeners are called in the EDT thread and you can manipulate the layer manager in the current thread.
- Specified by:
activeOrEditLayerChangedin interfaceMainLayerManager.ActiveLayerChangeListener- Parameters:
e- The change event.
-
refresh
public void refresh()
Reload the image. Call this if you load a low-resolution image first, and then get a high-resolution image, or if you know that the image has changed on disk.- Since:
- 18591
-
refresh
public void refresh(boolean imageChanged)
Reload the image or reload only the image info. Call this if want to update the OSD.- Parameters:
imageChanged- reload the image if true. Reload only the OSD if false.- Since:
- 19387
-
registerOnLayer
private void registerOnLayer(Layer layer)
-
cancelLoadingImage
private void cancelLoadingImage()
-
-