Package com.dci.intellij.dbn.common.environment.options.ui

Source Code of com.dci.intellij.dbn.common.environment.options.ui.EnvironmentTypesEditorTable

package com.dci.intellij.dbn.common.environment.options.ui;

import com.dci.intellij.dbn.common.environment.EnvironmentTypeBundle;
import com.dci.intellij.dbn.common.thread.SimpleLaterInvocator;
import com.dci.intellij.dbn.common.ui.table.DBNTable;
import com.intellij.openapi.project.Project;
import com.intellij.ui.ColorChooser;
import com.intellij.ui.TableUtil;
import com.intellij.util.ui.UIUtil;

import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellEditor;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class EnvironmentTypesEditorTable extends DBNTable {

    public EnvironmentTypesEditorTable(Project project, EnvironmentTypeBundle environmentTypes) {
        super(project, new EnvironmentTypesTableModel(project, environmentTypes), true);
        setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        getSelectionModel().addListSelectionListener(selectionListener);
        setSelectionBackground(UIUtil.getTableBackground());
        setSelectionForeground(UIUtil.getTableForeground());
        setCellSelectionEnabled(true);
        setDefaultRenderer(Object.class, new EnvironmentTypesTableCellRenderer());
        columnModel.getColumn(0).setPreferredWidth(100);
        columnModel.getColumn(2).setMaxWidth(50);

        addMouseListener(mouseListener);
    }

    public void setEnvironmentTypes(EnvironmentTypeBundle environmentTypes) {
        super.setModel(new EnvironmentTypesTableModel(getProject(), environmentTypes));
        columnModel.getColumn(0).setPreferredWidth(100);
        columnModel.getColumn(2).setMaxWidth(50);
    }

    MouseListener mouseListener = new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 1) {
                Point point = e.getPoint();
                int columnIndex = columnAtPoint(point);
                if (columnIndex == 2) {
                    int rowIndex = rowAtPoint(point);
                    Color color = (Color) getValueAt(rowIndex, columnIndex);
                    color = ColorChooser.chooseColor(EnvironmentTypesEditorTable.this, "Select environment color", color);
                    if (color != null) {
                        setValueAt(color, rowIndex, columnIndex);
                    }
                }
            }
        }
    };   
   
    @Override
    protected void processMouseMotionEvent(MouseEvent e) {
        Object value = getValueAtMouseLocation();
        if (value instanceof Color) {
            setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        } else {
            setCursor(Cursor.getDefaultCursor());
        }
    }
   

    ListSelectionListener selectionListener = new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent e) {
            if (!e.getValueIsAdjusting()) {
                startCellEditing();
            }
        }
    };

    public void columnSelectionChanged(ListSelectionEvent e) {
        super.columnSelectionChanged(e);
        JTableHeader tableHeader = getTableHeader();
        if (tableHeader != null && tableHeader.getDraggedColumn() == null) {
            if (!e.getValueIsAdjusting()) {
                startCellEditing();
            }
        }
    }

    @Override
    public boolean isCellEditable(int row, int column) {
        return column < 2;
    }

    private void startCellEditing() {
        if (getModel().getRowCount() > 0) {
            int[] selectedRows = getSelectedRows();
            int selectedRow = selectedRows.length > 0 ? selectedRows[0] : 0;

            int[] selectedColumns = getSelectedColumns();
            int selectedColumn = selectedColumns.length > 0 ? selectedColumns[0] : 0;

            editCellAt(selectedRow, selectedColumn);
        }
    }
   
   

    private void stopCellEditing() {
        if (isEditing()) getCellEditor().stopCellEditing();
    }

    @Override
    public void editingStopped(ChangeEvent e) {
        super.editingStopped(e);
        getModel().notifyListeners(0, getModel().getRowCount(), 0);
    }

    public Component prepareEditor(TableCellEditor editor, int rowIndex, int columnIndex) {
        final JTextField textField = (JTextField) super.prepareEditor(editor, rowIndex, columnIndex);
        textField.setBorder(new EmptyBorder(0,3,0,0));

        new SimpleLaterInvocator() {
            public void execute() {
                textField.selectAll();
                textField.grabFocus();
            }
        }.start();
        selectCell(rowIndex, columnIndex);
        return textField;
    }

    @Override
    public EnvironmentTypesTableModel getModel() {
        return (EnvironmentTypesTableModel) super.getModel();
    }

    public void insertRow() {
        stopCellEditing();
        int rowIndex = getSelectedRow();
        rowIndex = getModel().getRowCount() == 0 ? 0 : rowIndex + 1;
        getModel().insertRow(rowIndex);
        getSelectionModel().setSelectionInterval(rowIndex, rowIndex);
        updateUI();
    }


    public void removeRow() {
        stopCellEditing();
        int selectedRow = getSelectedRow();
        getModel().removeRow(selectedRow);
        updateUI();
        if (getModel().getRowCount() == selectedRow && selectedRow > 0) {
            getSelectionModel().setSelectionInterval(selectedRow -1, selectedRow -1);
        }
    }

    public void moveRowUp() {
        int selectedRow = getSelectedRow();
        int selectedColumn = getSelectedColumn();

        TableUtil.moveSelectedItemsUp(this);
        selectCell(selectedRow -1, selectedColumn);
    }

    public void moveRowDown() {
        int selectedRow = getSelectedRow();
        int selectedColumn = getSelectedColumn();

        TableUtil.moveSelectedItemsDown(this);
        selectCell(selectedRow + 1, selectedColumn);
    }
}
TOP

Related Classes of com.dci.intellij.dbn.common.environment.options.ui.EnvironmentTypesEditorTable

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.