VarSelectionPanel.java

// @formatter:off
 /*******************************************************************************
 *
 * This file is part of JMad.
 * 
 * Copyright (c) 2008-2011, CERN. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 ******************************************************************************/
// @formatter:on

package cern.accsoft.steering.jmad.gui.panels.var;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.TableColumn;

import cern.accsoft.steering.jmad.domain.var.TwissVariable;
import cern.accsoft.steering.jmad.gui.panels.var.SelectedVarManager.VarSelectionMode;
import cern.accsoft.steering.util.gui.panels.TableFilterPanel;
import cern.accsoft.steering.util.table.RadioColumnEditor;
import cern.accsoft.steering.util.table.RadioColumnRenderer;

public class VarSelectionPanel extends JPanel {
    private static final long serialVersionUID = 2433227096109178284L;

    /** the size of the table */
    final static Dimension PREFERRED_TABLE_SIZE = new Dimension(200, 400);

    private SelectedVarManager selectedVarManager = new SelectedVarManagerImpl();

    private TwissVariable defaultVariable = null;

    private JTable table;

    private AbstractVarSelectionTableModel tableModel;

    public void init() {
        initComponents();
    }

    /**
     * initializes the components.
     */
    protected void initComponents() {
        setLayout(new GridBagLayout());

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.weighty = 0;
        constraints.weightx = 1;
        constraints.fill = GridBagConstraints.BOTH;

        this.getTableModel().setShowSelectColumn(true);
        this.getTableModel().setSelectedVarManager(getSelectedVarManager());

        table = new JTable(this.getTableModel());
        table.setAutoCreateRowSorter(true);
        add(new TableFilterPanel(table), constraints);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        TableColumn selectColumn = table.getColumnModel().getColumn(0);
        selectColumn.setPreferredWidth(50);
        if (VarSelectionMode.SINGLE == getSelectedVarManager().getVarSelectionMode()) {
            selectColumn.setCellRenderer(new RadioColumnRenderer());
            selectColumn.setCellEditor(new RadioColumnEditor());
        }

        if (getDefaultVariable() != null) {
            for (int i = 0; i < getTableModel().getAvailableVariables().size(); i++) {
                TwissVariable var = getTableModel().getAvailableVariables().get(i);
                if (this.getDefaultVariable().equals(var)) {
                    getTableModel().setValueAt(true, i, 0);
                }
            }
        }

        constraints.gridy++;
        constraints.weightx = 1;
        constraints.weighty = 1;
        JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setPreferredSize(PREFERRED_TABLE_SIZE);
        add(scrollPane, constraints);

        validate();
    }

    public void setTableModel(AbstractVarSelectionTableModel tableModel) {
        this.tableModel = tableModel;
    }

    private AbstractVarSelectionTableModel getTableModel() {
        return tableModel;
    }

    public TwissVariable getDefaultVariable() {
        return defaultVariable;
    }

    public void setDefaultVariable(TwissVariable defaultVariable) {
        this.defaultVariable = defaultVariable;
    }

    public void setSelectedVarManager(SelectedVarManager selectedVarManager) {
        this.selectedVarManager = selectedVarManager;
    }

    private SelectedVarManager getSelectedVarManager() {
        return selectedVarManager;
    }

}