package com.google.code.joto.ui.capture; import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JToolBar; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.util.ui.IconUtils; import com.google.code.joto.util.ui.JButtonUtils; /** * Swing panel for record/pause/continue buttons + show details ... */ public class EventRecorderToolbar { private static Logger log = LoggerFactory.getLogger(EventRecorderToolbar.class); private JotoContext context; private PropertyChangeListener modelChangeListener; private JToolBar toolbar; private JButton startRecordButton; private JButton stopRecordButton; private JButton showCaptureFiltersButton; // private JButton clearButton; private RecordEventFilterFileExternalFrameHolder captureFiltersFrameHolder; // ------------------------------------------------------------------------- public EventRecorderToolbar(JotoContext context) { this.context = context; modelChangeListener = new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { onModelPropertyChange(evt); } }; context.addPropertyChangeListener(modelChangeListener); toolbar = new JToolBar(); toolbar.setFloatable(false); ImageIcon playIcon = IconUtils.getBasic32().get("play"); startRecordButton = JButtonUtils.snew(playIcon, "start record", this, "onButtonStartRecord"); toolbar.add(startRecordButton); ImageIcon pauseIcon = IconUtils.getBasic32().get("pause"); stopRecordButton = JButtonUtils.snew(pauseIcon, "pause record", this, "onButtonPauseRecord"); toolbar.add(stopRecordButton); { // capture filter RecordEventFilterFileTableModel captureFiltersTableModel = context.getCaptureFilterCategoryModel().getFilterItemTableModel(); captureFiltersFrameHolder = new RecordEventFilterFileExternalFrameHolder(captureFiltersTableModel); showCaptureFiltersButton = captureFiltersFrameHolder.createShowExternalFrameButton("filter"); toolbar.add(showCaptureFiltersButton); } // { // methodCall filter (shortcut for tab "methodCall" -> button) // RecordEventFilterFileTableModel methodCaptureFilterModel = context.getMethodCallFilterCategoryModel().getFilterItemTableModel(); // methodCaptureFiltersFrameHolder = new RecordEventFilterFileExternalFrameHolder(methodCaptureFilterModel); // showMethodCaptureFiltersButton = methodCaptureFiltersFrameHolder.createShowExternalFrameButton("meth filter"); // toolbar.add(showMethodCaptureFiltersButton); // } } public void dispose() { if (context != null && modelChangeListener != null) { context.removePropertyChangeListener(modelChangeListener); } modelChangeListener = null; context = null; if (captureFiltersFrameHolder != null) { try { captureFiltersFrameHolder.dispose(); } catch(Exception ex) { log.warn("Failed to dispose ... ignore", ex); } } } //------------------------------------------------------------------------- public JComponent getJComponent() { return toolbar; } // ------------------------------------------------------------------------- public void onButtonStartRecord(ActionEvent event) { context.startRecord(); } public void onButtonPauseRecord(ActionEvent event) { context.stopRecord(); } private void onModelPropertyChange(PropertyChangeEvent evt) { String prop = evt.getPropertyName(); if (prop.equals(JotoContext.PROP_RECORDING_STATUS)) { stopRecordButton.setEnabled(context.isEnableStopRecord()); startRecordButton.setEnabled(context.isEnableStartRecord()); } } }