Revision 1878

View differences:

org.gvsig.scripting/tags/org.gvsig.scripting-2.3.216/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.216/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.216/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.216/org.gvsig.scripting.thing/src/main/javadoc/overview.html
1
<?xml version="1.0" encoding="UTF-8" ?>
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
<html xmlns="http://www.w3.org/1999/xhtml">
4
<head>
5
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
<title>org.gvsig.scripting package documentation</title>
7
</head>
8
<body>
9

  
10
	<p>TODO: Example library overview.</p>
11
	
12
	<p>See the <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#overviewcomment">Javadoc Tool documentation about the overview file</a></p>
13

  
14
</body>
15
</html>
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.216/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.216/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.216/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.216/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.216/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.216/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.216/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.216/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.216/org.gvsig.scripting.thing/src/main/java/utils/AWTUtils.java
1
// jEdit settings:
2
// :tabSize=4:indentSize=4:noTabs=true:folding=explicit:collapseFolds=1:
3

  
4
package utils;
5

  
6

  
7
import java.awt.AWTKeyStroke;
8
import java.awt.Color;
9
import java.awt.Component;
10
import java.awt.Dimension;
11
import java.awt.Font;
12
import java.awt.Frame;
13
import java.awt.Graphics2D;
14
import java.awt.Image;
15
import java.awt.MediaTracker;
16
import java.awt.event.InputEvent;
17
import java.awt.event.KeyEvent;
18
import java.awt.font.FontRenderContext;
19
import java.awt.font.TextLayout;
20
import java.awt.geom.Rectangle2D;
21
import java.lang.reflect.Field;
22
import java.lang.reflect.Modifier;
23
import java.net.URL;
24
import java.util.HashMap;
25
import java.util.StringTokenizer;
26
import java.util.logging.Level;
27
import java.util.logging.Logger;
28

  
29

  
30
/**
31
 * Misc helper methods for AWT that don't require Thinlet.
32
 *
33
 * @author Dirk Moebius
34
 */
