X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fgui%2FBaseImageDefinitionPanel.java;fp=src%2Ftim%2Fprune%2Fgui%2FBaseImageDefinitionPanel.java;h=d186bd2dadedbd25e279f844503fd266066999aa;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/gui/BaseImageDefinitionPanel.java b/src/tim/prune/gui/BaseImageDefinitionPanel.java new file mode 100644 index 0000000..d186bd2 --- /dev/null +++ b/src/tim/prune/gui/BaseImageDefinitionPanel.java @@ -0,0 +1,157 @@ +package tim.prune.gui; + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.border.EtchedBorder; + +import tim.prune.I18nManager; +import tim.prune.data.Track; +import tim.prune.gui.map.MapSource; +import tim.prune.gui.map.MapSourceLibrary; +import tim.prune.save.BaseImageConfigDialog; +import tim.prune.save.BaseImageConsumer; +import tim.prune.save.MapGrouter; +import tim.prune.threedee.ImageDefinition; + +/** + * Panel used to show the current base image details + * and an edit button to change the definition + */ +public class BaseImageDefinitionPanel extends JPanel implements BaseImageConsumer +{ + /** Parent object (if any) */ + private BaseImageConsumer _parent = null; + /** Label to describe the current settings */ + private JLabel _baseImageLabel = null; + /** Button for changing the definition */ + private JButton _editButton = null; + /** Dialog called by the "Edit" button to change the settings */ + private BaseImageConfigDialog _baseImageConfig = null; + + + /** + * Constructor + * @param inParent parent object to inform about changes + * @param inParentDialog parent dialog + * @param inTrack track object + */ + public BaseImageDefinitionPanel(BaseImageConsumer inParent, JDialog inParentDialog, + Track inTrack) + { + _parent = inParent; + _baseImageConfig = new BaseImageConfigDialog(this, inParentDialog, inTrack); + + // Etched border + setBorder(BorderFactory.createCompoundBorder( + BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), BorderFactory.createEmptyBorder(4, 4, 4, 4)) + ); + setLayout(new BorderLayout()); + + // GUI components + JPanel subPanel = new JPanel(); + subPanel.setLayout(new BorderLayout(10, 4)); + subPanel.add(new JLabel(I18nManager.getText("dialog.exportpov.baseimage") + ": "), BorderLayout.WEST); + _baseImageLabel = new JLabel("Typical sourcename"); + subPanel.add(_baseImageLabel, BorderLayout.CENTER); + _editButton = new JButton(I18nManager.getText("button.edit")); + _editButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + changeBaseImage(); + } + }); + subPanel.add(_editButton, BorderLayout.EAST); + add(subPanel, BorderLayout.NORTH); + } + + /** + * @param inDefinition image definition from interactive step + */ + public void initImageParameters(ImageDefinition inDefinition) + { + _baseImageConfig.setImageDefinition(inDefinition); + } + + /** + * Change the base image by calling the BaseImageConfigDialog + */ + private void changeBaseImage() + { + // Check if there is a cache to use + if (BaseImageConfigDialog.isImagePossible()) + { + // Show new dialog to choose image details + _baseImageConfig.begin(); + } + // TODO: What if it isn't possible? Should the caller show the error message? + //else { + // _app.showErrorMessage(getNameKey(), "dialog.exportimage.noimagepossible"); + //} + } + + /** + * Callback from base image config dialog + */ + public void baseImageChanged() + { + updateBaseImageDetails(); + if (_parent != null) { + _parent.baseImageChanged(); + } + } + + /** + * Update the description label according to the selected base image details + */ + public void updateBaseImageDetails() + { + String desc = null; + ImageDefinition imageDef = _baseImageConfig.getImageDefinition(); + // Check if selected zoom level is suitable or not, if not then set image to no + if (imageDef.getUseImage() && !_baseImageConfig.isSelectedZoomValid()) { + imageDef.setUseImage(false, imageDef.getSourceIndex(), 5); + } + // Make a description for the label + if (imageDef.getUseImage()) + { + MapSource source = MapSourceLibrary.getSource(imageDef.getSourceIndex()); + if (source != null) + { + desc = source.getName() + " (" + imageDef.getZoom() + ")"; + } + } + if (desc == null) { + desc = I18nManager.getText("dialog.about.no"); + } + _baseImageLabel.setText(desc); + _editButton.setEnabled(BaseImageConfigDialog.isImagePossible()); + } + + /** + * @return the grouter object for reuse of the prepared images + */ + public MapGrouter getGrouter() + { + return _baseImageConfig.getGrouter(); + } + + /** + * @return image definition + */ + public ImageDefinition getImageDefinition() { + return _baseImageConfig.getImageDefinition(); + } + + /** + * @return true if any tiles were found + */ + public boolean getFoundData() { + return _baseImageConfig.getFoundData(); + } +}