]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/gui/BaseImageDefinitionPanel.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / gui / BaseImageDefinitionPanel.java
diff --git a/src/tim/prune/gui/BaseImageDefinitionPanel.java b/src/tim/prune/gui/BaseImageDefinitionPanel.java
new file mode 100644 (file)
index 0000000..d186bd2
--- /dev/null
@@ -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();
+       }
+}