trackeditor: show cursor position in track coordinates

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9008 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 6e030c37764671a7af78932d546288c7213dbcf4
Former-commit-id: 88ce12ac844c550189d414725708abda1d8a1b7f
This commit is contained in:
iobyte 2023-06-18 14:41:38 +00:00
parent b0e080fa44
commit a948df16e9
4 changed files with 96 additions and 21 deletions

View file

@ -230,6 +230,8 @@ public class EditorFrame extends JFrame
private final static String RECENT_FILES_MAX = "RecentFilesMax"; private final static String RECENT_FILES_MAX = "RecentFilesMax";
private boolean interactiveFixes = false; private boolean interactiveFixes = false;
private final static String INTERACTIVE_FIXES = "InteractiveFixes"; private final static String INTERACTIVE_FIXES = "InteractiveFixes";
private boolean cursorCoordinates = false;
private final static String CURSOR_COORDINATES = "CursorCoordinates";
private TrackData trackData = null; private TrackData trackData = null;
private Vector<Surface> defaultSurfaces = new Vector<Surface>(); private Vector<Surface> defaultSurfaces = new Vector<Surface>();
@ -340,6 +342,7 @@ public class EditorFrame extends JFrame
libDirectory = preferences.get(SD_LIB_DIRECTORY, null); libDirectory = preferences.get(SD_LIB_DIRECTORY, null);
recentFilesMax = Integer.parseInt(preferences.get(RECENT_FILES_MAX, "10")); recentFilesMax = Integer.parseInt(preferences.get(RECENT_FILES_MAX, "10"));
interactiveFixes = preferences.getBoolean(INTERACTIVE_FIXES, false); interactiveFixes = preferences.getBoolean(INTERACTIVE_FIXES, false);
cursorCoordinates = preferences.getBoolean(CURSOR_COORDINATES, false);
readDefaultSurfaces(); readDefaultSurfaces();
readDefaultObjects(); readDefaultObjects();
@ -460,6 +463,18 @@ public class EditorFrame extends JFrame
preferences.putBoolean(INTERACTIVE_FIXES, interactiveFixes); preferences.putBoolean(INTERACTIVE_FIXES, interactiveFixes);
} }
public boolean getCursorCoordinates()
{
return cursorCoordinates;
}
public void setCursorCoordinates(boolean value)
{
cursorCoordinates = value;
preferences.putBoolean(CURSOR_COORDINATES, cursorCoordinates);
}
private void updateRecentFiles(String filename) private void updateRecentFiles(String filename)
{ {
recentFiles.remove(filename); recentFiles.remove(filename);
@ -1289,8 +1304,10 @@ public class EditorFrame extends JFrame
setLibDirectory(preferencesDialog.getLibDirectory()); setLibDirectory(preferencesDialog.getLibDirectory());
setRecentFilesMax(preferencesDialog.getRecentFilesMax()); setRecentFilesMax(preferencesDialog.getRecentFilesMax());
setInteractiveFixes(preferencesDialog.getInteractiveFixes()); setInteractiveFixes(preferencesDialog.getInteractiveFixes());
setCursorCoordinates(preferencesDialog.getCursorCoordinates());
readDefaultSurfaces(); readDefaultSurfaces();
readDefaultObjects(); readDefaultObjects();
view.redrawCircuit();
if (view.segmentParamDialog != null) if (view.segmentParamDialog != null)
view.segmentParamDialog.refresh(); view.segmentParamDialog.refresh();
} }

View file

