Package org.clarent.ivyidea.intellij.facet.ui.components

Source Code of org.clarent.ivyidea.intellij.facet.ui.components.ConfigurationSelectionTable

/*
* Copyright 2010 Guy Mahieu
*
* 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.
*/

package org.clarent.ivyidea.intellij.facet.ui.components;

import com.intellij.ui.BooleanTableCellEditor;
import com.intellij.ui.BooleanTableCellRenderer;
import com.intellij.util.ui.Table;
import org.apache.ivy.core.module.descriptor.Configuration;

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.font.TextAttribute;
import java.util.HashMap;
import java.util.Set;

/**
* Table to allow the user to configure the configurations that need to be resolved
* from within IntelliJ IDEA.
*
* @author Guy Mahieu
*/

public class ConfigurationSelectionTable extends Table {

    private boolean editable = true;

    public ConfigurationSelectionTable() {
        super(new ConfigurationSelectionTableModel());
        initComponents();
    }

    public void setModel(TableModel dataModel) {
        super.setModel(dataModel);
        ((ConfigurationSelectionTableModel) dataModel).setEditable(editable);
        initComponents();
    }

    public void setEditable(boolean editable) {
        this.editable = editable;
        ((ConfigurationSelectionTableModel) dataModel).setEditable(editable);

        initComponents();
        revalidate();
        repaint();
    }

    public Set<Configuration> getSelectedConfigurations() {
        return ((ConfigurationSelectionTableModel) getModel()).getSelectedConfigurations();
    }

    private void initComponents() {
        setRowSelectionAllowed(false);
        setColumnSelectionAllowed(false);

        getColumnModel().getColumn(0).setPreferredWidth(30);
        getColumnModel().getColumn(0).setMaxWidth(30);
        getColumnModel().getColumn(1).setPreferredWidth(120);
        getColumnModel().getColumn(2).setPreferredWidth(400);

        getColumnModel().getColumn(0).setHeaderValue("");
        getColumnModel().getColumn(1).setHeaderValue("Name");
        getColumnModel().getColumn(2).setHeaderValue("Description");

        // Render checkbox disabled if table is disabled
        getColumnModel().getColumn(0).setCellRenderer(new BooleanTableCellRenderer() {
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                final Component rendererComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                rendererComponent.setEnabled(editable);
                return rendererComponent;
            }
        });
        getColumnModel().getColumn(0).setCellEditor(new BooleanTableCellEditor());

        // Register custom renderer to draw deprecated configs in 'strikethrough'
        getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer() {

            private Font regularFont;
            private Font strikethroughFont;

            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                final ConfigurationSelectionTableModel tableModel = (ConfigurationSelectionTableModel) table.getModel();
                final Component rendererComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                if (regularFont == null) {
                    regularFont = rendererComponent.getFont();
                }
//                final int modelIndex = table.convertRowIndexToModel(row); // JDK 1.6 - if table sorting is enabled
                final Configuration configuration = tableModel.getConfigurationAt(row);
                if (configuration.getDeprecated() != null) {
                    if (strikethroughFont == null) {
                        final HashMap<TextAttribute, Object> attribs = new HashMap<TextAttribute, Object>();
                        attribs.put(TextAttribute.STRIKETHROUGH, Boolean.TRUE);
                        strikethroughFont = regularFont.deriveFont(attribs);
                    }
                    setToolTipText("Depracated: " + configuration.getDeprecated());
                    rendererComponent.setFont(strikethroughFont);
                } else {
                    setToolTipText(null);
                    rendererComponent.setFont(regularFont);
                }
                rendererComponent.setEnabled(editable);
                return rendererComponent;
            }
        });

        // Render description disabled if table is disabled
        getColumnModel().getColumn(2).setCellRenderer(new DefaultTableCellRenderer() {
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                final Component rendererComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                rendererComponent.setEnabled(editable);
                return rendererComponent;
            }
        });
    }
}
TOP

Related Classes of org.clarent.ivyidea.intellij.facet.ui.components.ConfigurationSelectionTable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.