|
Lines 18-60
Link Here
|
| 18 |
import org.eclipse.rwt.internal.lifecycle.JSConst; |
18 |
import org.eclipse.rwt.internal.lifecycle.JSConst; |
| 19 |
import org.eclipse.rwt.internal.service.ContextProvider; |
19 |
import org.eclipse.rwt.internal.service.ContextProvider; |
| 20 |
import org.eclipse.rwt.lifecycle.*; |
20 |
import org.eclipse.rwt.lifecycle.*; |
|
|
21 |
import org.eclipse.swt.SWT; |
| 21 |
import org.eclipse.swt.events.SelectionEvent; |
22 |
import org.eclipse.swt.events.SelectionEvent; |
| 22 |
import org.eclipse.swt.graphics.Point; |
23 |
import org.eclipse.swt.graphics.Point; |
| 23 |
import org.eclipse.swt.internal.widgets.ILinkAdapter; |
24 |
import org.eclipse.swt.internal.widgets.ILinkAdapter; |
|
|
25 |
import org.eclipse.swt.internal.widgets.Props; |
| 24 |
import org.eclipse.swt.widgets.*; |
26 |
import org.eclipse.swt.widgets.*; |
| 25 |
|
27 |
|
| 26 |
/** |
28 |
/** |
| 27 |
* Life-cycle adapter for the Link widget |
29 |
* Life-cycle adapter for the Link widget |
| 28 |
*/ |
30 |
*/ |
| 29 |
public class LinkLCA extends AbstractWidgetLCA { |
31 |
public class LinkLCA extends AbstractWidgetLCA { |
|
|
32 |
|
| 33 |
//Constants for JS functions names |
| 34 |
private static final String JS_FUNC_ADDTEXT = "addText"; |
| 35 |
private static final String JS_FUNC_ADDLINK = "addLink"; |
| 36 |
private static final String JS_FUNC_APPLYTEXT = "applyText"; |
| 37 |
private static final String JS_FUNC_CLEAR = "clear"; |
| 30 |
|
38 |
|
| 31 |
private static final String QX_TYPE = "qx.ui.layout.HorizontalBoxLayout"; |
39 |
//Property names for preserveValues |
| 32 |
|
|
|
| 33 |
// private static final String TYPE_POOL_ID = LinkLCA.class.getName(); |
| 34 |
|
| 35 |
private static final String JS_LINK_UTIL = "org.eclipse.swt.LinkUtil"; |
| 36 |
private static final String JS_FUNC_INIT = JS_LINK_UTIL + ".init"; |
| 37 |
private static final String JS_FUNC_ADD_LINK = JS_LINK_UTIL + ".addLink"; |
| 38 |
private static final String JS_FUNC_ADD_TEXT = JS_LINK_UTIL + ".addText"; |
| 39 |
private static final String JS_FUNC_ADD_STATE = JS_LINK_UTIL + ".addState"; |
| 40 |
private static final String JS_FUNC_REMOVE_STATE |
| 41 |
= JS_LINK_UTIL + ".removeState"; |
| 42 |
private static final String JS_FUNC_CLEAR = JS_LINK_UTIL + ".clear"; |
| 43 |
private static final String JS_FUNC_DESTROY = JS_LINK_UTIL + ".destroy"; |
| 44 |
private static final String JS_FUNC_SET_SELECTION_LISTENER |
| 45 |
= JS_LINK_UTIL + ".setSelectionListener"; |
| 46 |
|
| 47 |
private static final String PROP_TEXT = "text"; |
40 |
private static final String PROP_TEXT = "text"; |
| 48 |
private static final String PROP_VARIANT = "variant"; |
|
|
| 49 |
static final String PROP_SEL_LISTENER = "selectionListener"; |
| 50 |
|
41 |
|
| 51 |
public void preserveValues( final Widget widget ) { |
42 |
public void preserveValues( final Widget widget ) { |
| 52 |
Link link = ( Link )widget; |
43 |
Link link = ( Link )widget; |
| 53 |
ControlLCAUtil.preserveValues( link ); |
44 |
ControlLCAUtil.preserveValues( link ); |
| 54 |
IWidgetAdapter adapter = WidgetUtil.getAdapter( widget ); |
45 |
IWidgetAdapter adapter = WidgetUtil.getAdapter( widget ); |
| 55 |
adapter.preserve( PROP_TEXT, link.getText() ); |
46 |
adapter.preserve( PROP_TEXT, link.getText() ); |
| 56 |
Boolean newValue = Boolean.valueOf( SelectionEvent.hasListener( link ) ); |
47 |
boolean hasListeners = SelectionEvent.hasListener( link ); |
| 57 |
adapter.preserve( PROP_SEL_LISTENER, newValue ); |
48 |
adapter.preserve( Props.SELECTION_LISTENERS, |
|
|
49 |
Boolean.valueOf( hasListeners ) ); |
| 58 |
WidgetLCAUtil.preserveCustomVariant( link ); |
50 |
WidgetLCAUtil.preserveCustomVariant( link ); |
| 59 |
} |
51 |
} |
| 60 |
|
52 |
|
|
Lines 68-77
Link Here
|
| 68 |
public void renderInitialization( final Widget widget ) throws IOException { |
60 |
public void renderInitialization( final Widget widget ) throws IOException { |
| 69 |
Link link = ( Link )widget; |
61 |
Link link = ( Link )widget; |
| 70 |
JSWriter writer = JSWriter.getWriterFor( link ); |
62 |
JSWriter writer = JSWriter.getWriterFor( link ); |
| 71 |
writer.newWidget( QX_TYPE ); |
63 |
writer.newWidget( "org.eclipse.swt.widgets.Link" ); |
| 72 |
writer.set( JSConst.QX_FIELD_APPEARANCE, "link" ); |
|
|
| 73 |
Object[] args = new Object[] { widget }; |
| 74 |
writer.callStatic( JS_FUNC_INIT, args ); |
| 75 |
ControlLCAUtil.writeStyleFlags( link ); |
64 |
ControlLCAUtil.writeStyleFlags( link ); |
| 76 |
} |
65 |
} |
| 77 |
|
66 |
|
|
Lines 80-92
Link Here
|
| 80 |
ControlLCAUtil.writeChanges( link ); |
69 |
ControlLCAUtil.writeChanges( link ); |
| 81 |
writeSelectionListener( link ); |
70 |
writeSelectionListener( link ); |
| 82 |
writeText( link ); |
71 |
writeText( link ); |
| 83 |
writeCustomVariant( link ); |
72 |
WidgetLCAUtil.writeCustomVariant( link ); |
| 84 |
} |
73 |
} |
| 85 |
|
74 |
|
| 86 |
public void renderDispose( final Widget widget ) throws IOException { |
75 |
public void renderDispose( final Widget widget ) throws IOException { |
| 87 |
JSWriter writer = JSWriter.getWriterFor( widget ); |
76 |
JSWriter writer = JSWriter.getWriterFor( widget ); |
| 88 |
Object[] args = new Object[]{ widget }; |
|
|
| 89 |
writer.callStatic( JS_FUNC_DESTROY, args ); |
| 90 |
writer.dispose(); |
77 |
writer.dispose(); |
| 91 |
} |
78 |
} |
| 92 |
|
79 |
|
|
Lines 94-102
Link Here
|
| 94 |
throws IOException |
81 |
throws IOException |
| 95 |
{ |
82 |
{ |
| 96 |
ControlLCAUtil.resetStyleFlags(); |
83 |
ControlLCAUtil.resetStyleFlags(); |
| 97 |
JSWriter writer = JSWriter.getWriterForResetHandler(); |
|
|
| 98 |
Object[] args = new Object[]{ JSWriter.WIDGET_REF }; |
| 99 |
writer.callStatic( JS_FUNC_CLEAR, args ); |
| 100 |
} |
84 |
} |
| 101 |
|
85 |
|
| 102 |
public String getTypePoolId( final Widget widget ) { |
86 |
public String getTypePoolId( final Widget widget ) { |
|
Lines 108-120
Link Here
|
| 108 |
private static void writeSelectionListener( final Link link ) |
92 |
private static void writeSelectionListener( final Link link ) |
| 109 |
throws IOException |
93 |
throws IOException |
| 110 |
{ |
94 |
{ |
| 111 |
Boolean newValue = Boolean.valueOf( SelectionEvent.hasListener( link ) ); |
95 |
boolean hasListener = SelectionEvent.hasListener( link ); |
| 112 |
Boolean defValue = Boolean.FALSE; |
96 |
Boolean newValue = Boolean.valueOf( hasListener ); |
| 113 |
String prop = PROP_SEL_LISTENER; |
97 |
String prop = Props.SELECTION_LISTENERS; |
| 114 |
if( WidgetLCAUtil.hasChanged( link, prop, newValue, defValue ) ) { |
98 |
if( WidgetLCAUtil.hasChanged( link, prop, newValue, Boolean.FALSE ) ) { |
| 115 |
JSWriter writer = JSWriter.getWriterFor( link ); |
99 |
JSWriter writer = JSWriter.getWriterFor( link ); |
| 116 |
Object[] args = new Object[]{ link, newValue }; |
100 |
writer.set( "hasSelectionListener", newValue ); |
| 117 |
writer.callStatic( JS_FUNC_SET_SELECTION_LISTENER, args ); |
|
|
| 118 |
} |
101 |
} |
| 119 |
} |
102 |
} |
| 120 |
|
103 |
|
|
Lines 122-129
Link Here
|
| 122 |
String newValue = link.getText(); |
105 |
String newValue = link.getText(); |
| 123 |
if( WidgetLCAUtil.hasChanged( link, PROP_TEXT, newValue, "" ) ) { |
106 |
if( WidgetLCAUtil.hasChanged( link, PROP_TEXT, newValue, "" ) ) { |
| 124 |
JSWriter writer = JSWriter.getWriterFor( link ); |
107 |
JSWriter writer = JSWriter.getWriterFor( link ); |
| 125 |
Object[] args = new Object[]{ link }; |
108 |
writer.call( JS_FUNC_CLEAR, null ); |
| 126 |
writer.callStatic( JS_FUNC_CLEAR, args ); |
|
|
| 127 |
ILinkAdapter adapter |
109 |
ILinkAdapter adapter |
| 128 |
= ( ILinkAdapter )link.getAdapter( ILinkAdapter.class ); |
110 |
= ( ILinkAdapter )link.getAdapter( ILinkAdapter.class ); |
| 129 |
String displayText = adapter.getDisplayText(); |
111 |
String displayText = adapter.getDisplayText(); |
|
Lines 147-152
Link Here
|
| 147 |
if( pos < length ) { |
129 |
if( pos < length ) { |
| 148 |
writeNormalText( link, displayText.substring( pos, length ) ); |
130 |
writeNormalText( link, displayText.substring( pos, length ) ); |
| 149 |
} |
131 |
} |
|
|
132 |
writeApplyText( link ); |
| 150 |
} |
133 |
} |
| 151 |
} |
134 |
} |
| 152 |
|
135 |
|
|
Lines 155-166
Link Here
|
| 155 |
{ |
138 |
{ |
| 156 |
JSWriter writer = JSWriter.getWriterFor( link ); |
139 |
JSWriter writer = JSWriter.getWriterFor( link ); |
| 157 |
Object[] args = new Object[] { |
140 |
Object[] args = new Object[] { |
| 158 |
link, |
|
|
| 159 |
// TODO [rst] mnemonics are already parsed by Link#parse() |
141 |
// TODO [rst] mnemonics are already parsed by Link#parse() |
| 160 |
// Revise when we're going to support underline once |
142 |
// Revise when we're going to support underline once |
| 161 |
WidgetLCAUtil.escapeText( text, false ) |
143 |
WidgetLCAUtil.escapeText( text, false ) |
| 162 |
}; |
144 |
}; |
| 163 |
writer.callStatic( JS_FUNC_ADD_TEXT, args ); |
145 |
writer.call( JS_FUNC_ADDTEXT, args ); |
| 164 |
} |
146 |
} |
| 165 |
|
147 |
|
| 166 |
private static void writeLinkText( final Link link, |
148 |
private static void writeLinkText( final Link link, |
|
Lines 170-182
Link Here
|
| 170 |
{ |
152 |
{ |
| 171 |
JSWriter writer = JSWriter.getWriterFor( link ); |
153 |
JSWriter writer = JSWriter.getWriterFor( link ); |
| 172 |
Object[] args = new Object[] { |
154 |
Object[] args = new Object[] { |
| 173 |
link, |
|
|
| 174 |
// TODO [rst] mnemonics are already parsed by Link#parse() |
155 |
// TODO [rst] mnemonics are already parsed by Link#parse() |
| 175 |
// Revise when we're going to support underline once |
156 |
// Revise when we're going to support underline once |
| 176 |
WidgetLCAUtil.escapeText( text, false ), |
157 |
WidgetLCAUtil.escapeText( text, false ), |
| 177 |
new Integer( index ) |
158 |
new Integer( index ) |
| 178 |
}; |
159 |
}; |
| 179 |
writer.callStatic( JS_FUNC_ADD_LINK, args ); |
160 |
writer.call( JS_FUNC_ADDLINK, args ); |
|
|
161 |
} |
| 162 |
|
| 163 |
private static void writeApplyText( final Link link ) throws IOException { |
| 164 |
JSWriter writer = JSWriter.getWriterFor( link ); |
| 165 |
writer.call( JS_FUNC_APPLYTEXT, null ); |
| 180 |
} |
166 |
} |
| 181 |
|
167 |
|
| 182 |
private static void processSelectionEvent( final Link link ) { |
168 |
private static void processSelectionEvent( final Link link ) { |
|
Lines 197-219
Link Here
|
| 197 |
} |
183 |
} |
| 198 |
} |
184 |
} |
| 199 |
} |
185 |
} |
| 200 |
|
|
|
| 201 |
private static void writeCustomVariant( final Link link ) |
| 202 |
throws IOException |
| 203 |
{ |
| 204 |
IWidgetAdapter adapter = WidgetUtil.getAdapter( link ); |
| 205 |
String oldValue = ( String )adapter.getPreserved( PROP_VARIANT ); |
| 206 |
String newValue = WidgetUtil.getVariant( link ); |
| 207 |
if( WidgetLCAUtil.hasChanged( link, PROP_VARIANT, newValue, null ) ) { |
| 208 |
JSWriter writer = JSWriter.getWriterFor( link ); |
| 209 |
Object[] args = new Object[] { link, "variant_" + oldValue }; |
| 210 |
if( oldValue != null ) { |
| 211 |
writer.callStatic( JS_FUNC_REMOVE_STATE, args ); |
| 212 |
} |
| 213 |
if( newValue != null ) { |
| 214 |
args = new Object[] { link, "variant_" + newValue }; |
| 215 |
writer.callStatic( JS_FUNC_ADD_STATE, args ); |
| 216 |
} |
| 217 |
} |
| 218 |
} |
| 219 |
} |
186 |
} |