home *** CD-ROM | disk | FTP | other *** search
- package com.sun.java.swing.plaf.basic;
-
- import com.sun.java.swing.CellRendererPane;
- import com.sun.java.swing.JComponent;
- import com.sun.java.swing.JTable;
- import com.sun.java.swing.LookAndFeel;
- import com.sun.java.swing.SwingUtilities;
- import com.sun.java.swing.plaf.ComponentUI;
- import com.sun.java.swing.plaf.TableHeaderUI;
- import com.sun.java.swing.table.JTableHeader;
- import com.sun.java.swing.table.TableCellRenderer;
- import com.sun.java.swing.table.TableColumn;
- import com.sun.java.swing.table.TableColumnModel;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Cursor;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.event.FocusEvent;
- import java.awt.event.FocusListener;
- import java.awt.event.InputEvent;
- 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 BasicTableHeaderUI extends TableHeaderUI implements MouseListener, MouseMotionListener, FocusListener, Serializable {
- protected JTableHeader header;
- protected CellRendererPane rendererPane = new CellRendererPane();
- protected transient int hitColumnIndex;
- protected transient TableColumn hitColumn;
- protected transient boolean isResizing;
- protected transient int originalWidth;
- protected transient int widthDelta;
- protected transient int lastMouseX;
- protected transient int realDraggedDistance;
- protected transient boolean isReordering;
- protected transient boolean okToReorder;
- protected transient boolean fireAction;
- protected transient boolean hasPress = false;
- static final Cursor defaultCursor = Cursor.getPredefinedCursor(0);
- static final Cursor resizeCursor = Cursor.getPredefinedCursor(11);
-
- public static ComponentUI createUI(JComponent var0) {
- return new BasicTableHeaderUI();
- }
-
- public void installUI(JComponent var1) {
- this.header = (JTableHeader)var1;
- this.header.add(this.rendererPane);
- ((Component)var1).addMouseListener(this);
- ((Component)var1).addMouseMotionListener(this);
- ((Component)var1).addFocusListener(this);
- LookAndFeel.installColorsAndFont(this.header, "TableHeader.background", "TableHeader.foreground", "TableHeader.font");
- }
-
- public void uninstallUI(JComponent var1) {
- this.header.remove(this.rendererPane);
- this.header = null;
- ((Component)var1).removeMouseListener(this);
- ((Component)var1).removeMouseMotionListener(this);
- ((Component)var1).removeFocusListener(this);
- }
-
- public void focusGained(FocusEvent var1) {
- }
-
- public void focusLost(FocusEvent var1) {
- }
-
- public void mouseMoved(MouseEvent var1) {
- if (this.getResizingColumn(var1.getPoint()) != -1) {
- if (this.header.getCursor() != resizeCursor) {
- this.header.setCursor(resizeCursor);
- return;
- }
- } else if (this.header.getCursor() != defaultCursor) {
- this.header.setCursor(defaultCursor);
- }
-
- }
-
- public void mouseDragged(MouseEvent var1) {
- this.fireAction = false;
- int var2 = var1.getX();
- if (var2 != this.lastMouseX) {
- if (this.isResizing) {
- this.widthDelta += var2 - this.lastMouseX;
- int var3 = this.originalWidth + this.widthDelta;
- this.hitColumn.setWidth(var3);
- this.header.revalidate();
- this.header.repaint();
- if (this.header.getUpdateTableInRealTime()) {
- JTable var4 = this.header.getTable();
- ((JComponent)var4).revalidate();
- ((Component)var4).repaint();
- }
- } else if (this.okToReorder || this.isReordering) {
- this.isReordering = true;
- this.move(var1);
- }
-
- this.lastMouseX = var2;
- }
- }
-
- public void mouseClicked(MouseEvent var1) {
- }
-
- public void mousePressed(MouseEvent var1) {
- if (!this.hasPress) {
- this.hasPress = true;
- TableColumnModel var2 = this.header.getColumnModel();
- int var4 = 0;
- this.isReordering = false;
- this.isResizing = false;
- this.fireAction = true;
- this.hitColumnIndex = -1;
- this.hitColumn = null;
- Point var5 = var1.getPoint();
- if ((var4 = var2.getColumnIndexAtX(var5.x)) != -1) {
- Rectangle var3 = this.header.getHeaderRect(var4);
- int var6 = this.getResizingColumn(var5);
- if (this.header.getResizingAllowed() && var6 != -1) {
- this.hitColumn = var2.getColumn(var6);
- if (this.hitColumn.getResizable()) {
- this.isResizing = true;
- this.fireAction = false;
- this.hitColumnIndex = var6;
- this.originalWidth = this.hitColumn.getWidth();
- this.widthDelta = 0;
- this.header.setResizingColumn(this.hitColumn);
- this.lastMouseX = var5.x;
- this.hitColumn.disableResizedPosting();
- return;
- }
-
- this.hitColumn = null;
- return;
- }
-
- boolean var7 = ((InputEvent)var1).isControlDown();
- if (this.header.getReorderingAllowed() && var3.contains(var5)) {
- this.okToReorder = var2.getColumnCount() > 1;
- if (var7) {
- this.okToReorder = false;
- this.fireAction = false;
- }
- }
-
- JTable var8 = this.header.getTable();
- if (var2.getColumnSelectionAllowed() && var3.contains(var5) && var8 != null) {
- if (var7) {
- if (var8.isColumnSelected(var4)) {
- var8.removeColumnSelectionInterval(var4, var4);
- } else {
- var8.addColumnSelectionInterval(var4, var4);
- }
- } else {
- var8.setColumnSelectionInterval(var4, var4);
- }
- }
-
- this.hitColumnIndex = var4;
- this.header.setDraggedColumn(this.hitColumn);
- this.header.setDraggedDistance(0);
- this.lastMouseX = var5.x;
- this.realDraggedDistance = 0;
- }
-
- }
- }
-
- public void mouseReleased(MouseEvent var1) {
- this.hasPress = false;
- if (this.isResizing) {
- this.isResizing = false;
- this.originalWidth = 0;
- this.header.setResizingColumn((TableColumn)null);
- int var2 = this.hitColumn.getWidth();
- this.hitColumn.setWidth(this.originalWidth);
- this.hitColumn.enableResizedPosting();
- this.hitColumn.setWidth(var2);
- } else if (this.isReordering) {
- this.isReordering = false;
- this.originalWidth = this.widthDelta = 0;
- this.realDraggedDistance = 0;
- } else if (this.fireAction) {
- this.fireAction = false;
- }
-
- this.header.setDraggedColumn((TableColumn)null);
- this.header.setDraggedDistance(0);
- this.header.repaint();
- JTable var3 = this.header.getTable();
- if (var3 != null) {
- ((Component)var3).repaint();
- }
-
- this.okToReorder = false;
- this.hitColumnIndex = -1;
- this.hitColumn = null;
- }
-
- public void mouseEntered(MouseEvent var1) {
- }
-
- public void mouseExited(MouseEvent var1) {
- }
-
- public void paint(Graphics var1, JComponent var2) {
- JTableHeader var3 = (JTableHeader)var2;
- Rectangle var4 = var1.getClipBounds();
- Dimension var5 = ((Component)var3).getSize();
- Object var6 = null;
- if (var3.getColumnModel() != null) {
- Color var7 = ((Component)var3).getBackground();
- if (var7 != null) {
- var1.setColor(var7);
- var1.fillRect(var4.x, var4.y, var4.width, var4.height);
- }
-
- Rectangle var8 = new Rectangle(0, 0, var5.width, var5.height);
- int var9 = 0;
- boolean var10 = false;
- Rectangle var11 = null;
- Object var13 = null;
- int var15 = var3.getColumnModel().getColumnMargin();
-
- for(Enumeration var16 = var3.getColumnModel().getColumns(); var16.hasMoreElements(); ++var9) {
- TableColumn var12 = (TableColumn)var16.nextElement();
- var8.width = var12.getWidth() + var15;
- if (var8.intersects(var4)) {
- var10 = true;
- if (var12 != var3.getDraggedColumn()) {
- TableCellRenderer var14 = var12.getHeaderRenderer();
- Component var17 = var14.getTableCellRendererComponent(var3.getTable(), var12.getHeaderValue(), false, false, -1, var9);
- this.rendererPane.add(var17);
- this.rendererPane.paintComponent(var1, var17, var3, var8.x, var8.y, var8.width, var8.height, true);
- } else {
- var1.setColor(((Component)var3).getParent().getBackground());
- var1.fillRect(var8.x, var8.y, var8.width, var8.height);
- var11 = new Rectangle(var8);
- }
- } else if (var10) {
- break;
- }
-
- var8.x += var8.width;
- }
-
- TableColumn var19 = var3.getDraggedColumn();
- if (var19 != null && var11 != null) {
- TableCellRenderer var20 = var19.getHeaderRenderer();
- Component var18 = var20.getTableCellRendererComponent(var3.getTable(), var19.getHeaderValue(), false, false, -1, var9);
- var11.x += var3.getDraggedDistance();
- SwingUtilities.paintComponent(var1, var18, var3, var11);
- }
-
- }
- }
-
- public Dimension getMinimumSize(JComponent var1) {
- return this.getPreferredSize(var1);
- }
-
- public Dimension getPreferredSize(JComponent var1) {
- JTableHeader var2 = (JTableHeader)var1;
- JTable var3 = var2.getTable();
- Dimension var4 = ((JComponent)var3).getPreferredSize();
- Dimension var5 = new Dimension();
- var5.width = var4.width;
- int var6 = 0;
-
- for(Enumeration var7 = var2.getColumnModel().getColumns(); var7.hasMoreElements(); ++var6) {
- TableColumn var8 = (TableColumn)var7.nextElement();
- TableCellRenderer var9 = var8.getHeaderRenderer();
- Component var10 = var9.getTableCellRendererComponent(var2.getTable(), var8.getHeaderValue(), false, false, -1, var6);
- var5.height = Math.max(var5.height, var10.getPreferredSize().height);
- }
-
- return var5;
- }
-
- public Dimension getMaximumSize(JComponent var1) {
- return this.getPreferredSize(var1);
- }
-
- private void move(MouseEvent var1) {
- TableColumnModel var2 = this.header.getColumnModel();
- int var4 = var2.getColumnCount() - 1;
- Rectangle var5 = this.header.getHeaderRect(this.hitColumnIndex);
- var5.x += this.header.getDraggedDistance();
- int var6 = var1.getX() - this.lastMouseX;
- this.realDraggedDistance += var6;
- Rectangle var7 = this.header.getHeaderRect(this.hitColumnIndex);
- var7.x += this.realDraggedDistance;
- var5 = var5.union(var7);
- if (this.realDraggedDistance < 0 && this.hitColumnIndex != 0) {
- int var10 = var2.getColumnMargin() + var2.getColumn(this.hitColumnIndex - 1).getWidth();
- if (-this.realDraggedDistance > var10 / 2) {
- var2.moveColumn(this.hitColumnIndex, this.hitColumnIndex - 1);
- this.realDraggedDistance += var10;
- --this.hitColumnIndex;
- }
- } else if (this.realDraggedDistance > 0 && this.hitColumnIndex != var4) {
- int var3 = var2.getColumnMargin() + var2.getColumn(this.hitColumnIndex + 1).getWidth();
- if (this.realDraggedDistance > var3 / 2) {
- var2.moveColumn(this.hitColumnIndex, this.hitColumnIndex + 1);
- this.realDraggedDistance = -(var3 - this.realDraggedDistance);
- ++this.hitColumnIndex;
- }
- }
-
- int var8 = this.realDraggedDistance;
- if (this.hitColumnIndex == 0) {
- if (var8 < 0) {
- var8 = 0;
- }
- } else if (this.hitColumnIndex == var4 && var8 > 0) {
- var8 = 0;
- }
-
- this.header.setDraggedColumn(var2.getColumn(this.hitColumnIndex));
- this.header.setDraggedDistance(var8);
- this.header.repaint(var5.x, 0, var5.width, var5.height);
- if (this.header.getUpdateTableInRealTime()) {
- JTable var9 = this.header.getTable();
- if (var9 != null) {
- ((Component)var9).repaint(var5.x, 0, var5.width, (var9.getRowHeight() + var9.getIntercellSpacing().height) * var9.getRowCount());
- }
- }
-
- }
-
- private int getResizingColumn(Point var1) {
- int var2 = 0;
- Rectangle var3 = new Rectangle(-3, 0, 6, this.header.getSize().height);
- int var4 = this.header.getColumnModel().getColumnMargin();
-
- for(Enumeration var5 = this.header.getColumnModel().getColumns(); var5.hasMoreElements(); ++var2) {
- TableColumn var6 = (TableColumn)var5.nextElement();
- var3.x += var6.getWidth() + var4;
- if (var3.x > var1.x) {
- break;
- }
-
- if (var3.contains(var1)) {
- return var2;
- }
- }
-
- return -1;
- }
- }
-