I'm using SmartGWT 2.4. I'm setting up a form for users to enter news items and I'm trying to emulate something like what Quora has in regards to adding categories. To accomplish this, I've created a hidden SelectItem to store the actual values, a ToolStrip to contains buttons for added categories, and an IPickTreeItem with the categories datasource for the use to select one of our hierarchical categories to add.
When the user selects a category from the IPickTreeItem, I want to add the selected id to the hidden SelectItem (not a problem) and add a Button to the ToolStrip with the name of the selected category. That last is the major problem. I can't seem to get the selected category name.
I've tried catching both ChangeEvent and ChangedEvent. I expected that either getDisplayValue() or getSelectedRecord() would give me what I need, but the first comes back as an empty String and the second comes back as null.
Here's the code that I'm using:
When the user selects a category from the IPickTreeItem, I want to add the selected id to the hidden SelectItem (not a problem) and add a Button to the ToolStrip with the name of the selected category. That last is the major problem. I can't seem to get the selected category name.
I've tried catching both ChangeEvent and ChangedEvent. I expected that either getDisplayValue() or getSelectedRecord() would give me what I need, but the first comes back as an empty String and the second comes back as null.
Here's the code that I'm using:
Code:
DataSource ds = new CategoryDataSourceFactory().getInstance();
CanvasItem canvasItem = new CanvasItem("", "Categories");
canvasItem.setTitleOrientation(TitleOrientation.TOP);
canvasItem.setEndRow(true);
canvasItem.setShouldSaveValue(false);
final ToolStrip categoriesToolStrip = new ToolStrip();
categoriesToolStrip.setVisible(false);
categoriesToolStrip.setVertical(false);
canvasItem.setCanvas(categoriesToolStrip);
final SelectItem categoriesSelectItem = new SelectItem("categories", "");
categoriesSelectItem.setVisible(false);
categoriesSelectItem.setShowTitle(false);
final IPickTreeItem categoryPickTreeItem = new IPickTreeItem("");
categoryPickTreeItem.setShouldSaveValue(false);
categoryPickTreeItem.setDisplayField("name");
categoryPickTreeItem.setValueField("id");
categoryPickTreeItem.setLoadDataOnDemand(false);
ds.fetchData();
categoryPickTreeItem.addChangedHandler(new ChangedHandler() {
public void onChanged(ChangedEvent event) {
final String selectedItemId = event.getValue().toString();
String selectedItemName = categoryPickTreeItem.getDisplayValue();
String[] currentValues = categoriesSelectItem.getValues();
if (Arrays.binarySearch(currentValues, selectedItemId) == -1){
String[] updatedValues = new String[currentValues.length + 1];
for (int i = 0; i < currentValues.length; i++){
updatedValues[i] = currentValues[i];
}
updatedValues[currentValues.length] = selectedItemId;
categoriesSelectItem.setValues(updatedValues);
final ToolStripButton categoryButton = new ToolStripButton(selectedItemName);
categoryButton.setIconOrientation("right");
categoryButton.setIcon("http://spike.wharton.upenn.edu/images/delete_x.png");
categoriesToolStrip.addButton(categoryButton);
categoryButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String[] currentValues = categoriesSelectItem.getValues();
String updatedValues[] = new String[currentValues.length - 1];
boolean foundMatch = false;
for (int i = 0; i < currentValues.length; i++){
if (foundMatch){
updatedValues[i - 1] = currentValues[i];
} else{
if (currentValues[i].equals(selectedItemId)){
foundMatch = true;
} else{
updatedValues[i] = currentValues[i];
}
}
}
categoriesSelectItem.setValues(updatedValues);
categoryButton.setVisible(false);
}
});
categoryPickTreeItem.setValue((Object) null);
}
}
});
categoryPickTreeItem.setEmptyDisplayValue("Select Category");
categoryPickTreeItem.setShowTitle(false);
categoryPickTreeItem.setDataSource(ds);
categoryPickTreeItem.setEndRow(true);
form.setItems(canvasItem, categoriesSelectItem, categoryPickTreeItem);
Comment