package com.traxel.lumbermill.event;
import com.traxel.lumbermill.filter.FilterSet;
import com.traxel.lumbermill.log.Log;
import org.apache.log4j.Logger;
import org.openide.util.NbPreferences;
import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Component;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyEvent;
import java.text.MessageFormat;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableCellRenderer;
import de.cismet.beanmill.NetbeansPanel;
private static final transient Logger LOG = Logger.getLogger(TableView.class);
private transient volatile boolean hotkeyPressed;
public TableView(
final Log log,
final FilterSet filterSet,
final ColumnSet columnSet) {
super(new Table(log, filterSet, columnSet));
hotkeyPressed = false;
getModel().addTableModelListener(new Unselector());
setColumnModel(getTable().getColumnSet());
setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
@Override
if (LOG.isDebugEnabled()) {
LOG.debug("received event: " + event);
}
final KeyEvent keyEvent = (KeyEvent)event;
switch (keyEvent.getID()) {
case KeyEvent.KEY_TYPED: {
return;
}
case KeyEvent.KEY_PRESSED: {
if (keyEvent.getKeyCode()
== NbPreferences.forModule(TableView.class).getInt(
NetbeansPanel.PROP_TOOLTIP_HK,
-1)) {
hotkeyPressed = true;
}
return;
}
case KeyEvent.KEY_RELEASED: {
if (keyEvent.getKeyCode()
== NbPreferences.forModule(TableView.class).getInt(
NetbeansPanel.PROP_TOOLTIP_HK,
-1)) {
hotkeyPressed = false;
}
return;
}
default: {
return;
}
}
}
}, AWTEvent.KEY_EVENT_MASK);
}
@Override
public Component
prepareRenderer(
final TableCellRenderer renderer,
final int rowIndex,
final int vColIndex) {
final Component c = super.prepareRenderer(renderer, rowIndex,
vColIndex);
if (c instanceof JComponent) {
final JComponent jc = (JComponent)c;
final Table model = getTable();
final Event event = model.getEvent(rowIndex);
try {
final int htmlWitdh = 1000;
final String tablePattern = "<html><table {0} border=\"0"
+ "\"><tr><td>" + model.getEvent(rowIndex).getHtml() + "</td></tr></table></html>";
final String widthTable = MessageFormat.format(tablePattern,
"width=\""
+ htmlWitdh
+ "\"");
final String normalTable = MessageFormat.format(tablePattern,
"");
if (hotkeyPressed) {
if (new JLabel(normalTable).getPreferredSize().width
<= htmlWitdh) {
jc.setToolTipText(normalTable);
} else {
jc.setToolTipText(widthTable);
}
} else {
jc.setToolTipText(null);
}
} catch (final Exception e) {
}
if (!((renderer instanceof SeverityCellView)
|| this.getSelectionModel().isSelectedIndex(rowIndex))) {
if (event instanceof XMLEvent) {
jc.setBackground(new Color(236, 233, 216));
} else {
jc.setBackground(Color.white);
}
}
} else {
if (LOG.isDebugEnabled()) {
LOG.debug("renderer component: " + c);
}
}
return c;
}
return (Table)getModel();
}
final int firstSelectedRow = getSelectedRow();
if (firstSelectedRow > -1) {
return getTable().getEvent(firstSelectedRow);
}
return null;
}
final int[] selectedRows = getSelectedRows();
if ((selectedRows != null) && (selectedRows.length != 0)) {
return getTable().getEvent(selectedRows[selectedRows.length - 1]);
}
return null;
}
private class Unselector implements TableModelListener {
@Override
if (TableModelEvent.INSERT == e.getType()) {
if ((0 == e.getFirstRow()) && (0 == getSelectedRow())) {
removeRowSelectionInterval(0, 0);
}
}
}
}
}