--- /dev/null
+package org.simantics.scenegraph.swing;\r
+\r
+import java.awt.AWTEvent;\r
+import java.awt.Component;\r
+import java.awt.Point;\r
+\r
+import javax.swing.JComponent;\r
+import javax.swing.JScrollBar;\r
+import javax.swing.JScrollPane;\r
+import javax.swing.JViewport;\r
+import javax.swing.ScrollPaneLayout;\r
+\r
+import org.simantics.scenegraph.INode;\r
+\r
+public class JScrollPaneSG extends JScrollPane implements JComponentSG {\r
+\r
+ private static final long serialVersionUID = 1941565557888406721L;\r
+\r
+ final private INode node;\r
+ \r
+ public JScrollPaneSG(Component view, INode node) {\r
+ \r
+ this.node = node;\r
+ setLayout(new ScrollPaneLayout.UIResource());\r
+ setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_AS_NEEDED);\r
+ setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_AS_NEEDED);\r
+ setViewport(createViewport());\r
+ setVerticalScrollBar(createVerticalScrollBar());\r
+ setHorizontalScrollBar(createHorizontalScrollBar());\r
+ if (view != null) {\r
+ setViewportView(view);\r
+ }\r
+ \r
+ setOpaque(true);\r
+\r
+ updateUI();\r
+\r
+ if (!this.getComponentOrientation().isLeftToRight()) {\r
+ viewport.setViewPosition(new Point(Integer.MAX_VALUE, 0));\r
+ }\r
+ \r
+ }\r
+\r
+ class ScrollBarSG extends ScrollBar implements JComponentSG {\r
+\r
+ private static final long serialVersionUID = 209426441282352819L;\r
+\r
+ ScrollBarSG(int flags) {\r
+ super(flags);\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
+ }\r
+ \r
+ @Override\r
+ public JScrollBar createVerticalScrollBar() {\r
+ return new ScrollBarSG(JScrollBar.VERTICAL);\r
+ }\r
+\r
+ @Override\r
+ public JScrollBar createHorizontalScrollBar() {\r
+ return new ScrollBarSG(JScrollBar.HORIZONTAL);\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 JViewport createViewport() {\r
+ return new JViewportSG(node);\r
+ }\r
+ \r
+}\r