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 class
ImageViewerDialog.CloseableTab
A tab title renderer forHideableTabbedPane
that allows us to close tabs.private class
ImageViewerDialog.ImageAction
private class
ImageViewerDialog.ImageCenterViewAction
private class
ImageViewerDialog.ImageCollapseAction
private class
ImageViewerDialog.ImageCopyPathAction
private class
ImageViewerDialog.ImageExtendedInfoAction
private class
ImageViewerDialog.ImageFirstAction
private class
ImageViewerDialog.ImageLastAction
private class
ImageViewerDialog.ImageNextAction
private class
ImageViewerDialog.ImageOpenExternalAction
private class
ImageViewerDialog.ImagePreviousAction
private class
ImageViewerDialog.ImageRememberAction
This class exists to remember the last entry, and go back if clicked again when it would not otherwise be enabledprivate class
ImageViewerDialog.ImageRemoveAction
private class
ImageViewerDialog.ImageRemoveFromDiskAction
private class
ImageViewerDialog.ImageZoomAction
private static class
ImageViewerDialog.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 interface
ImageViewerDialog.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 private
ImageViewerDialog()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
activeOrEditLayerChanged(MainLayerManager.ActiveLayerChangeEvent e)
Called whenever the active or edit layer changed.private static void
addButtonGroup(javax.swing.JPanel buttonPanel, javax.swing.AbstractButton... buttons)
Add a button group to a panelprivate void
addButtonsForImageLayers()
Add the buttons for image layersprivate void
build()
private void
cancelLoadingImage()
private static javax.swing.JButton
createButton(javax.swing.AbstractAction action, java.awt.Dimension buttonDim)
(package private) static void
createInstance()
private static javax.swing.JButton
createNavigationButton(javax.swing.AbstractAction action, java.awt.Dimension buttonDim)
void
destroy()
Called when the object has been destroyed.private static void
destroyInstance()
Destroy the current dialogvoid
displayImage(ImageData ignoredData, ImageEntry entry)
Displays a single image for the given layer.void
displayImage(IImageEntry<?> entry)
Displays a single image for the given layer.void
displayImages(java.util.List<? extends IImageEntry<?>> entries)
Displays images for the given layer.protected boolean
dockWhenClosingDetachedDlg()
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.MoveImgDisplayPanel
objects inlayers
.static ImageViewerDialog
getInstance()
Replies the unique instance of this dialogVector3D
getRotation(IImageEntry<?> entry)
Returns the rotation of the currently displayed image.boolean
hasImage()
Returns whether an image is currently displayedstatic boolean
hasInstance()
Check if there is an instance for theImageViewerDialog
static boolean
isCenterView()
Returns whether the center view is currently active.private static boolean
isFirstImageSelected(java.util.List<? extends IImageEntry<?>> data)
private static boolean
isLastImageSelected(java.util.List<? extends IImageEntry<?>> data)
void
layerAdded(LayerManager.LayerAddEvent e)
Notifies this listener that a layer has been added.void
layerOrderChanged(LayerManager.LayerOrderChangeEvent e)
Notifies this listener that the order of layers was changed.void
layerRemoving(LayerManager.LayerRemoveEvent e)
Notifies this listener that a layer was just removed.void
refresh()
Reload the image.void
refresh(boolean imageChanged)
Reload the image or reload only the image info.private void
registerOnLayer(Layer layer)
private void
removeImageTab(Layer layer)
Remove a tab for a layer from thelayers
tab panestatic boolean
setCentreEnabled(boolean value)
Enables (or disables) the "Center view" button.void
setNextEnabled(boolean value)
Enables (or disables) the "Next" button.void
setPreviousEnabled(boolean value)
Enables (or disables) the "Previous" button.private void
showLayer(Layer newLayer)
void
showNotify()
Called when toggle dialog is shown (after it was created or expanded).protected void
stateChanged()
primitive stateChangedListener for subclassesprivate void
updateButtonsNonNullEntry(IImageEntry<?> entry, boolean imageChanged)
Update the image viewer buttons for the new entryprivate void
updateButtonsNullEntry(java.util.List<? extends IImageEntry<?>> entries)
Update buttons for null entryprivate void
updateLayers(boolean changed)
Update the tabs for the different image layersprivate void
updateTitle()
-
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:
true
if 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:ToggleDialog
Called 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:
showNotify
in 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
-true
if 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 thelayers
tab pane- Parameters:
layer
- The layer to remove
-
getImageTabs
private java.util.stream.Stream<ImageViewerDialog.MoveImgDisplayPanel<?>> getImageTabs()
Get theImageViewerDialog.MoveImgDisplayPanel
objects inlayers
.- Returns:
- The individual panels
-
destroy
public void destroy()
Description copied from interface:Destroyable
Called when the object has been destroyed.- Specified by:
destroy
in interfaceDestroyable
- Overrides:
destroy
in classToggleDialog
-
setPreviousEnabled
public void setPreviousEnabled(boolean value)
Enables (or disables) the "Previous" button.- Parameters:
value
-true
to enable the button,false
otherwise
-
setNextEnabled
public void setNextEnabled(boolean value)
Enables (or disables) the "Next" button.- Parameters:
value
-true
to enable the button,false
otherwise
-
setCentreEnabled
public static boolean setCentreEnabled(boolean value)
Enables (or disables) the "Center view" button.- Parameters:
value
-true
to enable the button,false
otherwise- 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
-true
if 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
-true
if 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:
dockWhenClosingDetachedDlg
in classToggleDialog
-
stateChanged
protected void stateChanged()
Description copied from class:ToggleDialog
primitive stateChangedListener for subclasses- Overrides:
stateChanged
in 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:
true
if the center view is active,false
otherwise- Since:
- 9416
-
layerAdded
public void layerAdded(LayerManager.LayerAddEvent e)
Description copied from interface:LayerManager.LayerChangeListener
Notifies 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:
layerAdded
in interfaceLayerManager.LayerChangeListener
- Parameters:
e
- The new added layer event
-
layerRemoving
public void layerRemoving(LayerManager.LayerRemoveEvent e)
Description copied from interface:LayerManager.LayerChangeListener
Notifies 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:
layerRemoving
in interfaceLayerManager.LayerChangeListener
- Parameters:
e
- The layer to be removed (as event)
-
layerOrderChanged
public void layerOrderChanged(LayerManager.LayerOrderChangeEvent e)
Description copied from interface:LayerManager.LayerChangeListener
Notifies 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:
layerOrderChanged
in interfaceLayerManager.LayerChangeListener
- Parameters:
e
- The order change event.
-
activeOrEditLayerChanged
public void activeOrEditLayerChanged(MainLayerManager.ActiveLayerChangeEvent e)
Description copied from interface:MainLayerManager.ActiveLayerChangeListener
Called 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:
activeOrEditLayerChanged
in 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()
-
-