package org.ourgrid.peer.ui.async.gui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.util.List; import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextArea; import org.ourgrid.common.interfaces.to.WorkerInfo; /** * @author Ricardo Araujo Santos - ricardo@lsd.ufcg.edu.br */ public class WorkersPanel extends JPanel { /** * */ private static final long serialVersionUID = 1L; private JSplitPane splitPane; private WorkerTablePanel workersTable; /** * */ public WorkersPanel() { initComponents(); } private void initComponents() { this.setLayout( new BorderLayout() ); this.setDoubleBuffered( true ); JPanel splitButtonsPanel = new JPanel(); splitPane = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT ); splitPane.setDoubleBuffered( true ); splitPane.setDividerLocation( 0.5 ); final JButton verticalButton = new JButton( "Vertically" ); final JButton horizontalButton = new JButton( "Horizontally" ); verticalButton.setEnabled( false ); verticalButton.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { splitPane.setOrientation( JSplitPane.HORIZONTAL_SPLIT ); splitPane.setDividerLocation( 0.5 ); verticalButton.setEnabled( false ); horizontalButton.setEnabled( true ); } } ); horizontalButton.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { splitPane.setOrientation( JSplitPane.VERTICAL_SPLIT ); splitPane.setDividerLocation( 0.5 ); verticalButton.setEnabled( true ); horizontalButton.setEnabled( false ); } } ); splitButtonsPanel.add( new JLabel( "Divide panel: " ) ); splitButtonsPanel.add( verticalButton ); splitButtonsPanel.add( horizontalButton ); workersTable = new WorkerTablePanel(); workersTable.setPreferredSize( new Dimension( 300, 400 ) ); JPanel detailsPanel = new JPanel(); detailsPanel.setLayout( new BorderLayout() ); detailsPanel.setDoubleBuffered( true ); JTextArea propertiesArea = new JTextArea("Click on a worker for information"); propertiesArea.setEditable( false ); propertiesArea.setFont(new Font("Monospaced", propertiesArea.getFont().getStyle(), propertiesArea.getFont().getSize())); propertiesArea.setBackground(this.getBackground()); JScrollPane propertiesScroll = new JScrollPane( propertiesArea ); propertiesScroll.setDoubleBuffered( true ); propertiesScroll.setPreferredSize( new Dimension( 200, 300 ) ); detailsPanel.add( propertiesScroll, BorderLayout.CENTER ); workersTable.setTextArea(propertiesArea); splitPane.setLeftComponent( workersTable ); splitPane.setRightComponent( detailsPanel ); this.add( splitButtonsPanel, BorderLayout.NORTH ); this.add( splitPane, BorderLayout.CENTER ); this.setDoubleBuffered( true ); Box box = Box.createHorizontalBox(); box.add(new JLabel("UNAVAILABLE ", new ImageIcon(WorkerTableModel.WORKER_UNAVAILABLE_IMAGE_PATH, "UNAVAILABLE"), JLabel.LEFT)); box.add(new JLabel("CONTACTING ", new ImageIcon(WorkerTableModel.WORKER_CONTACTING_IMAGE_PATH, "CONTACTING"), JLabel.LEFT)); box.add(new JLabel("IDLE ", new ImageIcon(WorkerTableModel.WORKER_IDLE_IMAGE_PATH, "IDLE"), JLabel.LEFT)); box.add(new JLabel("OWNER ", new ImageIcon(WorkerTableModel.WORKER_OWNER_IMAGE_PATH, "OWNER"), JLabel.LEFT)); box.add(new JLabel("DONATED ", new ImageIcon(WorkerTableModel.WORKER_DONATED_IMAGE_PATH, "DONATED"), JLabel.LEFT)); box.add(new JLabel("INUSE ", new ImageIcon(WorkerTableModel.WORKER_INUSE_IMAGE_PATH, "INUSE"), JLabel.LEFT)); box.add(new JLabel("ERROR ", new ImageIcon(WorkerTableModel.WORKER_ERROR_IMAGE_PATH, "ERROR"), JLabel.LEFT)); add(box, BorderLayout.SOUTH); this.addComponentListener( new ComponentAdapter() { @Override public void componentResized( ComponentEvent e ) { splitPane.setDividerLocation( 0.5 ); } }); } /** * */ public void peerStopped() { workersTable.peerStopped(); } /** * @param localWorkersInfo */ public void setTableModelData( List<WorkerInfo> localWorkersInfo ) { workersTable.setTableModelData( localWorkersInfo ); } }