]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/TableRowResizer.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.spreadsheet.ui / src / org / simantics / spreadsheet / ui / TableRowResizer.java
diff --git a/bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/TableRowResizer.java b/bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/TableRowResizer.java
new file mode 100644 (file)
index 0000000..a25796b
--- /dev/null
@@ -0,0 +1,94 @@
+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