Revision 1126

View differences:

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
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff