package cn.edu.ustc.biofilm.BioPano.editor;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.HashMap;
public class SearchToolBar extends JPanel {
public JSearchTextField jf;
private static ContactList panelContactor = null;
private HashMap<String,ContactCard> contacts;
public SearchToolBar() {
//this.setPreferredSize(new Dimension(250, 100));
jf = new JSearchTextField();
contacts = new HashMap<String,ContactCard>();
panelContactor = new ContactList();
setLayout(new BorderLayout(0, 0));
add(jf, BorderLayout.NORTH);
jf.setColumns(0);
/*
add(panelContactor, BorderLayout.CENTER);
panelContactor.addContact("Operon");
panelContactor.addContact("Gene");
panelContactor.addContact("Operon");
panelContactor.addContact("Gene");
panelContactor.addContact("Operon");
panelContactor.addContact("Gene");
panelContactor.addContact("Operon");
panelContactor.addContact("Gene");
panelContactor.addContact("Operon");
panelContactor.addContact("Gene");
panelContactor.addContact("Operon");
panelContactor.addContact("Gene");
panelContactor.addContact("Operon");
panelContactor.addContact("Gene");
panelContactor.addContact("Operon");
panelContactor.addContact("Gene");
panelContactor.addContact("Operon");
panelContactor.addContact("Gene");
panelContactor.addContact("Operon");
panelContactor.addContact("Gene");
panelContactor.addContact("Operon");
panelContactor.addContact("Gene");
*/
}
}
class JSearchTextField extends JIconTextField implements FocusListener {
private String textWhenNotFocused;
private ImageIcon icon;
public JSearchTextField() {
super();
this.textWhenNotFocused = "Search...";
this.addFocusListener(this);
icon = new ImageIcon(getClass().getResource("/cn/edu/ustc/biofilm/BioPano/images/find.png"));
this.setIcon(icon);
}
public String getTextWhenNotFocused() {
return this.textWhenNotFocused;
}
public void setTextWhenNotFocused(String newText) {
this.textWhenNotFocused = newText;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (!this.hasFocus() && this.getText().equals("")) {
int width = this.getWidth();
int height = this.getHeight();
Font prev = g.getFont();
Font italic = prev.deriveFont(Font.ITALIC);
Color prevColor = g.getColor();
g.setFont(italic);
g.setColor(UIManager.getColor("textInactiveText"));
int h = g.getFontMetrics().getHeight();
int textBottom = (height - h) / 2 + h - 4;
int x = this.getInsets().left;
Graphics2D g2d = (Graphics2D) g;
RenderingHints hints = g2d.getRenderingHints();
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.drawString(textWhenNotFocused, x, textBottom);
g2d.setRenderingHints(hints);
g.setFont(prev);
g.setColor(prevColor);
}
}
//FocusListener implementation:
public void focusGained(FocusEvent e) {
this.repaint();
}
public void focusLost(FocusEvent e) {
this.repaint();
}
}
class JIconTextField extends JTextField{
private Icon icon;
private Insets dummyInsets;
public JIconTextField(){
super();
this.icon = null;
/*
Border border = UIManager.getBorder("TextField.border");
this.dummyInsets = border.getBorderInsets(dummy);
*/
JTextField dummy = new JTextField();
Border line = BorderFactory.createLineBorder(Color.lightGray);
Border empty = new EmptyBorder(6,26,5,5);
CompoundBorder border = new CompoundBorder(line, empty);
this.dummyInsets = border.getBorderInsets(dummy);
this.setBorder(border);
}
public void setIcon(Icon icon){
this.icon = icon;
}
public Icon getIcon(){
return this.icon;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int textX = 2;
if(this.icon!=null){
int iconWidth = icon.getIconWidth();
int iconHeight = icon.getIconHeight();
int x = dummyInsets.left-20;//this is our icon's x
textX = x+iconWidth+2; //this is the x where text should start
int y = (this.getHeight() - iconHeight)/2;
icon.paintIcon(this, g, 2, 3);
}
//this.setMargin(new Insets(0, 0, 0, 0));
}
}
class ContactList extends JScrollPane {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel jpb;
private int contactnum = 0;
private int dimensionY = 400;
private String focusName = null;
private HashMap<String,ContactCard> contacts = new HashMap<String,ContactCard>();
ContactList() {
jpb = new JPanel();
jpb.setForeground(new Color(255, 0, 0));
this.setViewportView(jpb);
this.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
this.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
jpb.setPreferredSize(new Dimension(190,dimensionY));
jpb.setLayout(new GridLayout(16, 1));
jpb.revalidate();
}
public void focus(String name) {
contacts.get(name).setFocus(true);
if(focusName != null) {
System.out.println("Set focus false "+focusName);
contacts.get(focusName).setFocus(false);
}
focusName = name;
}
public void addContact(String name) {
contactnum++;
if(contactnum>10) {
dimensionY += 40;
jpb.setPreferredSize(new Dimension(190,dimensionY));
jpb.setLayout(new GridLayout(contactnum, 1));
jpb.revalidate();
}
contacts.put(name, new ContactCard(name));
contacts.get(name).setVisible(true);
jpb.add(contacts.get(name));
jpb.revalidate();
System.out.println("ContactList.addContact(): contactnum: " + contactnum );
}
public void removeContact(String name) {
contactnum--;
jpb.remove(contacts.get(name));
jpb.revalidate();
contacts.remove(name);
System.out.println("remove " + name);
if(contactnum<=10) {
dimensionY = 400;
jpb.setPreferredSize(new Dimension(190,dimensionY));
jpb.setLayout(new GridLayout(16, 1));
}
jpb.repaint();
jpb.revalidate();
}
}
class ContactCard extends JPanel implements MouseListener{
/**
*
*/
private static final long serialVersionUID = 4503092787546871531L;
private String name;
private JLabel lblName = null;
private JLabel label = null;
private Graphics2D g2 = null;
private final Color c1 = new Color(175,200,244);
private final Color c2 = new Color(110,135,180);
private final Color c3 = new Color(223,223,223);
private final Color c4 = new Color(210,210,210);
private Color cUp = null;
private Color cDown = null;
ContactCard(String name) {
this.setLayout(null);
this.name = name;
cUp = c3; cDown = c4;
lblName = new JLabel(name);
lblName.setFont(new Font("Lucida Grande", Font.PLAIN, 13));
lblName.setBounds(55, 5, 120, 30);
this.add(lblName);
addMouseListener(this);
label = new JLabel();
ImageIcon icon = new ImageIcon(getClass().getResource("/cn/edu/ustc/biofilm/BioPano/images/actor.png"));
icon.setImage(icon.getImage().getScaledInstance(30,30,Image.SCALE_DEFAULT));
label.setIcon(icon);
label.setBounds(6, 5, 33, 33);
this.add(label);
}
protected void paintComponent(Graphics g) {
g2 = (Graphics2D)g;
super.paintComponent(g);
g2.setPaint(new GradientPaint(getWidth()/2,0, cUp,getWidth()/2,getHeight(), cDown));
g2.fillRect(0, 0, getWidth(), getHeight());
}
public void setName(String name) {
this.name = name;
}
public void setFocus(boolean b) {
if(b){
cUp = c1;
cDown = c2;
} else {
cUp = c3;
cDown = c4;
}
this.repaint();
}
@Override
public void mouseClicked(MouseEvent arg0) {
System.out.println("mouse Clicked panel "+ name);
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
}
@Override
public void mouseReleased(MouseEvent arg0) {
}
}