package com.google.code.joto.ui.table;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.text.NumberFormat;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JPanel;
import com.google.code.joto.eventrecorder.RecordEventSummary;
import com.google.code.joto.ui.JotoContext;
import com.google.code.joto.ui.filter.RecordEventFilterFileExternalFrameHolder;
import com.google.code.joto.ui.filter.RecordEventFilterFileTableModel;
import com.google.code.joto.ui.filter.RecordEventFilterFileTablePanel;
import com.google.code.joto.util.ui.GridBagLayoutFormBuilder;
import com.google.code.joto.util.ui.JButtonUtils;
import com.google.code.joto.util.ui.JCheckBoxUtils;
/**
*
*/
public class SubSelectionRecordEventTablePanel {
private JotoContext context;
private JPanel panel;
private SubSelectionRecordEventTableModel subSelectionTableModel;
private RecordEventTablePane subSelectionTablePane;
private JCheckBox syncCheckBox;
private JFormattedTextField nthLastField;
private RecordEventFilterFileTableModel filterTableModel;
private JCheckBox showEmbeddedFilterTablePanelCheckBox;
private RecordEventFilterFileTablePanel filtersPanel;
private RecordEventFilterFileExternalFrameHolder externalfiltersFrameHolder;
private JButton openExternalFilterTableFrameButton;
// ------------------------------------------------------------------------
public SubSelectionRecordEventTablePanel(JotoContext context, SubSelectionRecordEventTableModel subSelectionTableModel) {
super();
this.context = context;
this.subSelectionTableModel = subSelectionTableModel;
this.filterTableModel = new RecordEventFilterFileTableModel();
initComponents();
}
private void initComponents() {
this.panel = new JPanel(new BorderLayout());
{
JPanel northPanel = new JPanel(new GridBagLayout());
panel.add(northPanel, BorderLayout.NORTH);
GridBagLayoutFormBuilder b = new GridBagLayoutFormBuilder(northPanel);
syncCheckBox = JCheckBoxUtils.snew("Synchronize incoming events", true, this, "onCheckBoxSync");
b.addCompFillRow(syncCheckBox);
{
// JToolBar toolbar = new JToolBar();
// toolbar.setFloatable(false);
JPanel toolbar = new JPanel(new FlowLayout(FlowLayout.LEFT));
b.addCompFillRow(toolbar);
toolbar.add(JButtonUtils.snew("Clear All", this, "onButtonClearAllEvents"));
toolbar.add(JButtonUtils.snew("Reload All", this, "onButtonReloadAllEvents"));
nthLastField = new JFormattedTextField(NumberFormat.getIntegerInstance());
nthLastField.setPreferredSize(new Dimension(50, 21));
nthLastField.setText("500");
toolbar.add(nthLastField);
toolbar.add(JButtonUtils.snew("Reload Nth Last", this, "onButtonReloadNthLastEvents"));
toolbar.add(JButtonUtils.snew("Remove Selected", this, "onButtonRemoveSelectedEvents"));
}
{
JPanel showFiltersPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
showEmbeddedFilterTablePanelCheckBox = JCheckBoxUtils.snew("show embedded filters table", false, this, "onCheckboxShowEmbeddedFilterTablePanel");
showFiltersPanel.add(showEmbeddedFilterTablePanelCheckBox);
externalfiltersFrameHolder = new RecordEventFilterFileExternalFrameHolder(filterTableModel);
openExternalFilterTableFrameButton = externalfiltersFrameHolder.createShowExternalFrameButton("open filters table view");
showFiltersPanel.add(openExternalFilterTableFrameButton);
b.addCompFillRow(showFiltersPanel);
}
filtersPanel = new RecordEventFilterFileTablePanel(filterTableModel);
b.addCompFillRow(filtersPanel.getJComponent());
filtersPanel.getJComponent().setVisible(showEmbeddedFilterTablePanelCheckBox.isSelected());
}
subSelectionTablePane = new RecordEventTablePane(subSelectionTableModel);
panel.add(subSelectionTablePane.getJComponent(), BorderLayout.CENTER);
}
// ------------------------------------------------------------------------
public JComponent getJComponent() {
return panel;
}
public JotoContext getContext() {
return context;
}
/** called by introspection, GUI callback */
public void onCheckBoxSync(ActionEvent event) {
subSelectionTableModel.setSyncToUnderlying(syncCheckBox.isSelected());
}
/** called by introspection, GUI callback */
public void onButtonClearAllEvents(ActionEvent event) {
subSelectionTableModel.clearEventRows();
}
/** called by introspection, GUI callback */
public void onButtonReloadAllEvents(ActionEvent event) {
subSelectionTableModel.reloadAllEvents();
}
/** called by introspection, GUI callback */
public void onButtonReloadNthLastEvents(ActionEvent event) {
int nthLast;
try {
nthLast = Integer.parseInt(nthLastField.getText());
} catch(NumberFormatException ex) {
nthLast = 500; // should not occur
}
subSelectionTableModel.reloadNthLastEvents(nthLast);
}
/** called by introspection, GUI callback */
public void onButtonRemoveSelectedEvents(ActionEvent event) {
List<RecordEventSummary> selectedEventRows = subSelectionTablePane.getSelectedEventRows();
subSelectionTableModel.removeRows(selectedEventRows);
}
/** called by introspection, GUI callback for JCheckBox showEmbeddedFilterTablePanelCheckBox */
public void onCheckboxShowEmbeddedFilterTablePanel(ActionEvent event) {
filtersPanel.getJComponent().setVisible(showEmbeddedFilterTablePanelCheckBox.isSelected());
}
}