Files
XPlaneConnectCSP/Java/ProjectModels/Visualizer/visualizer.java

297 lines
9.8 KiB
Java

package Visualizer;
import javax.swing.border.Border;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import CognitiveModel.ModelFiles.*;
public class visualizer extends Screen {
JPanel frameBottom = new JPanel();
JPanel controlDisplay = new JPanel();
JPanel modelDisplay = new JPanel();
JTextArea modelQueue = new JTextArea();
JTextArea modelVision = new JTextArea();
JPanel mainDisplay = new JPanel();
JPanel visualizer = new JPanel();
JPanel yokeGrid = new JPanel();
axis axis = new axis(0,0);
rudderPosition rudderGrid = new rudderPosition(yokeGrid.getWidth(), 0);
yokePosition yoke = new yokePosition(yokeGrid.getWidth(), yokeGrid.getHeight());
JLabel one = new JLabel();
JLabel two = new JLabel();
JLabel three = new JLabel();
JLabel four = new JLabel();
Timer t = new Timer(1, null);
Model m;
public visualizer(Model m) {
super(new BorderLayout());
this.m = m;
t.addActionListener(e -> {
try {
if (m.exportXPC().getCTRL(0) != null) { // Check to Make sure the XPC is actually receiving data
m.next();
updateVisualizer(m);
} else {
System.out.print("XPC not returning data yet");
}
} catch (IOException ex) {
throw new RuntimeException(ex);
}
});
initializeDisplay();
}
public void initializeDisplay() {
// try {
// UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
// } catch(Exception ignored){
//
// }
this.setPreferredSize(new Dimension(1700,270));
this.setVisible(true);
// frame.setPreferredSize(new Dimension(1700,270));
// frame.setLayout(new BorderLayout());
// frame.setVisible(true);
frameBottom.setLayout(new GridLayout(1,2));
controlDisplay.setPreferredSize(new Dimension(100,100));
controlDisplay.setLayout(new GridLayout(2,4));
Font fontTitles = new Font("Impact", 1,40);
Font fontData = new Font("Monospaced", 1,30);
JLabel titleOne = new JLabel("Elevator");
titleOne.setFont(fontTitles);
titleOne.setHorizontalAlignment(SwingConstants.CENTER);
titleOne.setVerticalAlignment(SwingConstants.BOTTOM);
JLabel titleTwo = new JLabel("Roll");
titleTwo.setFont(fontTitles);
titleTwo.setHorizontalAlignment(SwingConstants.CENTER);
titleTwo.setVerticalAlignment(SwingConstants.BOTTOM);
JLabel titleThree = new JLabel("Yaw");
titleThree.setFont(fontTitles);
titleThree.setHorizontalAlignment(SwingConstants.CENTER);
titleThree.setVerticalAlignment(SwingConstants.BOTTOM);
JLabel titleFour = new JLabel("Throttle");
titleFour.setFont(fontTitles);
titleFour.setHorizontalAlignment(SwingConstants.CENTER);
titleFour.setVerticalAlignment(SwingConstants.BOTTOM);
one = new JLabel();
one.setFont(fontData);
one.setHorizontalAlignment(SwingConstants.CENTER);
one.setVerticalAlignment(SwingConstants.TOP);
two = new JLabel();
two.setFont(fontData);
two.setHorizontalAlignment(SwingConstants.CENTER);
two.setVerticalAlignment(SwingConstants.TOP);
three = new JLabel();
three.setFont(fontData);
three.setHorizontalAlignment(SwingConstants.CENTER);
three.setVerticalAlignment(SwingConstants.TOP);
four = new JLabel();
four.setFont(fontData);
four.setHorizontalAlignment(SwingConstants.CENTER);
four.setVerticalAlignment(SwingConstants.TOP);
one.setText("Test");
two.setText("Test");
three.setText("Test");
four.setText("Test");
controlDisplay.add(titleOne);
controlDisplay.add(titleTwo);
controlDisplay.add(titleThree);
controlDisplay.add(titleFour);
controlDisplay.add(one);
controlDisplay.add(two);
controlDisplay.add(three);
controlDisplay.add(four);
visualizer.setLayout(new GridLayout(2,1));
//Col 1 of Visualizer
yokeGrid.setMinimumSize(new Dimension(100,100));
//grid.setOpaque(true);
// grid.setLayout(null);
yokeGrid.setBackground(Color.black);
yokeGrid.setVisible(true);
// grid.setLayout(new GridLayout(1,1));
yokeGrid.setLayout(new OverlayLayout(yokeGrid));
yoke = new yokePosition(yokeGrid.getWidth(), yokeGrid.getHeight());
// yaw yaw = new yaw(grid.getWidth(), grid.getHeight());
axis = new axis(yokeGrid.getWidth(), yokeGrid.getHeight());
// grid.setLayer(axis, layer1);
yokeGrid.add(axis);
yokeGrid.add(yoke);
// grid.add(yaw);
// grid.setLayer(yoke, layer2);
Border greenLine = BorderFactory.createLineBorder(Color.green);
yokeGrid.setBorder(greenLine);
visualizer.add(yokeGrid);
//Row 2 of Visualizer
//Rudder Vizualizer
rudderGrid = new rudderPosition(yokeGrid.getWidth(), 0);
visualizer.add(rudderGrid);
JToolBar tool = new JToolBar("Toolbar");
JButton b1 = new JButton("Data Log Disabled");
ActionListener press = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(m.logPermission() == false) {
m.startLog();
JOptionPane.showMessageDialog(visualizer,"Data Logging Enabled");
tool.setBackground(Color.green);
b1.setText("Data Log Enabled");
} else {
m.stopLog();
JOptionPane.showMessageDialog(visualizer,"Data Logging Disabled");
tool.setBackground(Color.white);
b1.setText("Data Log Disabled");
}
}
};
b1.addActionListener(press);
JButton b2 = new JButton("button 2");
tool.setBackground(Color.red);
tool.setOrientation(1);
tool.add(b1);
tool.add(b2);
this.add(tool,BorderLayout.WEST);
JPanel buttonBar = new JPanel();
buttonBar.setLayout(new GridLayout(2,1));
JToolBar tool2 = new JToolBar("Toolbar");
JButton b3 = new JButton("button 2");
JButton b4 = new JButton("button 2");
tool2.add(b3);
tool2.add(b4);
JToolBar tool3 = new JToolBar("Toolbar");
JButton b5 = new JButton("button 3");
JButton b6 = new JButton("button 3");
tool3.add(b5);
tool3.add(b6);
buttonBar.add(tool2);
buttonBar.add(tool3);
modelQueue.setRows(3);
modelQueue.setPreferredSize(new Dimension(250, mainDisplay.getWidth()));
modelVision.setRows(1);
Font font = new Font("Verdana", Font.BOLD, 12);
modelVision.setFont(font);
modelVision.setBackground(Color.PINK);
modelVision.setPreferredSize(new Dimension(250, mainDisplay.getWidth()));
modelDisplay.setLayout(new GridLayout(2,1));
modelDisplay.add(modelQueue);
modelDisplay.add(modelVision);
mainDisplay.setLayout(new BorderLayout());
mainDisplay.add(controlDisplay,BorderLayout.CENTER);
mainDisplay.add(modelDisplay,BorderLayout.SOUTH);
frameBottom.add(mainDisplay); // Left Side
frameBottom.add(visualizer); // Right Side
this.add(frameBottom,BorderLayout.CENTER);
this.add(buttonBar, BorderLayout.SOUTH);
// frame.pack();
}
public void updateVisualizer(Model m) throws IOException {
float[] ctrl1 = m.getCurrentControls();
one.setText(String.valueOf(ctrl1[0]));
if (ctrl1[0] >= 0 ) {
one.setForeground(Color.green);
} else {
one.setForeground(Color.red);
}
two.setText(String.valueOf(ctrl1[1]));
if (ctrl1[1] >= 0 ) {
two.setForeground(Color.green);
} else {
two.setForeground(Color.red);
}
three.setText(String.valueOf(ctrl1[2]));
if (ctrl1[2] >= 0 ) {
three.setForeground(Color.green);
} else {
three.setForeground(Color.red);
}
four.setText(String.valueOf(ctrl1[3]));
if (ctrl1[3] >= 0 ) {
four.setForeground(Color.green);
} else {
four.setForeground(Color.red);
}
yoke.setXBound(yokeGrid.getWidth());
yoke.setYBound(yokeGrid.getHeight());
yoke.setX(ctrl1[1]);
yoke.setY(ctrl1[0]);
yoke.repaint();
rudderGrid.setXBound(yokeGrid.getWidth());
rudderGrid.setYBound(yokeGrid.getHeight());
rudderGrid.setX(ctrl1[2]);
rudderGrid.repaint();
modelQueue.setText(m.getQueue().queueToString());
modelQueue.setPreferredSize(new Dimension(mainDisplay.getWidth(),100));
modelVision.setPreferredSize(new Dimension(mainDisplay.getWidth(),100));
modelVision.setText("We just looked at: " + m.getStoredVisionTarget() +"\n" +
"Result: " + m.getStoredVisionResult()[0]);
// yaw.setYBound(grid.getHeight());
// yaw.setYBound(grid.getHeight());
// yaw.setX(ctrl1[2]);
// yaw.repaint();
axis.setXBound(yokeGrid.getWidth());
axis.setYBound(yokeGrid.getHeight());
axis.repaint();
JButton j = new JButton();
}
public JPanel exportDisplay() {
return visualizer;
}
public Timer exportTimer() {
return t;
}
}