bug fixes
This commit is contained in:
parent
429aa68ff8
commit
ccadafeba8
@ -1,3 +1,11 @@
|
|||||||
|
2010-07-19 Sampo Niskanen
|
||||||
|
|
||||||
|
* Small bug fixes
|
||||||
|
|
||||||
|
2010-07-18 Sampo Niskanen
|
||||||
|
|
||||||
|
* Major refactoring of simulation code
|
||||||
|
|
||||||
2010-03-21 Sampo Niskanen
|
2010-03-21 Sampo Niskanen
|
||||||
|
|
||||||
* Released version 1.1.0
|
* Released version 1.1.0
|
||||||
|
@ -85,10 +85,10 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
|
|
||||||
super();
|
super();
|
||||||
String constaint = "[min!]";
|
String constaint = "[min!]";
|
||||||
for (int i=1; i<MAXCOLS; i++)
|
for (int i = 1; i < MAXCOLS; i++)
|
||||||
constaint = constaint + GAP + "[min!]";
|
constaint = constaint + GAP + "[min!]";
|
||||||
|
|
||||||
layout = new MigLayout("fill",constaint);
|
layout = new MigLayout("fill", constaint);
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
this.document = document;
|
this.document = document;
|
||||||
this.selectionModel = model;
|
this.selectionModel = model;
|
||||||
@ -100,22 +100,21 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
addButtonRow("Body components and fin sets",row,
|
addButtonRow("Body components and fin sets", row,
|
||||||
new BodyComponentButton(NoseCone.class,"Nose cone"),
|
new BodyComponentButton(NoseCone.class, "Nose cone"),
|
||||||
new BodyComponentButton(BodyTube.class,"Body tube"),
|
new BodyComponentButton(BodyTube.class, "Body tube"),
|
||||||
new BodyComponentButton(Transition.class,"Transition"),
|
new BodyComponentButton(Transition.class, "Transition"),
|
||||||
new FinButton(TrapezoidFinSet.class,"Trapezoidal"), // TODO: MEDIUM: freer fin placing
|
new FinButton(TrapezoidFinSet.class, "Trapezoidal"), // TODO: MEDIUM: freer fin placing
|
||||||
new FinButton(EllipticalFinSet.class,"Elliptical"),
|
new FinButton(EllipticalFinSet.class, "Elliptical"),
|
||||||
new FinButton(FreeformFinSet.class,"Freeform"),
|
new FinButton(FreeformFinSet.class, "Freeform"),
|
||||||
new FinButton(LaunchLug.class,"Launch lug")
|
new FinButton(LaunchLug.class, "Launch lug"));
|
||||||
);
|
|
||||||
|
|
||||||
row++;
|
row++;
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
|
|
||||||
addButtonRow("Inner component",row,
|
addButtonRow("Inner component", row,
|
||||||
new ComponentButton(InnerTube.class, "Inner tube"),
|
new ComponentButton(InnerTube.class, "Inner tube"),
|
||||||
new ComponentButton(TubeCoupler.class, "Coupler"),
|
new ComponentButton(TubeCoupler.class, "Coupler"),
|
||||||
new ComponentButton(CenteringRing.class, "Centering\nring"),
|
new ComponentButton(CenteringRing.class, "Centering\nring"),
|
||||||
@ -126,21 +125,20 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
|
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
|
|
||||||
addButtonRow("Mass objects",row,
|
addButtonRow("Mass objects", row,
|
||||||
new ComponentButton(Parachute.class, "Parachute"),
|
new ComponentButton(Parachute.class, "Parachute"),
|
||||||
new ComponentButton(Streamer.class, "Streamer"),
|
new ComponentButton(Streamer.class, "Streamer"),
|
||||||
new ComponentButton(ShockCord.class, "Shock cord"),
|
new ComponentButton(ShockCord.class, "Shock cord"),
|
||||||
// new ComponentButton("Motor clip"),
|
// new ComponentButton("Motor clip"),
|
||||||
// new ComponentButton("Payload"),
|
// new ComponentButton("Payload"),
|
||||||
new ComponentButton(MassComponent.class,"Mass\ncomponent")
|
new ComponentButton(MassComponent.class, "Mass\ncomponent"));
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Get maximum button size
|
// Get maximum button size
|
||||||
int w=0, h=0;
|
int w = 0, h = 0;
|
||||||
|
|
||||||
for (row=0; row < buttons.length; row++) {
|
for (row = 0; row < buttons.length; row++) {
|
||||||
for (int col=0; col < buttons[row].length; col++) {
|
for (int col = 0; col < buttons[row].length; col++) {
|
||||||
Dimension d = buttons[row][col].getPreferredSize();
|
Dimension d = buttons[row][col].getPreferredSize();
|
||||||
if (d.width > w)
|
if (d.width > w)
|
||||||
w = d.width;
|
w = d.width;
|
||||||
@ -150,12 +148,12 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set all buttons to maximum size
|
// Set all buttons to maximum size
|
||||||
System.out.println("Setting w="+w+" h="+h);
|
System.out.println("Setting w=" + w + " h=" + h);
|
||||||
width=w;
|
width = w;
|
||||||
height=h;
|
height = h;
|
||||||
Dimension d = new Dimension(width,height);
|
Dimension d = new Dimension(width, height);
|
||||||
for (row=0; row < buttons.length; row++) {
|
for (row = 0; row < buttons.length; row++) {
|
||||||
for (int col=0; col < buttons[row].length; col++) {
|
for (int col = 0; col < buttons[row].length; col++) {
|
||||||
buttons[row][col].setMinimumSize(d);
|
buttons[row][col].setMinimumSize(d);
|
||||||
buttons[row][col].setPreferredSize(d);
|
buttons[row][col].setPreferredSize(d);
|
||||||
buttons[row][col].getComponent(0).validate();
|
buttons[row][col].getComponent(0).validate();
|
||||||
@ -166,6 +164,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
if (viewport != null) {
|
if (viewport != null) {
|
||||||
viewport.addChangeListener(new ChangeListener() {
|
viewport.addChangeListener(new ChangeListener() {
|
||||||
private int oldWidth = -1;
|
private int oldWidth = -1;
|
||||||
|
|
||||||
public void stateChanged(ChangeEvent e) {
|
public void stateChanged(ChangeEvent e) {
|
||||||
Dimension d = ComponentAddButtons.this.viewport.getExtentSize();
|
Dimension d = ComponentAddButtons.this.viewport.getExtentSize();
|
||||||
if (d.width != oldWidth) {
|
if (d.width != oldWidth) {
|
||||||
@ -176,7 +175,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
add(new JPanel(),"grow");
|
add(new JPanel(), "grow");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -186,21 +185,21 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
* @param row Row number
|
* @param row Row number
|
||||||
* @param b List of ComponentButtons to place on the row
|
* @param b List of ComponentButtons to place on the row
|
||||||
*/
|
*/
|
||||||
private void addButtonRow(String label, int row, ComponentButton ... b) {
|
private void addButtonRow(String label, int row, ComponentButton... b) {
|
||||||
if (row>0)
|
if (row > 0)
|
||||||
add(new JLabel(label),"span, gaptop unrel, wrap");
|
add(new JLabel(label), "span, gaptop unrel, wrap");
|
||||||
else
|
else
|
||||||
add(new JLabel(label),"span, gaptop 0, wrap");
|
add(new JLabel(label), "span, gaptop 0, wrap");
|
||||||
|
|
||||||
int col=0;
|
int col = 0;
|
||||||
buttons[row] = new ComponentButton[b.length];
|
buttons[row] = new ComponentButton[b.length];
|
||||||
|
|
||||||
for (int i=0; i<b.length; i++) {
|
for (int i = 0; i < b.length; i++) {
|
||||||
buttons[row][col] = b[i];
|
buttons[row][col] = b[i];
|
||||||
if (i < b.length-1)
|
if (i < b.length - 1)
|
||||||
add(b[i],BUTTONPARAM);
|
add(b[i], BUTTONPARAM);
|
||||||
else
|
else
|
||||||
add(b[i],BUTTONPARAM+", wrap");
|
add(b[i], BUTTONPARAM + ", wrap");
|
||||||
col++;
|
col++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -212,24 +211,24 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
* it to the next line.
|
* it to the next line.
|
||||||
*/
|
*/
|
||||||
private void flowButtons() {
|
private void flowButtons() {
|
||||||
if (viewport==null)
|
if (viewport == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int w;
|
int w;
|
||||||
|
|
||||||
Dimension d = viewport.getExtentSize();
|
Dimension d = viewport.getExtentSize();
|
||||||
|
|
||||||
for (int row=0; row < buttons.length; row++) {
|
for (int row = 0; row < buttons.length; row++) {
|
||||||
w=0;
|
w = 0;
|
||||||
for (int col=0; col < buttons[row].length; col++) {
|
for (int col = 0; col < buttons[row].length; col++) {
|
||||||
w += GAP+width;
|
w += GAP + width;
|
||||||
String param = BUTTONPARAM+",width "+width+"!,height "+height+"!";
|
String param = BUTTONPARAM + ",width " + width + "!,height " + height + "!";
|
||||||
|
|
||||||
if (w+EXTRASPACE > d.width) {
|
if (w + EXTRASPACE > d.width) {
|
||||||
param = param + ",newline";
|
param = param + ",newline";
|
||||||
w = GAP+width;
|
w = GAP + width;
|
||||||
}
|
}
|
||||||
if (col == buttons[row].length-1)
|
if (col == buttons[row].length - 1)
|
||||||
param = param + ",wrap";
|
param = param + ",wrap";
|
||||||
layout.setComponentConstraints(buttons[row][col], param);
|
layout.setComponentConstraints(buttons[row][col], param);
|
||||||
}
|
}
|
||||||
@ -248,7 +247,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
|
|
||||||
/** Only label, no icon. */
|
/** Only label, no icon. */
|
||||||
public ComponentButton(String text) {
|
public ComponentButton(String text) {
|
||||||
this(text,null,null);
|
this(text, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -257,27 +256,27 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
*/
|
*/
|
||||||
public ComponentButton(String text, Icon enabled, Icon disabled) {
|
public ComponentButton(String text, Icon enabled, Icon disabled) {
|
||||||
super();
|
super();
|
||||||
setLayout(new MigLayout("fill, flowy, insets 0, gap 0","",""));
|
setLayout(new MigLayout("fill, flowy, insets 0, gap 0", "", ""));
|
||||||
|
|
||||||
add(new JLabel(),"push, sizegroup spacing");
|
add(new JLabel(), "push, sizegroup spacing");
|
||||||
|
|
||||||
// Add Icon
|
// Add Icon
|
||||||
if (enabled != null) {
|
if (enabled != null) {
|
||||||
JLabel label = new JLabel(enabled);
|
JLabel label = new JLabel(enabled);
|
||||||
if (disabled != null)
|
if (disabled != null)
|
||||||
label.setDisabledIcon(disabled);
|
label.setDisabledIcon(disabled);
|
||||||
add(label,"growx");
|
add(label, "growx");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add labels
|
// Add labels
|
||||||
String[] l = text.split("\n");
|
String[] l = text.split("\n");
|
||||||
for (int i=0; i<l.length; i++) {
|
for (int i = 0; i < l.length; i++) {
|
||||||
add(new StyledLabel(l[i],SwingConstants.CENTER,-3.0f),"growx");
|
add(new StyledLabel(l[i], SwingConstants.CENTER, -3.0f), "growx");
|
||||||
}
|
}
|
||||||
|
|
||||||
add(new JLabel(),"push, sizegroup spacing");
|
add(new JLabel(), "push, sizegroup spacing");
|
||||||
|
|
||||||
valueChanged(null); // Update enabled status
|
valueChanged(null); // Update enabled status
|
||||||
selectionModel.addTreeSelectionListener(this);
|
selectionModel.addTreeSelectionListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -287,9 +286,9 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
* and the text. The icons are fetched based on the component type.
|
* and the text. The icons are fetched based on the component type.
|
||||||
*/
|
*/
|
||||||
public ComponentButton(Class<? extends RocketComponent> c, String text) {
|
public ComponentButton(Class<? extends RocketComponent> c, String text) {
|
||||||
this(text,ComponentIcons.getLargeIcon(c),ComponentIcons.getLargeDisabledIcon(c));
|
this(text, ComponentIcons.getLargeIcon(c), ComponentIcons.getLargeDisabledIcon(c));
|
||||||
|
|
||||||
if (c==null)
|
if (c == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
componentClass = c;
|
componentClass = c;
|
||||||
@ -297,8 +296,8 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
try {
|
try {
|
||||||
constructor = c.getConstructor();
|
constructor = c.getConstructor();
|
||||||
} catch (NoSuchMethodException e) {
|
} catch (NoSuchMethodException e) {
|
||||||
throw new IllegalArgumentException("Unable to get default "+
|
throw new IllegalArgumentException("Unable to get default " +
|
||||||
"constructor for class "+c,e);
|
"constructor for class " + c, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,9 +307,9 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
* c is null if there is no selection. The default is to use c.isCompatible(class).
|
* c is null if there is no selection. The default is to use c.isCompatible(class).
|
||||||
*/
|
*/
|
||||||
public boolean isAddable(RocketComponent c) {
|
public boolean isAddable(RocketComponent c) {
|
||||||
if (c==null)
|
if (c == null)
|
||||||
return false;
|
return false;
|
||||||
if (componentClass==null)
|
if (componentClass == null)
|
||||||
return false;
|
return false;
|
||||||
return c.isCompatible(componentClass);
|
return c.isCompatible(componentClass);
|
||||||
}
|
}
|
||||||
@ -345,7 +344,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
public void setEnabled(boolean enabled) {
|
public void setEnabled(boolean enabled) {
|
||||||
super.setEnabled(enabled);
|
super.setEnabled(enabled);
|
||||||
Component[] c = getComponents();
|
Component[] c = getComponents();
|
||||||
for (int i=0; i<c.length; i++)
|
for (int i = 0; i < c.length; i++)
|
||||||
c[i].setEnabled(enabled);
|
c[i].setEnabled(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,10 +353,10 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
* Update the enabled status of the button.
|
* Update the enabled status of the button.
|
||||||
*/
|
*/
|
||||||
private void updateEnabled() {
|
private void updateEnabled() {
|
||||||
RocketComponent c=null;
|
RocketComponent c = null;
|
||||||
TreePath p = selectionModel.getSelectionPath();
|
TreePath p = selectionModel.getSelectionPath();
|
||||||
if (p!=null)
|
if (p != null)
|
||||||
c = (RocketComponent)p.getLastPathComponent();
|
c = (RocketComponent) p.getLastPathComponent();
|
||||||
setEnabled(isAddable(c));
|
setEnabled(isAddable(c));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,11 +368,11 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
Integer position = null;
|
Integer position = null;
|
||||||
|
|
||||||
TreePath p = selectionModel.getSelectionPath();
|
TreePath p = selectionModel.getSelectionPath();
|
||||||
if (p!= null)
|
if (p != null)
|
||||||
c = (RocketComponent)p.getLastPathComponent();
|
c = (RocketComponent) p.getLastPathComponent();
|
||||||
|
|
||||||
Pair<RocketComponent, Integer> pos = getAdditionPosition(c);
|
Pair<RocketComponent, Integer> pos = getAdditionPosition(c);
|
||||||
if (pos==null) {
|
if (pos == null) {
|
||||||
// Cancel addition
|
// Cancel addition
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -395,13 +394,13 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
|
|
||||||
RocketComponent component;
|
RocketComponent component;
|
||||||
try {
|
try {
|
||||||
component = (RocketComponent)constructor.newInstance();
|
component = (RocketComponent) constructor.newInstance();
|
||||||
} catch (InstantiationException e) {
|
} catch (InstantiationException e) {
|
||||||
throw new BugException("Could not construct new instance of class "+
|
throw new BugException("Could not construct new instance of class " +
|
||||||
constructor,e);
|
constructor, e);
|
||||||
} catch (IllegalAccessException e) {
|
} catch (IllegalAccessException e) {
|
||||||
throw new BugException("Could not construct new instance of class "+
|
throw new BugException("Could not construct new instance of class " +
|
||||||
constructor,e);
|
constructor, e);
|
||||||
} catch (InvocationTargetException e) {
|
} catch (InvocationTargetException e) {
|
||||||
throw Reflection.handleWrappedException(e);
|
throw Reflection.handleWrappedException(e);
|
||||||
}
|
}
|
||||||
@ -419,8 +418,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
selectionModel.setSelectionPath(ComponentTreeModel.makeTreePath(component));
|
selectionModel.setSelectionPath(ComponentTreeModel.makeTreePath(component));
|
||||||
|
|
||||||
JFrame parent = null;
|
JFrame parent = null;
|
||||||
for (Component comp = ComponentAddButtons.this; comp != null;
|
for (Component comp = ComponentAddButtons.this; comp != null; comp = comp.getParent()) {
|
||||||
comp = comp.getParent()) {
|
|
||||||
if (comp instanceof JFrame) {
|
if (comp instanceof JFrame) {
|
||||||
parent = (JFrame) comp;
|
parent = (JFrame) comp;
|
||||||
break;
|
break;
|
||||||
@ -462,28 +460,31 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Pair<RocketComponent, Integer> getAdditionPosition(RocketComponent c) {
|
public Pair<RocketComponent, Integer> getAdditionPosition(RocketComponent c) {
|
||||||
if (super.isAddable(c)) // Handled automatically
|
if (super.isAddable(c)) // Handled automatically
|
||||||
return super.getAdditionPosition(c);
|
return super.getAdditionPosition(c);
|
||||||
|
|
||||||
|
|
||||||
if (c == null || c instanceof Rocket) {
|
if (c == null || c instanceof Rocket) {
|
||||||
// Add as last body component of the last stage
|
// Add as last body component of the last stage
|
||||||
Rocket rocket = document.getRocket();
|
Rocket rocket = document.getRocket();
|
||||||
return new Pair<RocketComponent,Integer>(rocket.getChild(rocket.getStageCount()-1),
|
return new Pair<RocketComponent, Integer>(rocket.getChild(rocket.getStageCount() - 1),
|
||||||
null);
|
null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(c instanceof BodyComponent))
|
if (!(c instanceof BodyComponent))
|
||||||
return null;
|
return null;
|
||||||
RocketComponent parent = c.getParent();
|
RocketComponent parent = c.getParent();
|
||||||
assert(parent != null);
|
if (parent == null) {
|
||||||
|
throw new BugException("Component " + c.getComponentName() + " is the root component, " +
|
||||||
|
"componentClass=" + componentClass);
|
||||||
|
}
|
||||||
|
|
||||||
// Check whether to insert between or at the end.
|
// Check whether to insert between or at the end.
|
||||||
// 0 = ask, 1 = in between, 2 = at the end
|
// 0 = ask, 1 = in between, 2 = at the end
|
||||||
int pos = Prefs.getChoise(Prefs.BODY_COMPONENT_INSERT_POSITION_KEY, 2, 0);
|
int pos = Prefs.getChoise(Prefs.BODY_COMPONENT_INSERT_POSITION_KEY, 2, 0);
|
||||||
if (pos==0) {
|
if (pos == 0) {
|
||||||
if (parent.getChildPosition(c) == parent.getChildCount()-1)
|
if (parent.getChildPosition(c) == parent.getChildCount() - 1)
|
||||||
pos = 2; // Selected component is the last component
|
pos = 2; // Selected component is the last component
|
||||||
else
|
else
|
||||||
pos = askPosition();
|
pos = askPosition();
|
||||||
}
|
}
|
||||||
@ -494,12 +495,12 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
return null;
|
return null;
|
||||||
case 1:
|
case 1:
|
||||||
// Insert after current position
|
// Insert after current position
|
||||||
return new Pair<RocketComponent,Integer>(parent, parent.getChildPosition(c)+1);
|
return new Pair<RocketComponent, Integer>(parent, parent.getChildPosition(c) + 1);
|
||||||
case 2:
|
case 2:
|
||||||
// Insert at the end of the parent
|
// Insert at the end of the parent
|
||||||
return new Pair<RocketComponent,Integer>(parent, null);
|
return new Pair<RocketComponent, Integer>(parent, null);
|
||||||
default:
|
default:
|
||||||
ExceptionHandler.handleErrorCondition("ERROR: Bad position type: "+pos);
|
ExceptionHandler.handleErrorCondition("ERROR: Bad position type: " + pos);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -509,21 +510,21 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
|
|
||||||
JPanel panel = new JPanel(new MigLayout());
|
JPanel panel = new JPanel(new MigLayout());
|
||||||
JCheckBox check = new JCheckBox("Do not ask me again");
|
JCheckBox check = new JCheckBox("Do not ask me again");
|
||||||
panel.add(check,"wrap");
|
panel.add(check, "wrap");
|
||||||
panel.add(new StyledLabel("You can change the default operation in the " +
|
panel.add(new StyledLabel("You can change the default operation in the " +
|
||||||
"preferences.",-2));
|
"preferences.", -2));
|
||||||
|
|
||||||
int sel = JOptionPane.showOptionDialog(null, // parent component
|
int sel = JOptionPane.showOptionDialog(null, // parent component
|
||||||
new Object[] {
|
new Object[] {
|
||||||
"Insert the component after the current component or as the last " +
|
"Insert the component after the current component or as the last " +
|
||||||
"component?",
|
"component?",
|
||||||
panel },
|
panel },
|
||||||
"Select component position", // title
|
"Select component position", // title
|
||||||
JOptionPane.DEFAULT_OPTION, // default selections
|
JOptionPane.DEFAULT_OPTION, // default selections
|
||||||
JOptionPane.QUESTION_MESSAGE, // dialog type
|
JOptionPane.QUESTION_MESSAGE, // dialog type
|
||||||
null, // icon
|
null, // icon
|
||||||
options, // options
|
options, // options
|
||||||
options[0]); // initial value
|
options[0]); // initial value
|
||||||
|
|
||||||
switch (sel) {
|
switch (sel) {
|
||||||
case JOptionPane.CLOSED_OPTION:
|
case JOptionPane.CLOSED_OPTION:
|
||||||
@ -539,7 +540,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
sel = 2;
|
sel = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ExceptionHandler.handleErrorCondition("ERROR: JOptionPane returned "+sel);
|
ExceptionHandler.handleErrorCondition("ERROR: JOptionPane returned " + sel);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -572,7 +573,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAddable(RocketComponent c) {
|
public boolean isAddable(RocketComponent c) {
|
||||||
if (c==null)
|
if (c == null)
|
||||||
return false;
|
return false;
|
||||||
return (c.getClass().equals(BodyTube.class));
|
return (c.getClass().equals(BodyTube.class));
|
||||||
}
|
}
|
||||||
@ -616,4 +617,3 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ import javax.swing.JProgressBar;
|
|||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import net.sf.openrocket.document.Simulation;
|
import net.sf.openrocket.document.Simulation;
|
||||||
import net.sf.openrocket.gui.dialogs.DetailDialog;
|
import net.sf.openrocket.gui.dialogs.DetailDialog;
|
||||||
|
import net.sf.openrocket.logging.LogHelper;
|
||||||
import net.sf.openrocket.rocketcomponent.Configuration;
|
import net.sf.openrocket.rocketcomponent.Configuration;
|
||||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||||
import net.sf.openrocket.rocketcomponent.MotorMount.IgnitionEvent;
|
import net.sf.openrocket.rocketcomponent.MotorMount.IgnitionEvent;
|
||||||
@ -35,6 +36,7 @@ import net.sf.openrocket.simulation.exception.SimulationException;
|
|||||||
import net.sf.openrocket.simulation.exception.SimulationLaunchException;
|
import net.sf.openrocket.simulation.exception.SimulationLaunchException;
|
||||||
import net.sf.openrocket.simulation.listeners.AbstractSimulationListener;
|
import net.sf.openrocket.simulation.listeners.AbstractSimulationListener;
|
||||||
import net.sf.openrocket.simulation.listeners.SimulationListener;
|
import net.sf.openrocket.simulation.listeners.SimulationListener;
|
||||||
|
import net.sf.openrocket.startup.Application;
|
||||||
import net.sf.openrocket.unit.Unit;
|
import net.sf.openrocket.unit.Unit;
|
||||||
import net.sf.openrocket.unit.UnitGroup;
|
import net.sf.openrocket.unit.UnitGroup;
|
||||||
import net.sf.openrocket.util.GUIUtil;
|
import net.sf.openrocket.util.GUIUtil;
|
||||||
@ -43,6 +45,8 @@ import net.sf.openrocket.util.Prefs;
|
|||||||
|
|
||||||
|
|
||||||
public class SimulationRunDialog extends JDialog {
|
public class SimulationRunDialog extends JDialog {
|
||||||
|
private static final LogHelper log = Application.getLogger();
|
||||||
|
|
||||||
/** Update the dialog status every this many ms */
|
/** Update the dialog status every this many ms */
|
||||||
private static final long UPDATE_MS = 200;
|
private static final long UPDATE_MS = 200;
|
||||||
|
|
||||||
@ -174,7 +178,6 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
|
|
||||||
|
|
||||||
private void updateProgress() {
|
private void updateProgress() {
|
||||||
System.out.println("updateProgress() called");
|
|
||||||
int index;
|
int index;
|
||||||
for (index = 0; index < simulations.length; index++) {
|
for (index = 0; index < simulations.length; index++) {
|
||||||
if (!simulationDone[index])
|
if (!simulationDone[index])
|
||||||
@ -183,7 +186,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
|
|
||||||
if (index >= simulations.length) {
|
if (index >= simulations.length) {
|
||||||
// Everything is done, close the dialog
|
// Everything is done, close the dialog
|
||||||
System.out.println("Everything done.");
|
log.debug("Everything done.");
|
||||||
this.dispose();
|
this.dispose();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -195,15 +198,15 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
}
|
}
|
||||||
progress /= simulationWorkers.length;
|
progress /= simulationWorkers.length;
|
||||||
progressBar.setValue(progress);
|
progressBar.setValue(progress);
|
||||||
System.out.println("Progressbar value " + progress);
|
log.debug("Progressbar value " + progress);
|
||||||
|
|
||||||
// Update the simulation fields
|
// Update the simulation fields
|
||||||
simLabel.setText("Running " + simulations[index].getName());
|
simLabel.setText("Running " + simulations[index].getName());
|
||||||
if (simulationStatuses[index] == null) {
|
if (simulationStatuses[index] == null) {
|
||||||
|
log.debug("No simulation status data available, setting empty labels");
|
||||||
timeLabel.setText("");
|
timeLabel.setText("");
|
||||||
altLabel.setText("");
|
altLabel.setText("");
|
||||||
velLabel.setText("");
|
velLabel.setText("");
|
||||||
System.out.println("Empty labels, how sad.");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +220,6 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
u = UnitGroup.UNITS_VELOCITY.getDefaultUnit();
|
u = UnitGroup.UNITS_VELOCITY.getDefaultUnit();
|
||||||
velLabel.setText(u.toStringUnit(simulationStatuses[index].getRocketVelocity().z) + " (max. " +
|
velLabel.setText(u.toStringUnit(simulationStatuses[index].getRocketVelocity().z) + " (max. " +
|
||||||
u.toStringUnit(simulationMaxVelocity[index]) + ")");
|
u.toStringUnit(simulationMaxVelocity[index]) + ")");
|
||||||
System.out.println("Set interesting labels.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -299,7 +301,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
|
|
||||||
// 1. time = 0 ... burnoutTimeEstimate
|
// 1. time = 0 ... burnoutTimeEstimate
|
||||||
if (simulationStage == -2 && status.getSimulationTime() < burnoutTimeEstimate) {
|
if (simulationStage == -2 && status.getSimulationTime() < burnoutTimeEstimate) {
|
||||||
System.out.println("Method 1: t=" + status.getSimulationTime() + " est=" + burnoutTimeEstimate);
|
log.debug("Method 1: t=" + status.getSimulationTime() + " est=" + burnoutTimeEstimate);
|
||||||
setSimulationProgress(MathUtil.map(status.getSimulationTime(), 0, burnoutTimeEstimate,
|
setSimulationProgress(MathUtil.map(status.getSimulationTime(), 0, burnoutTimeEstimate,
|
||||||
0.0, BURNOUT_PROGRESS));
|
0.0, BURNOUT_PROGRESS));
|
||||||
updateProgress();
|
updateProgress();
|
||||||
@ -309,13 +311,12 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
if (simulationStage == -2) {
|
if (simulationStage == -2) {
|
||||||
simulationStage++;
|
simulationStage++;
|
||||||
burnoutVelocity = MathUtil.max(status.getRocketVelocity().z, 0.1);
|
burnoutVelocity = MathUtil.max(status.getRocketVelocity().z, 0.1);
|
||||||
System.out.println("CHANGING to Method 2, vel=" + burnoutVelocity);
|
log.debug("CHANGING to Method 2, vel=" + burnoutVelocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. z-velocity from burnout velocity to zero
|
// 2. z-velocity from burnout velocity to zero
|
||||||
if (simulationStage == -1 && status.getRocketVelocity().z >= 0) {
|
if (simulationStage == -1 && status.getRocketVelocity().z >= 0) {
|
||||||
System.out.println("Method 2: vel=" + status.getRocketVelocity().z + " burnout=" +
|
log.debug("Method 2: vel=" + status.getRocketVelocity().z + " burnout=" + burnoutVelocity);
|
||||||
burnoutVelocity);
|
|
||||||
setSimulationProgress(MathUtil.map(status.getRocketVelocity().z, burnoutVelocity, 0,
|
setSimulationProgress(MathUtil.map(status.getRocketVelocity().z, burnoutVelocity, 0,
|
||||||
BURNOUT_PROGRESS, APOGEE_PROGRESS));
|
BURNOUT_PROGRESS, APOGEE_PROGRESS));
|
||||||
updateProgress();
|
updateProgress();
|
||||||
@ -325,11 +326,12 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
if (simulationStage == -1 && status.getRocketVelocity().z < 0) {
|
if (simulationStage == -1 && status.getRocketVelocity().z < 0) {
|
||||||
simulationStage++;
|
simulationStage++;
|
||||||
apogeeAltitude = MathUtil.max(status.getRocketPosition().z, 1);
|
apogeeAltitude = MathUtil.max(status.getRocketPosition().z, 1);
|
||||||
|
log.debug("CHANGING to Method 3, apogee=" + apogeeAltitude);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. z-position from apogee to zero
|
// 3. z-position from apogee to zero
|
||||||
// TODO: MEDIUM: several stages
|
// TODO: MEDIUM: several stages
|
||||||
System.out.println("Method 3: alt=" + status.getRocketPosition().z + " apogee=" + apogeeAltitude);
|
log.debug("Method 3: alt=" + status.getRocketPosition().z + " apogee=" + apogeeAltitude);
|
||||||
setSimulationProgress(MathUtil.map(status.getRocketPosition().z,
|
setSimulationProgress(MathUtil.map(status.getRocketPosition().z,
|
||||||
apogeeAltitude, 0, APOGEE_PROGRESS, 1.0));
|
apogeeAltitude, 0, APOGEE_PROGRESS, 1.0));
|
||||||
updateProgress();
|
updateProgress();
|
||||||
@ -341,7 +343,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
@Override
|
@Override
|
||||||
protected void simulationDone() {
|
protected void simulationDone() {
|
||||||
simulationDone[index] = true;
|
simulationDone[index] = true;
|
||||||
System.out.println("DONE, setting progress");
|
log.debug("Simulation done");
|
||||||
setSimulationProgress(1.0);
|
setSimulationProgress(1.0);
|
||||||
updateProgress();
|
updateProgress();
|
||||||
}
|
}
|
||||||
@ -425,10 +427,9 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
|
|
||||||
|
|
||||||
private void setSimulationProgress(double p) {
|
private void setSimulationProgress(double p) {
|
||||||
progress = Math.max(progress, (int) (100 * p + 0.5));
|
int exact = Math.max(progress, (int) (100 * p + 0.5));
|
||||||
progress = MathUtil.clamp(progress, 0, 100);
|
progress = MathUtil.clamp(exact, 0, 100);
|
||||||
System.out.println("Setting progress to " + progress + " (real " +
|
log.debug("Setting progress to " + progress + " (real " + exact + ")");
|
||||||
((int) (100 * p + 0.5)) + ")");
|
|
||||||
super.setProgress(progress);
|
super.setProgress(progress);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,7 +449,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
case APOGEE:
|
case APOGEE:
|
||||||
simulationStage = 0;
|
simulationStage = 0;
|
||||||
apogeeAltitude = status.getRocketPosition().z;
|
apogeeAltitude = status.getRocketPosition().z;
|
||||||
System.out.println("APOGEE, setting progress");
|
log.debug("APOGEE, setting progress");
|
||||||
setSimulationProgress(APOGEE_PROGRESS);
|
setSimulationProgress(APOGEE_PROGRESS);
|
||||||
publish(status);
|
publish(status);
|
||||||
break;
|
break;
|
||||||
@ -458,7 +459,7 @@ public class SimulationRunDialog extends JDialog {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SIMULATION_END:
|
case SIMULATION_END:
|
||||||
System.out.println("END, setting progress");
|
log.debug("END, setting progress");
|
||||||
setSimulationProgress(1.0);
|
setSimulationProgress(1.0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -479,9 +479,7 @@ public class Prefs {
|
|||||||
//// Background flight data computation
|
//// Background flight data computation
|
||||||
|
|
||||||
public static boolean computeFlightInBackground() {
|
public static boolean computeFlightInBackground() {
|
||||||
// TODO: CRITICAL: Revert
|
return PREFNODE.getBoolean("backgroundFlight", true);
|
||||||
return false;
|
|
||||||
// return PREFNODE.getBoolean("backgroundFlight", true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Simulation getBackgroundSimulation(Rocket rocket) {
|
public static Simulation getBackgroundSimulation(Rocket rocket) {
|
||||||
|
@ -31,7 +31,7 @@ public class LoggingTest {
|
|||||||
List<LogLine> logs = log4.getLogs();
|
List<LogLine> logs = log4.getLogs();
|
||||||
assertEquals(4, logs.size());
|
assertEquals(4, logs.size());
|
||||||
assertTrue(logs.get(0).toString(), logs.get(0).toString().matches(
|
assertTrue(logs.get(0).toString(), logs.get(0).toString().matches(
|
||||||
" *[0-9]+ +[0-9]+\\.[0-9]+ +DEBUG \\(LoggingTest.java:[0-9]+\\) two"));
|
" *[0-9]+ +[0-9]+\\.[0-9]+ +DEBUG \\(-\\) two"));
|
||||||
assertTrue(logs.get(1).toString(), logs.get(1).toString().matches(
|
assertTrue(logs.get(1).toString(), logs.get(1).toString().matches(
|
||||||
" *[0-9]+ +[0-9]+\\.[0-9]+ +INFO \\(LoggingTest.java:[0-9]+\\) three"));
|
" *[0-9]+ +[0-9]+\\.[0-9]+ +INFO \\(LoggingTest.java:[0-9]+\\) three"));
|
||||||
assertTrue(logs.get(2).toString(), logs.get(2).toString().matches(
|
assertTrue(logs.get(2).toString(), logs.get(2).toString().matches(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user