]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/SheetNode.java.keep
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagram / SheetNode.java.keep
diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/SheetNode.java.keep b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagram/SheetNode.java.keep
new file mode 100644 (file)
index 0000000..6dab808
--- /dev/null
@@ -0,0 +1,155 @@
+package org.simantics.modeling.ui.diagram;\r
+\r
+import java.awt.Graphics2D;\r
+import java.awt.Rectangle;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.awt.event.FocusEvent;\r
+import java.awt.event.FocusListener;\r
+import java.beans.PropertyChangeEvent;\r
+\r
+import javax.swing.event.TableModelListener;\r
+import javax.swing.table.TableModel;\r
+\r
+import org.simantics.scenegraph.g2d.G2DRenderingHints;\r
+import org.simantics.scenegraph.g2d.nodes.ComponentNode;\r
+import org.simantics.spreadsheet.Cell;\r
+import org.simantics.spreadsheet.Model;\r
+import org.simantics.spreadsheet.ui.Spreadsheet.SpreadsheetModel;\r
+\r
+public class SheetNode extends ComponentNode implements ActionListener, FocusListener {\r
+\r
+    private static final long serialVersionUID = -8212264868316567181L;\r
+\r
+    private SpreadsheetModel sm;\r
+\r
+    class Proxy implements Model, TableModel {\r
+\r
+        TableModelListener listener;\r
+        Model model;\r
+        TableModel tableModel;\r
+\r
+        Proxy(Model model, TableModel tableModel) {\r
+            this.model = model;\r
+            this.tableModel = tableModel;\r
+        }\r
+\r
+        @Override\r
+        public Cell get(int row, int column) {\r
+            throw new Error();\r
+        }\r
+\r
+        @Override\r
+        public <T> T getAdapter(Class<?> clazz) {\r
+            return model.getAdapter(clazz);\r
+        }\r
+\r
+        @Override\r
+        public void dispose() {\r
+            throw new Error();\r
+        }\r
+\r
+        @Override\r
+        public void addTableModelListener(TableModelListener l) {\r
+            assert(listener == null);\r
+            listener = l;\r
+        }\r
+\r
+        @Override\r
+        public Class<?> getColumnClass(int columnIndex) {\r
+            return tableModel.getColumnClass(columnIndex);\r
+        }\r
+\r
+        @Override\r
+        public int getColumnCount() {\r
+            return 2;\r
+        }\r
+\r
+        @Override\r
+        public String getColumnName(int columnIndex) {\r
+            return "" + columnIndex;\r
+        }\r
+\r
+        @Override\r
+        public int getRowCount() {\r
+            return 15;\r
+        }\r
+\r
+        @Override\r
+        public Object getValueAt(int rowIndex, int columnIndex) {\r
+            return tableModel.getValueAt(rowIndex, columnIndex);\r
+        }\r
+\r
+        @Override\r
+        public boolean isCellEditable(int rowIndex, int columnIndex) {\r
+            return true;\r
+        }\r
+\r
+        @Override\r
+        public void removeTableModelListener(TableModelListener l) {\r
+            throw new Error();\r
+        }\r
+\r
+        @Override\r
+        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {\r
+            throw new Error();\r
+        }\r
+\r
+    }\r
+\r
+    public void init(Model model, TableModel tableModel) {\r
+\r
+        Proxy proxy = new Proxy(model, tableModel);\r
+\r
+        sm = new SpreadsheetModel(proxy, proxy, null);\r
+        component =  sm.createComponent(false);\r
+        component.addFocusListener(this);\r
+        super.propertyChange(new PropertyChangeEvent(this, "component", null, component));\r
+\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({"width", "height"})\r
+    public void setSize(int width, int height) {\r
+        this.width = width;\r
+        this.height = height;\r
+//        container.setBounds(0, 0, width, height);\r
+//        component.setBounds(0, 0, width, height);\r
+//        component.validate();\r
+//        container.validate();\r
+//        System.out.println("table bounds=" + sm.getTable().getBounds());\r
+//\r
+    }\r
+\r
+    @Override\r
+    public void focusGained(FocusEvent arg0) {\r
+    }\r
+\r
+    @Override\r
+    public void focusLost(FocusEvent arg0) {\r
+    }\r
+\r
+    @Override\r
+    public void render(Graphics2D g2d) {\r
+        Rectangle bounds = (Rectangle)g2d.getRenderingHint(G2DRenderingHints.KEY_CONTROL_BOUNDS);\r
+        width = (int)bounds.getWidth();\r
+        height = (int)bounds.getHeight();\r
+        super.render(g2d);\r
+    }\r
+\r
+}\r