You have a good solution?
Entry Point Class code
Code:
package com.smartgwt.sample.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.smartgwt.client.bean.BeanFactory;
import com.smartgwt.client.rpc.LoadScreenCallback;
import com.smartgwt.client.rpc.RPCManager;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Button;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class BuiltInDS implements EntryPoint {
@Override
public void onModuleLoad() {
// Make all form items (including CKEditorItem) reflectable:
GWT.create(BeanFactory.FormItemMetaFactory.class);
final Canvas layout = new Canvas();
RPCManager.loadScreen("ckeditor", new LoadScreenCallback() {
@Override
public void execute() {
Button saveButton = (Button) this.getScreen().getByLocalId("saveButton");
final DynamicForm saveForm = (DynamicForm) this.getScreen().getByLocalId("saveForm");
saveButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
/* if (Boolean.FALSE.equals((Boolean)saveForm.getValue("inStock")) &&
saveForm.getValue("nextShipment") == null) {
SC.warn("New stock items which are not already stocked must have a Stock Date");
} */
Object obj = saveForm.getValue("testItem");
if ( null == obj ) {
obj = saveForm.getValue("default");
}
if ( null != obj ) {
SC.say( obj.toString() );
} else {
SC.say(" can not get the value ");
}
}
});
layout.addChild(this.getScreen());
}
});
layout.draw();
}
}
ckeditor ui.xml's code
Code:
<VLayout xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
ID="componentsLayout" autoDraw="false">
<members>
<DynamicForm ID="saveForm" dataSource="supplyItem" autoDraw="false" width="800" height="320">
<items>
<item name="testItem" editorType="com.smartgwt.sample.client.CKEditorItem"
width="800" titleWidth="100" />
</items>
</DynamicForm>
<Button ID="saveButton" title="Save" autoDraw="false" />
</members>
</VLayout>
CkeditorItem's code
Code:
package com.smartgwt.sample.client;
import com.smartgwt.client.widgets.form.fields.CanvasItem;
public class CKEditorItem extends CanvasItem {
private CKEditor ckeCanvas;
public CKEditorItem() {
super("testItem");
ckeCanvas = new CKEditor("testItem");
this.setCanvas(ckeCanvas);
setShouldSaveValue( true );
System.out.println( "default" );
}
public CKEditorItem(String name) {
super(name);
ckeCanvas = new CKEditor(name);
this.setCanvas(ckeCanvas);
setShouldSaveValue( true );
}
public CKEditorItem(String name, String title) {
super( name, title );
ckeCanvas = new CKEditor(name);
this.setCanvas(ckeCanvas);
setShouldSaveValue( true );
}
@Override
public void setWidth(String width) {
super.setWidth(width);
ckeCanvas.setWidth(width);
}
@Override
public void setWidth(int width) {
super.setWidth(width);
ckeCanvas.setWidth(width);
}
@Override
public void setHeight(String height) {
super.setHeight(height);
ckeCanvas.setHeight(height);
}
@Override
public void setHeight(int height) {
super.setHeight(height);
ckeCanvas.setHeight(height);
}
@Override
public Object getValue() {
return getCKEditorValue(ckeCanvas.getID()+"_ta");
}
private native String getCKEditorValue(String ckEditorId)/*-{
if($wnd.CKEDITOR.instances[ckEditorId]){
return $wnd.CKEDITOR.instances[ckEditorId].getData();
}
return null;
}-*/;
@Override
public void setValue(String value) {
super.setValue(value);
if(ckeCanvas.isLoaded())
setCKEditorValue(ckeCanvas.getID()+"_ta", value);
else
ckeCanvas.setContents(value);
}
private native void setCKEditorValue(String ckEditorId,String value)/*-{
if($wnd.CKEDITOR.instances[ckEditorId]){
$wnd.CKEDITOR.instances[ckEditorId].setData(value);
}
}-*/;
}
Leave a comment: