Revision 1126
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/test/java/README.txt | ||
---|---|---|
1 |
#set( $symbol_pound = '#' ) |
|
2 |
#set( $symbol_dollar = '$' ) |
|
3 |
#set( $symbol_escape = '\' ) |
|
4 |
For each class you are going to test, create one Test class with the same |
|
5 |
name as the class to test, ending with Test. |
|
6 |
|
|
7 |
For example, the unit tests of the "ExampleLibrary" class are performed |
|
8 |
by the "ExampleLibraryTest" class. |
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/test/resources/README.txt | ||
---|---|---|
1 |
#set( $symbol_pound = '#' ) |
|
2 |
#set( $symbol_dollar = '$' ) |
|
3 |
#set( $symbol_escape = '\' ) |
|
4 |
Put into this folder the resources needed by your test classes. |
|
5 |
|
|
6 |
This folder is added to the Tests classpath, so you can load any resources |
|
7 |
through the ClassLoader. |
|
8 |
|
|
9 |
By default, in this folder you can find an example of log4j configuration, |
|
10 |
prepared to log messages through the console, so logging works when you |
|
11 |
run your tests classes. |
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/test/resources/log4j.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8" ?> |
|
2 |
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> |
|
3 |
|
|
4 |
<!-- |
|
5 |
Log4J configuration file for unit tests execution. |
|
6 |
--> |
|
7 |
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> |
|
8 |
|
|
9 |
<!-- Appender configuration to show logging messages through the console --> |
|
10 |
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> |
|
11 |
<layout class="org.apache.log4j.PatternLayout"> |
|
12 |
<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n %m%n" /> |
|
13 |
</layout> |
|
14 |
</appender> |
|
15 |
|
|
16 |
<!-- |
|
17 |
Activate logging messages of DEBUG level of higher only for the |
|
18 |
DefaultExampleManager class. |
|
19 |
You can put full classes names or packages instead, to configure |
|
20 |
logging for all the classes and subpackages of the package. |
|
21 |
--> |
|
22 |
<category name="org.gvsig.scripting.impl.DefaultExampleManager"> |
|
23 |
<priority value="DEBUG" /> |
|
24 |
</category> |
|
25 |
|
|
26 |
<!-- |
|
27 |
By default, show only logging messages of INFO level or higher, |
|
28 |
through the previously configured CONSOLE appender. |
|
29 |
--> |
|
30 |
<root> |
|
31 |
<priority value="INFO" /> |
|
32 |
<appender-ref ref="CONSOLE" /> |
|
33 |
</root> |
|
34 |
</log4j:configuration> |
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/main/resources/thing/generator.properties | ||
---|---|---|
1 |
# jEdit settings: |
|
2 |
# :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: |
|
3 |
# |
|
4 |
# Templates for the ThinG Generator. |
|
5 |
# |
|
6 |
# Important: |
|
7 |
# When changing any of the templates, please keep in mind: |
|
8 |
# - leading whitespace must be enclosed in quotes '...' |
|
9 |
# - brackets '{' and '}' must be enclosed in quotes unless they denote a parameter |
|
10 |
# - end-of-lines are always denoted with '\n'. The generator may change this |
|
11 |
# into the OS specific line separator such as '\r\n' on Windows or '\r' on Mac. |
|
12 |
|
|
13 |
|
|
14 |
# 0: current date (java.util.Date instance) |
|
15 |
file.header.firstline=\ |
|
16 |
// Generated by ThinG on {0,date} {0,time}.\n\ |
|
17 |
\n |
|
18 |
|
|
19 |
|
|
20 |
# 0: "<package-spec>", e.g. "foo.bar.baz" |
|
21 |
file.header.package=\ |
|
22 |
package {0};\n\ |
|
23 |
\n |
|
24 |
|
|
25 |
|
|
26 |
# 0: additional import statement, e.g. "import thinlet.FrameLauncher;" or "" |
|
27 |
# 1: JavaDoc comment |
|
28 |
file.header=\ |
|
29 |
import thinlet.Thinlet;\n\ |
|
30 |
{0}\ |
|
31 |
\n\ |
|
32 |
\n\ |
|
33 |
/**\n\ |
|
34 |
' '* {1}\n\ |
|
35 |
' '*/\n |
|
36 |
|
|
37 |
|
|
38 |
file.footer=\ |
|
39 |
'}'\n |
|
40 |
|
|
41 |
|
|
42 |
# 0: "<classname>" |
|
43 |
# 1: "[ extends Thinlet]" |
|
44 |
# 2: "[ implements <interfacename>]" |
|
45 |
handler.signature=\ |
|
46 |
public class {0}{1}{2}\n\ |
|
47 |
'{'\n |
|
48 |
|
|
49 |
|
|
50 |
# 0: "<interfacename>" |
|
51 |
interface.signature=\ |
|
52 |
public interface {0}\n\ |
|
53 |
'{'\n |
|
54 |
|
|
55 |
|
|
56 |
# 0: "<classname>" |
|
57 |
# 1: "<thinlet-filename>" |
|
58 |
class.asThinlet.constructor=\ |
|
59 |
\n\ |
|
60 |
' '/**\n\ |
|
61 |
' '* Create a new {0} instance.\n\ |
|
62 |
' '*/\n\ |
|
63 |
' 'public {0}() throws java.io.IOException\n\ |
|
64 |
' {'\n\ |
|
65 |
' 'add(parse("{1}"));\n\ |
|
66 |
' }'\n\ |
|
67 |
\n |
|
68 |
|
|
69 |
|
|
70 |
# 0: JavaDoc comment for the method. |
|
71 |
method.javadoc.header=\ |
|
72 |
\n\ |
|
73 |
' '/**\n\ |
|
74 |
' '* {0}\n |
|
75 |
|
|
76 |
|
|
77 |
method.javadoc.param.intro=\ |
|
78 |
' '*\n |
|
79 |
|
|
80 |
|
|
81 |
# 1: "<parameter-name>" |
|
82 |
# 2: JavaDoc comment for the parameter |
|
83 |
method.javadoc.param=\ |
|
84 |
' '* @param {0} {1}\n |
|
85 |
|
|
86 |
|
|
87 |
method.javadoc.footer=\ |
|
88 |
' '*/\n |
|
89 |
|
|
90 |
|
|
91 |
# 0: full method signature, e.g. "mymethod(String param1, int param2)" |
|
92 |
method.body.interface=\ |
|
93 |
' 'public void {0};\n\ |
|
94 |
\n |
|
95 |
|
|
96 |
|
|
97 |
# 0: full method signature, e.g. "mymethod(String param1, int param2)" |
|
98 |
method.body.handler=\ |
|
99 |
' 'public void {0}\n\ |
|
100 |
' {'\n\ |
|
101 |
' }'\n\ |
|
102 |
\n |
|
103 |
|
|
104 |
|
|
105 |
# 0: "<classname>" |
|
106 |
main.asThinlet=\ |
|
107 |
\n\ |
|
108 |
' '/**\n\ |
|
109 |
' '* Show a test frame with the Thinlet contents.\n\ |
|
110 |
' '*\n\ |
|
111 |
' '* @param args ignored.\n\ |
|
112 |
' '*/\n\ |
|
113 |
' 'public static void main(String[] args) throws java.io.IOException\n\ |
|
114 |
' {'\n\ |
|
115 |
' 'new FrameLauncher("{0}", new {0}(), 400, 400);\n\ |
|
116 |
' }'\n\ |
|
117 |
\n |
|
118 |
|
|
119 |
|
|
120 |
# 0: "<classname>" |
|
121 |
# 1: "<thinlet-filename>" |
|
122 |
main.notAsThinlet=\ |
|
123 |
\n\ |
|
124 |
' '/**\n\ |
|
125 |
' '* Show a test frame with the Thinlet contents.\n\ |
|
126 |
' '*\n\ |
|
127 |
' '* @param args ignored.\n\ |
|
128 |
' '*/\n\ |
|
129 |
' 'public static void main(String[] args) throws java.io.IOException\n\ |
|
130 |
' {'\n\ |
|
131 |
' 'class MyThinlet extends Thinlet\n\ |
|
132 |
' {'\n\ |
|
133 |
' 'public MyThinlet() throws java.io.IOException\n\ |
|
134 |
' {'\n\ |
|
135 |
' 'add(parse("{1}", new {0}()));\n\ |
|
136 |
' }'\n\ |
|
137 |
' };'\n\ |
|
138 |
' 'new FrameLauncher("{0}", new MyThinlet(), 400, 400);\n\ |
|
139 |
' }'\n\ |
|
140 |
\n |
|
141 |
|
|
142 |
|
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/main/resources/thing/componentchooser.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
|
2 |
<!-- jEdit settings: :tabSize=4:indentSize=4:noTabs=true:folding=explicit:collapseFolds=1: --> |
|
3 |
|
|
4 |
<panel bottom="12" columns="1" left="12" right="12" top="12" weightx="1" weighty="1"> |
|
5 |
<list colspan="2" name="list" line="false" weightx="1" weighty="1" action="selectionChanged(this, lSelected)" perform="close()"/> |
|
6 |
<panel gap="6" top="12" weightx="1"> |
|
7 |
<label text="Selected:"/> |
|
8 |
<label name="lSelected" text="null"/> |
|
9 |
<panel weightx="1"/> |
|
10 |
<button name="bOk" text="Ok" icon="icons/ok.gif" mnemonic="0" type="default" action="ok()"/> |
|
11 |
<button name="bCancel" text="Cancel" icon="icons/cancel.gif" mnemonic="0" type="cancel" action="close()"/> |
|
12 |
</panel> |
|
13 |
</panel> |
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/main/resources/thing/thing.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
|
2 |
<!-- jEdit settings: :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: --> |
|
3 |
|
|
4 |
<panel columns="1" gap="4"> |
|
5 |
|
|
6 |
<menubar weightx="1"> |
|
7 |
<menu text="File" mnemonic="0"> |
|
8 |
<menuitem text="New" mnemonic="0" icon="icons/empty_menu.gif" accelerator="ctrl N" action="menu_file_new()"/> |
|
9 |
<menuitem text="Open..." mnemonic="0" icon="icons/empty_menu.gif" accelerator="ctrl O" action="menu_file_open()"/> |
|
10 |
<separator/> |
|
11 |
<menuitem text="Reload" mnemonic="0" icon="icons/empty_menu.gif" accelerator="ctrl R" action="menu_file_reload()"/> |
|
12 |
<separator/> |
|
13 |
<menuitem text="Save" mnemonic="0" icon="icons/empty_menu.gif" accelerator="ctrl S" action="menu_file_save()"/> |
|
14 |
<menuitem text="Save As..." mnemonic="5" icon="icons/empty_menu.gif" action="menu_file_save_as()"/> |
|
15 |
<separator/> |
|
16 |
<menuitem text="Exit" mnemonic="0" icon="icons/empty_menu.gif" accelerator="alt F4" action="menu_file_exit()"/> |
|
17 |
</menu> |
|
18 |
<menu text="Edit" mnemonic="0"> |
|
19 |
<menuitem text="Cut" name="menu_edit_cut" mnemonic="0" accelerator="ctrl X" icon="icons/edit_cut.gif" action="menu_edit_cut()"/> |
|
20 |
<menuitem text="Copy" name="menu_edit_copy" mnemonic="1" accelerator="ctrl C" icon="icons/edit_copy.gif" action="menu_edit_copy()"/> |
|
21 |
<menuitem text="Paste" name="menu_edit_paste" mnemonic="0" accelerator="ctrl V" icon="icons/edit_paste.gif" action="menu_edit_paste()"/> |
|
22 |
<menuitem text="Paste from system clipboard" name="menu_edit_paste_systemcb" mnemonic="1" accelerator="ctrl shift V" icon="icons/empty_menu.gif" action="menu_edit_paste_systemcb()"/> |
|
23 |
<menuitem text="Delete" name="menu_edit_delete" mnemonic="0" icon="icons/edit_delete.gif" action="menu_edit_delete()"/> |
|
24 |
<separator/> |
|
25 |
<menuitem text="Settings..." mnemonic="0" icon="icons/empty_menu.gif" action="menu_edit_settings()"/> |
|
26 |
</menu> |
|
27 |
<menu text="Tools" mnemonic="0"> |
|
28 |
<menuitem text="Generate Handler Stub Source..." name="menu_tools_generate" mnemonic="0" accelerator="ctrl G" icon="icons/empty_menu.gif" action="menu_tools_generate()"/> |
|
29 |
</menu> |
|
30 |
<menu text="Help" mnemonic="0"> |
|
31 |
<menuitem text="About Thing..." mnemonic="0" icon="icons/thing_small.gif" action="menu_help_about()"/> |
|
32 |
</menu> |
|
33 |
</menubar> |
|
34 |
|
|
35 |
<panel name="toolbar" weightx="1" gap="-1"> |
|
36 |
|
|
37 |
<!-- top level components --> |
|
38 |
<button name="tb_add_panel" property="classname=panel" icon="icons/panel.gif" tooltip="Create new panel" action="addComponent(this)"/> |
|
39 |
<button name="tb_add_dialog" property="classname=dialog" icon="icons/dialog.gif" tooltip="Create new dialog" action="addComponent(this)"/> |
|
40 |
<button name="tb_add_desktop" property="classname=desktop" icon="icons/desktop.gif" tooltip="Create new desktop" action="addComponent(this)"/> |
|
41 |
<button name="tb_add_splitpane" property="classname=splitpane" icon="icons/splitpane.gif" tooltip="Create new splitpane" action="addComponent(this)"/> |
|
42 |
<button name="tb_add_tabbedpane" property="classname=tabbedpane" icon="icons/tabbedpane.gif" tooltip="Create new tabbedpane" action="addComponent(this)"/> |
|
43 |
|
|
44 |
<!-- menu components --> |
|
45 |
<button name="tb_add_menubar" property="classname=menubar" icon="icons/menubar.gif" tooltip="Create new menubar" action="addComponent(this)"/> |
|
46 |
<button name="tb_add_menu" property="classname=menu" icon="icons/menu.gif" tooltip="Create new menu" action="addComponent(this)"/> |
|
47 |
<button name="tb_add_menuitem" property="classname=menuitem" icon="icons/menuitem.gif" tooltip="Create new menuitem" action="addComponent(this)"/> |
|
48 |
<button name="tb_add_checkboxmenuitem" property="classname=checkboxmenuitem" icon="icons/checkboxmenuitem.gif" tooltip="Create new checkboxmenuitem" action="addComponent(this)"/> |
|
49 |
|
|
50 |
<!-- components --> |
|
51 |
<button name="tb_add_label" property="classname=label" icon="icons/label.gif" tooltip="Create new label" action="addComponent(this)"/> |
|
52 |
<button name="tb_add_button" property="classname=button" icon="icons/button.gif" tooltip="Create new button" action="addComponent(this)"/> |
|
53 |
<button name="tb_add_togglebutton" property="classname=togglebutton" icon="icons/togglebutton.gif" tooltip="Create new togglebutton" action="addComponent(this)"/> |
|
54 |
<button name="tb_add_checkbox" property="classname=checkbox" icon="icons/checkbox.gif" tooltip="Create new checkbox" action="addComponent(this)"/> |
|
55 |
<button name="tb_add_textfield" property="classname=textfield" icon="icons/textfield.gif" tooltip="Create new textfield" action="addComponent(this)"/> |
|
56 |
<button name="tb_add_combobox" property="classname=combobox" icon="icons/combobox.gif" tooltip="Create new combobox" action="addComponent(this)"/> |
|
57 |
<button name="tb_add_passwordfield" property="classname=passwordfield" icon="icons/passwordfield.gif" tooltip="Create new passwordfield" action="addComponent(this)"/> |
|
58 |
<button name="tb_add_spinbox" property="classname=spinbox" icon="icons/spinbox.gif" tooltip="Create new spinbox" action="addComponent(this)"/> |
|
59 |
<button name="tb_add_progressbar" property="classname=progressbar" icon="icons/progressbar.gif" tooltip="Create new progressbar" action="addComponent(this)"/> |
|
60 |
<button name="tb_add_slider" property="classname=slider" icon="icons/slider.gif" tooltip="Create new slider" action="addComponent(this)"/> |
|
61 |
<button name="tb_add_separator" property="classname=separator" icon="icons/separator.gif" tooltip="Create new separator" action="addComponent(this)"/> |
|
62 |
<button name="tb_add_list" property="classname=list" icon="icons/list.gif" tooltip="Create new list" action="addComponent(this)"/> |
|
63 |
<button name="tb_add_table" property="classname=table" icon="icons/table.gif" tooltip="Create new table" action="addComponent(this)"/> |
|
64 |
<button name="tb_add_textarea" property="classname=textarea" icon="icons/textarea.gif" tooltip="Create new textarea" action="addComponent(this)"/> |
|
65 |
<button name="tb_add_tree" property="classname=tree" icon="icons/tree.gif" tooltip="Create new tree" action="addComponent(this)"/> |
|
66 |
|
|
67 |
<!-- list items --> |
|
68 |
<button name="tb_add_choice" property="classname=choice" icon="icons/choice.gif" tooltip="Create new choice" action="addComponent(this)"/> |
|
69 |
<button name="tb_add_item" property="classname=item" icon="icons/item.gif" tooltip="Create new item" action="addComponent(this)"/> |
|
70 |
<button name="tb_add_node" property="classname=node" icon="icons/node.gif" tooltip="Create new node" action="addComponent(this)"/> |
|
71 |
<button name="tb_add_tab" property="classname=tab" icon="icons/tab.gif" tooltip="Create new tab" action="addComponent(this)"/> |
|
72 |
|
|
73 |
<!-- table components --> |
|
74 |
<button name="tb_add_row" property="classname=row" icon="icons/row.gif" tooltip="Create new row" action="addComponent(this)"/> |
|
75 |
<button name="tb_add_cell" property="classname=cell" icon="icons/cell.gif" tooltip="Create new cell" action="addComponent(this)"/> |
|
76 |
<button name="tb_add_header" property="classname=header" icon="icons/header.gif" tooltip="Create new header" action="addComponent(this)"/> |
|
77 |
<button name="tb_add_column" property="classname=column" icon="icons/column.gif" tooltip="Create new column" action="addComponent(this)"/> |
|
78 |
|
|
79 |
<!-- other --> |
|
80 |
<button name="tb_add_popupmenu" property="classname=popupmenu" icon="icons/popupmenu.gif" tooltip="Create new popupmenu" action="addComponent(this)"/> |
|
81 |
|
|
82 |
<!-- later --> |
|
83 |
<!-- |
|
84 |
<button name="tb_add_bean" property="classname=bean" icon="icons/bean.gif" tooltip="Create new bean" action="addComponent(this)" enabled="false"/> |
|
85 |
--> |
|
86 |
|
|
87 |
<!-- placeholder in case there are no buttons add all --> |
|
88 |
<separator height="30" width="1"/> |
|
89 |
</panel> |
|
90 |
|
|
91 |
<!-- main workarea --> |
|
92 |
<panel left="4" right="4" weightx="1" weighty="1"> |
|
93 |
<splitpane orientation="horizontal" divider="200" weightx="1" weighty="1"> |
|
94 |
|
|
95 |
<!-- left splitpane: component tree and properties table --> |
|
96 |
<splitpane orientation="vertical"> |
|
97 |
<panel columns="1" weightx="1" weighty="1"> |
|
98 |
<tree name="tree" angle="true" line="false" selection="single" weightx="1" weighty="1" action="treeSelectionChanged()"/> |
|
99 |
<panel top="3" bottom="3" gap="2" scrollable="true"> |
|
100 |
<button name="tb_edit_copy" icon="icons/edit_copy.gif" tooltip="Copy selected component to internal ThinG clipboard and system clipboard" action="menu_edit_copy()"/> |
|
101 |
<button name="tb_edit_cut" icon="icons/edit_cut.gif" tooltip="Cut selected component to internal ThinG clipboard and system clipboard" action="menu_edit_cut()"/> |
|
102 |
<button name="tb_edit_paste" icon="icons/edit_paste.gif" tooltip="Paste component from internal ThinG clipboard below selected component" action="menu_edit_paste()"/> |
|
103 |
<button name="tb_edit_delete" icon="icons/edit_delete.gif" tooltip="Remove selected component" action="menu_edit_delete()"/> |
|
104 |
<separator/> |
|
105 |
<button name="tb_edit_moveup" icon="icons/edit_moveup.gif" tooltip="Move selected component up" action="moveComponentUp()"/> |
|
106 |
<button name="tb_edit_movedown" icon="icons/edit_movedown.gif" tooltip="Move selected component down" action="moveComponentDown()"/> |
|
107 |
</panel> |
|
108 |
</panel> |
|
109 |
<panel columns="1" gap="5"> |
|
110 |
<table name="props" selection="single" weightx="1" weighty="1" action="tableSelectionChanged()"> |
|
111 |
<header> |
|
112 |
<column name="props_key" text="Property" width="80" sort="ascent"/> |
|
113 |
<column name="props_value" text="Value"/> |
|
114 |
</header> |
|
115 |
</table> |
|
116 |
<panel name="propedit" columns="3" gap="5" weightx="1" border="true" top="5" left="5" bottom="5" right="5"> |
|
117 |
<label name="propedit_name" text=""/> |
|
118 |
<panel name="propedit_panel" gap="5" weightx="1"/> |
|
119 |
<button name="propedit_reset" text="Reset" tooltip="Reset to default value" font="10" valign="center" enabled="false" action="propEditReset()"/> |
|
120 |
</panel> |
|
121 |
</panel> |
|
122 |
</splitpane> |
|
123 |
|
|
124 |
<!-- right splitpane: preview panel --> |
|
125 |
<tabbedpane name="tabs" placement="top" selected="1" action="tabSelected(this.selected)"> |
|
126 |
<!-- Attention: because of an obscure bug in Thinlet.getNextFocusable(), --> |
|
127 |
<!-- the tab "XML" must be the first one! If it is not the first panel, Thinlet --> |
|
128 |
<!-- runs into an endless loop when the user navigates from the "Preview" tab --> |
|
129 |
<!-- to the "XML" tab, trying to set the next focusable component. --> |
|
130 |
<tab text="XML" mnemonic="0"> |
|
131 |
<panel weightx="1" weighty="1"> |
|
132 |
<textarea name="serialize" editable="false" weightx="1" weighty="1"/> |
|
133 |
</panel> |
|
134 |
</tab> |
|
135 |
<tab text="Preview" mnemonic="0"> |
|
136 |
<panel name="preview" border="true" scrollable="true" weightx="1" weighty="1"/> |
|
137 |
</tab> |
|
138 |
</tabbedpane> |
|
139 |
|
|
140 |
</splitpane> |
|
141 |
</panel> |
|
142 |
|
|
143 |
<!-- status bar at bottom --> |
|
144 |
<textfield name="statusbar" editable="false" text="ThinG" weightx="1"/> |
|
145 |
|
|
146 |
</panel> |
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/main/resources/thing/generate.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
|
2 |
<!-- jEdit settings: :tabSize=4:indentSize=4:noTabs=true:folding=explicit:collapseFolds=1: --> |
|
3 |
|
|
4 |
<panel columns="1" |
|
5 |
bottom="12" left="12" right="12" top="12" gap="12" |
|
6 |
init="init(cbGenerateInterface, cbGenerateHandler, cbGenerateAsThinlet, cbGenerateMain, tInterfaceName, tHandlerName, tPackageName, tOutputDir, tPreview, bOk)" |
|
7 |
weightx="1" weighty="1" |
|
8 |
> |
|
9 |
<panel border="true" bottom="6" columns="3" font=" bold" gap="6" left="6" right="6" text="Generate" top="6" weightx="1"> |
|
10 |
<checkbox action="checkboxChanged(this)" mnemonic="0" name="cbGenerateInterface" text="Interface for Handler class" weightx="1"/> |
|
11 |
<label for="tInterfaceName" mnemonic="1" text="Interface Name:"/> |
|
12 |
<textfield perform="textfieldChanged(this)" name="tInterfaceName" weightx="4"/> |
|
13 |
<checkbox action="checkboxChanged(this)" mnemonic="0" name="cbGenerateHandler" selected="true" text="Handler class" weightx="1"/> |
|
14 |
<label for="tHandlerName" mnemonic="1" text="Class Name:"/> |
|
15 |
<textfield perform="textfieldChanged(this)" name="tHandlerName" weightx="4"/> |
|
16 |
<panel/> |
|
17 |
<label for="tPackageName" mnemonic="0" text="Package Name:"/> |
|
18 |
<textfield perform="textfieldChanged(this)" name="tPackageName" weightx="4"/> |
|
19 |
<panel colspan="3" gap="6" weightx="1"> |
|
20 |
<label for="tOutputDir" mnemonic="7" text="Output Directory:"/> |
|
21 |
<textfield name="tOutputDir" weightx="1"/> |
|
22 |
<button action="buttonOutputDirClicked()" text="..." tooltip="Select Output Directory"/> |
|
23 |
</panel> |
|
24 |
</panel> |
|
25 |
<panel border="true" bottom="6" columns="1" font=" bold" gap="6" left="6" right="6" text="Handler Options" top="6"> |
|
26 |
<checkbox action="checkboxChanged(this)" mnemonic="13" name="cbGenerateAsThinlet" text="Handler is a Thinlet"/> |
|
27 |
<checkbox action="checkboxChanged(this)" mnemonic="9" name="cbGenerateMain" text="Generate main()"/> |
|
28 |
</panel> |
|
29 |
<panel border="true" bottom="6" font=" bold" gap="6" left="6" right="6" text="Preview" top="6" weightx="1" weighty="1"> |
|
30 |
<textarea editable="false" font="Monospaced 11" name="tPreview" weightx="1" weighty="1"/> |
|
31 |
</panel> |
|
32 |
<panel gap="6" halign="right" weightx="1"> |
|
33 |
<button action="ok()" icon="icons/ok.gif" mnemonic="0" name="bOk" text="Ok" valign="bottom" weighty="1"/> |
|
34 |
<button action="close()" icon="icons/cancel.gif" mnemonic="0" name="bCancel" text="Cancel" type="cancel" valign="bottom" weighty="1"/> |
|
35 |
</panel> |
|
36 |
</panel> |
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/main/resources/thing/icons/componentchooser.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
|
2 |
<!-- jEdit settings: :tabSize=4:indentSize=4:noTabs=true:folding=explicit:collapseFolds=1: --> |
|
3 |
|
|
4 |
<panel bottom="12" columns="1" left="12" right="12" top="12" weightx="1" weighty="1"> |
|
5 |
<list colspan="2" name="list" line="false" weightx="1" weighty="1" action="selectionChanged(this, lSelected)" perform="close()"/> |
|
6 |
<panel gap="6" top="12" weightx="1"> |
|
7 |
<label text="Selected:"/> |
|
8 |
<label name="lSelected" text="null"/> |
|
9 |
<panel weightx="1"/> |
|
10 |
<button name="bOk" text="Ok" icon="icons/ok.gif" mnemonic="0" type="default" action="ok()"/> |
|
11 |
<button name="bCancel" text="Cancel" icon="icons/cancel.gif" mnemonic="0" type="cancel" action="close()"/> |
|
12 |
</panel> |
|
13 |
</panel> |
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/main/resources/thing/settings.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
|
2 |
<!-- jEdit settings: :tabSize=4:indentSize=4:noTabs=true:folding=explicit:collapseFolds=1: --> |
|
3 |
|
|
4 |
<panel border="true" bottom="12" columns="2" gap="20" left="12" right="12" top="12" weightx="1" weighty="1"> |
|
5 |
<label icon="icons/thing.gif" rowspan="3" valign="top"/> |
|
6 |
<panel border="true" bottom="6" font="bold" gap="6" left="6" right="6" text="Icons" top="6"> |
|
7 |
<label for="tIconpath" mnemonic="0" text="Icon Path:"/> |
|
8 |
<textfield name="tIconpath" weightx="1"/> |
|
9 |
<button action="chooseDir(tIconpath, tIconpath.text)" name="bChoose" text="..." tooltip="Choose directory"/> |
|
10 |
</panel> |
|
11 |
<panel border="true" bottom="6" columns="3" font="bold" gap="6" left="6" right="6" text="XML Output" top="6" weightx="1" weighty="1"> |
|
12 |
<label for="rbIndentSpace" mnemonic="1" text="Indent Char:"/> |
|
13 |
<checkbox group="indentChar" halign="left" name="rbIndentSpace" selected="true" text="Space"/> |
|
14 |
<checkbox group="indentChar" halign="left" name="rbIndentTab" text="Tab"/> |
|
15 |
<label for="spIndentSize" mnemonic="7" text="Indent Size:"/> |
|
16 |
<spinbox colspan="2" end="1" halign="left" maximum="100" minimum="1" name="spIndentSize" start="1" text="4"/> |
|
17 |
<label for="tCustomHeader" mnemonic="7" text="Custom Header:" valign="top"/> |
|
18 |
<textarea colspan="3" height="80" name="tCustomHeader" weightx="1" weighty="1" width="300"/> |
|
19 |
</panel> |
|
20 |
<panel gap="6" halign="right" weightx="1"> |
|
21 |
<button action="ok(tIconpath.text, spIndentSize.text, rbIndentSpace.selected, rbIndentTab.selected, tCustomHeader.text)" icon="icons/ok.gif" mnemonic="0" name="bOk" text="Ok" valign="bottom" weighty="1"/> |
|
22 |
<button action="close()" icon="icons/cancel.gif" mnemonic="0" name="bCancel" text="Cancel" type="cancel" valign="bottom" weighty="1"/> |
|
23 |
</panel> |
|
24 |
</panel> |
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/main/resources/thing/version.properties | ||
---|---|---|
1 |
# ThinG version number |
|
2 |
version=0.1 |
|
3 |
|
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/main/resources/README.txt | ||
---|---|---|
1 |
Put into this folder the resources needed by your library classes. |
|
2 |
|
|
3 |
This folder is added to the runtime classpath, so you can load any resources |
|
4 |
through the ClassLoader. |
|
5 |
|
|
6 |
By default, into this folder you can find some examples of resource bundle |
|
7 |
property files that may be used by your library classes. |
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.75/org.gvsig.scripting.thing/src/main/java/thing/ThinletDTD.java | ||
---|---|---|
1 |
// jEdit settings: |
|
2 |
// :tabSize=4:indentSize=4:noTabs=true:folding=explicit:collapseFolds=1: |
|
3 |
|
|
4 |
package thing; |
|
5 |
|
|
6 |
|
|
7 |
import java.util.Arrays; |
|
8 |
import java.util.ArrayList; |
|
9 |
import java.util.HashMap; |
|
10 |
import java.util.Iterator; |
|
11 |
import java.util.TreeSet; |
|
12 |
import java.util.logging.Level; |
|
13 |
import java.util.logging.Logger; |
|
14 |
|
|
15 |
|
|
16 |
/** |
|
17 |
* This class encapsulates the DTD for Thinlet DTD. |
|
18 |
* |
|
19 |
* <p> |
|
20 |
* The DTD structure is copied from <code>Thinlet.java</code>. It must be |
|
21 |
* adapted whenever the original structure in <code>Thinlet.java</code> |
|
22 |
* changes. |
|
23 |
* </p> |
|
24 |
* <p> |
|
25 |
* The other classes and methods in this class provide some handy accessors for |
|
26 |
* the contents of the DTD. See {@link ThinletDTD.Widget} and |
|
27 |
* {@link ThinletDTD.Property}. |
|
28 |
* |
|
29 |
* |
|
30 |
* Note: |
|
31 |
* Eliminated attribute i18n to support Thinlet 2005/03/28 |
|
32 |
* |
|
33 |
* gvSIG Team |
|
34 |
* |
|
35 |
* |
|
36 |
* |
|
37 |
* |
|
38 |
* @author Dirk Moebius |
|
39 |
*/ |
|
40 |
public class ThinletDTD |
|
41 |
{ |
|
42 |
//{{{ logging |
|
43 |
private static final Logger log = Logger.getLogger("thing"); |
|
44 |
private static final boolean debug() { return log.isLoggable(Level.FINE); } |
|
45 |
//}}} |
|
46 |
|
|
47 |
|
|
48 |
//{{{ copied from Thinlet.java |
|
49 |
private static final Object[] dtd; |
|
50 |
static |
|
51 |
{ |
|
52 |
Integer integer_1 = new Integer(-1); |
|
53 |
Integer integer0 = new Integer(0); |
|
54 |
Integer integer1 = new Integer(1); |
|
55 |
String[] orientation = { "horizontal", "vertical" }; |
|
56 |
String[] leftcenterright = { "left", "center", "right" }; |
|
57 |
String[] selections = { "single", "interval", "multiple" }; //+none |
|
58 |
dtd = new Object[] { |
|
59 |
"component", null, new Object[][] { |
|
60 |
{ "string", "name", null, null }, |
|
61 |
{ "boolean", "enabled", "paint", Boolean.TRUE }, |
|
62 |
{ "boolean", "visible", "parent", Boolean.TRUE }, |
|
63 |
//{ "boolean", "i18n", "validate", Boolean.FALSE }, // for I18N |
|
64 |
{ "string", "tooltip", null, null }, |
|
65 |
{ "font", "font", "validate", null }, |
|
66 |
{ "color", "foreground", "paint", null }, |
|
67 |
{ "color", "background", "paint", null }, |
|
68 |
{ "integer", "width", "validate", integer0 }, |
|
69 |
{ "integer", "height", "validate", integer0 }, |
|
70 |
{ "integer", "colspan", "validate", integer1 }, |
|
71 |
{ "integer", "rowspan", "validate", integer1 }, |
|
72 |
{ "integer", "weightx", "validate", integer0 }, |
|
73 |
{ "integer", "weighty", "validate", integer0 }, |
|
74 |
{ "choice", "halign", "validate", |
|
75 |
new String[] { "fill", "center", "left", "right" } }, |
|
76 |
{ "choice", "valign", "validate", |
|
77 |
new String[] { "fill", "center", "top", "bottom" } }, |
|
78 |
// component class String null* |
|
79 |
// parent Object null |
|
80 |
// (bounds) Rectangle 0 0 0 0 |
|
81 |
{ "property", "property", null, null }, |
|
82 |
{ "method", "init" }, |
|
83 |
{ "method", "focuslost" }, |
|
84 |
{ "method", "focusgained" } }, |
|
85 |
"label", "component", new Object[][] { |
|
86 |
{ "string", "text", "validate", null }, |
|
87 |
{ "icon", "icon", "validate", null }, |
|
88 |
{ "choice", "alignment", "validate", leftcenterright }, |
|
89 |
{ "integer", "mnemonic", "paint", integer_1 }, |
|
90 |
{ "component", "for", null, null } }, |
|
91 |
"button", "label", new Object[][] { |
|
92 |
{ "choice", "alignment", "validate", new String[] { "center", "left", "right" } }, |
|
93 |
{ "method", "action" }, |
|
94 |
{ "choice", "type", "paint", new String[] { "normal", "default", "cancel", "link" } } }, |
|
95 |
"checkbox", "label", new Object[][] { |
|
96 |
{ "boolean", "selected", "paint", Boolean.FALSE }, //...group |
|
97 |
{ "string", "group", "paint", null }, //...group |
|
98 |
{ "method", "action" } }, |
|
99 |
"togglebutton", "checkbox", null, |
|
100 |
"combobox", "textfield", new Object[][] { |
|
101 |
{ "icon", "icon", "validate", null }, |
|
102 |
{ "integer", "selected", "layout", integer_1 } }, |
|
103 |
"choice", null, new Object[][] { |
|
104 |
{ "string", "name", null, null }, |
|
105 |
{ "boolean", "enabled", "paint", Boolean.TRUE }, |
|
106 |
{ "boolean", "i18n", "validate", Boolean.FALSE }, // for I18N |
|
107 |
{ "string", "text", "parent", null }, |
|
108 |
{ "icon", "icon", "parent", null }, |
|
109 |
{ "choice", "alignment", "parent", leftcenterright }, |
|
110 |
{ "string", "tooltip", null, null }, |
|
111 |
{ "font", "font", "validate", null }, |
|
112 |
{ "color", "foreground", "paint", null }, |
|
113 |
{ "color", "background", "paint", null }, |
|
114 |
{ "property", "property", null, null } }, |
|
115 |
"textfield", "component", new Object[][] { |
|
116 |
{ "string", "text", "layout", "" }, |
|
117 |
{ "integer", "columns", "validate", integer0 }, |
|
118 |
{ "boolean", "editable", "paint", Boolean.TRUE }, |
|
119 |
{ "integer", "start", "layout", integer0 }, |
|
120 |
{ "integer", "end", "layout", integer0 }, |
|
121 |
{ "method", "action" }, |
|
122 |
{ "method", "insert" }, |
|
123 |
{ "method", "remove" }, |
|
124 |
{ "method", "caret" }, |
|
125 |
{ "method", "perform" } }, |
|
126 |
"passwordfield", "textfield", null, |
|
127 |
"textarea", "textfield", new Object[][] { |
|
128 |
{ "integer", "rows", "validate", integer0 }, |
|
129 |
{ "boolean", "border", "validate", Boolean.TRUE }, |
|
130 |
{ "boolean", "wrap", "layout", Boolean.FALSE } }, |
|
131 |
"tabbedpane", "component", new Object[][] { |
|
132 |
{ "choice", "placement", "validate", |
|
133 |
new String[] { "top", "left", "bottom", "right", "stacked" } }, |
|
134 |
{ "integer", "selected", "paint", integer0 }, |
|
135 |
{ "method", "action" } }, //...focus |
|
136 |
"tab", "choice", new Object[][] { |
|
137 |
{ "integer", "mnemonic", "paint", integer_1 } }, |
|
138 |
"panel", "component", new Object[][] { |
|
139 |
{ "integer", "columns", "validate", integer0 }, |
|
140 |
{ "integer", "top", "validate", integer0 }, |
|
141 |
{ "integer", "left", "validate", integer0 }, |
|
142 |
{ "integer", "bottom", "validate", integer0 }, |
|
143 |
{ "integer", "right", "validate", integer0 }, |
|
144 |
{ "integer", "gap", "validate", integer0 }, |
|
145 |
{ "string", "text", "validate", null }, |
|
146 |
{ "icon", "icon", "validate", null }, |
|
147 |
{ "boolean", "border", "validate", Boolean.FALSE }, |
|
148 |
{ "boolean", "scrollable", "validate", Boolean.FALSE } }, |
|
149 |
"desktop", "component", null, |
|
150 |
"dialog", "panel", new Object[][] { |
|
151 |
{ "boolean", "modal", null, Boolean.FALSE }, |
|
152 |
{ "boolean", "resizable", null, Boolean.FALSE }, |
|
153 |
{ "method", "close" }, |
|
154 |
{ "boolean", "maximizable", "paint", Boolean.FALSE }, |
|
155 |
{ "boolean", "iconifiable", "paint", Boolean.FALSE }, |
|
156 |
// closable allowed but deprecated, cannot be edited |
|
157 |
{ "boolean", "closable", null, Boolean.FALSE } }, |
|
158 |
"spinbox", "textfield", new Object[][] { |
|
159 |
{ "integer", "minimum", null, new Integer(Integer.MIN_VALUE) }, |
|
160 |
{ "integer", "maximum", null, new Integer(Integer.MAX_VALUE) }, |
|
161 |
{ "integer", "step", null, integer1 }, |
|
162 |
{ "integer", "value", null, integer0 } }, // == text? deprecated |
|
163 |
"progressbar", "component", new Object[][] { |
|
164 |
{ "choice", "orientation", "validate", orientation }, |
|
165 |
{ "integer", "minimum", "paint", integer0 }, //...checkvalue |
|
166 |
{ "integer", "maximum", "paint", new Integer(100) }, |
|
167 |
{ "integer", "value", "paint", integer0 } }, |
|
168 |
// change stringpainted |
|
169 |
"slider", "progressbar", new Object[][] { |
|
170 |
{ "integer", "unit", null, new Integer(5) }, |
|
171 |
{ "integer", "block", null, new Integer(25) }, |
|
172 |
{ "method", "action" } }, |
|
173 |
// minor/majortickspacing |
|
174 |
// inverted |
|
175 |
// labelincrement labelstart |
|
176 |
"splitpane", "component", new Object[][] { |
|
177 |
{ "choice", "orientation", "validate", orientation }, |
|
178 |
{ "integer", "divider", "layout", integer_1 } }, |
|
179 |
"list", "component", new Object[][] { |
|
180 |
{ "choice", "selection", "paint", selections }, |
|
181 |
{ "method", "action" }, |
|
182 |
{ "method", "perform" }, |
|
183 |
{ "boolean", "line", "validate", Boolean.TRUE } }, |
|
184 |
"item", "choice", new Object[][] { |
|
185 |
{ "boolean", "selected", null, Boolean.FALSE } }, |
|
186 |
"table", "list", new Object[][] { |
|
187 |
/*{ "choice", "selection", |
|
188 |
new String[] { "singlerow", "rowinterval", "multiplerow", |
|
189 |
"cell", "cellinterval", |
|
190 |
"singlecolumn", "columninterval", "multiplecolumn" } }*/ }, |
|
191 |
"header", null, new Object[][] { |
|
192 |
{ "method", "action" }, |
|
193 |
{ "boolean", "resizable", null, Boolean.TRUE } }, |
|
194 |
// reordering allowed |
|
195 |
// autoresize mode: off next (column boundries) subsequents last all columns |
|
196 |
// column row selection |
|
197 |
// selection row column cell |
|
198 |
// editing row/column |
|
199 |
"column", "choice", new Object[][] { |
|
200 |
{ "integer", "width", null, new Integer(80) }, |
|
201 |
{ "choice", "sort", null, new String[] { "none", "ascent", "descent" } }, |
|
202 |
{ "boolean", "selected", null, Boolean.FALSE } }, |
|
203 |
"row", null, new Object[][] { |
|
204 |
{ "boolean", "selected", null, Boolean.FALSE } }, |
|
205 |
"cell", "choice", null, |
|
206 |
"tree", "list", new Object[][] { |
|
207 |
{ "boolean", "angle", null, Boolean.FALSE }, |
|
208 |
{ "method", "expand" }, |
|
209 |
{ "method", "collapse" } }, |
|
210 |
"node", "choice", new Object[][] { |
|
211 |
{ "boolean", "selected", null, Boolean.FALSE }, |
|
212 |
{ "boolean", "expanded", null, Boolean.TRUE } }, |
|
213 |
"separator", "component", null, |
|
214 |
"menubar", "component", new Object[][] { |
|
215 |
{ "choice", "placement", "validate", new String[] { "top", "bottom" } } }, |
|
216 |
"menu", "choice", new Object[][] { |
|
217 |
{ "integer", "mnemonic", "paint", integer_1 } }, |
|
218 |
"menuitem", "choice", new Object[][] { |
|
219 |
{ "keystroke", "accelerator", null, null }, |
|
220 |
{ "method", "action" }, |
|
221 |
{ "integer", "mnemonic", "paint", integer_1 } }, |
|
222 |
"checkboxmenuitem", "menuitem", new Object[][] { |
|
223 |
{ "boolean", "selected", "paint", Boolean.FALSE }, //...group |
|
224 |
{ "string", "group", "paint", null } }, //...group |
|
225 |
"popupmenu", "component", new Object[][] { |
|
226 |
{ "method", "menushown" } }, // Post menu: Shift+F10 |
|
227 |
"bean", "component", new Object[][] { |
|
228 |
{ "bean", "bean", null, null } } |
|
229 |
}; |
|
230 |
} |
|
231 |
//}}} |
|
232 |
|
|
233 |
|
|
234 |
//{{{ class initialization |
|
235 |
private static final String[] components = |
|
236 |
{ |
|
237 |
"bean", "button", "checkbox", "combobox", "desktop", "dialog", |
|
238 |
"label", "list", "menubar", "panel", "passwordfield", "popupmenu", |
|
239 |
"progressbar", "separator", "slider", "spinbox", "splitpane", |
|
240 |
"tabbedpane", "table", "textarea", "textfield", "togglebutton", |
|
241 |
"tree" |
|
242 |
}; |
|
243 |
|
|
244 |
private static final Object[] allowedSubWidgets = |
|
245 |
{ |
|
246 |
// component add allowed for... |
|
247 |
// ---------------- --------------------------------------------------- |
|
248 |
"bean", new String[] { "popupmenu" }, |
|
249 |
"button", new String[] { "popupmenu" }, |
|
250 |
"cell", new String[] { }, |
|
251 |
"checkbox", new String[] { "popupmenu" }, |
|
252 |
"checkboxmenuitem", new String[] { }, |
|
253 |
"choice", new String[] { }, |
|
254 |
"column", new String[] { }, |
|
255 |
"combobox", new String[] { "choice", "popupmenu" }, |
|
256 |
"desktop", components, |
|
257 |
"dialog", components, |
|
258 |
"header", new String[] { "column" }, |
|
259 |
"item", new String[] { }, |
|
260 |
"label", new String[] { "popupmenu" }, |
|
261 |
"list", new String[] { "item", "popupmenu" }, |
|
262 |
"menu", new String[] { "menu", "menuitem", "checkboxmenuitem", "separator" }, |
|
263 |
"menubar", new String[] { "menu" }, |
|
264 |
"menuitem", new String[] { }, |
|
265 |
"node", new String[] { "node" }, |
|
266 |
"panel", components, |
|
267 |
"passwordfield", new String[] { "popupmenu" }, |
|
268 |
"popupmenu", new String[] { "menu", "menuitem", "checkboxmenuitem", "separator" }, |
|
269 |
"progressbar", new String[] { "popupmenu" }, |
|
270 |
"row", new String[] { "cell" }, |
|
271 |
"separator", new String[] { "popupmenu" }, |
|
272 |
"slider", new String[] { "popupmenu" }, |
|
273 |
"spinbox", new String[] { "popupmenu" }, |
|
274 |
"splitpane", components, |
|
275 |
"tab", components, |
|
276 |
"tabbedpane", new String[] { "tab", "popupmenu" }, |
|
277 |
"table", new String[] { "row", "header", "popupmenu" }, |
|
278 |
"textarea", new String[] { "popupmenu" }, |
|
279 |
"textfield", new String[] { "popupmenu" }, |
|
280 |
"togglebutton", new String[] { "popupmenu" }, |
|
281 |
"tree", new String[] { "node", "popupmenu" } |
|
282 |
}; |
|
283 |
|
|
284 |
|
|
285 |
private static final HashMap widgets; |
|
286 |
|
|
287 |
static |
|
288 |
{ |
|
289 |
widgets = new HashMap(); |
|
290 |
|
|
291 |
for(int i = 0; i < dtd.length; i += 3) |
|
292 |
{ |
|
293 |
// create Widget |
|
294 |
String classname = (String) dtd[i]; |
|
295 |
Widget widget = new Widget(classname); |
|
296 |
widgets.put(classname, widget); |
|
297 |
// add properties |
|
298 |
Object[][] propDefs = (Object[][]) dtd[i + 2]; |
|
299 |
Property[] properties = new Property[0]; |
|
300 |
if(propDefs != null) |
|
301 |
{ |
|
302 |
TreeSet props = new TreeSet(); |
|
303 |
for(int j = 0; j < propDefs.length; ++j) |
|
304 |
{ |
|
305 |
String type = (String) propDefs[j][0]; |
|
306 |
String name = (String) propDefs[j][1]; |
|
307 |
Object defaultValue = (propDefs[j].length > 3) ? propDefs[j][3] : null; |
|
308 |
props.add(new Property(widget, name, type, defaultValue)); |
|
309 |
} |
|
310 |
properties = (Property[]) props.toArray(new Property[props.size()]); |
|
311 |
} |
|
312 |
widget.setProperties(properties); |
|
313 |
} |
|
314 |
|
|
315 |
// set parent-child relationship |
|
316 |
for(int i = 0; i < dtd.length; i += 3) |
|
317 |
{ |
|
318 |
String classname = (String) dtd[i]; |
|
319 |
String parentclassname = (String) dtd[i + 1]; |
|
320 |
Widget widget = (Widget) widgets.get(classname); |
|
321 |
Widget parentWidget = (Widget) widgets.get(parentclassname); |
|
322 |
widget.setParent(parentWidget); |
|
323 |
} |
|
324 |
|
|
325 |
// set add-allowed relationship |
|
326 |
for(int i = 0; i < allowedSubWidgets.length; i += 2) |
|
327 |
{ |
|
328 |
String classname = (String) allowedSubWidgets[i]; |
|
329 |
String[] allowed = (String[]) allowedSubWidgets[i + 1]; |
|
330 |
if(allowed.length > 0) |
|
331 |
{ |
|
332 |
Widget widget = (Widget) widgets.get(classname); |
|
333 |
for(int j = 0; j < allowed.length; ++j) |
|
334 |
{ |
|
335 |
Widget allowedWidget = (Widget) widgets.get(allowed[j]); |
|
336 |
widget.addAllowedSubWidget(allowedWidget); |
|
337 |
} |
|
338 |
} |
|
339 |
} |
|
340 |
} |
|
341 |
//}}} |
|
342 |
|
|
343 |
|
|
344 |
public static Widget getWidget(String classname) |
|
345 |
{ |
|
346 |
Widget widget = (Widget) widgets.get(classname); |
|
347 |
if(widget == null) |
|
348 |
throw new IllegalArgumentException("unknown classname: " + classname); |
|
349 |
else |
|
350 |
return widget; |
|
351 |
} |
|
352 |
|
|
353 |
|
|
354 |
public static Property[] getProperties(String classname) |
|
355 |
{ |
|
356 |
return getWidget(classname).getProperties(); |
|
357 |
} |
|
358 |
|
|
359 |
|
|
360 |
public static Property getProperty(String classname, String propName) |
|
361 |
{ |
|
362 |
Property property = getWidget(classname).getProperty(propName); |
|
363 |
if(property != null) |
|
364 |
return property; |
|
365 |
else |
|
366 |
throw new IllegalArgumentException("unknown property: " + propName + " in class: " + classname); |
|
367 |
} |
|
368 |
|
|
369 |
|
|
370 |
//{{{ class Widget |
|
371 |
/** |
|
372 |
* A Widget represents a Thinlet component, such as "button" or "label". |
|
373 |
* |
|
374 |
* <p> |
|
375 |
* Note that Widgets are comparable. The default sort order is to sort by |
|
376 |
* name. |
|
377 |
* </p> |
|
378 |
*/ |
|
379 |
public static class Widget implements Comparable |
|
380 |
{ |
|
381 |
private String classname; |
|
382 |
private Widget parent; |
|
383 |
private Property[] properties; |
|
384 |
private ArrayList allowedSubWidgets = new ArrayList(); |
|
385 |
private boolean allPropertiesCalculated = false; |
|
386 |
private HashMap propMap = new HashMap(); |
|
387 |
|
|
388 |
Widget(String classname) |
|
389 |
{ |
|
390 |
this.classname = classname; |
|
391 |
} |
|
392 |
|
|
393 |
void setProperties(Property[] properties) |
|
394 |
{ |
|
395 |
this.properties = properties; |
|
396 |
} |
|
397 |
|
|
398 |
void setParent(Widget parent) |
|
399 |
{ |
|
400 |
this.parent = parent; |
|
401 |
} |
|
402 |
|
|
403 |
void addAllowedSubWidget(Widget w) |
|
404 |
{ |
|
405 |
this.allowedSubWidgets.add(w); |
|
406 |
} |
|
407 |
|
|
408 |
public String getClassname() |
|
409 |
{ |
|
410 |
return classname; |
|
411 |
} |
|
412 |
|
|
413 |
public Widget getParent() |
|
414 |
{ |
|
415 |
return parent; |
|
416 |
} |
|
417 |
|
|
418 |
public String getParentClassname() |
|
419 |
{ |
|
420 |
return getParent() != null ? getParent().getClassname() : null; |
|
421 |
} |
|
422 |
|
|
423 |
public Property getProperty(String propName) |
|
424 |
{ |
|
425 |
calculateAllProperties(); |
|
426 |
return (Property) this.propMap.get(propName); |
|
427 |
} |
|
428 |
|
|
429 |
public boolean hasProperty(String propName) |
|
430 |
{ |
|
431 |
return getProperty(propName) != null; |
|
432 |
} |
|
433 |
|
|
434 |
public Property[] getProperties() |
|
435 |
{ |
|
436 |
calculateAllProperties(); |
|
437 |
return properties; |
|
438 |
} |
|
439 |
|
|
440 |
public Widget[] getAllowedSubWidgets() |
|
441 |
{ |
|
442 |
return (Widget[]) allowedSubWidgets.toArray(new Widget[allowedSubWidgets.size()]); |
|
443 |
} |
|
444 |
|
|
445 |
public boolean isSubWidgetAllowed(Widget subWidget) |
|
446 |
{ |
|
447 |
return isSubWidgetAllowed(subWidget.getClassname()); |
|
448 |
} |
|
449 |
|
|
450 |
public boolean isSubWidgetAllowed(String classname) |
|
451 |
{ |
|
452 |
for(Iterator it = allowedSubWidgets.iterator(); it.hasNext(); ) |
|
453 |
if(classname.equals(((Widget)it.next()).getClassname())) |
|
454 |
return true; |
|
455 |
return false; |
|
456 |
} |
|
457 |
|
|
458 |
/** |
|
459 |
* Checks whether the class of this Widget is derived from the Widget |
|
460 |
* with the specified classname, by checking the parents of this |
Also available in: Unified diff