--- /dev/null
+package org.simantics.spreadsheet.ui;\r
+\r
+import java.awt.Graphics2D;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.awt.event.FocusListener;\r
+import java.awt.geom.Rectangle2D;\r
+\r
+import javax.swing.JComponent;\r
+\r
+import org.simantics.scenegraph.swing.ComponentNode;\r
+import org.simantics.spreadsheet.Adaptable;\r
+import org.simantics.spreadsheet.ClientModel;\r
+\r
+public class SheetNode extends ComponentNode<JComponent> implements ActionListener, FocusListener {\r
+\r
+ private static final long serialVersionUID = -8212264868316567181L;\r
+\r
+ private SpreadsheetModel sm;\r
+\r
+ public void init(Adaptable serverInterface) {\r
+\r
+ scale = true;\r
+ sm = new SpreadsheetModel(serverInterface, null);\r
+ component = sm.createComponent(this);\r
+ component.addFocusListener(this);\r
+ \r
+ super.init();\r
+\r
+ }\r
+ \r
+ public ClientModel getModifier() {\r
+ return sm.getClientInterface();\r
+ }\r
+\r
+ protected ActionListener actionListener = null;\r
+\r
+ public void setActionListener(ActionListener actionListener) {\r
+ this.actionListener = actionListener;\r
+ }\r
+\r
+ @ServerSide\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ if(actionListener != null)\r
+ actionListener.actionPerformed(e);\r
+ if(container.getParent() != null)\r
+ container.getParent().requestFocusInWindow(); // Loose focus\r
+ }\r
+\r
+ @Override\r
+ @SyncField("bounds")\r
+ public void setBounds(Rectangle2D bounds) {\r
+ this.bounds = bounds;\r
+ container.setBounds(0, 0, (int)bounds.getWidth(), (int)bounds.getHeight());\r
+ container.setSize((int)bounds.getWidth(), (int)bounds.getHeight());\r
+ container.validate();\r
+ }\r
+ \r
+ @Override\r
+ public void render(Graphics2D g2d) {\r
+ \r
+ if(sm == null) return;\r
+ if(sm.getTable() == null) return;\r
+ \r
+ container.validate();\r
+\r
+ super.render(g2d);\r
+ \r
+ }\r
+\r
+}\r