Merge pull request #28 from openrocket/unstable

Unstable update 5-28-2018
This commit is contained in:
ChrisMickelson 2018-05-28 12:31:58 -05:00 committed by GitHub
commit b143f0f30e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 102 additions and 100 deletions

View File

@ -0,0 +1,96 @@
package net.sf.openrocket.gui.components;
import javax.swing.JComboBox;
import javax.swing.MutableComboBoxModel;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.ListDataListener;
import javax.swing.event.PopupMenuListener;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
import net.sf.openrocket.rocketcomponent.FlightConfigurationId;
// combobox for flight configurations
// this is insane -- it appears the only way to reconstruct a
// JComboBox properly after adding a new entry (when added to the
// underlying data structure being displayed, not when added directly
// to the combobox or to its model) is to reconstruct the model. This
// is done quickly enough I might as well just do it every time the
// combobox is opened, rather than trying to watch and see if it's needed.
public class ConfigurationComboBox extends JComboBox<FlightConfiguration> {
public class ConfigurationModel implements MutableComboBoxModel<FlightConfiguration> {
private final Rocket rkt;
public ConfigurationModel(final Rocket _rkt) {
this.rkt = _rkt;
}
@Override
public FlightConfiguration getSelectedItem() {
return rkt.getSelectedConfiguration();
}
@Override
public void setSelectedItem(Object nextItem) {
if( nextItem instanceof FlightConfiguration ){
FlightConfigurationId selectedId = ((FlightConfiguration)nextItem).getId();
rkt.setSelectedConfiguration(selectedId);
}
}
@Override
public FlightConfiguration getElementAt( final int configIndex) {
return rkt.getFlightConfigurationByIndex(configIndex, true);
}
@Override
public int getSize() {
// plus the default config
return rkt.getConfigurationCount()+1;
}
// ====== MutableComboBoxModel Functions ======
// these functions don't need to do anything, just being a 'mutable' version of the combo box
// is enough to allow updating the UI
@Override
public void addListDataListener(ListDataListener l) {}
@Override
public void removeListDataListener(ListDataListener l) {}
@Override
public void addElement(FlightConfiguration arg0) {}
@Override
public void insertElementAt(FlightConfiguration arg0, int arg1) {}
@Override
public void removeElement(Object arg0) {}
@Override
public void removeElementAt(int arg0) {}
}
private final Rocket rkt;
public ConfigurationComboBox(Rocket _rkt) {
rkt = _rkt;
setModel(new ConfigurationModel(rkt));
addPopupMenuListener(new PopupMenuListener()
{
public void popupMenuCanceled(PopupMenuEvent e) {}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
public void popupMenuWillBecomeVisible(PopupMenuEvent e)
{
setModel(new ConfigurationModel(rkt));
}
});
}
}

View File

@ -1,86 +0,0 @@
package net.sf.openrocket.gui.components;
import net.sf.openrocket.rocketcomponent.FlightConfigurationId;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
import net.sf.openrocket.util.StateChangeListener;
import javax.swing.*;
import javax.swing.event.ListDataListener;
import java.util.EventObject;
public class ConfigurationModel implements MutableComboBoxModel<FlightConfiguration>, StateChangeListener {
private final Rocket rkt;
private final JComboBox<FlightConfiguration> combo;
public ConfigurationModel( final Rocket _rkt, final JComboBox<FlightConfiguration> _combo) {
this.rkt = _rkt;
this.combo = _combo;
}
@Override
public void stateChanged(EventObject eo) {
combo.revalidate();
combo.repaint();
}
@Override
public Object getSelectedItem() {
return rkt.getSelectedConfiguration();
}
@Override
public void setSelectedItem(Object nextItem) {
if( nextItem instanceof FlightConfiguration ){
FlightConfigurationId selectedId = ((FlightConfiguration)nextItem).getId();
rkt.setSelectedConfiguration(selectedId);
}
}
@Override
public void addListDataListener(ListDataListener l) {
// let the rocket send events, if necessary
// ignore any listen requests here...
}
public FlightConfiguration getElementAt( final int configIndex) {
return rkt.getFlightConfigurationByIndex(configIndex, true);
}
@Override
public int getSize() {
// plus the default config
return rkt.getConfigurationCount()+1;
}
@Override
public void removeListDataListener(ListDataListener l) {
// delegate event handling to the rocket
// ignore any listen requests here...
}
// ====== MutableComboBoxModel Functions ======
// these functions don't need to do anything, just being a 'mutable' version of the combo box
// is enough to allow updating the UI
@Override
public void addElement(FlightConfiguration arg0) {}
@Override
public void insertElementAt(FlightConfiguration arg0, int arg1) {}
@Override
public void removeElement(Object arg0) {}
@Override
public void removeElementAt(int arg0) {}
}

