blob: f46ded741d0b6c23e492cb3f0a9c23a1ca3560b0 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* 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 com.intellij.ui.plaf.beg;
import org.jetbrains.annotations.NonNls;
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicTableUI;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* @author mike
*/
public class BegTableUI extends BasicTableUI {
private final KeyAdapter myAdapter= new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
if (table.isEditing()) {
e.consume();
table.removeEditor();
if (e.getSource() != table) {
((JComponent)e.getSource()).removeKeyListener(this);
}
}
}
}
};
@NonNls public static final String START_EDITING_ACTION_KEY = "startEditing";
public static ComponentUI createUI(JComponent c) {
return new BegTableUI();
}
public void installUI(JComponent c) {
super.installUI(c);
c.getActionMap().put(START_EDITING_ACTION_KEY, new StartEditingAction());
// fix missing escape shortcut
c.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("pressed ESCAPE"), "cancel");
}
protected KeyListener createKeyListener() {
return myAdapter;
}
private class StartEditingAction extends AbstractAction {
public void actionPerformed(ActionEvent e) {
JTable table = (JTable)e.getSource();
if (!table.hasFocus()) {
CellEditor cellEditor = table.getCellEditor();
if (cellEditor != null && !cellEditor.stopCellEditing()) {
return;
}
table.requestFocus();
return;
}
ListSelectionModel rsm = table.getSelectionModel();
int anchorRow = rsm.getAnchorSelectionIndex();
ListSelectionModel csm = table.getColumnModel().getSelectionModel();
int anchorColumn = csm.getAnchorSelectionIndex();
table.editCellAt(anchorRow, anchorColumn);
Component editorComp = table.getEditorComponent();
if (editorComp != null) {
editorComp.addKeyListener(myAdapter);
editorComp.requestFocus();
}
}
}
}