001package jmri.jmrix.ecos.swing.locodatabase;
002
003import java.awt.BorderLayout;
004import javax.swing.JPanel;
005import javax.swing.JTabbedPane;
006import javax.swing.event.ChangeEvent;
007import javax.swing.event.ChangeListener;
008import jmri.*;
009import jmri.jmrit.beantable.AbstractTableAction;
010import jmri.jmrit.beantable.AbstractTableTabAction;
011import jmri.jmrix.ecos.EcosSystemConnectionMemo;
012
013public class EcosLocoTableTabAction extends AbstractTableTabAction<NamedBean> {  // there is no specific subtype of NamedBean here, see EcosLocoAddressManager
014
015    public EcosLocoTableTabAction(String s) {
016        super(s);
017    }
018
019    public EcosLocoTableTabAction() {
020        this("Multiple Tabbed");
021    }
022
023    @Override
024    protected void createModel() {
025        dataPanel = new JPanel();
026        dataTabs = new JTabbedPane();
027        dataPanel.setLayout(new BorderLayout());
028        java.util.List<EcosSystemConnectionMemo> list = jmri.InstanceManager.getList(EcosSystemConnectionMemo.class);
029        for (EcosSystemConnectionMemo eMemo : list) {
030            //We only want to add connections that have an active loco address manager
031            if (eMemo.getLocoAddressManager() != null) {
032                TabbedTableItem<NamedBean> itemModel = new TabbedTableItem<>(eMemo.getUserName(), true, eMemo.getLocoAddressManager(), getNewTableAction(eMemo.getUserName(), eMemo));
033                tabbedTableArray.add(itemModel);
034            }
035        }
036        if (tabbedTableArray.size() == 1) {
037            EcosLocoTableAction table = (EcosLocoTableAction) tabbedTableArray.get(0).getAAClass();
038            table.addToPanel(this);
039            dataPanel.add(tabbedTableArray.get(0).getPanel(), BorderLayout.CENTER);
040        } else {
041            for (int x = 0; x < tabbedTableArray.size(); x++) {
042                EcosLocoTableAction table = (EcosLocoTableAction) tabbedTableArray.get(x).getAAClass();
043                table.addToPanel(this);
044                dataTabs.addTab(tabbedTableArray.get(x).getItemString(), null, tabbedTableArray.get(x).getPanel(), null);
045            }
046            dataTabs.addChangeListener(new ChangeListener() {
047                @Override
048                public void stateChanged(ChangeEvent evt) {
049                    setMenuBar(f);
050                }
051            });
052            dataPanel.add(dataTabs, BorderLayout.CENTER);
053        }
054        init = true;
055    }
056
057    @Override
058    protected AbstractTableAction<NamedBean> getNewTableAction(String choice) {
059        return null;
060    }
061
062    protected AbstractTableAction<NamedBean> getNewTableAction(String choice, EcosSystemConnectionMemo eMemo) {
063        return new EcosLocoTableAction(choice, eMemo);
064    }
065
066    @Override
067    protected Manager<NamedBean> getManager() {
068        return null;
069    }
070
071    @Override
072    public void addToFrame(jmri.jmrit.beantable.BeanTableFrame<NamedBean> f) {
073        if (tabbedTableArray.size() > 1) {
074            super.addToFrame(f);
075        }
076    }
077
078    @Override
079    public void setMenuBar(jmri.jmrit.beantable.BeanTableFrame<NamedBean> f) {
080        if (tabbedTableArray.size() > 1) {
081            super.setMenuBar(f);
082        }
083    }
084
085    @Override
086    protected void setTitle() {
087        //atf.setTitle("multiple turnouts");
088    }
089
090    @Override
091    protected String helpTarget() {
092        return "package.jmri.jmrix.ecos.swing.locodatabase.EcosLocoTable"; // very simple help page
093    }
094
095    @Override
096    protected String getClassName() {
097        return EcosLocoTableAction.class.getName();
098    }
099
100    @Override
101    public String getClassDescription() {
102        return Bundle.getMessage("EcosLocoTableTitle");
103    }
104
105}