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 = "";
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;
try
{
u = new URL("http://" + GLPvars.getServerName() + ":631/");
cups = new Cups(u);
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;
}
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);
cups.setUser(GLPvars.cupsUser);
cups.setPasswd(GLPvars.cupsPasswd);
printers[i] = new CupsPrinter( cups, printer_names[i] );
}
catch (IOException e)
{
}
}
cupsServerName = GLPvars.getServerName();
if (printer_names != null)
num_printers = printer_names.length;
else
num_printers = 0;
mainPanel = new JPanel();
mainLayout = new GridBagLayout();
mainConst = new GridBagConstraints();
mainPanel.setLayout(mainLayout);
mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
mainPanel.setBackground(GLPcolors.backgroundColor);
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);
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);
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);
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);
}
scrollPane = new JScrollPane(mainPanel);
}
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);
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( "<html><center><b>" +
cp.getPrinterName() +
"</b></center></html>",
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);
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 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);
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()
{
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);
nameTextField = new JTextField(16);
nameTextField.setActionCommand(maskFieldString);
nameTextField.addActionListener(this);
nameTextField.setText("");
JLabel nameFieldLabel = new JLabel(maskFieldString);
nameFieldLabel.setForeground(GLPcolors.foregroundColor);
nameFieldLabel.setLabelFor(nameTextField);
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);
}
}