import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.URL; import java.net.*; import java.io.*; import org.cups.*; public class GLPprinters implements ActionListener { private Cups cups = null; public String cupsServerName = ""; private JScrollPane scrollPane = null; private JPanel mainPanel = null; private JPanel serverPanel = null; private JPanel maskPanel = null; private GridBagLayout mainLayout = null; private GridBagConstraints mainConst = null; private GridBagLayout maskLayout = null; private GridBagConstraints maskConst = null; private JLabel serverLabel = null; JTextField nameTextField = null; protected static final String maskFieldString = "Printer Name:"; protected static final String maskButtonString = "Apply"; private String currentMask = ""; // Constructor public GLPprinters() { cupsServerName = GLPvars.getServerName(); load(); } public void load() { String[] printer_names; String default_printer; int num_printers = 0; int y = 0, i = 0; URL u; CupsPrinter cp; // ----------------------------------------------------------- // // First get a list of printer names. // try { u = new URL("http://" + GLPvars.getServerName() + ":631/"); cups = new Cups(u); // If authorization is required .... cups.setUser(GLPvars.cupsUser); cups.setPasswd(GLPvars.cupsPasswd); printer_names = cups.cupsGetPrinters(); if (printer_names != null) num_printers = printer_names.length; else num_printers = 0; } catch (IOException e) { mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); mainPanel.setBackground(GLPcolors.backgroundColor); JLabel errorLabel = new JLabel("Error loading printers from " + GLPvars.getServerName()); errorLabel.setForeground(Color.red); mainPanel.add( errorLabel, BorderLayout.CENTER ); scrollPane = new JScrollPane(mainPanel); return; } // ----------------------------------------------------------- // // Now get the printer objects // CupsPrinter[] printers = new CupsPrinter[num_printers]; for (i=0; i < num_printers; i++) { try { u = new URL("http://" + GLPvars.getServerName() + ":631/printers/" + printer_names[i] ); cups = new Cups(u); // If authorization is required .... cups.setUser(GLPvars.cupsUser); cups.setPasswd(GLPvars.cupsPasswd); printers[i] = new CupsPrinter( cups, printer_names[i] ); } catch (IOException e) { // System.out.println("GLPprinters: IOException"); // return(null); } } // // Keep track in case it changes. // cupsServerName = GLPvars.getServerName(); if (printer_names != null) num_printers = printer_names.length; else num_printers = 0; // default_printer = c.cupsGetDefault(); // Create the main panel to contain the two sub panels. mainPanel = new JPanel(); mainLayout = new GridBagLayout(); mainConst = new GridBagConstraints(); mainPanel.setLayout(mainLayout); mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); mainPanel.setBackground(GLPcolors.backgroundColor); // -------------------------------------------------------------- // // Add the server name label // serverPanel = new JPanel(); serverPanel.setLayout( new BorderLayout()); serverPanel.setBackground(GLPcolors.backgroundColor); serverLabel = new JLabel("Printers on " + GLPvars.getServerName()); serverLabel.setForeground(GLPcolors.foregroundColor); serverPanel.add(serverLabel, BorderLayout.NORTH ); mainConst.gridwidth = GridBagConstraints.RELATIVE; mainConst.gridx = 0; mainConst.gridy = y++; mainConst.fill = GridBagConstraints.BOTH; mainConst.weightx = 0.0; mainConst.weighty = 0.0; mainConst.ipadx = 4; mainConst.ipady = 4; mainLayout.setConstraints( serverPanel, mainConst ); mainPanel.add(serverPanel); // -------------------------------------------------------------- // // Add the printer masking panel // maskPanel = new JPanel(); maskLayout = new GridBagLayout(); maskConst = new GridBagConstraints(); maskPanel.setLayout(maskLayout); maskPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); maskPanel.setBackground(GLPcolors.backgroundColor); JPanel localMaskPanel = buildMaskPanel(); maskConst.gridwidth = GridBagConstraints.RELATIVE; maskConst.gridx = 0; maskConst.gridy = 0; maskConst.fill = GridBagConstraints.NONE; maskConst.weightx = 0.0; maskConst.weighty = 0.0; maskConst.ipadx = 4; maskConst.ipady = 4; maskLayout.setConstraints( localMaskPanel, maskConst ); maskPanel.add(localMaskPanel); // // Add the masking panel to the main panel. // mainConst.gridwidth = GridBagConstraints.RELATIVE; mainConst.gridx = 0; mainConst.gridy = y++; mainConst.fill = GridBagConstraints.BOTH; mainConst.weightx = 0.0; mainConst.weighty = 0.0; mainConst.ipadx = 4; mainConst.ipady = 4; mainLayout.setConstraints( maskPanel, mainConst ); mainPanel.add(maskPanel); // -------------------------------------------------------------- // // Add the printers // double weight = 1.0 / (double)printers.length; for (i=0; i < printers.length; i++) { JPanel subPanel = printerInfoPanel( printers[i] ); mainConst.gridwidth = GridBagConstraints.RELATIVE; mainConst.gridx = 0; mainConst.gridy = y++; mainConst.fill = GridBagConstraints.BOTH; mainConst.weightx = 1.0; mainConst.weighty = weight; mainConst.ipady = 4; mainLayout.setConstraints( subPanel, mainConst ); mainPanel.add(subPanel); } // ------------------------------------------------ // // Put the whole thing into a scroll pane. // scrollPane = new JScrollPane(mainPanel); } // ----------------------------------------------------------- // // Build an info panel for an individual printer. // private JPanel printerInfoPanel( CupsPrinter cp ) { JPanel printerPanel = new JPanel(); BoxLayout printerBox; JPanel leftHeader = new JPanel(); JPanel rightHeader = new JPanel(); JPanel leftPane = new JPanel(); JPanel rightPane = new JPanel(); GridBagLayout leftLayout = new GridBagLayout(); GridBagLayout rightLayout = new GridBagLayout(); GridBagConstraints leftConst = new GridBagConstraints(); GridBagConstraints rightConst = new GridBagConstraints(); JLabel printerIconLabel = null; JLabel printerInfoLabel = null; JLabel printerNameLabel = null; JLabel printerMakeLabel = null; JTable printerStatusTable = null; printerBox = new BoxLayout(printerPanel, BoxLayout.X_AXIS); printerPanel.setLayout(printerBox); printerPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); printerPanel.setBackground(GLPcolors.backgroundColor); // Add border around the panel. // ------------------------------------------------------------ // Left pane // ------------------------------------------------------------ leftPane.setLayout(leftLayout); leftPane.setBackground(GLPcolors.backgroundColor); leftHeader.setLayout(new BorderLayout()); leftHeader.setBackground(GLPcolors.highlightColor); leftHeader.setBorder(BorderFactory.createEmptyBorder(3,3,3,3)); printerNameLabel = new JLabel(cp.getPrinterName()); printerNameLabel.setForeground(Color.black); leftHeader.add( printerNameLabel, BorderLayout.WEST); leftConst.gridwidth = GridBagConstraints.RELATIVE; leftConst.gridx = 0; leftConst.gridy = 0; leftConst.fill = GridBagConstraints.HORIZONTAL; leftConst.weightx = 0.0; leftConst.weighty = 0.0; leftConst.ipady = 4; leftLayout.setConstraints( leftHeader, leftConst ); leftPane.add(leftHeader); String imageName = "./images/printer-" + cp.getStateText() + ".gif"; URL iconURL = ClassLoader.getSystemResource(imageName); ImageIcon icon = new ImageIcon(iconURL); JButton printerButton = new JButton( "