package net.combase.desktopcrm.swing;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableCellRenderer;
import net.combase.desktopcrm.data.CrmManager;
import net.combase.desktopcrm.domain.AbstractCrmObject;
public class SearchTablePanel extends JPanel
{
/**
*
*/
private static final long serialVersionUID = 1772875193943230752L;
private JTable table;
/**
* Create the panel.
*/
public SearchTablePanel()
{
setLayout(new BorderLayout(0, 0));
final SearchTableModel model = new SearchTableModel(new ArrayList<AbstractCrmObject>());
table = new JTable(model);
// enable button clicks
table.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
int column = table.getColumnModel().getColumnIndexAtX(e.getX());
int row = e.getY() / table.getRowHeight();
if (row < table.getRowCount() && row >= 0 && column < table.getColumnCount() &&
column >= 0)
{
Object value = table.getValueAt(row, column);
if (value instanceof JButton)
{
((JButton)value).doClick();
}
}
}
});
table.setDefaultRenderer(JButton.class, new TableCellRenderer()
{
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
if (value instanceof JButton)
{
return (JButton)value;
}
return new JLabel();
}
});
table.getColumnModel().getColumn(0).setMaxWidth(100);
table.getColumnModel().getColumn(2).setMaxWidth(30);
table.getColumnModel().getColumn(3).setMaxWidth(30);
table.getColumnModel().getColumn(4).setMaxWidth(30);
table.setRowHeight(30);
final JTextField searchField = new JTextField();
searchField.addKeyListener(new KeyListener()
{
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ENTER)
{
model.update(new ArrayList<AbstractCrmObject>());
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
List<AbstractCrmObject> results = model.getData();
results.addAll(CrmManager.findContacts(searchField.getText()));
model.update(results);
}
});
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
List<AbstractCrmObject> results = model.getData();
results.addAll(CrmManager.findLeads(searchField.getText()));
model.update(results);
}
});
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
List<AbstractCrmObject> results = model.getData();
results.addAll(CrmManager.findOpportunity(searchField.getText()));
model.update(results);
}
});
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
List<AbstractCrmObject> results = model.getData();
results.addAll(CrmManager.findCase(searchField.getText()));
model.update(results);
}
});
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
List<AbstractCrmObject> results = model.getData();
results.addAll(CrmManager.findAccount(searchField.getText()));
model.update(results);
}
});
}
}
@Override
public void keyPressed(KeyEvent e)
{
}
});
add(searchField, BorderLayout.NORTH);
add(new JScrollPane(table), BorderLayout.CENTER);
table.getSelectionModel().addListSelectionListener(new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent e)
{
int index = e.getFirstIndex();
if (index < 0 || model.getData() == null || model.getData().size() < 1)
return;
AbstractCrmObject data = model.getData().get(index);
DataSelectionEventManager.dataSelected(data);
}
});
}
}