]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.spreadsheet.ui;\r
2 \r
3 import javax.swing.*;\r
4 import javax.swing.table.*;\r
5 import javax.swing.event.MouseInputAdapter;\r
6 import java.awt.*;\r
7 import java.awt.event.MouseEvent;\r
8 \r
9 public class TableRowResizer extends MouseInputAdapter\r
10\r
11     public static Cursor resizeCursor = Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR); \r
12 \r
13     private int mouseYOffset, resizingRow; \r
14     private Cursor otherCursor = resizeCursor; \r
15     private JTable table; \r
16 \r
17     public TableRowResizer(JTable table){ \r
18         this.table = table; \r
19         table.addMouseListener(this); \r
20         table.addMouseMotionListener(this); \r
21     } \r
22 \r
23     private int getResizingRow(Point p){ \r
24         return getResizingRow(p, table.rowAtPoint(p)); \r
25     } \r
26 \r
27     private int getResizingRow(Point p, int row){ \r
28         if(row == -1){ \r
29             return -1; \r
30         } \r
31         int col = table.columnAtPoint(p); \r
32         if(col==-1) \r
33             return -1; \r
34         Rectangle r = table.getCellRect(row, col, true); \r
35         r.grow(0, -3); \r
36         if(r.contains(p)) \r
37             return -1; \r
38 \r
39         int midPoint = r.y + r.height / 2; \r
40         int rowIndex = (p.y < midPoint) ? row - 1 : row; \r
41 \r
42         return rowIndex; \r
43     } \r
44 \r
45     public void mousePressed(MouseEvent e){ \r
46         Point p = e.getPoint(); \r
47 \r
48         resizingRow = getResizingRow(p); \r
49         mouseYOffset = p.y - table.getRowHeight(resizingRow); \r
50     } \r
51 \r
52     private void swapCursor(){ \r
53         Cursor tmp = table.getCursor(); \r
54         table.setCursor(otherCursor); \r
55         otherCursor = tmp; \r
56     }\r
57 \r
58     public void mouseMoved(MouseEvent e){\r
59         if((getResizingRow(e.getPoint())>=0)\r
60            != (table.getCursor() == resizeCursor)){\r
61             swapCursor();\r
62         }\r
63     }\r
64 \r
65     private boolean dragging = false;\r
66     \r
67     public void mouseDragged(MouseEvent e){\r
68         int mouseY = e.getY();\r
69 \r
70         if(resizingRow >= 0){\r
71             int newHeight = mouseY - mouseYOffset;\r
72             if(newHeight > 0) {\r
73                 table.setRowHeight(resizingRow, newHeight);\r
74             }\r
75         }\r
76         dragging = true;\r
77     }\r
78     \r
79    @Override\r
80    public void mouseReleased(MouseEvent e) {\r
81        if (dragging) {\r
82            int mouseY = e.getY();\r
83            int newHeight = mouseY - mouseYOffset;\r
84            System.out.println(newHeight);\r
85            onResize(resizingRow, newHeight);\r
86            dragging = false;\r
87        }\r
88    }\r
89     \r
90     public void onResize(int row, int height) {\r
91         \r
92     }\r
93     \r
94 }