--- /dev/null
+package org.simantics.scenegraph.swing;\r
+\r
+import java.awt.AWTEvent;\r
+import java.awt.Point;\r
+import java.awt.event.MouseEvent;\r
+\r
+import javax.swing.JComponent;\r
+import javax.swing.JTable;\r
+import javax.swing.table.JTableHeader;\r
+import javax.swing.table.TableColumnModel;\r
+import javax.swing.table.TableModel;\r
+\r
+import org.simantics.scenegraph.INode;\r
+\r
+public class JTableSG extends JTable implements JComponentSG {\r
+\r
+ private static final long serialVersionUID = -8307824148871305452L;\r
+ \r
+ final private INode node;\r
+ \r
+ public JTableSG(TableModel model, INode node) {\r
+ super(model);\r
+ this.node = node;\r
+ }\r
+\r
+ @Override\r
+ public boolean contains(int eventX, int eventY) {\r
+ return JComponentUtils.contains(eventX, eventY, this, node);\r
+ }\r
+ \r
+ @Override\r
+ public boolean containsTransformed(Point p) {\r
+ return super.contains(p.x, p.y);\r
+ }\r
+ \r
+ @Override\r
+ public JComponent getComponent() {\r
+ return this;\r
+ }\r
+ \r
+ @Override\r
+ protected void processEvent(AWTEvent e) {\r
+ super.processEvent(JComponentUtils.relocate(e, this, node));\r
+ }\r
+ \r
+ private boolean isDragging = false;\r
+ \r
+ protected void mouseDragFinished() {\r
+ \r
+ }\r
+ \r
+ @Override\r
+ protected JTableHeader createDefaultTableHeader() {\r
+ \r
+ class TableHeaderSG extends JTableHeader implements JComponentSG {\r
+\r
+ private static final long serialVersionUID = 209426441282352819L;\r
+\r
+ TableHeaderSG(TableColumnModel model) {\r
+ super(model);\r
+ }\r
+\r
+ @Override\r
+ public boolean contains(int eventX, int eventY) {\r
+ return JComponentUtils.contains(eventX, eventY, this, node);\r
+ }\r
+ \r
+ @Override\r
+ public boolean containsTransformed(Point p) {\r
+ return super.contains(p.x, p.y);\r
+ }\r
+ \r
+ @Override\r
+ public JComponent getComponent() {\r
+ return this;\r
+ }\r
+ \r
+ @Override\r
+ protected void processEvent(AWTEvent e) {\r
+ super.processEvent(JComponentUtils.relocate(e, this, node));\r
+ }\r
+ \r
+ @Override\r
+ protected void processMouseMotionEvent(MouseEvent e) {\r
+ int id = e.getID();\r
+ switch(id) {\r
+ case MouseEvent.MOUSE_DRAGGED:\r
+ isDragging = true;\r
+ break;\r
+ }\r
+ super.processMouseMotionEvent(e);\r
+ }\r
+ \r
+ @Override\r
+ protected void processMouseEvent(MouseEvent e) {\r
+ int id = e.getID();\r
+ switch(id) {\r
+ case MouseEvent.MOUSE_RELEASED:\r
+ if(isDragging) mouseDragFinished();\r
+ isDragging = false;\r
+ break;\r
+ }\r
+ super.processMouseEvent(e);\r
+ }\r
+ \r
+ }\r
+ \r
+ return new TableHeaderSG(columnModel);\r
+ \r
+ }\r
+ \r
+}\r