home *** CD-ROM | disk | FTP | other *** search
- package com.sun.java.swing.plaf.basic;
-
- import com.sun.java.swing.Action;
- import com.sun.java.swing.CellRendererPane;
- import com.sun.java.swing.JComponent;
- import com.sun.java.swing.JScrollPane;
- import com.sun.java.swing.JTable;
- import com.sun.java.swing.JTextField;
- import com.sun.java.swing.JViewport;
- import com.sun.java.swing.KeyStroke;
- import com.sun.java.swing.ListSelectionModel;
- import com.sun.java.swing.LookAndFeel;
- import com.sun.java.swing.SwingUtilities;
- import com.sun.java.swing.UIManager;
- import com.sun.java.swing.plaf.ComponentUI;
- import com.sun.java.swing.plaf.TableUI;
- import com.sun.java.swing.plaf.UIResource;
- import com.sun.java.swing.table.JTableHeader;
- import com.sun.java.swing.table.TableCellEditor;
- import com.sun.java.swing.table.TableCellRenderer;
- import com.sun.java.swing.table.TableColumn;
- import com.sun.java.swing.text.JTextComponent;
- import com.sun.java.swing.text.Keymap;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.event.ActionEvent;
- import java.awt.event.FocusEvent;
- import java.awt.event.FocusListener;
- import java.awt.event.InputEvent;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.awt.event.MouseMotionListener;
- import java.io.Serializable;
- import java.util.Enumeration;
-
- public class BasicTableUI extends TableUI implements MouseListener, MouseMotionListener, FocusListener, Serializable {
- protected JTable table;
- private boolean phantomMousePressed = false;
- private KeyListener tableKeyListener;
- protected transient Component dispatchComponent;
- protected CellRendererPane rendererPane;
-
- private void registerKeyboardActions() {
- this.table.registerKeyboardAction(new 1(this), KeyStroke.getKeyStroke(39, 0), 0);
- this.table.registerKeyboardAction(new 2(this), KeyStroke.getKeyStroke(37, 0), 0);
- this.table.registerKeyboardAction(new 3(this), KeyStroke.getKeyStroke(38, 0), 0);
- this.table.registerKeyboardAction(new 4(this), KeyStroke.getKeyStroke(40, 0), 0);
- this.tableKeyListener = new TableKeyListener(this);
- this.table.addKeyListener(this.tableKeyListener);
- }
-
- private void unregisterKeyboardActions() {
- this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(38, 0));
- this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(40, 0));
- this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(39, 0));
- this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(37, 0));
- this.table.removeKeyListener(this.tableKeyListener);
- }
-
- protected void moveAnchor(int var1, int var2) {
- if (this.table.isEditing()) {
- TableCellEditor var3 = this.table.getCellEditor();
- if (var3 != null) {
- boolean var4 = var3.stopCellEditing();
- if (!var4) {
- return;
- }
- }
- }
-
- this.table.clearSelection();
- this.updateSelection(var1, var2, false, true);
- }
-
- private void dispatchKeyboardEvent(KeyEvent var1) {
- int var2 = this.table.getSelectedRow();
- int var3 = this.table.getSelectedColumn();
- if (var2 != -1 && var3 != -1 && !this.table.isEditing()) {
- boolean var4 = this.table.editCellAt(var2, var3);
- this.table.requestFocus();
- if (!var4) {
- return;
- }
- }
-
- Component var11 = this.table.getEditorComponent();
- if (this.table.isEditing() && var11 != null) {
- char var5 = var1.getKeyChar();
- if (var11 instanceof JTextField) {
- JTextField var6 = (JTextField)var11;
- Keymap var7 = ((JTextComponent)var6).getKeymap();
- KeyStroke var8 = KeyStroke.getKeyStroke(var5, 0);
- Action var9 = var7.getAction(var8);
- if (var9 == null) {
- var9 = var7.getDefaultAction();
- }
-
- if (var9 != null) {
- ActionEvent var10 = new ActionEvent(var6, 1001, String.valueOf(var5));
- var9.actionPerformed(var10);
- }
- }
- }
-
- }
-
- private void configureTable() {
- LookAndFeel.installColorsAndFont(this.table, "Table.background", "Table.foreground", "Table.font");
- Color var1 = this.table.getSelectionBackground();
- if (var1 == null || var1 instanceof UIResource) {
- this.table.setSelectionBackground(UIManager.getColor("Table.selectionBackground"));
- }
-
- Color var2 = this.table.getSelectionForeground();
- if (var2 == null || var2 instanceof UIResource) {
- this.table.setSelectionForeground(UIManager.getColor("Table.selectionForeground"));
- }
-
- Color var3 = this.table.getGridColor();
- if (var3 == null || var3 instanceof UIResource) {
- this.table.setGridColor(UIManager.getColor("Table.gridColor"));
- }
-
- Container var4 = this.table.getParent();
- if (var4 != null) {
- var4 = ((Component)var4).getParent();
- if (var4 != null && var4 instanceof JScrollPane) {
- LookAndFeel.installBorder((JScrollPane)var4, "Table.scrollPaneBorder");
- }
- }
-
- }
-
- public static ComponentUI createUI(JComponent var0) {
- return new BasicTableUI();
- }
-
- public void installUI(JComponent var1) {
- this.table = (JTable)var1;
- ((Component)var1).addMouseListener(this);
- ((Component)var1).addMouseMotionListener(this);
- ((Component)var1).addFocusListener(this);
- this.rendererPane = new CellRendererPane();
- this.table.add(this.rendererPane);
- this.configureTable();
- this.registerKeyboardActions();
- }
-
- public void uninstallUI(JComponent var1) {
- this.table.remove(this.rendererPane);
- ((Component)var1).removeMouseListener(this);
- ((Component)var1).removeMouseMotionListener(this);
- ((Component)var1).removeFocusListener(this);
- this.unregisterKeyboardActions();
- this.rendererPane = null;
- this.table = null;
- }
-
- private void repaintAnchorCell() {
- int var1 = this.table.getSelectedRow();
- int var2 = this.table.getSelectedColumn();
- Rectangle var3 = this.table.getCellRect(var1, var2, false);
- this.table.repaint(var3);
- }
-
- public void focusGained(FocusEvent var1) {
- if (this.table.getSelectedColumn() == -1) {
- this.table.setColumnSelectionInterval(0, 0);
- }
-
- if (this.table.getSelectedRow() == -1) {
- this.table.setRowSelectionInterval(0, 0);
- }
-
- this.repaintAnchorCell();
- }
-
- public void focusLost(FocusEvent var1) {
- this.repaintAnchorCell();
- }
-
- public void mouseMoved(MouseEvent var1) {
- if (this.dispatchComponent != null) {
- this.dispatchComponent = null;
- }
-
- }
-
- public void mouseClicked(MouseEvent var1) {
- }
-
- public void mouseEntered(MouseEvent var1) {
- if (this.dispatchComponent != null) {
- this.dispatchComponent = null;
- }
-
- }
-
- public void mouseExited(MouseEvent var1) {
- if (this.dispatchComponent != null) {
- this.dispatchComponent = null;
- }
-
- }
-
- public void mousePressed(MouseEvent var1) {
- if (this.phantomMousePressed) {
- System.err.println("BasicTableUI recieved two consecutive mousePressed events.");
- } else {
- this.phantomMousePressed = true;
- Point var2 = var1.getPoint();
- int var3 = this.table.rowAtPoint(var2);
- int var4 = this.table.columnAtPoint(var2);
- if (var4 != -1 && var3 != -1) {
- Rectangle var5 = this.table.getCellRect(var3, var4, false);
- if (var5.contains(var2)) {
- this.table.editCellAt(var3, var4, var1);
- }
-
- if (this.table.isEditing()) {
- Component var9 = this.table.getEditorComponent();
- Point var10 = SwingUtilities.convertPoint(this.table, new Point(var1.getX(), var1.getY()), var9);
- this.dispatchComponent = SwingUtilities.getDeepestComponentAt(var9, var10.x, var10.y);
- this.dispatchComponent.dispatchEvent(SwingUtilities.convertMouseEvent(this.table, var1, this.dispatchComponent));
- } else {
- this.table.requestFocus();
- boolean var6 = ((InputEvent)var1).isControlDown();
- boolean var7 = ((InputEvent)var1).isShiftDown();
- boolean var8 = var6 && this.table.isCellSelected(var3, var4);
- if (!var6 && !var7) {
- this.table.clearSelection();
- }
-
- this.updateSelection(var3, var4, var8, !var7 || var8);
- }
- }
- }
- }
-
- public void mouseDragged(MouseEvent var1) {
- if (this.table.isEditing()) {
- if (this.dispatchComponent != null) {
- this.dispatchComponent.dispatchEvent(SwingUtilities.convertMouseEvent(this.table, var1, this.dispatchComponent));
- }
-
- } else {
- Point var2 = var1.getPoint();
- int var3 = this.table.rowAtPoint(var2);
- int var4 = this.table.columnAtPoint(var2);
- if (var4 != -1 && var3 != -1) {
- this.updateSelection(var3, var4, false, false);
- }
- }
- }
-
- public void mouseReleased(MouseEvent var1) {
- this.phantomMousePressed = false;
- if (this.table.isEditing()) {
- if (this.dispatchComponent != null) {
- this.dispatchComponent.dispatchEvent(SwingUtilities.convertMouseEvent(this.table, var1, this.dispatchComponent));
- }
-
- this.dispatchComponent = null;
- }
- }
-
- public void paint(Graphics var1, JComponent var2) {
- JTable var3 = (JTable)var2;
- Rectangle var4 = var1.getClipBounds();
- ((Component)var3).getSize();
- if (var3.getColumnModel() != null) {
- Dimension var5 = this.getPreferredSize(var3);
- Rectangle var6 = new Rectangle(0, 0, var5.width, var5.height);
- var6 = var6.intersection(var4);
- var1.setColor(((Component)var3).getParent().getBackground());
- var1.fillRect(var4.x, var4.y, var4.width, var4.height);
- if (var6.height >= 0 && var6.width >= 0) {
- Color var7 = ((Component)var3).getBackground();
- if (var7 != null) {
- var1.setColor(var7);
- var1.fillRect(var6.x, var6.y, var6.width, var6.height);
- }
-
- this.drawGridInClipRect(var6, var1);
- Rectangle var11 = var1.getClipBounds();
- int var12 = var3.rowAtPoint(new Point(0, var11.y));
- int var13 = this.lastVisibleRow(var11);
- Rectangle var9 = new Rectangle(0, 0, var3.getColumnModel().getTotalColumnWidth(), var3.getRowHeight() + var3.getIntercellSpacing().height);
- var9.y = var12 * var9.height;
-
- for(int var8 = var12; var8 <= var13; ++var8) {
- if (var9.intersects(var6)) {
- Rectangle var10 = var9.intersection(var6);
- this.drawRowInClipRect(var8, var10, var1);
- }
-
- var9.y += var9.height;
- }
-
- }
- }
- }
-
- public Dimension getMinimumSize(JComponent var1) {
- return this.getPreferredSize(var1);
- }
-
- public Dimension getPreferredSize(JComponent var1) {
- JTable var2 = (JTable)var1;
- Dimension var3 = new Dimension();
- int var4 = var2.getAutoResizeMode();
- Container var5 = ((Component)var2).getParent();
- if (var4 != 0 && var5 instanceof JViewport) {
- var3.width = ((Component)var5).getBounds().width;
- var2.sizeColumnsToFit(var4 == 1);
- } else {
- var3.width = var2.getColumnModel().getTotalColumnWidth();
- }
-
- var3.height = var2.getRowCount() * (var2.getRowHeight() + var2.getIntercellSpacing().height);
- return var3;
- }
-
- public Dimension getMaximumSize(JComponent var1) {
- return this.getPreferredSize(var1);
- }
-
- private int lastVisibleRow(Rectangle var1) {
- int var2 = this.table.rowAtPoint(new Point(0, var1.y + var1.height - 1));
- if (var2 == -1) {
- var2 = this.table.getRowCount() - 1;
- }
-
- return var2;
- }
-
- protected void drawGridInClipRect(Rectangle var1, Graphics var2) {
- var2.setColor(this.table.getGridColor());
- if (this.table.getShowHorizontalLines()) {
- this.drawHorizontalLinesInClipRect(var1, var2);
- }
-
- if (this.table.getShowVerticalLines()) {
- this.drawVerticalLinesInClipRect(var1, var2);
- }
-
- }
-
- protected void drawHorizontalLinesInClipRect(Rectangle var1, Graphics var2) {
- int var3 = this.table.getRowHeight() + this.table.getIntercellSpacing().height;
- Rectangle var4 = var2.getClipBounds();
- int var5 = this.table.rowAtPoint(new Point(0, var4.y));
- int var6 = this.lastVisibleRow(var4);
- int var7 = var3 * var5 + (var3 - 1);
-
- for(int var8 = var5; var8 <= var6; ++var8) {
- if (var7 >= var1.y && var7 <= var1.y + var1.height) {
- var2.drawLine(var1.x, var7, var1.x + var1.width - 1, var7);
- }
-
- var7 += var3;
- }
-
- }
-
- protected void drawVerticalLinesInClipRect(Rectangle var1, Graphics var2) {
- int var3 = 0;
- int var4 = this.table.getColumnCount();
-
- for(int var5 = 0; var5 <= var4; ++var5) {
- if (var3 > 0 && var3 - 1 >= var1.x && var3 - 1 <= var1.x + var1.width) {
- var2.drawLine(var3 - 1, var1.y, var3 - 1, var1.y + var1.height - 1);
- }
-
- if (var5 < var4) {
- var3 += this.table.getColumnModel().getColumn(var5).getWidth() + this.table.getIntercellSpacing().width;
- }
- }
-
- }
-
- protected void drawRowInClipRect(int var1, Rectangle var2, Graphics var3) {
- int var4 = 0;
- boolean var5 = false;
- Rectangle var7 = null;
- int var9 = -1;
- Enumeration var11 = this.table.getColumnModel().getColumns();
- Dimension var12 = this.table.getIntercellSpacing();
- JTableHeader var13 = this.table.getTableHeader();
- Rectangle var6 = new Rectangle();
- var6.height = this.table.getRowHeight() + var12.height;
-
- for(var6.y = var1 * var6.height; var11.hasMoreElements(); ++var4) {
- TableColumn var8 = (TableColumn)var11.nextElement();
- var6.width = var8.getWidth() + var12.width;
- if (var6.intersects(var2)) {
- var5 = true;
- if (var13 != null && var8 == var13.getDraggedColumn()) {
- var3.setColor(this.table.getParent().getBackground());
- var3.fillRect(var6.x, var6.y, var6.width, var6.height);
- var7 = new Rectangle(var6);
- var9 = var4;
- } else {
- TableCellRenderer var10 = this.getCellRenderer(var4);
- Component var14 = this.prepareRenderer(var10, this.table, var1, var4);
- this.drawWithComponent(var3, var14, var6);
- }
- } else if (var5) {
- break;
- }
-
- var6.x += var6.width;
- }
-
- if (var9 != -1 && var7 != null) {
- TableCellRenderer var20 = this.getCellRenderer(var9);
- if (var20 != null) {
- Component var21 = this.prepareRenderer(var20, this.table, var1, var9);
- var7.x += var13.getDraggedDistance();
- Color var15 = this.table.getBackground();
- if (var15 != null) {
- var3.setColor(var15);
- var3.fillRect(var7.x, var7.y, var7.width, var7.height);
- }
-
- var3.setColor(this.table.getGridColor());
- int var16 = var7.x;
- int var17 = var7.y;
- int var18 = var16 + var7.width - 1;
- int var19 = var17 + var7.height - 1;
- if (this.table.getShowVerticalLines()) {
- var3.drawLine(var18, var17, var18, var19);
- }
-
- if (this.table.getShowHorizontalLines()) {
- var3.drawLine(var16, var19, var18, var19);
- }
-
- this.drawWithComponent(var3, var21, var7);
- }
- }
-
- }
-
- protected TableCellRenderer getCellRenderer(int var1) {
- TableColumn var2 = this.table.getColumnModel().getColumn(var1);
- TableCellRenderer var3 = var2.getCellRenderer();
- if (var3 == null) {
- Class var4 = this.table.getColumnClass(var1);
- var3 = this.table.getDefaultRenderer(var4);
- }
-
- return var3;
- }
-
- protected Component prepareRenderer(TableCellRenderer var1, JTable var2, int var3, int var4) {
- Object var5 = var2.getValueAt(var3, var4);
- boolean var6 = var2.isCellSelected(var3, var4);
- boolean var7 = var2.getSelectedRow() == var3;
- boolean var8 = var2.getSelectedColumn() == var4;
- boolean var9 = var7 && var8 && ((JComponent)var2).hasFocus();
- return var1.getTableCellRendererComponent(var2, var5, var6, var9, var3, var4);
- }
-
- protected void drawWithComponent(Graphics var1, Component var2, Rectangle var3) {
- Dimension var4 = this.table.getIntercellSpacing();
- var3.setBounds(var3.x + var4.width / 2, var3.y + var4.height / 2, var3.width - var4.width, var3.height - var4.height);
- if (var2.getParent() == null) {
- this.rendererPane.add(var2);
- }
-
- this.rendererPane.paintComponent(var1, var2, this.table, var3.x, var3.y, var3.width, var3.height, true);
- var3.setBounds(var3.x - var4.width / 2, var3.y - var4.height / 2, var3.width + var4.width, var3.height + var4.height);
- }
-
- private void updateSelectionModel(ListSelectionModel var1, int var2, boolean var3, boolean var4) {
- if (var4) {
- if (var3) {
- var1.removeSelectionInterval(var2, var2);
- return;
- }
-
- var1.addSelectionInterval(var2, var2);
- }
-
- var1.setLeadSelectionIndex(var2);
- }
-
- private void updateSelection(int var1, int var2, boolean var3, boolean var4) {
- Rectangle var5 = this.table.getCellRect(var1, var2, false);
- if (var5 != null) {
- this.table.scrollRectToVisible(var5);
- }
-
- ListSelectionModel var6 = this.table.getSelectionModel();
- ListSelectionModel var7 = this.table.getColumnModel().getSelectionModel();
- this.updateSelectionModel(var7, var2, var3, var4);
- this.updateSelectionModel(var6, var1, var3, var4);
- }
-
- // $FF: synthetic method
- static void access$0(BasicTableUI var0, KeyEvent var1) {
- var0.dispatchKeyboardEvent(var1);
- }
- }
-