001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.plugins.streetside.gui; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.awt.Component; 007import java.awt.event.ActionEvent; 008import java.awt.event.ActionListener; 009 010import javax.swing.AbstractAction; 011import javax.swing.BoxLayout; 012import javax.swing.ButtonGroup; 013import javax.swing.JButton; 014import javax.swing.JFileChooser; 015import javax.swing.JLabel; 016import javax.swing.JPanel; 017import javax.swing.JRadioButton; 018 019import org.openstreetmap.josm.plugins.streetside.StreetsideImage; 020import org.openstreetmap.josm.plugins.streetside.StreetsideImportedImage; 021import org.openstreetmap.josm.plugins.streetside.StreetsideLayer; 022 023 024/** 025 * GUI for exporting images. 026 * 027 * @author nokutu 028 * 029 */ 030public class StreetsideExportDialog extends JPanel implements ActionListener { 031 032 private static final long serialVersionUID = -2746815082016025516L; 033 /** Button to export all downloaded images. */ 034 public final JRadioButton all; 035 /** 036 * Button to export all images in the sequence of the selected StreetsideImage. 037 */ 038 public final JRadioButton sequence; 039 /** 040 * Button to export all images belonging to the selected 041 * {@link StreetsideImage} objects. 042 */ 043 public final JRadioButton selected; 044 /** Button to rewrite all imported images. */ 045 public final JRadioButton rewrite; 046 /** Group of button containing all the options. */ 047 public final ButtonGroup group; 048 private final JButton choose; 049 private final JLabel path; 050 /** File chooser. */ 051 public JFileChooser chooser; 052 private final JButton ok; 053 054 /** 055 * Main constructor. 056 * 057 * @param ok 058 * The button for to OK option. 059 */ 060 public StreetsideExportDialog(JButton ok) { 061 this.ok = ok; 062 ok.setEnabled(false); 063 064 setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); 065 066 RewriteButtonAction action = new RewriteButtonAction(this); 067 this.group = new ButtonGroup(); 068 this.all = new JRadioButton(action); 069 this.all.setText(tr("Export all images")); 070 this.sequence = new JRadioButton(action); 071 this.sequence.setText(tr("Export selected sequence")); 072 this.selected = new JRadioButton(action); 073 this.selected.setText(tr("Export selected images")); 074 this.rewrite = new JRadioButton(action); 075 this.rewrite.setText(tr("Rewrite imported images")); 076 this.group.add(this.all); 077 this.group.add(this.sequence); 078 this.group.add(this.selected); 079 this.group.add(this.rewrite); 080 // Some options are disabled depending on the circumstances 081 sequence.setEnabled(StreetsideLayer.getInstance().getData().getSelectedImage() instanceof StreetsideImage); 082 if (StreetsideLayer.getInstance().getData().getMultiSelectedImages().isEmpty()) { 083 this.selected.setEnabled(false); 084 } 085 this.rewrite.setEnabled(StreetsideLayer.getInstance().getData().getImages().parallelStream().anyMatch(img -> img instanceof StreetsideImportedImage)); 086 087 this.path = new JLabel(tr("Select a directory")); 088 this.choose = new JButton(tr("Explore")); 089 this.choose.addActionListener(this); 090 091 // All options belong to the same JPanel so the are in line. 092 JPanel jpanel = new JPanel(); 093 jpanel.setLayout(new BoxLayout(jpanel, BoxLayout.PAGE_AXIS)); 094 jpanel.add(this.all); 095 jpanel.add(this.sequence); 096 jpanel.add(this.selected); 097 jpanel.add(this.rewrite); 098 jpanel.setAlignmentX(Component.CENTER_ALIGNMENT); 099 this.path.setAlignmentX(Component.CENTER_ALIGNMENT); 100 this.choose.setAlignmentX(Component.CENTER_ALIGNMENT); 101 102 add(jpanel); 103 add(this.path); 104 add(this.choose); 105 } 106 107 /** 108 * Creates the folder chooser GUI. 109 */ 110 @Override 111 public void actionPerformed(ActionEvent e) { 112 this.chooser = new JFileChooser(); 113 this.chooser.setCurrentDirectory(new java.io.File(System 114 .getProperty("user.home"))); 115 this.chooser.setDialogTitle(tr("Select a directory")); 116 this.chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 117 this.chooser.setAcceptAllFileFilterUsed(false); 118 119 if (this.chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { 120 this.path.setText(this.chooser.getSelectedFile().toString()); 121 this.updateUI(); 122 this.ok.setEnabled(true); 123 } 124 } 125 126 /** 127 * Enables/disables some parts of the panel depending if the rewrite button is 128 * active. 129 * 130 * @author nokutu 131 * 132 */ 133 public class RewriteButtonAction extends AbstractAction { 134 135 private static final long serialVersionUID = 1035332841101190301L; 136 137 private String lastPath; 138 private final StreetsideExportDialog dlg; 139 140 /** 141 * Main constructor. 142 * 143 * @param dlg 144 * Parent dialog. 145 */ 146 public RewriteButtonAction(StreetsideExportDialog dlg) { 147 this.dlg = dlg; 148 } 149 150 @Override 151 public void actionPerformed(ActionEvent arg0) { 152 StreetsideExportDialog.this.choose 153 .setEnabled(!StreetsideExportDialog.this.rewrite.isSelected()); 154 if (StreetsideExportDialog.this.rewrite.isSelected()) { 155 this.lastPath = this.dlg.path.getText(); 156 this.dlg.path.setText(" "); 157 } else if (this.lastPath != null) { 158 this.dlg.path.setText(this.lastPath); 159 } 160 } 161 } 162}