35
public class AWTUtils
36
{
37

  
38
    //{{{ logging
39
    private static final Logger log = Logger.getLogger("thinletcommons");
40
    private static final boolean debug() { return log.isLoggable(Level.FINE); }
41
    //}}}
42

  
43

  
44
    private static HashMap keyDescriptions = new HashMap();
45

  
46

  
47
    static
48
    {
49
        // initialize HashMap keyDescriptions
50
        Field[] fields = KeyEvent.class.getDeclaredFields();
51
        for(int i = 0; i < fields.length; ++i)
52
        {
53
            Field field = fields[i];
54
            int modifiers = field.getModifiers();
55
            if(((modifiers & (Modifier.STATIC | Modifier.PUBLIC)) != 0)
56
                && field.getName().startsWith("VK_"))
57
            {
58
                try
59
                {
60
                    int keyCode = field.getInt(null);
61
                    String keyDescription = field.getName().substring(3);
62
                    keyDescriptions.put(new Integer(keyCode), keyDescription);
63
                }
64
                catch(IllegalAccessException e)
65
                {
66
                    log.log(Level.SEVERE, "can't get value of field " + field, e);
67
                }
68
            }
69
        }
70
    }
71

  
72

  
73
    public static String getColorString(Color c)
74
    {
75
        int red = c.getRed();
76
        int green = c.getGreen();
77
        int blue = c.getBlue();
78
        StringBuffer s = new StringBuffer("#");
79
        if(red < 10) s.append("0");
80
        s.append(Integer.toHexString(red));
81
        if(green < 10) s.append("0");
82
        s.append(Integer.toHexString(green));
83
        if(blue < 10) s.append("0");
84
        s.append(Integer.toHexString(blue));
85
        return s.toString();
86
    }
87

  
88

  
89
    /**
90
     * Returns a thinlet font description for the given font.
91
     *
92
     * @param font  the font
93
     * @return a thinlet font description such as "Serif 10 bold italic"
94
     */
95
    public static String getFontString(Font font)
96
    {
97
        StringBuffer s = new StringBuffer();
98
        s.append(font.getFamily());
99
        s.append(" ");
100
        s.append(font.getSize());
101
        if(font.isItalic())
102
            s.append(" italic");
103
        if(font.isBold())
104
            s.append(" bold");
105
        return s.toString();
106
    }
107

  
108

  
109
    /**
110
     * Returns a thinlet font description for the given font, containing only
111
     * the font properties that <i>differ</i> from the given default font.
112
     *
113
     * @param font  the font
114
     * @param defaultFont  the default font
115
     * @return a thinlet font description such as "serif 10 bold italic"
116
     */
117
    public static String getFontString(Font font, Font defaultFont)
118
    {
119
        StringBuffer s = new StringBuffer();
120
        if(!font.getFamily().equals(defaultFont.getFamily()))
121
            s.append(font.getFamily());
122
        if(font.getSize() != defaultFont.getSize())
123
        {
124
            if(s.length() > 0) s.append(' ');
125
            s.append(font.getSize());
126
        }
127
        if(font.isItalic() != defaultFont.isItalic())
128
        {
129
            if(s.length() > 0) s.append(' ');
130
            s.append("italic");
131
        }
132
        if(font.isBold() != defaultFont.isBold())
133
        {
134
            if(s.length() > 0) s.append(' ');
135
            s.append("bold");
136
        }
137
        return s.toString();
138
    }
139

  
140

  
141
    /**
142
     * Get the frame that the specified component resides in, or null if
143
     * the component has no ancestor of type <code>Frame</code>.
144
     */
145
    public static Frame getFrame(Component comp)
146
    {
147
        while(comp != null && !(Frame.class.isInstance(comp)))
148
            comp = comp.getParent();
149
        return (Frame)comp;
150
    }
151

  
152

  
153
    /**
154
     * Returns the dimension of the specified text string, if it would be
155
     * rendered with the font and the rendering context of the specified
156
     * component.
157
     */
158
    public static Dimension getBounds(String text, Component component)
159
    {
160
        Graphics2D graphics = (Graphics2D)component.getGraphics();
161
        StringTokenizer st = new StringTokenizer(text, "\n", true);
162
        Dimension dim = new Dimension(0, 0);
163
        while(st.hasMoreTokens())
164
        {
165
            String token = st.nextToken();
166
            if(token.equals("\n"))
167
                token = "W";
168
            TextLayout textLayout = new TextLayout(token, component.getFont(),
169
                (graphics != null) ? graphics.getFontRenderContext()
170
                    : new FontRenderContext(null, true, false));
171
            Rectangle2D rect = textLayout.getBounds();
172
            dim.height += (int)rect.getHeight();
173
            dim.width = Math.max(dim.width, (int)rect.getWidth());
174
        }
175
        return dim;
176
    }
177

  
178

  
179
    /**
180
     * Load an icon. Use a MediaTracker synchronizing on the specified
181
     * component to wait for the icon to load.
182
     *
183
     * @param component  the component that the MediaTracker uses to control
184
     *   the loading of the icon.
185
     * @param path  the path relative to the package path of the class of
186
     *   the component, e.g. "icons/icon.gif".
187
     */
188
    public static Image getIcon(Component component, String path)
189
    {
190
        URL url = component.getClass().getResource(path);
191
        return getIcon(component, url);
192
    }
193

  
194

  
195
    /**
196
     * Load an icon. Use a MediaTracker synchronizing on the specified
197
     * component to wait for the icon to load.
198
     *
199
     * @param component  the component that the MediaTracker uses to control
200
     *   the loading of the icon.
201
     * @param url  the URL of the icon.
202
     */
203
    public static Image getIcon(Component component, URL url)
204
    {
205
        if(debug()) log.fine("loading icon url=" + url + "...");
206

  
207
        Image icon = component.getToolkit().getImage(url);
208

  
209
        MediaTracker mediatracker = new MediaTracker(component);
210
        mediatracker.addImage(icon, 1);
211
        try
212
        {
213
            mediatracker.waitForID(1);
214
        }
215
        catch(InterruptedException e)
216
        {
217
            log.warning("loading of icon " + url + " has been interrupted!");
218
        }
219

  
220
        return icon;
221
    }
222

  
223

  
224
    /**
225
     * Given an AWTKeyStroke, returns a keystroke description that can be
226
     * parsed by <code>AWTKeyStroke.getAWTKeyStroke(String s)</code>.
227
     * <p>
228
     * Examples: "ctrl O", "alt shift F4", "altGraph Q"
229
     */
230
    public static String getAWTKeyStrokeDescription(AWTKeyStroke k)
231
    {
232
        StringBuffer buf = new StringBuffer();
233

  
234
        int mod = k.getModifiers();
235
        if((mod & InputEvent.ALT_DOWN_MASK) != 0 || (mod & InputEvent.ALT_MASK) != 0)
236
            buf.append("alt ");
237
        if((mod & InputEvent.ALT_GRAPH_DOWN_MASK) != 0 || (mod & InputEvent.ALT_GRAPH_MASK) != 0)
238
            buf.append("altGraph ");
239
        if((mod & InputEvent.META_DOWN_MASK) != 0 || (mod & InputEvent.META_MASK) != 0)
240
            buf.append("meta ");
241
        if((mod & InputEvent.CTRL_DOWN_MASK) != 0 || (mod & InputEvent.CTRL_MASK) != 0)
242
            buf.append("ctrl ");
243
        if((mod & InputEvent.SHIFT_DOWN_MASK) != 0 || (mod & InputEvent.SHIFT_MASK) != 0)
244
            buf.append("shift ");
245

  
246
        buf.append(getKeyText(k.getKeyCode()));
247

  
248
        return buf.toString();
249
    }
250

  
251

  
252
    /**
253
     * Return the key description for a key code, according to the key names
254
     * in <code>java.awt.event.KeyEvent</code>, omitting the prefix "VK_".
255
     * For example the strings returned may be "A" - "Z", "F1" - "F24" "RIGHT",
256
     * "BACK_SPACE", "DEAD_TILDE" and so on.
257
     */
258
    public static String getKeyText(int keyCode)
259
    {
260
        String desc = (String) keyDescriptions.get(new Integer(keyCode));
261
        if(desc == null)
262
        {
263
            log.warning("KeyEvent field for keyCode " + keyCode + " not found!"
264
                + " Returning default description.");
265
            return KeyEvent.getKeyText(keyCode);
266
        }
267
        else
268
            return desc;
269
    }
270

  
271
}
272

  
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.216/org.gvsig.scripting.thing/src/main/java/utils/ReaderInputStream.java
1
// jEdit settings:
2
// :tabSize=4:indentSize=4:noTabs=true:folding=explicit:collapseFolds=1:
3

  
4
package utils;
5

  
6

  
7
import java.io.IOException;
8
import java.io.InputStream;
9
import java.io.Reader;
10

  
11

  
12
/**
13
 * This class is the opposite of <code>java.io.InputStreamReader</code>: it
14
 * provides a bridge from (new) character streams (<i>Reader</i>) to (old)
15
 * byte streams (<i>InputStream</i>). It reads characters and converts them
16
 * into bytes.
17
 *
18
 * @author Dirk Moebius
19
 */
