]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdPlatformDefs.java
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@710 6f19259b...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdPlatformDefs.java
CommitLineData
a13899c5 1/** @file\r
2 Java class FpdPlatformDefs is GUI for Flash element operation in SPD file.\r
3 \r
4Copyright (c) 2006, Intel Corporation\r
5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12**/\r
13package org.tianocore.frameworkwizard.platform.ui;\r
14\r
15import java.awt.BorderLayout;\r
16import javax.swing.JPanel;\r
17\r
a13899c5 18import javax.swing.DefaultCellEditor;\r
19import javax.swing.DefaultListModel;\r
a13899c5 20import javax.swing.JFrame;\r
a13899c5 21import javax.swing.JTabbedPane;\r
22import javax.swing.JButton;\r
a13899c5 23\r
24import org.tianocore.PlatformSurfaceAreaDocument;\r
a13899c5 25import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
a13899c5 26\r
27\r
28import java.awt.FlowLayout;\r
44053733 29\r
a13899c5 30\r
31import javax.swing.JCheckBox;\r
32import javax.swing.JTextField;\r
a13899c5 33import javax.swing.JLabel;\r
34import javax.swing.JScrollPane;\r
35import javax.swing.JTable;\r
44053733 36import javax.swing.event.InternalFrameAdapter;\r
37import javax.swing.event.InternalFrameEvent;\r
a13899c5 38import javax.swing.event.ListSelectionEvent;\r
39import javax.swing.event.ListSelectionListener;\r
40import javax.swing.event.TableModelEvent;\r
41import javax.swing.event.TableModelListener;\r
42import javax.swing.table.DefaultTableModel;\r
43import javax.swing.table.TableColumn;\r
44import javax.swing.table.TableModel;\r
45import javax.swing.JComboBox;\r
46import java.awt.Dimension;\r
47import javax.swing.JRadioButton;\r
48import javax.swing.JTextArea;\r
49import java.awt.CardLayout;\r
50\r
51public class FpdPlatformDefs extends IInternalFrame {\r
52\r
44053733 53 /**\r
54 * \r
55 */\r
56 private static final long serialVersionUID = 1L;\r
a13899c5 57 static JFrame frame;\r
58 private JPanel jContentPane = null;\r
59 private JPanel jPanel = null;\r
60 private JPanel jPanel1 = null;\r
61 private JPanel jPanel2 = null;\r
62 private JPanel jPanel3 = null;\r
63 private JTabbedPane jTabbedPane = null;\r
64 private JButton jButtonOk = null;\r
65 private JButton jButtonCancel = null;\r
66 private JPanel jPanelFvImageW = null;\r
67 private JScrollPane jScrollPane = null;\r
68 private DefaultTableModel imageEntryPointTableModel = null;\r
69 private DefaultTableModel outputDirectoryTableModel = null;\r
70 \r
71 private DefaultTableModel skuInfoTableModel = null;\r
72 private DefaultTableModel fdfBlocksTableModel = null;\r
73 private DefaultTableModel fdfRegionsTableModel = null;\r
74 private DefaultTableModel fdfSubRegionsTableModel = null;\r
75 \r
76 private JLabel jLabel17 = null;\r
77 private DefaultListModel listModel = new DefaultListModel();\r
78 private FpdFileContents ffc = null;\r
79 private JPanel jPanel4 = null;\r
80 private JPanel jPanel5 = null;\r
81 private JLabel jLabel = null;\r
82 private JCheckBox jCheckBox1 = null;\r
83 private JCheckBox jCheckBox2 = null;\r
84 private JCheckBox jCheckBox3 = null;\r
85 private JPanel jPanel6 = null;\r
86 private JLabel jLabel1 = null;\r
87 private JCheckBox jCheckBox4 = null;\r
88 private JComboBox jComboBox = null;\r
89 private JTextField jTextField = null;\r
90 private JTable jTable = null;\r
91 private JPanel jPanel7 = null;\r
92 private JLabel jLabel2 = null;\r
93 private JTextField jTextField1 = null;\r
94 private JButton jButton2 = null;\r
95 private JButton jButton3 = null;\r
96 private JScrollPane jScrollPane2 = null;\r
97 private JTable jTable1 = null;\r
98 private JLabel jLabel3 = null;\r
99 private JScrollPane jScrollPane3 = null;\r
100 private JTable jTable2 = null;\r
101 private JLabel jLabel4 = null;\r
102 private JTextField jTextField2 = null;\r
103 private JLabel jLabel5 = null;\r
104 private JTextField jTextField3 = null;\r
105 private JLabel jLabel6 = null;\r
106 private JButton jButton4 = null;\r
107 private JButton jButton5 = null;\r
108 private JLabel jLabel7 = null;\r
109 public FpdPlatformDefs() {\r
110 super();\r
111 // TODO Auto-generated constructor stub\r
112\r
113 initialize();\r
114 this.setBounds(new java.awt.Rectangle(0, 0, 500, 370));\r
115 this.setVisible(true);\r
116 }\r
117\r
118 public FpdPlatformDefs(PlatformSurfaceAreaDocument.PlatformSurfaceArea fpd){\r
119 this();\r
120 ffc = new FpdFileContents(fpd);\r
121 init(ffc);\r
122 }\r
123 \r
124 /**\r
125 * This method initializes jPanel \r
126 * \r
127 * @return javax.swing.JPanel \r
128 */\r
129 private JPanel getJPanel() {\r
130 if (jPanel == null) {\r
131 jPanel = new JPanel();\r
132 }\r
133 return jPanel;\r
134 }\r
135\r
136 /**\r
137 * This method initializes jPanel1 \r
138 * \r
139 * @return javax.swing.JPanel \r
140 */\r
141 private JPanel getJPanel1() {\r
142 if (jPanel1 == null) {\r
143 FlowLayout flowLayout = new FlowLayout();\r
144 flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);\r
145 flowLayout.setHgap(15);\r
146 jPanel1 = new JPanel();\r
147 jPanel1.setLayout(flowLayout);\r
148 jPanel1.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);\r
149 jPanel1.add(getJButtonCancel(), null);\r
150 jPanel1.add(getJButtonOk(), null);\r
151 }\r
152 return jPanel1;\r
153 }\r
154\r
155 /**\r
156 * This method initializes jPanel2 \r
157 * \r
158 * @return javax.swing.JPanel \r
159 */\r
160 private JPanel getJPanel2() {\r
161 if (jPanel2 == null) {\r
162 jPanel2 = new JPanel();\r
163 }\r
164 return jPanel2;\r
165 }\r
166\r
167 /**\r
168 * This method initializes jPanel3 \r
169 * \r
170 * @return javax.swing.JPanel \r
171 */\r
172 private JPanel getJPanel3() {\r
173 if (jPanel3 == null) {\r
174 jPanel3 = new JPanel();\r
175 }\r
176 return jPanel3;\r
177 }\r
178\r
179 /**\r
180 * This method initializes jTabbedPane \r
181 * \r
182 * @return javax.swing.JTabbedPane \r
183 */\r
184 private JTabbedPane getJTabbedPane() {\r
185 if (jTabbedPane == null) {\r
186 jTabbedPane = new JTabbedPane();\r
187 \r
188 jTabbedPane.addTab("General", null, getJPanel4(), null);\r
189 \r
190 }\r
191 return jTabbedPane;\r
192 }\r
193\r
194 /**\r
195 * This method initializes jButtonOk \r
196 * \r
197 * @return javax.swing.JButton \r
198 */\r
199 private JButton getJButtonOk() {\r
200 if (jButtonOk == null) {\r
201 jButtonOk = new JButton();\r
202 jButtonOk.setPreferredSize(new java.awt.Dimension(80,20));\r
203 jButtonOk.setText("Cancel");\r
204 jButtonOk.setVisible(false);\r
205 }\r
206 return jButtonOk;\r
207 }\r
208\r
209 /**\r
210 * This method initializes jButtonCancel \r
211 * \r
212 * @return javax.swing.JButton \r
213 */\r
214 private JButton getJButtonCancel() {\r
215 if (jButtonCancel == null) {\r
216 jButtonCancel = new JButton();\r
217 jButtonCancel.setPreferredSize(new java.awt.Dimension(80,20));\r
218 jButtonCancel.setText("Ok");\r
219 jButtonCancel.setVisible(false);\r
220 }\r
221 return jButtonCancel;\r
222 }\r
223\r
224 /**\r
225 * This method initializes jPanelFvImageW \r
226 * \r
227 * @return javax.swing.JPanel \r
228 */\r
229 private JPanel getJPanelFvImageW() {\r
230 if (jPanelFvImageW == null) {\r
231 jPanelFvImageW = new JPanel();\r
232 jPanelFvImageW.setPreferredSize(new java.awt.Dimension(10,2));\r
233 }\r
234 return jPanelFvImageW;\r
235 }\r
236\r
237\r
238 /**\r
239 * This method initializes this\r
240 * \r
241 * @return void\r
242 */\r
243 private void initialize() {\r
244 this.setSize(518, 650);\r
245 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
246 this.setContentPane(getJContentPane());\r
247 this.setTitle("FPD Platform Definitions");\r
44053733 248 this.addInternalFrameListener(new InternalFrameAdapter(){\r
249 public void internalFrameDeactivated(InternalFrameEvent e){\r
250 if (jTable.isEditing()) {\r
251 jTable.getCellEditor().stopCellEditing();\r
252 }\r
253 if (jTable2.isEditing()) {\r
254 jTable2.getCellEditor().stopCellEditing();\r
255 }\r
256 \r
257 }\r
258 });\r
a13899c5 259 }\r
260\r
261 private void init(FpdFileContents ffc) {\r
262 \r
263 }\r
264 \r
265 \r
266 \r
267 /**\r
268 * This method initializes jContentPane\r
269 * \r
270 * @return javax.swing.JPanel\r
271 */\r
272 private JPanel getJContentPane() {\r
273 if (jContentPane == null) {\r
274 jContentPane = new JPanel();\r
275 jContentPane.setLayout(new BorderLayout());\r
276 jContentPane.add(getJPanel(), java.awt.BorderLayout.EAST);\r
277 jContentPane.add(getJPanel1(), java.awt.BorderLayout.SOUTH);\r
278 jContentPane.add(getJPanel2(), java.awt.BorderLayout.WEST);\r
279 jContentPane.add(getJPanel3(), java.awt.BorderLayout.NORTH);\r
280 jContentPane.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);\r
281 }\r
282 return jContentPane;\r
283 }\r
284\r
285 /**\r
286 * This method initializes jPanel4 \r
287 * \r
288 * @return javax.swing.JPanel \r
289 */\r
290 private JPanel getJPanel4() {\r
291 if (jPanel4 == null) {\r
292 jPanel4 = new JPanel();\r
293 jPanel4.setLayout(new BorderLayout());\r
294 jPanel4.add(getJPanel5(), java.awt.BorderLayout.NORTH);\r
295 jPanel4.add(getJPanel6(), java.awt.BorderLayout.SOUTH);\r
296 jPanel4.add(getJPanel7(), java.awt.BorderLayout.CENTER);\r
297 }\r
298 return jPanel4;\r
299 }\r
300\r
301 /**\r
302 * This method initializes jPanel5 \r
303 * \r
304 * @return javax.swing.JPanel \r
305 */\r
306 private JPanel getJPanel5() {\r
307 if (jPanel5 == null) {\r
308 jLabel = new JLabel();\r
309 jLabel.setText("Tool Chain Families");\r
310 FlowLayout flowLayout2 = new FlowLayout();\r
311 flowLayout2.setAlignment(FlowLayout.LEFT);\r
312 flowLayout2.setHgap(20);\r
313 jPanel5 = new JPanel();\r
314 jPanel5.setLayout(flowLayout2);\r
315 jPanel5.add(jLabel, null);\r
316 jPanel5.add(getJCheckBox1(), null);\r
317 jPanel5.add(getJCheckBox2(), null);\r
318 jPanel5.add(getJCheckBox3(), null);\r
319 }\r
320 return jPanel5;\r
321 }\r
322\r
323 /**\r
324 * This method initializes jCheckBox1 \r
325 * \r
326 * @return javax.swing.JCheckBox \r
327 */\r
328 private JCheckBox getJCheckBox1() {\r
329 if (jCheckBox1 == null) {\r
330 jCheckBox1 = new JCheckBox();\r
331 jCheckBox1.setText("MSFT");\r
332 }\r
333 return jCheckBox1;\r
334 }\r
335\r
336 /**\r
337 * This method initializes jCheckBox2 \r
338 * \r
339 * @return javax.swing.JCheckBox \r
340 */\r
341 private JCheckBox getJCheckBox2() {\r
342 if (jCheckBox2 == null) {\r
343 jCheckBox2 = new JCheckBox();\r
344 jCheckBox2.setText("GCC");\r
345 }\r
346 return jCheckBox2;\r
347 }\r
348\r
349 /**\r
350 * This method initializes jCheckBox3 \r
351 * \r
352 * @return javax.swing.JCheckBox \r
353 */\r
354 private JCheckBox getJCheckBox3() {\r
355 if (jCheckBox3 == null) {\r
356 jCheckBox3 = new JCheckBox();\r
357 jCheckBox3.setText("INTC");\r
358 }\r
359 return jCheckBox3;\r
360 }\r
361 \r
362 /**\r
363 * This method initializes jTable \r
364 * \r
365 * @return javax.swing.JTable \r
366 */\r
367 private JTable getJTable() {\r
368 if (jTable == null) {\r
369 imageEntryPointTableModel = new DefaultTableModel();\r
370 imageEntryPointTableModel.addColumn("Build Target");\r
371 }\r
372 return jTable;\r
373 }\r
374\r
375 /**\r
376 * This method initializes jTable1 \r
377 * \r
378 * @return javax.swing.JTable \r
379 */\r
380 private JTable getJTable1() {\r
381 if (jTable1 == null) {\r
382 outputDirectoryTableModel = new DefaultTableModel();\r
383 outputDirectoryTableModel.addColumn("Output Directory");\r
384 outputDirectoryTableModel.addColumn("Intermediate Directories");\r
385 \r
386 TableColumn imDirCol = jTable1.getColumnModel().getColumn(1);\r
387 JComboBox cb = new JComboBox();\r
388 cb.addItem("MODULE");\r
389 cb.addItem("UNIFIED");\r
390 imDirCol.setCellEditor(new DefaultCellEditor(cb));\r
391 }\r
392 return jTable1;\r
393 }\r
394\r
395\r
396 /**\r
397 * This method initializes jPanel6 \r
398 * \r
399 * @return javax.swing.JPanel \r
400 */\r
401 private JPanel getJPanel6() {\r
402 if (jPanel6 == null) {\r
403 jLabel7 = new JLabel();\r
404 jLabel7.setPreferredSize(new java.awt.Dimension(100,20));\r
405 jLabel7.setText("");\r
406 jLabel1 = new JLabel();\r
407 jLabel1.setText("Output Directory");\r
408 FlowLayout flowLayout3 = new FlowLayout();\r
409 flowLayout3.setAlignment(FlowLayout.LEFT);\r
410 flowLayout3.setHgap(20);\r
411 jPanel6 = new JPanel();\r
412 jPanel6.setPreferredSize(new java.awt.Dimension(10,250));\r
413 jPanel6.setLayout(flowLayout3);\r
414 jPanel6.add(getJCheckBox4(), null);\r
415 jPanel6.add(getJComboBox(), null);\r
416 jPanel6.add(jLabel7, null);\r
417 jPanel6.add(jLabel1, null);\r
418 jPanel6.add(getJTextField(), null);\r
419 }\r
420 return jPanel6;\r
421 }\r
422\r
423 /**\r
424 * This method initializes jCheckBox4 \r
425 * \r
426 * @return javax.swing.JCheckBox \r
427 */\r
428 private JCheckBox getJCheckBox4() {\r
429 if (jCheckBox4 == null) {\r
430 jCheckBox4 = new JCheckBox();\r
431 jCheckBox4.setText("Intermediate Directories");\r
432 }\r
433 return jCheckBox4;\r
434 }\r
435\r
436 /**\r
437 * This method initializes jComboBox \r
438 * \r
439 * @return javax.swing.JComboBox \r
440 */\r
441 private JComboBox getJComboBox() {\r
442 if (jComboBox == null) {\r
443 jComboBox = new JComboBox();\r
444 jComboBox.setPreferredSize(new Dimension(100, 20));\r
445 jComboBox.addItem("MODULE");\r
446 jComboBox.addItem("UNIFIED");\r
447 jComboBox.setSelectedIndex(0);\r
448 }\r
449 return jComboBox;\r
450 }\r
451\r
452 /**\r
453 * This method initializes jTextField \r
454 * \r
455 * @return javax.swing.JTextField \r
456 */\r
457 private JTextField getJTextField() {\r
458 if (jTextField == null) {\r
459 jTextField = new JTextField();\r
202c4f38 460 jTextField.setPreferredSize(new java.awt.Dimension(350,20));\r
a13899c5 461 }\r
462 return jTextField;\r
463 }\r
464\r
465 /**\r
466 * This method initializes jPanel7 \r
467 * \r
468 * @return javax.swing.JPanel \r
469 */\r
470 private JPanel getJPanel7() {\r
471 if (jPanel7 == null) {\r
472 jLabel6 = new JLabel();\r
473 jLabel6.setPreferredSize(new java.awt.Dimension(280,20));\r
474 jLabel6.setText(" ");\r
475 jLabel5 = new JLabel();\r
476 jLabel5.setPreferredSize(new java.awt.Dimension(40,20));\r
477 jLabel5.setText("Name");\r
478 jLabel4 = new JLabel();\r
479 jLabel4.setPreferredSize(new java.awt.Dimension(20,20));\r
480 jLabel4.setText("ID");\r
481 jLabel3 = new JLabel();\r
482 jLabel3.setPreferredSize(new java.awt.Dimension(109,20));\r
483 jLabel3.setText("SKU Information");\r
484 jLabel2 = new JLabel();\r
485 jLabel2.setPreferredSize(new Dimension(109, 16));\r
486 jLabel2.setText("Build Targets");\r
487 FlowLayout flowLayout4 = new FlowLayout();\r
488 flowLayout4.setAlignment(FlowLayout.LEFT);\r
489 flowLayout4.setHgap(20);\r
490 jPanel7 = new JPanel();\r
491 jPanel7.setPreferredSize(new Dimension(972, 100));\r
492 jPanel7.setLayout(flowLayout4);\r
493 jPanel7.add(jLabel2, null);\r
494 jPanel7.add(getJTextField1(), null);\r
495 jPanel7.add(getJButton2(), null);\r
496 jPanel7.add(getJButton3(), null);\r
497 jPanel7.add(getJScrollPane2(), null);\r
498 jPanel7.add(jLabel3, null);\r
499 jPanel7.add(jLabel4, null);\r
500 jPanel7.add(getJTextField2(), null);\r
501 jPanel7.add(jLabel5, null);\r
502 jPanel7.add(getJTextField3(), null);\r
503 jPanel7.add(getJScrollPane3(), null);\r
504 jPanel7.add(jLabel6, null);\r
505 jPanel7.add(getJButton4(), null);\r
506 jPanel7.add(getJButton5(), null);\r
507 }\r
508 return jPanel7;\r
509 }\r
510\r
511 /**\r
512 * This method initializes jTextField1 \r
513 * \r
514 * @return javax.swing.JTextField \r
515 */\r
516 private JTextField getJTextField1() {\r
517 if (jTextField1 == null) {\r
518 jTextField1 = new JTextField();\r
519 jTextField1.setPreferredSize(new Dimension(150, 20));\r
520 }\r
521 return jTextField1;\r
522 }\r
523\r
524 /**\r
525 * This method initializes jButton2 \r
526 * \r
527 * @return javax.swing.JButton \r
528 */\r
529 private JButton getJButton2() {\r
530 if (jButton2 == null) {\r
531 jButton2 = new JButton();\r
532 jButton2.setPreferredSize(new Dimension(70, 20));\r
533 jButton2.setText("Add");\r
534 }\r
535 return jButton2;\r
536 }\r
537\r
538 /**\r
539 * This method initializes jButton3 \r
540 * \r
541 * @return javax.swing.JButton \r
542 */\r
543 private JButton getJButton3() {\r
544 if (jButton3 == null) {\r
545 jButton3 = new JButton();\r
546 jButton3.setPreferredSize(new Dimension(70, 20));\r
547 jButton3.setText("Delete");\r
548 }\r
549 return jButton3;\r
550 }\r
551\r
552 /**\r
553 * This method initializes jScrollPane2 \r
554 * \r
555 * @return javax.swing.JScrollPane \r
556 */\r
557 private JScrollPane getJScrollPane2() {\r
558 if (jScrollPane2 == null) {\r
559 jScrollPane2 = new JScrollPane();\r
560 jScrollPane2.setPreferredSize(new Dimension(453, 100));\r
561 jScrollPane2.setViewportView(getJTable());\r
562 }\r
563 return jScrollPane2;\r
564 }\r
565\r
566 /**\r
567 * This method initializes jScrollPane3 \r
568 * \r
569 * @return javax.swing.JScrollPane \r
570 */\r
571 private JScrollPane getJScrollPane3() {\r
572 if (jScrollPane3 == null) {\r
573 jScrollPane3 = new JScrollPane();\r
574 jScrollPane3.setPreferredSize(new java.awt.Dimension(453,100));\r
575 jScrollPane3.setViewportView(getJTable2());\r
576 }\r
577 return jScrollPane3;\r
578 }\r
579\r
580 /**\r
581 * This method initializes jTable2 \r
582 * \r
583 * @return javax.swing.JTable \r
584 */\r
585 private JTable getJTable2() {\r
586 if (jTable2 == null) {\r
587 skuInfoTableModel = new DefaultTableModel();\r
588 skuInfoTableModel.addColumn("SKU ID");\r
589 skuInfoTableModel.addColumn("Name");\r
590 jTable2 = new JTable(skuInfoTableModel);\r
591 }\r
592 return jTable2;\r
593 }\r
594\r
595 /**\r
596 * This method initializes jTextField2 \r
597 * \r
598 * @return javax.swing.JTextField \r
599 */\r
600 private JTextField getJTextField2() {\r
601 if (jTextField2 == null) {\r
602 jTextField2 = new JTextField();\r
603 jTextField2.setPreferredSize(new java.awt.Dimension(50,20));\r
604 }\r
605 return jTextField2;\r
606 }\r
607\r
608 /**\r
609 * This method initializes jTextField3 \r
610 * \r
611 * @return javax.swing.JTextField \r
612 */\r
613 private JTextField getJTextField3() {\r
614 if (jTextField3 == null) {\r
615 jTextField3 = new JTextField();\r
616 jTextField3.setPreferredSize(new Dimension(150, 20));\r
617 }\r
618 return jTextField3;\r
619 }\r
620\r
621 /**\r
622 * This method initializes jButton4 \r
623 * \r
624 * @return javax.swing.JButton \r
625 */\r
626 private JButton getJButton4() {\r
627 if (jButton4 == null) {\r
628 jButton4 = new JButton();\r
629 jButton4.setPreferredSize(new Dimension(70, 20));\r
630 jButton4.setText("Add");\r
631 }\r
632 return jButton4;\r
633 }\r
634\r
635 /**\r
636 * This method initializes jButton5 \r
637 * \r
638 * @return javax.swing.JButton \r
639 */\r
640 private JButton getJButton5() {\r
641 if (jButton5 == null) {\r
642 jButton5 = new JButton();\r
643 jButton5.setPreferredSize(new Dimension(70, 20));\r
644 jButton5.setText("Delete");\r
645 }\r
646 return jButton5;\r
647 }\r
648\r
649\r
650} // @jve:decl-index=0:visual-constraint="10,10"\r
651\r
652\r