package org.limewire.ui.swing.components;
import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import org.jdesktop.application.Resource;
import org.limewire.ui.swing.util.GuiUtils;
import org.limewire.ui.swing.util.IconManager;
import com.google.inject.Provider;
/**
* Behaves like a TextField. Adds an icon within the textField that
* is always displayed to the left of the textfield regardless of how much
* space there is.
*
* An action can be added to the textfield that will be called on mouse clicks.
*
* This textfield is currently assumed to be non-editable. Border color and background
* assume this. If this is to be used in a non-editable fashion, more work will need
* to be put into the L&F of this.
*/
public class LabelTextField extends JPanel {
@Resource
private Icon folderIcon;
private JLabel label;
private JTextField textField;
private MouseListener mouseListener;
private Provider<IconManager> iconManager;
public LabelTextField(Provider<IconManager> iconManager) {
GuiUtils.assignResources(this);
this.iconManager = iconManager;
label = new JLabel();
label.setOpaque(false);
textField = new JTextField();
textField.setEditable(false);
textField.setBorder(BorderFactory.createEmptyBorder(0,2,0,0));
textField.setOpaque(false);
setLayout(new BorderLayout());
add(label, BorderLayout.WEST);
add(textField, BorderLayout.CENTER);
// use the colors from the textfield to paint the panel
setBackground(UIManager.getColor("TextField.disabledBackground"));
setBorder(BorderFactory.createCompoundBorder(UIManager.getBorder("TextField.border"),
BorderFactory.createEmptyBorder(2,2,2,2)));
}
@Override
public void setEnabled(boolean value) {
textField.setEnabled(value);
}
public void setEditable(boolean value) {
textField.setEditable(value);
}
public String getText() {
return textField.getText();
}
public void setText(String text) {
textField.setText(text);
textField.setCaretPosition(0);
try {
Icon icon = iconManager.get().getIconForFile(new File(text));
if(icon != null)
label.setIcon(icon);
else
label.setIcon(folderIcon);
} catch(Exception e) {
label.setIcon(folderIcon);
}
}
public void addMouseListener(final Action action) {
if(mouseListener != null) {
textField.removeMouseListener(mouseListener);
mouseListener = null;
}
mouseListener = new MouseListener(){
@Override
public void mouseClicked(MouseEvent e) {
if(e.getClickCount() == 1) {
action.actionPerformed(null);
}
}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
};
textField.addMouseListener(mouseListener);
}
public void removeMouseListener() {
if(mouseListener != null) {
textField.removeMouseListener(mouseListener);
mouseListener = null;
}
}
}