package kernel.ui; import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.SwingUtilities; import kernel.Kernel; import kernel.ComponentManager; import rescuecore2.config.Config; import rescuecore2.registry.Registry; import rescuecore2.GUIComponent; /** A GUI for the kernel. */ public class KernelGUI extends JPanel { private static final int STATUS_SIZE = 300; private Kernel kernel; private KernelStatus status; private KernelControlPanel control; private JTabbedPane tabs; private Config config; /** Construct a KernelGUI component. @param kernel The kernel to watch. @param componentManager The kernel component manager. @param config The kernel configuration. @param registry The registry to use for new connections. @param controls Whether to show the control panel or not. */ public KernelGUI(Kernel kernel, ComponentManager componentManager, Config config, Registry registry, boolean controls) { super(new BorderLayout()); this.kernel = kernel; this.config = config; status = new KernelStatus(kernel); status.setPreferredSize(new Dimension(STATUS_SIZE, STATUS_SIZE)); add(status, BorderLayout.EAST); tabs = new JTabbedPane(); add(tabs, BorderLayout.CENTER); if (controls) { control = new KernelControlPanel(kernel, config, componentManager, registry); add(control, BorderLayout.WEST); control.activate(); } addGUIComponent(componentManager); } /** Add a kernel GUI component. @param c The GUI component to add. */ public void addGUIComponent(final GUIComponent c) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if (c.getGUIComponent() != null) { tabs.addTab(c.getGUIComponentName(), c.getGUIComponent()); } } }); } }