X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=tim%2Fprune%2Fgui%2Fprofile%2FProfileChart.java;h=732669a956dcd48bf719848e5223b2b77bf989fe;hp=770a211ea777535d900bb43bfed109c047b771a5;hb=7f5ed2be62905bd37717376dc22d09e5ea7edb4d;hpb=b361869e590bbca32664c16ac24d6296926594a5 diff --git a/tim/prune/gui/profile/ProfileChart.java b/tim/prune/gui/profile/ProfileChart.java index 770a211..732669a 100644 --- a/tim/prune/gui/profile/ProfileChart.java +++ b/tim/prune/gui/profile/ProfileChart.java @@ -15,6 +15,8 @@ import javax.swing.JPopupMenu; import tim.prune.I18nManager; import tim.prune.config.ColourScheme; import tim.prune.config.Config; +import tim.prune.data.Field; +import tim.prune.data.FieldList; import tim.prune.data.TrackInfo; import tim.prune.gui.GenericDisplay; @@ -23,6 +25,17 @@ import tim.prune.gui.GenericDisplay; */ public class ProfileChart extends GenericDisplay implements MouseListener { + /** Inner class to handle popup menu clicks */ + class MenuClicker implements ActionListener + { + private Field _field = null; + MenuClicker(Field inField) {_field = inField;} + /** React to menu click by changing the field */ + public void actionPerformed(ActionEvent arg0) { + changeView(_field); + } + } + /** Current scale factor in x direction*/ private double _xScaleFactor = 0.0; /** Data to show on chart */ @@ -40,8 +53,6 @@ public class ProfileChart extends GenericDisplay implements MouseListener private static final Dimension MINIMUM_SIZE = new Dimension(200, 110); /** Colour to use for text if no data found */ private static final Color COLOR_NODATA_TEXT = Color.GRAY; - /** Chart type */ - private static enum ChartType {ALTITUDE, SPEED, VERT_SPEED}; /** @@ -255,23 +266,38 @@ public class ProfileChart extends GenericDisplay implements MouseListener altItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - changeView(ChartType.ALTITUDE); + changeView(Field.ALTITUDE); }}); _popup.add(altItem); JMenuItem speedItem = new JMenuItem(I18nManager.getText("fieldname.speed")); speedItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - changeView(ChartType.SPEED); + changeView(Field.SPEED); }}); _popup.add(speedItem); JMenuItem vertSpeedItem = new JMenuItem(I18nManager.getText("fieldname.verticalspeed")); vertSpeedItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - changeView(ChartType.VERT_SPEED); + changeView(Field.VERTICAL_SPEED); }}); _popup.add(vertSpeedItem); + // Go through track's master field list, see if any other fields to list + boolean addSeparator = true; + FieldList fields = _track.getFieldList(); + for (int i=0; i 0) { + makePopup(); + } repaint(); } @@ -346,19 +376,31 @@ public class ProfileChart extends GenericDisplay implements MouseListener /** * Called by clicking on popup menu to change the view - * @param inType selected chart type + * @param inField field to show */ - private void changeView(ChartType inType) + private void changeView(Field inField) { - if (inType == ChartType.ALTITUDE && !(_data instanceof AltitudeData)) + if (inField == Field.ALTITUDE) { - _data = new AltitudeData(_track); + if (!(_data instanceof AltitudeData)) { + _data = new AltitudeData(_track); + } } - else if (inType == ChartType.SPEED && !(_data instanceof SpeedData)) { - _data = new SpeedData(_track); + else if (inField == Field.SPEED) { + if (!(_data instanceof SpeedData)) { + _data = new SpeedData(_track); + } } - else if (inType == ChartType.VERT_SPEED && !(_data instanceof VerticalSpeedData)) { - _data = new VerticalSpeedData(_track); + else if (inField == Field.VERTICAL_SPEED) { + if (!(_data instanceof VerticalSpeedData)) { + _data = new VerticalSpeedData(_track); + } + } + else + { + if (!(_data instanceof ArbitraryData) || ((ArbitraryData)_data).getField() != inField) { + _data = new ArbitraryData(_track, inField); + } } _data.init(Config.getUnitSet()); repaint();