-package org.simantics.spreadsheet.ui;\r
-\r
-import javax.swing.*;\r
-import javax.swing.table.*;\r
-import javax.swing.event.MouseInputAdapter;\r
-import java.awt.*;\r
-import java.awt.event.MouseEvent;\r
-\r
-public class TableRowResizer extends MouseInputAdapter\r
-{ \r
- public static Cursor resizeCursor = Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR); \r
-\r
- private int mouseYOffset, resizingRow; \r
- private Cursor otherCursor = resizeCursor; \r
- private JTable table; \r
-\r
- public TableRowResizer(JTable table){ \r
- this.table = table; \r
- table.addMouseListener(this); \r
- table.addMouseMotionListener(this); \r
- } \r
-\r
- private int getResizingRow(Point p){ \r
- return getResizingRow(p, table.rowAtPoint(p)); \r
- } \r
-\r
- private int getResizingRow(Point p, int row){ \r
- if(row == -1){ \r
- return -1; \r
- } \r
- int col = table.columnAtPoint(p); \r
- if(col==-1) \r
- return -1; \r
- Rectangle r = table.getCellRect(row, col, true); \r
- r.grow(0, -3); \r
- if(r.contains(p)) \r
- return -1; \r
-\r
- int midPoint = r.y + r.height / 2; \r
- int rowIndex = (p.y < midPoint) ? row - 1 : row; \r
-\r
- return rowIndex; \r
- } \r
-\r
- public void mousePressed(MouseEvent e){ \r
- Point p = e.getPoint(); \r
-\r
- resizingRow = getResizingRow(p); \r
- mouseYOffset = p.y - table.getRowHeight(resizingRow); \r
- } \r
-\r
- private void swapCursor(){ \r
- Cursor tmp = table.getCursor(); \r
- table.setCursor(otherCursor); \r
- otherCursor = tmp; \r
- }\r
-\r
- public void mouseMoved(MouseEvent e){\r
- if((getResizingRow(e.getPoint())>=0)\r
- != (table.getCursor() == resizeCursor)){\r
- swapCursor();\r
- }\r
- }\r
-\r
- private boolean dragging = false;\r
- \r
- public void mouseDragged(MouseEvent e){\r
- int mouseY = e.getY();\r
-\r
- if(resizingRow >= 0){\r
- int newHeight = mouseY - mouseYOffset;\r
- if(newHeight > 0) {\r
- table.setRowHeight(resizingRow, newHeight);\r
- }\r
- }\r
- dragging = true;\r
- }\r
- \r
- @Override\r
- public void mouseReleased(MouseEvent e) {\r
- if (dragging) {\r
- int mouseY = e.getY();\r
- int newHeight = mouseY - mouseYOffset;\r
- System.out.println(newHeight);\r
- onResize(resizingRow, newHeight);\r
- dragging = false;\r
- }\r
- }\r
- \r
- public void onResize(int row, int height) {\r
- \r
- }\r
- \r
+package org.simantics.spreadsheet.ui;
+
+import javax.swing.*;
+import javax.swing.table.*;
+import javax.swing.event.MouseInputAdapter;
+import java.awt.*;
+import java.awt.event.MouseEvent;
+
+public class TableRowResizer extends MouseInputAdapter
+{
+ public static Cursor resizeCursor = Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR);
+
+ private int mouseYOffset, resizingRow;
+ private Cursor otherCursor = resizeCursor;
+ private JTable table;
+
+ public TableRowResizer(JTable table){
+ this.table = table;
+ table.addMouseListener(this);
+ table.addMouseMotionListener(this);
+ }
+
+ private int getResizingRow(Point p){
+ return getResizingRow(p, table.rowAtPoint(p));
+ }
+
+ private int getResizingRow(Point p, int row){
+ if(row == -1){
+ return -1;
+ }
+ int col = table.columnAtPoint(p);
+ if(col==-1)
+ return -1;
+ Rectangle r = table.getCellRect(row, col, true);
+ r.grow(0, -3);
+ if(r.contains(p))
+ return -1;
+
+ int midPoint = r.y + r.height / 2;
+ int rowIndex = (p.y < midPoint) ? row - 1 : row;
+
+ return rowIndex;
+ }
+
+ public void mousePressed(MouseEvent e){
+ Point p = e.getPoint();
+
+ resizingRow = getResizingRow(p);
+ mouseYOffset = p.y - table.getRowHeight(resizingRow);
+ }
+
+ private void swapCursor(){
+ Cursor tmp = table.getCursor();
+ table.setCursor(otherCursor);
+ otherCursor = tmp;
+ }
+
+ public void mouseMoved(MouseEvent e){
+ if((getResizingRow(e.getPoint())>=0)
+ != (table.getCursor() == resizeCursor)){
+ swapCursor();
+ }
+ }
+
+ private boolean dragging = false;
+
+ public void mouseDragged(MouseEvent e){
+ int mouseY = e.getY();
+
+ if(resizingRow >= 0){
+ int newHeight = mouseY - mouseYOffset;
+ if(newHeight > 0) {
+ table.setRowHeight(resizingRow, newHeight);
+ }
+ }
+ dragging = true;
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ if (dragging) {
+ int mouseY = e.getY();
+ int newHeight = mouseY - mouseYOffset;
+ System.out.println(newHeight);
+ onResize(resizingRow, newHeight);
+ dragging = false;
+ }
+ }
+
+ public void onResize(int row, int height) {
+
+ }
+
}
\ No newline at end of file