001package jmri.jmrix.can.cbus.swing;
002
003import javax.annotation.Nonnull;
004import javax.swing.WindowConstants;
005
006import jmri.jmrix.can.cbus.swing.configtool.ConfigToolPane;
007import jmri.jmrix.can.cbus.swing.console.CbusConsolePane;
008import jmri.util.JmriJFrame;
009
010/**
011 * Frame to control an instance of CBUS filter to filter events.
012 * Currently used in CBUS Console + Event capture tool
013 *
014 * @author Steve Young Copyright (C) 2018, 2020
015 */
016public class CbusFilterFrame extends JmriJFrame {
017    
018    private final CbusConsolePane _console;
019    private final ConfigToolPane _evCap;
020
021    final CbusFilterTreePane ftp;
022
023    /**
024     * Create a new instance of CbusFilterFrame.
025     * @param console CbusConsolePane Instance to Filter
026     * @param evCap Event Capture Tool Instance to Filter
027     */
028    public CbusFilterFrame(CbusConsolePane console, ConfigToolPane evCap) {
029        super();
030        _console = console;
031        _evCap = evCap;
032
033        var memo = console != null ? console.getMemo() : null;
034        if ( memo == null ) {
035            memo = evCap != null ? evCap.getMemo() : null;
036        }
037        ftp = new CbusFilterTreePane( memo);
038        super.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
039    }
040
041    /**
042     * Get Filter Title.
043     * @return Title incorporating CbusConsole or Event Capture Instance.
044     */
045    @Nonnull
046    protected String title() {
047        if (_console != null) {
048            return _console.getTitle() + " " + Bundle.getMessage("EventFilterTitleX", "");
049        } else if (_evCap != null) {
050            return _evCap.getTitle() + " " + Bundle.getMessage("EventFilterTitleX", "");
051        }
052        return Bundle.getMessage("EventFilterTitleX", "");
053    }
054
055    /**
056     * {@inheritDoc}
057     */
058    @Override
059    public void initComponents() {
060        setTitle(title());
061        this.getContentPane().add(ftp);
062        pack();
063        if ( _console != null) {
064            _console.nextLine( Bundle.getMessage("FilterWindowActive") + " \n",
065                Bundle.getMessage("FilterWindowActive") + " \n", -1);
066        }
067    }
068
069    /**
070     * Filter a CanReply or CanMessage.
071     * 
072     * @param m CanMessage or CanReply
073     * @return true when to apply filter, false to not filter.
074     *
075     */
076    public boolean filter(@Nonnull jmri.jmrix.AbstractMessage m) {
077       return ftp.filter(m);
078    }
079
080    @Override
081    public void dispose() {
082        super.dispose();
083        ftp.dispose();
084    }
085
086    // private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(CbusFilterFrame.class);
087
088}