]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.modeling.ui.diagram;\r
2 \r
3 import java.awt.Graphics2D;\r
4 import java.awt.Rectangle;\r
5 import java.awt.event.ActionEvent;\r
6 import java.awt.event.ActionListener;\r
7 import java.awt.event.FocusEvent;\r
8 import java.awt.event.FocusListener;\r
9 import java.beans.PropertyChangeEvent;\r
10 \r
11 import javax.swing.event.TableModelListener;\r
12 import javax.swing.table.TableModel;\r
13 \r
14 import org.simantics.scenegraph.g2d.G2DRenderingHints;\r
15 import org.simantics.scenegraph.g2d.nodes.ComponentNode;\r
16 import org.simantics.spreadsheet.Cell;\r
17 import org.simantics.spreadsheet.Model;\r
18 import org.simantics.spreadsheet.ui.Spreadsheet.SpreadsheetModel;\r
19 \r
20 public class SheetNode extends ComponentNode implements ActionListener, FocusListener {\r
21 \r
22     private static final long serialVersionUID = -8212264868316567181L;\r
23 \r
24     private SpreadsheetModel sm;\r
25 \r
26     class Proxy implements Model, TableModel {\r
27 \r
28         TableModelListener listener;\r
29         Model model;\r
30         TableModel tableModel;\r
31 \r
32         Proxy(Model model, TableModel tableModel) {\r
33             this.model = model;\r
34             this.tableModel = tableModel;\r
35         }\r
36 \r
37         @Override\r
38         public Cell get(int row, int column) {\r
39             throw new Error();\r
40         }\r
41 \r
42         @Override\r
43         public <T> T getAdapter(Class<?> clazz) {\r
44             return model.getAdapter(clazz);\r
45         }\r
46 \r
47         @Override\r
48         public void dispose() {\r
49             throw new Error();\r
50         }\r
51 \r
52         @Override\r
53         public void addTableModelListener(TableModelListener l) {\r
54             assert(listener == null);\r
55             listener = l;\r
56         }\r
57 \r
58         @Override\r
59         public Class<?> getColumnClass(int columnIndex) {\r
60             return tableModel.getColumnClass(columnIndex);\r
61         }\r
62 \r
63         @Override\r
64         public int getColumnCount() {\r
65             return 2;\r
66         }\r
67 \r
68         @Override\r
69         public String getColumnName(int columnIndex) {\r
70             return "" + columnIndex;\r
71         }\r
72 \r
73         @Override\r
74         public int getRowCount() {\r
75             return 15;\r
76         }\r
77 \r
78         @Override\r
79         public Object getValueAt(int rowIndex, int columnIndex) {\r
80             return tableModel.getValueAt(rowIndex, columnIndex);\r
81         }\r
82 \r
83         @Override\r
84         public boolean isCellEditable(int rowIndex, int columnIndex) {\r
85             return true;\r
86         }\r
87 \r
88         @Override\r
89         public void removeTableModelListener(TableModelListener l) {\r
90             throw new Error();\r
91         }\r
92 \r
93         @Override\r
94         public void setValueAt(Object aValue, int rowIndex, int columnIndex) {\r
95             throw new Error();\r
96         }\r
97 \r
98     }\r
99 \r
100     public void init(Model model, TableModel tableModel) {\r
101 \r
102         Proxy proxy = new Proxy(model, tableModel);\r
103 \r
104         sm = new SpreadsheetModel(proxy, proxy, null);\r
105         component =  sm.createComponent(false);\r
106         component.addFocusListener(this);\r
107         super.propertyChange(new PropertyChangeEvent(this, "component", null, component));\r
108 \r
109     }\r
110 \r
111     protected ActionListener actionListener = null;\r
112 \r
113     public void setActionListener(ActionListener actionListener) {\r
114         this.actionListener = actionListener;\r
115     }\r
116 \r
117     @ServerSide\r
118     @Override\r
119     public void actionPerformed(ActionEvent e) {\r
120         if(actionListener != null)\r
121             actionListener.actionPerformed(e);\r
122         if(container.getParent() != null)\r
123             container.getParent().requestFocusInWindow(); // Loose focus\r
124     }\r
125 \r
126     @Override\r
127     @SyncField({"width", "height"})\r
128     public void setSize(int width, int height) {\r
129         this.width = width;\r
130         this.height = height;\r
131 //        container.setBounds(0, 0, width, height);\r
132 //        component.setBounds(0, 0, width, height);\r
133 //        component.validate();\r
134 //        container.validate();\r
135 //        System.out.println("table bounds=" + sm.getTable().getBounds());\r
136 //\r
137     }\r
138 \r
139     @Override\r
140     public void focusGained(FocusEvent arg0) {\r
141     }\r
142 \r
143     @Override\r
144     public void focusLost(FocusEvent arg0) {\r
145     }\r
146 \r
147     @Override\r
148     public void render(Graphics2D g2d) {\r
149         Rectangle bounds = (Rectangle)g2d.getRenderingHint(G2DRenderingHints.KEY_CONTROL_BOUNDS);\r
150         width = (int)bounds.getWidth();\r
151         height = (int)bounds.getHeight();\r
152         super.render(g2d);\r
153     }\r
154 \r
155 }\r