Add CustomFocusTraversalPolicy for BodyTubeConfig general
This commit is contained in:
parent
03cd1df7d4
commit
e5ee5640e1
@ -12,17 +12,24 @@ import java.util.List;
|
||||
* @author Sibo Van Gool <sibo.vangool@hotmail.com>
|
||||
*/
|
||||
public class CustomFocusTraversalPolicy extends FocusTraversalPolicy {
|
||||
List<Component> order;
|
||||
private final List<Component> order;
|
||||
|
||||
/**
|
||||
* @param order the order of components to traverse
|
||||
*/
|
||||
public CustomFocusTraversalPolicy(List<Component> order) {
|
||||
this.order = new LinkedList<Component>(order);
|
||||
this.order = new LinkedList<>(order);
|
||||
}
|
||||
|
||||
public Component getComponentAfter(Container focusCycleRoot, Component aComponent) {
|
||||
int idx = (order.indexOf(aComponent) + 1) % order.size();
|
||||
int count = 0;
|
||||
while (!order.get(idx).isEnabled()) {
|
||||
idx = (idx + 1) % order.size();
|
||||
count++;
|
||||
if (count == order.size())
|
||||
return aComponent;
|
||||
}
|
||||
return order.get(idx);
|
||||
}
|
||||
|
||||
@ -31,6 +38,13 @@ public class CustomFocusTraversalPolicy extends FocusTraversalPolicy {
|
||||
if (idx < 0) {
|
||||
idx = order.size() - 1;
|
||||
}
|
||||
int count = 0;
|
||||
while (!order.get(idx).isEnabled()) {
|
||||
idx = (idx - 1) % order.size();
|
||||
count++;
|
||||
if (count == order.size())
|
||||
return aComponent;
|
||||
}
|
||||
return order.get(idx);
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@ import net.miginfocom.swing.MigLayout;
|
||||
import net.sf.openrocket.document.OpenRocketDocument;
|
||||
import net.sf.openrocket.gui.SpinnerEditor;
|
||||
import net.sf.openrocket.gui.adaptors.BooleanModel;
|
||||
import net.sf.openrocket.gui.adaptors.CustomFocusTraversalPolicy;
|
||||
import net.sf.openrocket.gui.adaptors.DoubleModel;
|
||||
import net.sf.openrocket.gui.components.BasicSlider;
|
||||
import net.sf.openrocket.gui.components.UnitSelector;
|
||||
@ -39,6 +40,8 @@ public class BodyTubeConfig extends RocketComponentConfig {
|
||||
|
||||
JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
|
||||
|
||||
final List<Component> order = new ArrayList<>(); // Component traversal order
|
||||
|
||||
//// Body tube length
|
||||
panel.add(new JLabel(trans.get("BodyTubecfg.lbl.Bodytubelength")));
|
||||
|
||||
@ -49,6 +52,7 @@ public class BodyTubeConfig extends RocketComponentConfig {
|
||||
spin.setEditor(new SpinnerEditor(spin));
|
||||
focusElement = spin;
|
||||
panel.add(spin, "growx");
|
||||
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
|
||||
|
||||
panel.add(new UnitSelector(length), "growx");
|
||||
panel.add(new BasicSlider(length.getSliderModel(0, 0.5, maxLength)), "w 100lp, wrap");
|
||||
@ -61,6 +65,7 @@ public class BodyTubeConfig extends RocketComponentConfig {
|
||||
spin = new JSpinner(od.getSpinnerModel());
|
||||
spin.setEditor(new SpinnerEditor(spin));
|
||||
panel.add(spin, "growx");
|
||||
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
|
||||
|
||||
panel.add(new UnitSelector(od), "growx");
|
||||
panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 100lp, wrap 0px");
|
||||
@ -70,6 +75,7 @@ public class BodyTubeConfig extends RocketComponentConfig {
|
||||
checkAutoOuterRadius = new JCheckBox(outerAutoAction);
|
||||
checkAutoOuterRadius.setText(trans.get("BodyTubecfg.checkbox.Automatic"));
|
||||
panel.add(checkAutoOuterRadius, "skip, span 2, wrap");
|
||||
order.add(checkAutoOuterRadius);
|
||||
updateCheckboxAutoAftRadius();
|
||||
|
||||
//// Inner diameter
|
||||
@ -80,6 +86,7 @@ public class BodyTubeConfig extends RocketComponentConfig {
|
||||
spin = new JSpinner(innerRadiusModel.getSpinnerModel());
|
||||
spin.setEditor(new SpinnerEditor(spin));
|
||||
panel.add(spin, "growx");
|
||||
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
|
||||
|
||||
panel.add(new UnitSelector(innerRadiusModel), "growx");
|
||||
panel.add(new BasicSlider(innerRadiusModel.getSliderModel(new DoubleModel(0), od)), "w 100lp, wrap");
|
||||
@ -92,6 +99,7 @@ public class BodyTubeConfig extends RocketComponentConfig {
|
||||
spin = new JSpinner(thicknessModel.getSpinnerModel());
|
||||
spin.setEditor(new SpinnerEditor(spin));
|
||||
panel.add(spin, "growx");
|
||||
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
|
||||
|
||||
panel.add(new UnitSelector(thicknessModel), "growx");
|
||||
panel.add(new BasicSlider(thicknessModel.getSliderModel(0, 0.01)), "w 100lp, wrap 0px");
|
||||
@ -100,14 +108,21 @@ public class BodyTubeConfig extends RocketComponentConfig {
|
||||
JCheckBox check = new JCheckBox(new BooleanModel(component, "Filled"));
|
||||
check.setText(trans.get("BodyTubecfg.checkbox.Filled"));
|
||||
panel.add(check, "skip, span 2, wrap");
|
||||
order.add(check);
|
||||
|
||||
//// Material
|
||||
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK);
|
||||
order.add(materialPanel.getMaterialCombo());
|
||||
if (materialPanel.getFinishCombo() != null) {
|
||||
order.add(materialPanel.getFinishCombo());
|
||||
}
|
||||
panel.add(materialPanel, "cell 4 0, gapleft paragraph, aligny 0%, spany");
|
||||
|
||||
//// General and General properties
|
||||
tabbedPane.insertTab(trans.get("BodyTubecfg.tab.General"), null, panel,
|
||||
trans.get("BodyTubecfg.tab.Generalproperties"), 0);
|
||||
CustomFocusTraversalPolicy policy = new CustomFocusTraversalPolicy(order);
|
||||
parent.setFocusTraversalPolicy(policy);
|
||||
|
||||
tabbedPane.setSelectedIndex(0);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user