Hi, I'm trying out the CanvasItem APIs:
In code:
1 DataSource created which is attached to a ValuesManager which holds a form and a grid.
Issues:
* When entering edit mode in the grid, the CanvasItem in the form suddenly disappears. I think I don't reuse the same instance, isn't that right?
* Showcase sample says to do ((CanvasItem) item).setCanvas(innerPane), but item appears to be a TextItem instead of a CanvasItem.
I tried to do the same myself (setCanvasWorkaround), but this gives a warning.
Standalone test case:
	
thanks,
SmartGWT EE 26-07-2011
					In code:
1 DataSource created which is attached to a ValuesManager which holds a form and a grid.
Issues:
* When entering edit mode in the grid, the CanvasItem in the form suddenly disappears. I think I don't reuse the same instance, isn't that right?
* Showcase sample says to do ((CanvasItem) item).setCanvas(innerPane), but item appears to be a TextItem instead of a CanvasItem.
I tried to do the same myself (setCanvasWorkaround), but this gives a warning.
Standalone test case:
Code:
	
	public class CanvsTst implements EntryPoint {
	public void onModuleLoad() {
		RootPanel.get().add(getViewPanel());
	}
	private static final String FIELD1 = "field1";
	private static final String FIELD2 = "field2";
	public Canvas getViewPanel() {
		MyRecord record1 = new MyRecord(1);
		MyRecord record2 = new MyRecord(2);
		MyRecord record3 = new MyRecord(3);
		VLayout container = new VLayout();
		container.setWidth("50%");
		container.setHeight("50%");
		DataSourceField field1 = new DataSourceField();
		field1.setTitle(FIELD1);
		field1.setName(FIELD1);
		field1.setEditorType(new TextItem(FIELD1));
		DataSourceField field2 = new DataSourceField();
		field2.setName(FIELD2);
		field2.setTitle(FIELD2);
		field2.setEditorType(new ListGridItem(FIELD2));
		DataSource dataSource = new DataSource();
		dataSource.setClientOnly(true);
		dataSource.setFields(field1, field2);
		DynamicForm form = new DynamicForm();
		form.setWidth(450);
		form.setHeight(100);
		form.setDataPath("/form");
		ValuesManager vm = new ValuesManager();
		vm.setDataSource(dataSource);
		vm.setDisableValidation(true);
		vm.addMember(form);
		vm.setValue("/form", record1);
		vm.setValue("/grid", new Record[] { record1, record2, record3 });
		ListGrid grid = new ListGrid();
		grid.setWidth100();
		grid.setHeight(200);
		grid.setCanEdit(true);
		grid.setValuesManager(vm);
		grid.setDataPath("/grid");
		container.addMember(form);
		container.addMember(grid);
		return container;
	}
	public class ListGridItem extends CanvasItem {
		ListGridItem(String name) {
			super(name);
			setShouldSaveValue(true);
			setHeight("22px");
			addShowValueHandler(new ShowValueHandler() {
				public void onShowValue(ShowValueEvent event) {
					Object value = event.getDataValue();
					if (value != null) {
						CanvasItem item = (CanvasItem) event.getSource();
						HTMLPane innerPane = (HTMLPane) item.getCanvas();
						innerPane.setContents("==> " + value);
					}
				}
			});
			setInitHandler(new FormItemInitHandler() {
				public void onInit(FormItem item) {
					HTMLPane innerPane = new HTMLPane();
					innerPane.setContents("HTMLPane from onInit");
					// 1.___
					// ((CanvasItem) item).setCanvas(innerPane);
					/*
					 * Results in: java.lang.ClassCastException
					 * com.smartgwt.client.widgets.form.fields.TextItem
					 */
					// 2.___
					// CanvsTst.setCanvasWorkaround(item, innerPane);
					/*
					 * Workaround: set canvas attribute anyways Result in: [ERROR]
					 * WARN:CanvasItem:isc_CanvasItem_1:Observer: [CanvasItem ID:isc_CanvasItem_1
					 * name:field2] is already observing method '$lf' on object '[HTMLPane
					 * ID:isc_HTMLPane_0]', ignoring
					 * 
					 * + value is not shown in the form and is only shown on the second edit of a
					 * grid row
					 */
				}
			});
			HTMLPane innerPane = new HTMLPane();
			innerPane.setBackgroundColor("green");
			innerPane.setContents("HTMLPane from constructor");
			setCanvas(innerPane);
			/*
			 * In no setCanvas is performed in the constructor: [ERROR]
			 * WARN:CanvasItem:isc_CanvasItem_0:CanvasItem: field2 defined with no canvas property -
			 * creating a default canvas for this item.
			 */
		}
	};
	public class MyRecord extends Record {
		public MyRecord(int number) {
			super();
			setAttribute(FIELD1, FIELD1 + "_value_" + number);
			setAttribute(FIELD2, FIELD2 + "_value_" + number);
		}
	}
	public static void setCanvasWorkaround(FormItem item, Canvas canvas) {
		item.setAttribute("canvas", canvas == null ? null : canvas.getOrCreateJsObj());
	}
}
thanks,
SmartGWT EE 26-07-2011

Comment