PageRenderTime 25ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/engine_java/001_Engine_G2D_Studio/studio/com/g2d/editor/property/ColumnFillerAdapters.java

http://cellengine.googlecode.com/
Java | 339 lines | 279 code | 56 blank | 4 comment | 18 complexity | 21595ab52611ca788efba07f81759670 MD5 | raw file
Possible License(s): GPL-2.0, AGPL-1.0, BSD-3-Clause, AGPL-3.0, LGPL-2.1, Apache-2.0, MPL-2.0-no-copyleft-exception, CPL-1.0
  1. package com.g2d.editor.property;
  2. import java.awt.BorderLayout;
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import java.io.Serializable;
  6. import java.lang.reflect.Field;
  7. import java.util.ArrayList;
  8. import java.util.Vector;
  9. import javax.swing.JCheckBox;
  10. import javax.swing.JLabel;
  11. import javax.swing.JOptionPane;
  12. import javax.swing.JPanel;
  13. import javax.swing.JScrollPane;
  14. import javax.swing.JSpinner;
  15. import javax.swing.JSplitPane;
  16. import javax.swing.JTable;
  17. import javax.swing.JTextArea;
  18. import javax.swing.JTextField;
  19. import javax.swing.SpinnerNumberModel;
  20. import javax.swing.event.ChangeEvent;
  21. import javax.swing.event.ChangeListener;
  22. import com.cell.CIO;
  23. import com.cell.CUtil;
  24. import com.cell.reflect.Parser;
  25. import com.g2d.Engine;
  26. import com.g2d.editor.property.ObjectPropertyRowPanel.ColumnFiller;
  27. @SuppressWarnings("serial")
  28. public class ColumnFillerAdapters
  29. {
  30. public static class ColumnFillerClipboard extends JPanel implements ColumnFiller
  31. {
  32. public static String TITLE = "????";
  33. private JTextArea info = new JTextArea();
  34. public ColumnFillerClipboard() {
  35. super(new BorderLayout());
  36. info.setEditable(false);
  37. this.add(info, BorderLayout.CENTER);
  38. }
  39. @Override
  40. public String getCommand(Object row_data, Field columnField) {
  41. String text = Engine.getEngine().getClipboardText();
  42. String[] lines = CUtil.splitString(text, "\n");
  43. StringBuilder sb = new StringBuilder();
  44. for (String line : lines) {
  45. sb.append(line.trim()+"\n");
  46. }
  47. info.setText(sb.toString());
  48. return TITLE;
  49. }
  50. @Override
  51. public Component startFill(ObjectPropertyRowPanel<?> panel, Field columnType, ArrayList<?> rowDatas) {
  52. return this;
  53. }
  54. @Override
  55. public ArrayList<Object> getValues(ObjectPropertyRowPanel<?> panel, Field columnType, ArrayList<?> rowDatas) {
  56. ArrayList<Object> ret = new ArrayList<Object>(rowDatas.size());
  57. try {
  58. String[] lines = CUtil.splitString(info.getText(), "\n");
  59. for (int i = 0; i < rowDatas.size(); i++) {
  60. if (i < lines.length) {
  61. ret.add(Parser.stringToObject(lines[i].trim(), columnType.getType()));
  62. } else {
  63. break;
  64. }
  65. }
  66. } catch (Exception err) {
  67. err.printStackTrace();
  68. }
  69. return ret;
  70. }
  71. }
  72. // -----------------------------------------------------------------------------------------------------
  73. public static class ColumnFillerObject extends JPanel implements ColumnFiller
  74. {
  75. public static String TITLE = "??????";
  76. private Object field_data;
  77. private JTextArea info = new JTextArea();
  78. public ColumnFillerObject() {
  79. super(new BorderLayout());
  80. info.setEditable(false);
  81. this.add(info, BorderLayout.CENTER);
  82. }
  83. @Override
  84. public String getCommand(Object row_data, Field columnField) {
  85. if (Serializable.class.isAssignableFrom(columnField.getType())) {
  86. try {
  87. field_data = columnField.get(row_data);
  88. info.setText(field_data + "");
  89. } catch (IllegalArgumentException e) {
  90. e.printStackTrace();
  91. } catch (IllegalAccessException e) {
  92. e.printStackTrace();
  93. }
  94. return TITLE;
  95. }
  96. return null;
  97. }
  98. @Override
  99. public Component startFill(ObjectPropertyRowPanel<?> panel, Field columnType, ArrayList<?> rowDatas) {
  100. return this;
  101. }
  102. @Override
  103. public ArrayList<Object> getValues(ObjectPropertyRowPanel<?> panel, Field columnType, ArrayList<?> rowDatas) {
  104. ArrayList<Object> ret = new ArrayList<Object>(rowDatas.size());
  105. if (field_data != null) {
  106. for (int i = 0; i < rowDatas.size(); i++) {
  107. ret.add(CIO.cloneObject(field_data));
  108. }
  109. } else {
  110. for (int i = 0; i < rowDatas.size(); i++) {
  111. ret.add(null);
  112. }
  113. }
  114. return ret;
  115. }
  116. }
  117. // -----------------------------------------------------------------------------------------------------
  118. public static class ColumnFillerBoolean extends JPanel implements ColumnFiller
  119. {
  120. public static String TITLE = "??Boolean";
  121. JCheckBox checkbox = new JCheckBox("value");
  122. public ColumnFillerBoolean() {
  123. this.add(checkbox);
  124. }
  125. @Override
  126. public String getCommand(Object row_data, Field columnField) {
  127. if (Boolean.class.isAssignableFrom(columnField.getType()) ||
  128. boolean.class.isAssignableFrom(columnField.getType())) {
  129. try {
  130. Object obj = columnField.get(row_data);
  131. checkbox.setSelected((Boolean)obj);
  132. } catch (Exception e) {
  133. e.printStackTrace();
  134. }
  135. return TITLE;
  136. }
  137. return null;
  138. }
  139. @Override
  140. public Component startFill(ObjectPropertyRowPanel<?> panel, Field columnType, ArrayList<?> rowDatas) {
  141. return this;
  142. }
  143. @Override
  144. public ArrayList<Object> getValues(ObjectPropertyRowPanel<?> panel, Field columnType, ArrayList<?> rowDatas) {
  145. ArrayList<Object> ret = new ArrayList<Object>(rowDatas.size());
  146. for (int i = 0; i < rowDatas.size(); i++) {
  147. ret.add(checkbox.isSelected());
  148. }
  149. return ret;
  150. }
  151. }
  152. // -----------------------------------------------------------------------------------------------------
  153. public static class ColumnFillerString extends JPanel implements ColumnFiller
  154. {
  155. public static String TITLE = "?????";
  156. JTextField text = new JTextField();
  157. @Override
  158. public String getCommand(Object row_data, Field columnField) {
  159. if (String.class.isAssignableFrom(columnField.getType())) {
  160. try {
  161. Object obj = columnField.get(row_data);
  162. text.setText(obj + "");
  163. } catch (Exception e) {
  164. e.printStackTrace();
  165. }
  166. return TITLE;
  167. }
  168. return null;
  169. }
  170. @Override
  171. public Component startFill(ObjectPropertyRowPanel<?> panel, Field columnType, ArrayList<?> rowDatas) {
  172. return this;
  173. }
  174. @Override
  175. public ArrayList<Object> getValues(ObjectPropertyRowPanel<?> panel, Field columnType, ArrayList<?> rowDatas) {
  176. ArrayList<Object> ret = new ArrayList<Object>(rowDatas.size());
  177. for (int i = 0; i < rowDatas.size(); i++) {
  178. ret.add(text.getText());
  179. }
  180. return ret;
  181. }
  182. }
  183. // -----------------------------------------------------------------------------------------------------
  184. public static class ColumnFillerNumber extends JPanel implements ColumnFiller, ChangeListener
  185. {
  186. public static String TITLE = "????";
  187. JSplitPane split = new JSplitPane();
  188. JLabel lb_base_value = new JLabel("???");
  189. JLabel lb_prev_multi = new JLabel("???");
  190. JLabel lb_prev_add = new JLabel("???");
  191. SpinnerNumberModel num_base_value = new SpinnerNumberModel(0, -Double.MAX_VALUE, Double.MAX_VALUE, 1);
  192. SpinnerNumberModel num_prev_multi = new SpinnerNumberModel(1, -Double.MAX_VALUE, Double.MAX_VALUE, 0.1);
  193. SpinnerNumberModel num_prev_add = new SpinnerNumberModel(0, -Double.MAX_VALUE, Double.MAX_VALUE, 1);
  194. JSpinner sp_base_value = new JSpinner(num_base_value);
  195. JSpinner sp_prev_multi = new JSpinner(num_prev_multi);
  196. JSpinner sp_prev_add = new JSpinner(num_prev_add);
  197. JTable example;
  198. Vector<Object> example_datas = new Vector<Object>();
  199. public ColumnFillerNumber()
  200. {
  201. super(new BorderLayout());
  202. }
  203. @Override
  204. public void stateChanged(ChangeEvent e) {
  205. if (e.getSource() instanceof JSpinner) {
  206. refreshExample();
  207. }
  208. }
  209. @Override
  210. public String getCommand(Object row_data, Field columnField) {
  211. if (Parser.isNumber(columnField.getType())) {
  212. try {
  213. Double value = Parser.castNumber(columnField.get(row_data), Double.class);
  214. num_base_value.setValue(value);
  215. } catch (Exception e) {
  216. e.printStackTrace();
  217. }
  218. return TITLE;
  219. }
  220. return null;
  221. }
  222. @Override
  223. public Component startFill(ObjectPropertyRowPanel<?> panel,
  224. Field columnType, ArrayList<?> rowDatas)
  225. {
  226. example_datas = new Vector<Object>(rowDatas.size());
  227. for (Object row_data : rowDatas) {
  228. example_datas.add(0d);
  229. }
  230. JPanel left = new JPanel(null);
  231. {
  232. int sx = 2, sy = 2, sh = 24;
  233. lb_base_value.setBounds(sx, sy, 100, sh);
  234. sp_base_value.setBounds(sx + 102, sy, 200, sh);
  235. sy += sh;
  236. lb_prev_multi.setBounds(sx, sy, 100, sh);
  237. sp_prev_multi.setBounds(sx + 102, sy, 200, sh);
  238. sy += sh;
  239. lb_prev_add.setBounds(sx, sy, 100, sh);
  240. sp_prev_add.setBounds(sx + 102, sy, 200, sh);
  241. sy += sh;
  242. left.add(lb_base_value); left.add(sp_base_value);
  243. left.add(lb_prev_multi); left.add(sp_prev_multi);
  244. left.add(lb_prev_add); left.add(sp_prev_add);
  245. sp_base_value.addChangeListener(this);
  246. sp_prev_multi.addChangeListener(this);
  247. sp_prev_add.addChangeListener(this);
  248. Dimension msize = new Dimension(320, sh * 3 + 10);
  249. left.setPreferredSize(msize);
  250. left.setMinimumSize(msize);
  251. }
  252. JPanel right = new JPanel(new BorderLayout());
  253. {
  254. String[] header = new String[] { "level", "value" };
  255. Object[][] rows = new Object[example_datas.size()][2];
  256. example = new JTable(rows, header);
  257. right.add(new JScrollPane(example), BorderLayout.CENTER);
  258. }
  259. split.setLeftComponent(left);
  260. split.setRightComponent(right);
  261. this.add(split, BorderLayout.CENTER);
  262. refreshExample();
  263. return this;
  264. }
  265. @Override
  266. public ArrayList<Object> getValues(ObjectPropertyRowPanel<?> panel,
  267. Field columnType, ArrayList<?> rowDatas) {
  268. return new ArrayList<Object>(example_datas);
  269. }
  270. private void refreshExample()
  271. {
  272. double base = (Double)num_base_value.getValue();
  273. double multi = (Double)num_prev_multi.getValue();
  274. double add = (Double)num_prev_add.getValue();
  275. for (int r = 0; r < example_datas.size(); r++) {
  276. example_datas.set(r, base);
  277. example.setValueAt(r, r, 0);
  278. example.setValueAt(base, r, 1);
  279. base = base * multi + add;
  280. }
  281. }
  282. }
  283. }