@ -33,6 +33,7 @@ public class PreferencesDialog extends JDialog
private JLabel recentFilesMaxLabel = null; private JLabel recentFilesMaxLabel = null;
private JTextField recentFilesMaxTextField = null; private JTextField recentFilesMaxTextField = null;
private JCheckBox interactiveFixesCheckBox = null; private JCheckBox interactiveFixesCheckBox = null;
private JCheckBox cursorCoordinatesCheckBox = null;
private JButton okButton = null; private JButton okButton = null;
private JButton cancelButton = null; private JButton cancelButton = null;
@ -87,6 +88,7 @@ public class PreferencesDialog extends JDialog
jPanel.add(getLibDirectoryButton(), null); jPanel.add(getLibDirectoryButton(), null);
jPanel.add(getRecentFilesMaxTextField(), null); jPanel.add(getRecentFilesMaxTextField(), null);
jPanel.add(getInteractiveFixesCheckBox(), null); jPanel.add(getInteractiveFixesCheckBox(), null);
jPanel.add(getCursorCoordinatesCheckBox(), null);
jPanel.add(getOkButton(), null); jPanel.add(getOkButton(), null);
jPanel.add(getCancelButton(), null); jPanel.add(getCancelButton(), null);
} }
@ -266,6 +268,18 @@ public class PreferencesDialog extends JDialog
return interactiveFixesCheckBox; return interactiveFixesCheckBox;
} }
private JCheckBox getCursorCoordinatesCheckBox()
{
if (cursorCoordinatesCheckBox == null)
{
cursorCoordinatesCheckBox = new JCheckBox();
cursorCoordinatesCheckBox.setBounds(200, 161, 290, 23);
cursorCoordinatesCheckBox.setText("Cursor Track Coordinates");
cursorCoordinatesCheckBox.setSelected(editorFrame.getCursorCoordinates());
}
return cursorCoordinatesCheckBox;
}
private JButton getOkButton() private JButton getOkButton()
{ {
if (okButton == null) if (okButton == null)
@ -349,6 +363,11 @@ public class PreferencesDialog extends JDialog
return getInteractiveFixesCheckBox().isSelected(); return getInteractiveFixesCheckBox().isSelected();
} }
public boolean getCursorCoordinates()
{
return getCursorCoordinatesCheckBox().isSelected();
}
protected void processWindowEvent(WindowEvent e) protected void processWindowEvent(WindowEvent e)
{ {
super.processWindowEvent(e); super.processWindowEvent(e);

View file

@ -17,6 +17,8 @@ import java.awt.event.KeyListener;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener; import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import java.awt.event.WindowListener; import java.awt.event.WindowListener;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
@ -87,7 +89,7 @@ import utils.undo.UndoSplitSegment;
* @version 0.1a * @version 0.1a
*/ */
public class CircuitView extends JComponent implements KeyListener, MouseListener, MouseMotionListener,WindowListener //,Scrollable public class CircuitView extends JComponent implements KeyListener, MouseListener, MouseMotionListener, WindowListener, MouseWheelListener
{ {
/** zooming factor */ /** zooming factor */
double zoomFactor = 1.0; double zoomFactor = 1.0;
@ -200,7 +202,9 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
/** upward link to parent frame */ /** upward link to parent frame */
EditorFrame editorFrame; EditorFrame editorFrame;
Graphics graphics = null;
private final String sep = System.getProperty("file.separator"); private final String sep = System.getProperty("file.separator");
/** /**
@ -216,7 +220,7 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
addKeyListener(this); addKeyListener(this);
addMouseListener(this); addMouseListener(this);
addMouseMotionListener(this); addMouseMotionListener(this);
//addMouseWheelListener( this ); addMouseWheelListener(this);
this.editorFrame = editorFrame; this.editorFrame = editorFrame;
terrain = new ObjShapeTerrain(); terrain = new ObjShapeTerrain();
Editor.getProperties().addPropertiesListener(new ActionListener() Editor.getProperties().addPropertiesListener(new ActionListener()
@ -926,7 +930,13 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
public void mouseMoved(MouseEvent e) public void mouseMoved(MouseEvent e)
{ {
screenToReal(e, mousePoint); screenToReal(e, mousePoint);
if (editorFrame.getCursorCoordinates())
{
invalidate();
repaint();
}
try try
{ {
switch (currentState) switch (currentState)
@ -1010,6 +1020,19 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
} }
} }
public void mouseWheelMoved(MouseWheelEvent e)
{
screenToReal(e, mousePoint);
getParent().dispatchEvent(e);
if (editorFrame.getCursorCoordinates())
{
invalidate();
repaint();
}
}
// /** input events management */ // /** input events management */
// /* // /*
// * public void mouseWheelMoved( MouseWheelEvent e ) { int n = // * public void mouseWheelMoved( MouseWheelEvent e ) { int n =
@ -1434,6 +1457,21 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
*/ */
public void paint(Graphics g) public void paint(Graphics g)
{ {
graphics = g;
// visible part of screen in pixels
Rectangle r = getVisibleRect();
if (editorFrame.getCursorCoordinates())
{
if (editorFrame.getTrackData() != null)
{
String coordinates = String.format("x: %.3f y: %.3f", + mousePoint.x, + mousePoint.y);
graphics.drawString(coordinates, r.x + 10, r.y + 20);
}
}
if (editorFrame.getTrackData() != null && editorFrame.getTrackData().getSegments() != null) if (editorFrame.getTrackData() != null && editorFrame.getTrackData().getSegments() != null)
{ {
if (boundingRectangle == null) if (boundingRectangle == null)
@ -1441,9 +1479,6 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
return; return;
} }
// visible part of screen in pixels
Rectangle r = getVisibleRect();
// out zone size in meters // out zone size in meters
outZoneWidth = (r.getWidth() / 2) / zoomFactor; outZoneWidth = (r.getWidth() / 2) / zoomFactor;
outZoneHeight = (r.getHeight() / 2) / zoomFactor; outZoneHeight = (r.getHeight() / 2) / zoomFactor;
@ -1774,18 +1809,8 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
{ {
ObjShapeObject object = objects.get(j); ObjShapeObject object = objects.get(j);
Rectangle2D.Double rect = new Rectangle2D.Double(boundingRectangle.getMinX() - border, Point2D.Double location = new Point2D.Double();
boundingRectangle.getMinY() - border, imageToReal(object.getImageX(), object.getImageY(), objectMap.getImageWidth(), objectMap.getImageHeight(), location);
boundingRectangle.getWidth() + (border * 2),
boundingRectangle.getHeight() + (border * 2));
double widthScale = rect.getWidth() / objectMap.getImageWidth();
double heightScale = rect.getHeight() / objectMap.getImageHeight();
double worldX = rect.getMinX() + (object.getImageX() * widthScale);
double worldY = rect.getMinY() + ((objectMap.getImageHeight() - object.getImageY()) * heightScale);
Point2D.Double location = new Point2D.Double(worldX, worldY);
object.calcShape(location); object.calcShape(location);
} }
@ -2689,7 +2714,21 @@ public class CircuitView extends JComponent implements KeyListener, MouseListene
imageXY[0] = (int)Math.round(imageWidth * ((real.x + -rect.x) / rect.width)); imageXY[0] = (int)Math.round(imageWidth * ((real.x + -rect.x) / rect.width));
imageXY[1] = (int)Math.round(imageHeight * (1 - (((real.y + -rect.y) / rect.height)))); imageXY[1] = (int)Math.round(imageHeight * (1 - (((real.y + -rect.y) / rect.height))));
} }
private void imageToReal(int imageX, int imageY, int imageWidth, int imageHeight, Point2D.Double real)
{
double border = editorFrame.getTrackData().getGraphic().getTerrainGeneration().getBorderMargin();
Rectangle2D.Double rect = new Rectangle2D.Double(boundingRectangle.getMinX() - border,
boundingRectangle.getMinY() - border,
boundingRectangle.getWidth() + (border * 2),
boundingRectangle.getHeight() + (border * 2));
double widthScale = rect.getWidth() / imageWidth;
double heightScale = rect.getHeight() / imageHeight;
real.x = rect.getMinX() + (imageX * widthScale);
real.y = rect.getMinY() + ((imageHeight - imageY) * heightScale);
}
private void noObjectSelected(MouseEvent me) private void noObjectSelected(MouseEvent me)
{ {
class AddNewAction extends AbstractAction class AddNewAction extends AbstractAction

View file

@ -34,7 +34,7 @@ public class Properties
private static Properties instance = new Properties(); private static Properties instance = new Properties();
private Vector<ActionListener> propertiesListeners = new Vector<ActionListener>(); private Vector<ActionListener> propertiesListeners = new Vector<ActionListener>();
public final String title = "sd2-trackeditor"; public final String title = "sd2-trackeditor";
public final String version = "1.2.47"; public final String version = "1.2.48";
private String path; private String path;
private double imageScale = 1; private double imageScale = 1;