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}