Add horizontal separator in view type combobox between 2D and 3D viewtypes

This commit is contained in:
SiboVG 2022-12-22 22:25:21 +01:00
parent 0b52d585cc
commit a944298624

View File

@ -2,6 +2,7 @@ package net.sf.openrocket.gui.scalefigure;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font; import java.awt.Font;
import java.awt.Point; import java.awt.Point;
@ -91,10 +92,12 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
private static final Translator trans = Application.getTranslator(); private static final Translator trans = Application.getTranslator();
private static final Logger log = LoggerFactory.getLogger(RocketPanel.class); private static final Logger log = LoggerFactory.getLogger(RocketPanel.class);
private static final String VIEW_TYPE_SEPARATOR = "__SEPARATOR__"; // Dummy string to indicate a horizontal separator item in the view type combobox
public enum VIEW_TYPE { public enum VIEW_TYPE {
SideView(false, RocketFigure.VIEW_SIDE), SideView(false, RocketFigure.VIEW_SIDE),
TopView(false, RocketFigure.VIEW_TOP), TopView(false, RocketFigure.VIEW_TOP),
BackView(false, RocketFigure.VIEW_BACK), BackView(false, RocketFigure.VIEW_BACK),
SEPARATOR(false, -248), // Horizontal combobox separator dummy item
Figure3D(true, RocketFigure3d.TYPE_FIGURE), Figure3D(true, RocketFigure3d.TYPE_FIGURE),
Unfinished(true, RocketFigure3d.TYPE_UNFINISHED), Unfinished(true, RocketFigure3d.TYPE_UNFINISHED),
Finished(true, RocketFigure3d.TYPE_FINISHED); Finished(true, RocketFigure3d.TYPE_FINISHED);
@ -109,6 +112,9 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
@Override @Override
public String toString() { public String toString() {
if (type == -248) {
return VIEW_TYPE_SEPARATOR;
}
return trans.get("RocketPanel.FigTypeAct." + super.toString()); return trans.get("RocketPanel.FigTypeAct." + super.toString());
} }
@ -313,8 +319,12 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
@Override @Override
public void setSelectedItem(Object o) { public void setSelectedItem(Object o) {
super.setSelectedItem(o);
VIEW_TYPE v = (VIEW_TYPE) o; VIEW_TYPE v = (VIEW_TYPE) o;
if (v == VIEW_TYPE.SEPARATOR) {
return;
}
super.setSelectedItem(o);
if (v.is3d) { if (v.is3d) {
figure3d.setType(v.type); figure3d.setType(v.type);
go3D(); go3D();
@ -326,7 +336,9 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
} }
}; };
ribbon.add(new JLabel(trans.get("RocketPanel.lbl.ViewType")), "cell 0 0"); ribbon.add(new JLabel(trans.get("RocketPanel.lbl.ViewType")), "cell 0 0");
ribbon.add(new JComboBox<VIEW_TYPE>(cm), "cell 0 1"); final JComboBox viewSelector = new JComboBox(cm);
viewSelector.setRenderer(new SeparatorComboBoxRenderer(viewSelector.getRenderer()));
ribbon.add(viewSelector, "cell 0 1");
// Zoom level selector // Zoom level selector
scaleSelector = new ScaleSelector(scrollPane); scaleSelector = new ScaleSelector(scrollPane);
@ -1063,40 +1075,27 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
figure3d.setSelection(components); figure3d.setSelection(components);
} }
// /** /**
// * An <code>Action</code> that shows whether the figure type is the * Custom combobox renderer that supports the display of horizontal separators between items.
// type * ComboBox objects with the text {@link VIEW_TYPE_SEPARATOR} objects in the combobox are replaced by a separator object.
// * given in the constructor. */
// * private static class SeparatorComboBoxRenderer extends JLabel implements ListCellRenderer {
// * @author Sampo Niskanen <sampo.niskanen@iki.fi> private final JSeparator separator;
// */ private final ListCellRenderer defaultRenderer;
// private class FigureTypeAction extends AbstractAction implements
// StateChangeListener { public SeparatorComboBoxRenderer(ListCellRenderer defaultRenderer) {
// private static final long serialVersionUID = 1L; this.defaultRenderer = defaultRenderer;
// private final VIEW_TYPE type; this.separator = new JSeparator(JSeparator.HORIZONTAL);
// }
// public FigureTypeAction(VIEW_TYPE type) {
// this.type = type; public Component getListCellRendererComponent(JList list, Object value,
// stateChanged(null); int index, boolean isSelected, boolean cellHasFocus) {
// figure.addChangeListener(this); String str = (value == null) ? "" : value.toString();
// } if (VIEW_TYPE_SEPARATOR.equals(str)) {
// return separator;
// @Override };
// public void actionPerformed(ActionEvent e) { return defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
// boolean state = (Boolean) getValue(Action.SELECTED_KEY); }
// if (state == true) { }
// // This view has been selected
// figure.setType(type);
// go2D();
// updateExtras();
// }
// stateChanged(null);
// }
//
// @Override
// public void stateChanged(EventObject e) {
// putValue(Action.SELECTED_KEY, figure.getType() == type && !is3d);
// }
// }
} }