20
public class ReaderInputStream extends InputStream
21
{
22

  
23
    protected Reader reader;
24

  
25

  
26
    public ReaderInputStream(Reader reader)
27
    {
28
        this.reader = reader;
29
    }
30

  
31

  
32
    public int available() throws IOException
33
    {
34
        return reader.ready() ? 1 : 0;
35
    }
36

  
37

  
38
    public void close() throws IOException
39
    {
40
        reader.close();
41
    }
42

  
43

  
44
    public void mark(int readAheadLimit)
45
    {
46
        try { reader.mark(readAheadLimit); } catch(IOException ignore) {}
47
    }
48

  
49

  
50
    public boolean markSupported()
51
    {
52
        return reader.markSupported();
53
    }
54

  
55

  
56
    public int read() throws IOException
57
    {
58
        return reader.read();
59
    }
60

  
61

  
62
    public void reset() throws IOException
63
    {
64
        reader.reset();
65
    }
66

  
67

  
68
    public long skip(long n) throws IOException
69
    {
70
        return reader.skip(n);
71
    }
72

  
73
}
74

  
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.216/org.gvsig.scripting.thing/src/main/java/utils/package.html
1
<body>
2
<p>
3
This package contains some common utilities not dependent on Thinlet.
4
</p>
5
</body>
6

  
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.216/org.gvsig.scripting.thing/src/main/java/thinletcommons/package.html
1
<body>
2
<p>
3
This package contains some common gui widgets such as a directory chooser,
4
a font chooser, a generic message dialog box etc.
5
</p>
6

  
7
<p>
8
All widgets are Thinlet widgets.
9
</p>
10

  
11
<p>
12
Note that the <code>thinletcommons</code> package does not depend on the
13
<code>thing</code> package, so these widgets could be used in other
14
applications.
15
</p>
16
</body>
17

  
org.gvsig.scripting/tags/org.gvsig.scripting-2.3.216/org.gvsig.scripting.thing/src/main/java/thinletcommons/LoggingThinlet.java
1
// jEdit settings:
2
// :tabSize=4:indentSize=4:noTabs=true:folding=explicit:collapseFolds=1:
3

  
4
package thinletcommons;
5

  
6

  
7
import java.util.logging.Level;
8
import java.util.logging.Logger;
9

  
10
import thinlet.Thinlet;
11

  
12

  
13
/**
14
 * A <code>Thinlet</code> component that logs exceptions to the JDK logging
15
 * facility.
16
 *
17
 * @author Dirk Moebius
18
 */
19
public class LoggingThinlet extends Thinlet
20
{
21

  
22
    //{{{ logging
23
    private static final Logger log = Logger.getLogger("thinletcommons");
24
    private static final boolean debug() { return log.isLoggable(Level.FINE); }
25
    //}}}
26

  
27

  
28
    public LoggingThinlet()
29
    {
30
        super();
31
    }
32

  
33

  
34
    /**
35
     * Log exceptions to a logger named "thinletcommons" with log level SEVERE.
36
     *
37
     * @param throwable the thrown exception by the bussiness logic
38
     */
39
    protected void handleException(Throwable throwable)
40
    {
41
        log.log(Level.SEVERE, "Exception in business logic", throwable);
42
        //throw new RuntimeException("Exception in business logic", throwable);
43
    }
44

  
45

  
46
}
47

  
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff