mouse sensitive editor IDEA-74912

This commit is contained in:
Konstantin Bulenkov
2011-09-28 12:06:17 +02:00
parent 3b189f1b2a
commit 787d5b1384
3 changed files with 38 additions and 5 deletions
@@ -63,6 +63,7 @@ import javax.swing.table.TableColumn;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -243,13 +244,19 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
}
return len;
}
private int getTypesColumnWidth() {
Font font = EditorColorsManager.getInstance().getGlobalScheme().getFont(EditorFontType.PLAIN);
font = new Font(font.getFontName(), font.getStyle(), 12);
return (getTypesMaxLength() + 1)* Toolkit.getDefaultToolkit().getFontMetrics(font).stringWidth("W");
}
@Override
protected JBTableRowEditor getTableEditor(final JTable t, final ParameterTableModelItemBase<ParameterInfoImpl> item) {
return new JBTableRowEditor() {
private EditorTextField myTypeEditor;
private EditorTextField myNameEditor;
private EditorTextField myDefaultValueEditor;
private EditorTextField myDefaultValueEditor;
private JCheckBox myAnyVar;
@Override
@@ -321,7 +328,11 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
@Override
public JComponent getPreferredFocusedComponent() {
return myTypeEditor;
final MouseEvent me = getMouseEvent();
if (me == null) {
return myTypeEditor;
}
return me.getPoint().getX() <= getTypesColumnWidth() ? myTypeEditor : myNameEditor;
}
@Override
@@ -28,11 +28,10 @@ import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.util.List;
import static java.awt.event.KeyEvent.KEY_PRESSED;
import static java.awt.event.KeyEvent.VK_ENTER;
import static java.awt.event.KeyEvent.VK_TAB;
import static java.awt.event.KeyEvent.*;
/**
* @author Konstantin Bulenkov
@@ -56,8 +55,11 @@ public abstract class JBListTable extends JPanel {
}
};
mainTable = new JBTable(model) {
private MouseEvent myMouseEvent;
@Override
protected void processKeyEvent(KeyEvent e) {
myMouseEvent = null;
if (e.isAltDown()) return;
//todo[kb] JBTabsImpl breaks focus traversal policy. Need a workaround here
if (e.getKeyCode() == VK_TAB) {
@@ -76,6 +78,12 @@ public abstract class JBListTable extends JPanel {
super.processKeyEvent(e);
}
@Override
protected void processMouseEvent(MouseEvent e) {
myMouseEvent = e;
super.processMouseEvent(e);
}
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
return new DefaultTableCellRenderer() {
@@ -144,6 +152,7 @@ public abstract class JBListTable extends JPanel {
public TableCellEditor getCellEditor(final int row, int column) {
final JBTableRowEditor editor = getRowEditor(row);
if (editor != null) {
editor.setMouseEvent(myMouseEvent);
editor.prepareEditor(t, row);
installPaddingAndBordersForEditors(editor);
editor.setFocusCycleRoot(true);
@@ -16,13 +16,17 @@
package com.intellij.util.ui.table;
import com.intellij.openapi.wm.IdeFocusManager;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.event.MouseEvent;
/**
* @author Konstantin Bulenkov
*/
public abstract class JBTableRowEditor extends JPanel {
private MouseEvent myMouseEvent;
@Override
public void addNotify() {
super.addNotify();
@@ -32,6 +36,15 @@ public abstract class JBTableRowEditor extends JPanel {
}
}
@Nullable
public final MouseEvent getMouseEvent() {
return myMouseEvent;
}
public final void setMouseEvent(@Nullable MouseEvent e) {
myMouseEvent = e;
}
public abstract void prepareEditor(JTable table, int row);
public abstract JBTableRow getValue();
public abstract JComponent getPreferredFocusedComponent();