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.Component;
import java.awt.Dimension;
import java.awt.Font;
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 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 {
SideView(false, RocketFigure.VIEW_SIDE),
TopView(false, RocketFigure.VIEW_TOP),
BackView(false, RocketFigure.VIEW_BACK),
SEPARATOR(false, -248), // Horizontal combobox separator dummy item
Figure3D(true, RocketFigure3d.TYPE_FIGURE),
Unfinished(true, RocketFigure3d.TYPE_UNFINISHED),
Finished(true, RocketFigure3d.TYPE_FINISHED);
@ -109,6 +112,9 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
@Override
public String toString() {
if (type == -248) {
return VIEW_TYPE_SEPARATOR;
}
return trans.get("RocketPanel.FigTypeAct." + super.toString());
}
@ -313,8 +319,12 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
@Override
public void setSelectedItem(Object o) {
super.setSelectedItem(o);
VIEW_TYPE v = (VIEW_TYPE) o;
if (v == VIEW_TYPE.SEPARATOR) {
return;
}
super.setSelectedItem(o);
if (v.is3d) {
figure3d.setType(v.type);
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 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
scaleSelector = new ScaleSelector(scrollPane);
@ -1063,40 +1075,27 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
figure3d.setSelection(components);
}
// /**
// * An <code>Action</code> that shows whether the figure type is the
// type
// * given in the constructor.
// *
// * @author Sampo Niskanen <sampo.niskanen@iki.fi>
// */
// private class FigureTypeAction extends AbstractAction implements
// StateChangeListener {
// private static final long serialVersionUID = 1L;
// private final VIEW_TYPE type;
//
// public FigureTypeAction(VIEW_TYPE type) {
// this.type = type;
// stateChanged(null);
// figure.addChangeListener(this);
// }
//
// @Override
// public void actionPerformed(ActionEvent e) {
// 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);
// }
// }
/**
* Custom combobox renderer that supports the display of horizontal separators between items.
* ComboBox objects with the text {@link VIEW_TYPE_SEPARATOR} objects in the combobox are replaced by a separator object.
*/
private static class SeparatorComboBoxRenderer extends JLabel implements ListCellRenderer {
private final JSeparator separator;
private final ListCellRenderer defaultRenderer;
public SeparatorComboBoxRenderer(ListCellRenderer defaultRenderer) {
this.defaultRenderer = defaultRenderer;
this.separator = new JSeparator(JSeparator.HORIZONTAL);
}
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
String str = (value == null) ? "" : value.toString();
if (VIEW_TYPE_SEPARATOR.equals(str)) {
return separator;
};
return defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
}
}
}