001 package swingui; 002 003 import java.awt.GridLayout; 004 import java.awt.event.ItemEvent; 005 import java.awt.event.ItemListener; 006 007 import javax.swing.JComboBox; 008 import javax.swing.JLabel; 009 import javax.swing.JPanel; 010 011 import physics3d.Angle; 012 import physics3d.Vect3; 013 014 import components.GameObject; 015 016 /** The OrientationPanel contains a JComboBox that allows the user to change the orientation 017 * of the given component. Orientation can be 0/90/180/270. 018 * <p> 019 * Like the other panels, this expects getObject() to be called; when this happens it 020 * updates the UI with information about the new object. 021 */ 022 public class OrientationPanel extends JPanel implements ItemListener { 023 /** a UID. for grins and giggles **/ 024 private static final long serialVersionUID = 1L; 025 026 /** the object whose orientation we display/modify **/ 027 private GameObject obj; 028 /** the orient box with 0/90/180/270 **/ 029 private JComboBox orientBox; 030 031 /** create a default OrientationPanel with nothing selected **/ 032 public OrientationPanel() { 033 super(); 034 035 //make components 036 JLabel orientLabel = new JLabel(" Orientation: "); 037 orientBox = new JComboBox(AngleSelect.DEFAULT_ANGLES); 038 orientBox.addItemListener(this); 039 040 //set to default (nothing selected) 041 setObject(null); 042 043 //add to layout 044 add(orientLabel); 045 add(orientBox); 046 } 047 048 /** when the user selects a different orientation, change that of the object **/ 049 public void itemStateChanged(ItemEvent e) { 050 if (obj == null) 051 return; 052 AngleSelect as = (AngleSelect) orientBox.getSelectedItem(); 053 Angle a = as.getAngle(); 054 if (obj != null) { 055 Vect3 tlf = obj.getTLF(); 056 obj.setOrientAngle(a); 057 obj.setTLF(tlf); //tlf is actually the same loc, but center changes for flippers 058 //gui.getCanvas().display(); 059 } 060 } 061 062 /** change the object that we are displaying info about **/ 063 public void setObject(GameObject go) { 064 obj = go; //set 065 if (go != null) 066 configureOrientBox(); 067 else 068 orientBox.setSelectedIndex(-1); //no selection 069 } 070 071 //selects correct angle for this object in combo box 072 private void configureOrientBox() { 073 Angle a = obj.getOrientAngle(); 074 if (a.equals(Angle.ZERO)) { 075 orientBox.setSelectedItem(AngleSelect.zero); 076 } else if (a.equals(Angle.DEG_90)) { 077 orientBox.setSelectedItem(AngleSelect.ninety); 078 } else if (a.equals(Angle.DEG_180)) { 079 orientBox.setSelectedItem(AngleSelect.one_eighty); 080 } else if (a.equals(Angle.DEG_270)) { 081 orientBox.setSelectedItem(AngleSelect.two_seventy); 082 } else { 083 throw new RuntimeException("wtf? angle="+a); 084 } 085 } 086 087 public String getName() { return "Orientation"; } 088 089 }