View File

@ -47,7 +47,7 @@ import net.sf.openrocket.gui.adaptors.ColumnTable;
import net.sf.openrocket.gui.adaptors.ColumnTableModel;
import net.sf.openrocket.gui.adaptors.DoubleModel;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.ConfigurationModel;
import net.sf.openrocket.gui.components.ConfigurationComboBox;
import net.sf.openrocket.gui.components.StageSelector;
import net.sf.openrocket.gui.components.StyledLabel;
import net.sf.openrocket.gui.components.UnitSelector;
@ -176,9 +176,7 @@ public class ComponentAnalysisDialog extends JDialog implements StateChangeListe
label.setHorizontalAlignment(JLabel.RIGHT);
panel.add(label, "growx, right");
final JComboBox<FlightConfiguration> configComboBox = new JComboBox<>();
final ConfigurationModel configModel = new ConfigurationModel(rkt, configComboBox);
configComboBox.setModel( configModel);
final ConfigurationComboBox configComboBox = new ConfigurationComboBox(rkt);
panel.add( configComboBox, "wrap");

View File

@ -38,7 +38,7 @@ import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.document.Simulation;
import net.sf.openrocket.gui.adaptors.DoubleModel;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.ConfigurationModel;
import net.sf.openrocket.gui.components.ConfigurationComboBox;
import net.sf.openrocket.gui.components.StageSelector;
import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.gui.configdialog.ComponentConfigDialog;
@ -318,13 +318,9 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
label.setHorizontalAlignment(JLabel.RIGHT);
add(label, "growx, right");
final JComboBox<FlightConfiguration> configComboBox = new JComboBox<>();
final ConfigurationModel configModel = new ConfigurationModel(rkt, configComboBox);
rkt.addChangeListener( configModel );
configComboBox.setModel(configModel);
final ConfigurationComboBox configComboBox = new ConfigurationComboBox(rkt);
add(configComboBox, "wrap, width 16%, wmin 100");
// Create slider and scroll pane
DoubleModel theta = new DoubleModel(figure, "Rotation",
UnitGroup.UNITS_ANGLE, 0, 2 * Math.PI);

View File

@ -21,7 +21,7 @@ import javax.swing.event.DocumentListener;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.document.Simulation;
import net.sf.openrocket.gui.components.ConfigurationModel;
import net.sf.openrocket.gui.components.ConfigurationComboBox;
import net.sf.openrocket.gui.util.GUIUtil;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
@ -148,9 +148,7 @@ public class SimulationEditDialog extends JDialog {
panel.add(label, "growx 0, gapright para");
final Rocket rkt = document.getRocket();
final JComboBox<FlightConfiguration> configComboBox = new JComboBox<>();
final ConfigurationModel configModel = new ConfigurationModel(rkt, configComboBox);
configComboBox.setModel( configModel);
final ConfigurationComboBox configComboBox = new ConfigurationComboBox(rkt);
//// Select the motor configuration to use.
configComboBox.setToolTipText(trans.get("simedtdlg.combo.ttip.Flightcfg"));