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