package uk.co.mmscomputing.device.capi; import java.io.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import uk.co.mmscomputing.util.metadata.*; import uk.co.mmscomputing.device.capi.exception.*; public class CapiPanel extends JPanel{ private JPanel controller; private JPanel profile; public CapiPanel(Metadata md)throws CapiInformation{ setLayout(new BorderLayout()); profile = new JPanel(new BorderLayout()); controller = createCtrlGroup(md); add(controller,BorderLayout.NORTH); add(profile,BorderLayout.CENTER); } private JPanel createCtrlGroup(Metadata md)throws CapiInformation{ CapiController[] controllers = CapiEnumerator.getControllers(); JPanel p=new JPanel(); p.setLayout(new GridLayout(0,1)); p.setBorder(new EtchedBorder()); if(controllers.length>0){ JRadioButton rb; ButtonGroup bg = new ButtonGroup(); JRadioButton[] rbsController = new JRadioButton[controllers.length]; for(int i=0;i<controllers.length;i++){ CapiController ctrl=controllers[i]; JTree tree = new JTree(ctrl.getProfile().toTree()); JScrollPane treeView = new JScrollPane(tree); rb=new JRadioButton(getRBAction(treeView,md,ctrl)); bg.add(rb); p.add(rb); rbsController[i]=rb; } try{ int ctrlid=md.getInt(CapiConstants.capiControllerID,1); rbsController[ctrlid-1].doClick(); }catch(ArrayIndexOutOfBoundsException aiobe){ rbsController[0].doClick(); } } return p; } private Action getRBAction(final JScrollPane pane,final Metadata md, final CapiController ctrl){ return new AbstractAction(ctrl.getName()){ public void actionPerformed(ActionEvent ev){ ctrl.update(md); profile.removeAll(); profile.add(pane); profile.validate(); profile.repaint(); } }; } }