+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();
+ }
+}