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( "
" + cp.getPrinterName() + "
", icon ); printerButton.setBorder(BorderFactory.createEmptyBorder(3,3,3,3)); printerButton.setBackground(GLPcolors.backgroundColor); printerButton.setActionCommand( cp.getPrinterName() ); printerButton.addActionListener(this); printerButton.setToolTipText("Click to go to " + cp.getPrinterName() + "'s extended informtion page."); leftConst.gridwidth = GridBagConstraints.REMAINDER; leftConst.gridx = 0; leftConst.gridy = 1; leftConst.fill = GridBagConstraints.BOTH; leftConst.weightx = 1.0; leftConst.weighty = 1.0; leftConst.ipady = 4; leftLayout.setConstraints( printerButton, leftConst ); leftPane.add(printerButton); // ------------------------------------------------------------ // Right pane // ------------------------------------------------------------ rightPane.setLayout(rightLayout); rightPane.setBackground(GLPcolors.backgroundColor); rightHeader.setLayout(new BorderLayout()); rightHeader.setBackground(GLPcolors.highlightColor); rightHeader.setBorder(BorderFactory.createEmptyBorder(3,3,3,3)); printerMakeLabel = new JLabel(cp.getMakeAndModel()); printerMakeLabel.setForeground(Color.black); rightHeader.add( printerMakeLabel, BorderLayout.WEST); rightConst.gridwidth = GridBagConstraints.RELATIVE; rightConst.gridx = 0; rightConst.gridy = 0; rightConst.fill = GridBagConstraints.HORIZONTAL; rightConst.weightx = 0.0; rightConst.weighty = 0.0; rightConst.ipady = 4; rightLayout.setConstraints( rightHeader, rightConst ); rightPane.add(rightHeader); Font labelFont = new Font("Serif",Font.BOLD, 12 ); // Font textFont = new Font("Serif", Font.NORMAL, 12 ); Font messageFont = new Font("Serif", Font.ITALIC, 12 ); JLabel pdNameLabel = new JLabel("Name"); JLabel pdLocationLabel = new JLabel("Location"); JLabel pdStatusLabel = new JLabel("Status"); JLabel pdMessageLabel = new JLabel("Message"); JLabel pdNameText = new JLabel(cp.getPrinterName()); JLabel pdLocationText = new JLabel(cp.getLocation()); JLabel pdStatusText = new JLabel(cp.getStateText()); JLabel pdMessageText = new JLabel(cp.getStateReasons()); pdNameLabel.setFont(labelFont); pdLocationLabel.setFont(labelFont); pdStatusLabel.setFont(labelFont); pdMessageLabel.setFont(labelFont); pdMessageText.setFont(messageFont); pdNameLabel.setForeground(Color.black); pdLocationLabel.setForeground(Color.black); pdStatusLabel.setForeground(Color.black); pdMessageLabel.setForeground(Color.black); JPanel tablePane; if ((cp.getStateReasons().length() > 0) && (!cp.getStateReasons().equals("none"))) { tablePane = new JPanel(new GridLayout(4,2,2,2)); tablePane.add(pdNameLabel); tablePane.add(pdNameText); tablePane.add(pdLocationLabel); tablePane.add(pdLocationText); tablePane.add(pdStatusLabel); tablePane.add(pdStatusText); tablePane.add(pdMessageLabel); tablePane.add(pdMessageText); } else { tablePane = new JPanel(new GridLayout(3,2,2,2)); tablePane.add(pdNameLabel); tablePane.add(pdNameText); tablePane.add(pdLocationLabel); tablePane.add(pdLocationText); tablePane.add(pdStatusLabel); tablePane.add(pdStatusText); } tablePane.setBackground(GLPcolors.backgroundColor); // printerStatusTable.setShowGrid(false); rightConst.gridwidth = GridBagConstraints.REMAINDER; rightConst.gridx = 0; rightConst.gridy = 1; rightConst.fill = GridBagConstraints.BOTH; rightConst.weightx = 1.0; rightConst.weighty = 1.0; rightConst.ipady = 4; rightLayout.setConstraints( tablePane, rightConst ); rightPane.add(tablePane); printerPanel.add(leftPane); printerPanel.add(rightPane); return(printerPanel); } public JPanel buildMaskPanel() { // Create the main panel to contain the two sub panels. JPanel namePanel = new JPanel(); GridBagLayout nameLayout = new GridBagLayout(); GridBagConstraints nameConst = new GridBagConstraints(); namePanel.setLayout(nameLayout); namePanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); namePanel.setBackground(GLPcolors.backgroundColor); //Create a regular text field. nameTextField = new JTextField(16); nameTextField.setActionCommand(maskFieldString); nameTextField.addActionListener(this); nameTextField.setText(""); //Create some labels for the fields. JLabel nameFieldLabel = new JLabel(maskFieldString); nameFieldLabel.setForeground(GLPcolors.foregroundColor); nameFieldLabel.setLabelFor(nameTextField); // Text nameConst.gridwidth = GridBagConstraints.RELATIVE; nameConst.gridx = 0; nameConst.gridy = 0; nameConst.fill = GridBagConstraints.HORIZONTAL; nameConst.weightx = 0.0; nameConst.weighty = 0.0; nameConst.ipadx = 4; nameConst.ipady = 4; nameLayout.setConstraints( nameFieldLabel, nameConst ); namePanel.add(nameFieldLabel); nameConst.gridwidth = GridBagConstraints.RELATIVE; nameConst.gridx = 1; nameConst.gridy = 0; nameConst.fill = GridBagConstraints.HORIZONTAL; nameConst.weightx = 0.0; nameConst.weighty = 0.0; nameConst.ipadx = 4; nameConst.ipady = 4; nameLayout.setConstraints( nameTextField, nameConst ); namePanel.add(nameTextField); JButton applyButton = new JButton(maskButtonString); applyButton.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createRaisedBevelBorder(), BorderFactory.createEmptyBorder(2,2,2,2))); applyButton.setActionCommand(maskButtonString); applyButton.addActionListener(this); nameConst.gridx = 2; nameConst.gridy = 0; nameConst.fill = GridBagConstraints.NONE; nameLayout.setConstraints( applyButton, nameConst ); nameConst.weightx = 0.0; nameConst.weighty = 0.0; nameConst.ipadx = 4; nameConst.ipady = 4; namePanel.add(applyButton); return(namePanel); } public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals(maskFieldString)) { String s = nameTextField.getText(); if (s.length() > 1) { currentMask = s; } } else if (e.getActionCommand().equals(maskButtonString)) { String s = nameTextField.getText(); if (s.length() > 1) { currentMask = s; } } else { GLPvars.selectedPrinterName = e.getActionCommand(); GLPvars.tabs.updateDetailPanel(); GLPvars.tabs.tabPanel.setSelectedIndex(2); } } public JScrollPane getPanel() { return(scrollPane); } }