--- /dev/null
+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
+}
\ No newline at end of file