package com.google.code.joto.ui.capture; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JPanel; import com.google.code.joto.eventrecorder.writer.FilteringRecordEventWriter; import com.google.code.joto.ui.JotoContext; import com.google.code.joto.ui.filter.RecordEventFilterCategoryModel; 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.JCheckBoxUtils; /** * abstract base-class for Category Capture Panel * <p/> * typical sub-classes: MethCall Capture, AWT-Event capture, Log, ... */ public abstract class RecordEventsCaptureCategoryPanel { protected JotoContext context; protected final String categoryName; protected RecordEventFilterCategoryModel filterCategoryModel; private JPanel panel; protected JCheckBox filterEnableEventsCheckBox; private JCheckBox showEmbeddedFilterTablePanelCheckBox; private RecordEventFilterFileTablePanel filtersPanel; private RecordEventFilterFileExternalFrameHolder externalFiltersFrameHolder; private JButton openExternalFilterTableFrameButton; private JCheckBox showDetailsPanelCheckBox; protected JPanel specificPanel; // ------------------------------------------------------------------------ public RecordEventsCaptureCategoryPanel(JotoContext context, String categoryName) { this.context = context; this.categoryName = categoryName; this.filterCategoryModel = context.getOrCreateFilterCategoryModel(categoryName); initComponents(); } public String getCategoryName() { return categoryName; } 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); filterEnableEventsCheckBox = JCheckBoxUtils.snew("Enable Events", true, this, "onCheckboxFilterEnableEvents"); b.addCompFillRow(filterEnableEventsCheckBox); RecordEventFilterFileTableModel filterTableModel = filterCategoryModel.getFilterItemTableModel(); { 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()); showDetailsPanelCheckBox = JCheckBoxUtils.snew("show details", true, this, "onCheckBoxShowDetailsPanel"); b.addCompFillRow(showDetailsPanelCheckBox); specificPanel = new JPanel(); panel.add(specificPanel, BorderLayout.CENTER); } // ------------------------------------------------------------------------ public JComponent getJComponent() { return panel; } public String getTabName() { return filterCategoryModel.getName(); } public RecordEventFilterCategoryModel getFilterCategoryModel() { return filterCategoryModel; } public FilteringRecordEventWriter getFilterCategoryEventWriter() { return filterCategoryModel.getResultFilteringEventWriter(); } /** called by introspection, GUI callback for JCheckBox showEmbeddedFilterTablePanelCheckBox */ public void onCheckboxFilterEnableEvents(ActionEvent event) { filterCategoryModel.getResultFilteringEventWriter().setEnable(filterEnableEventsCheckBox.isSelected()); } /** called by introspection, GUI callback for JCheckBox showEmbeddedFilterTablePanelCheckBox */ public void onCheckboxShowEmbeddedFilterTablePanel(ActionEvent event) { filtersPanel.getJComponent().setVisible(showEmbeddedFilterTablePanelCheckBox.isSelected()); } /** called by introspection, GUI callback for JCheckBox */ public void onCheckBoxShowDetailsPanel(ActionEvent event) { specificPanel.setVisible(showDetailsPanelCheckBox.isSelected()); } }