Ticket #24523: 24523.patch

File 24523.patch, 3.9 KB (added by GerdP, 7 months ago)

Patch to implement shortcut Alt+Y to close all but the active tab

  • src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java

     
    100100    private final ImageOpenExternalAction imageOpenExternalAction = new ImageOpenExternalAction();
    101101    private final LayerVisibilityAction visibilityAction = new LayerVisibilityAction(Collections::emptyList,
    102102            () -> Collections.singleton(imageryFilterSettings));
    103 
     103    private final CloseOtherTabsAction closeAllTabsAction = new CloseOtherTabsAction();
    104104    private final ImageDisplay imgDisplay = new ImageDisplay(imageryFilterSettings);
    105105    private Future<?> imgLoadingFuture;
    106106    private boolean centerView;
     
    255255        addButtonGroup(buttons, this.btnCopyPath, this.btnOpenExternal);
    256256        addButtonGroup(buttons, createButton(visibilityAction, buttonDim));
    257257
     258
    258259        JPanel bottomPane = new JPanel(new GridBagLayout());
    259260        GridBagConstraints gc = new GridBagConstraints();
    260261        gc.gridx = 0;
     
    417418        imageRemoveFromDiskAction.destroy();
    418419        imageZoomAction.destroy();
    419420        toggleAction.destroy();
     421        closeAllTabsAction.destroy();
    420422        cancelLoadingImage();
    421423        super.destroy();
    422424        // make sure that Image Display is destroyed here, it might not be a component
     
    607609            refresh(false);
    608610        }
    609611    }
    610    
     612
    611613    private class ImageRemoveAction extends JosmAction {
    612614        ImageRemoveAction() {
    613615            super(null, new ImageProvider(DIALOG_FOLDER, "delete"), tr("Remove photo from layer"), Shortcut.registerShortcut(
     
    756758        }
    757759    }
    758760
     761    private class CloseOtherTabsAction extends JosmAction {
     762        CloseOtherTabsAction() {
     763            super(tr("close-other-tabs"), new ImageProvider("misc", "close"), tr("Close other tabs"),
     764                    Shortcut.registerShortcut("closeother", "close other tabs", KeyEvent.VK_Y, Shortcut.ALT), false, null,
     765                    false);
     766        }
     767
     768        @Override
     769        public void actionPerformed(ActionEvent e) {
     770            for (int i = layers.getTabCount() - 1; i >= 0; i--) {
     771                Component component = layers.getComponentAt(i);
     772                if (component instanceof MoveImgDisplayPanel) {
     773                    MoveImgDisplayPanel<?> moveImgDisplayPanel = (MoveImgDisplayPanel<?>) component;
     774                    if (moveImgDisplayPanel.layer.containsImage(currentEntry))
     775                        continue;
     776                    layers.removeTabAt(i);
     777                    layers.remove(moveImgDisplayPanel);
     778                }
     779            }
     780        }
     781    }
     782
    759783    /**
    760784     * A tab title renderer for {@link HideableTabbedPane} that allows us to close tabs.
    761785     */
     
    10321056            if (Config.getPref().getBoolean("geoimage.viewer.extendedinfo", false)) {
    10331057                osd.append(tr("\nEXIF DTO time: {0}", dtf.format(entry.getExifInstant())));
    10341058            } else {
    1035                 osd.append(tr("\nEXIF time: {0}", dtf.format(entry.getExifInstant())));       
     1059                osd.append(tr("\nEXIF time: {0}", dtf.format(entry.getExifInstant())));
    10361060            }
    10371061        }
    10381062
     
    10421066            }
    10431067            if (entry.hasGpsTime()) {
    10441068                osd.append(tr("\nCorr GPS time: {0}", dtf.format(entry.getGpsInstant())));
    1045             }           
     1069            }
    10461070            if (entry.getExifImgDir() != null) {
    10471071                osd.append(tr("\nDirection {0}\u00b0", Math.round(entry.getExifImgDir())));
    10481072            }
     
    12111235            GuiHelper.runInEDT(this::refresh);
    12121236        }
    12131237    }
    1214    
     1238
    12151239    private void registerOnLayer(Layer layer) {
    12161240        if (layer instanceof IGeoImageLayer) {
    12171241            layer.addPropertyChangeListener(l -> {