I still seem to be struggling with basic UI component drawing behavior. I'm creating a Window and using addItem() to add a VLayout to the window. I'm calling setMembers() to add three Canvases to the layout, an HTMLPane, an HLayout with a few IButtons in it and a ListGrid. I then call setData() on the ListGrid and call show() on the Window.
Everything appears in the Window except the ListGrid. If I drag resize the Window just slightly the ListGrid appears and afterward everything works fine. What am I missing?
Here is the class that creates and shows the window.
Everything appears in the Window except the ListGrid. If I drag resize the Window just slightly the ListGrid appears and afterward everything works fine. What am I missing?
Here is the class that creates and shows the window.
Code:
package com.islandpacific.gui.client;
import java.util.ArrayList;
import java.util.List;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.DataSourceField;
import com.smartgwt.client.data.RecordList;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.SelectionAppearance;
import com.smartgwt.client.types.SelectionStyle;
import com.smartgwt.client.widgets.HTMLPane;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.events.CloseClickHandler;
import com.smartgwt.client.widgets.events.CloseClientEvent;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
public class CommonPrepack {
private static IpListGrid grid = null;
private static Window window = null;
/**
* Displays a prepack definition from the common SKU database and lets
* the user confirm the details. They also have the option of changing
* the default value for selected fields. If they continue, any items
* not already defined in this database will be defined in the item master
* and the default prepack contents will be returned to the PoItemEditor
* so it can continue letting the user define the prepack.
*
* @param message A message to display above the prepack contents grid.
* @param csComponents The common SKU component items with default values.
* @param callback A callback to inform when the user continues or cancels.
*/
public static void confirm(String message, RecordList csComponents,
final IpBooleanCallback callback) {
if (window==null) {
window = new Window();
window.setTitle("Confirm Creation of Common Prepack");
window.setIsModal(true);
window.setShowModalMask(true);
window.setAutoSize(true);
window.setAutoCenter(true);
window.setKeepInParentRect(true);
window.setPadding(5);
window.setCanDragResize(true);
window.setShowCloseButton(false);
window.setShowMinimizeButton(false);
window.setShowMaximizeButton(true);
window.setShowHeaderIcon(true);
window.setHeaderIcon("customimages/prepack-icon.png", 16, 16);
window.setHeight(500);
window.setWidth(600);
window.addCloseClickHandler(new CloseClickHandler() {
@Override
public void onCloseClick(CloseClientEvent event) {
window.hide();
window.destroy();
callback.onFalse();
}
});
HTMLPane msgPane = new HTMLPane();
msgPane.setContents(message +
"<p>Confirm the pack details below and press OK to continue.");
msgPane.setWidth100();
msgPane.setHeight(100);
msgPane.setOverflow(Overflow.VISIBLE);
IButton okButton = new IButton("OK");
okButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// Define all undefined items in the item master file first
// and then return a list of PoPackContents records.
callback.onTrue();
}
});
IButton cancelButton = new IButton("Cancel");
cancelButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
window.hide();
window.destroy();
callback.onFalse();
}
});
IButton editButton = new IButton("Edit Selected Items");
editButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
grid.editSelectedRecords();
}
});
editButton.setAutoFit(true);
HLayout buttonLayout = new HLayout(10);
buttonLayout.setMembers(okButton, cancelButton, editButton);
buttonLayout.setAutoHeight();
buttonLayout.setWidth100();
VLayout layout = new VLayout(10);
layout.setHeight100();
layout.setWidth100();
layout.setMargin(10);
layout.setMembers(msgPane, buttonLayout, getGrid());
window.addItem(layout);
}
getGrid().setData(csComponents);
window.show();
}
private static IpListGrid getGrid() {
if (grid==null) {
grid = new IpListGrid("CommonPrepack.grid") {
@Override
protected boolean canEditCell(int rowNum, int colNum) {
// Get the grid record and column name.
ListGridRecord rec = getRecord(rowNum);
String colName = getFieldName(colNum);
// If the SKU already exists in this database, the row cannot be edited.
String csNewSKU = rec.getAttribute("csNewSKU");
if ("N".equals(csNewSKU))
return false;
// Otherwise, only selected fields can be edited.
else if ("IDES".equals(colName)
|| "ISDS".equals(colName)
|| "IVST".equals(colName)
|| "IVNC".equals(colName)
|| "IRET".equals(colName)
|| colName.startsWith("IATT"))
return true;
else
return false;
}
};
// Set the data source and other grid attributes.
DataSource commonSKUDefaultsDS = DataSource.get(IslandPacificDSConstants.DATASOURCE_CommonSKUDefaults);
grid.setDataSource(commonSKUDefaultsDS);
grid.setWidth100();
grid.setHeight100();
// Let the user select multiple records to update them as a group
grid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
grid.setSelectionType(SelectionStyle.MULTIPLE);
// Set the list of fields.
List fields = new ArrayList<ListGridField>();
fields.add(new ListGridField("ItemNumber"));
fields.add(new ListGridField("COMPQTY"));
fields.add(new ListGridField("IDES"));
fields.add(new ListGridField("ISDS"));
fields.add(new ListGridField("IVST"));
fields.add(new ListGridField("IVNC"));
fields.add(new ListGridField("IRET"));
// Add any required item attributes.
for (DataSourceField dsField : commonSKUDefaultsDS.getFields()) {
if (dsField.getName().startsWith("IATT") && dsField.getRequired())
fields.add(new ListGridField(dsField.getName()));
}
ListGridField[] fieldsArray = new ListGridField[fields.size()];
grid.setFields((ListGridField[]) fields.toArray(fieldsArray));
// Restore the user's grid settings.
grid.loadGridSettingsForCurrentUser();
}
return grid;
}
}
Comment