boolean someFieldSelected = numSelected > 0;
boolean multipleFieldsSelected = numSelected > 1;
FieldWidget first = someFieldSelected ? (FieldWidget)selectedFields.get(0)
: null;
DataSource ds = report.getDataSource();
// Edit menu
Section s = (first == null) ? null : first.getSectionWidget().getSection();
cutItem.setEnabled(someFieldSelected);
copyItem.setEnabled(someFieldSelected);
pasteItem.setEnabled(!Clipboard.instance().isEmpty());
delSelectionItem.setEnabled(someFieldSelected);
delGroupItem.setEnabled(someFieldSelected && report.isInsideGroup(s));
delSectionItem.setEnabled(someFieldSelected && !report.isOneOfAKind(s));
// Insert menu
if (numSelected == 1) { // One field is selected
// Only enable aggregates if the selected field is a field
// for which aggregates make sense.
aggrItem.setEnabled(first.getField().canBeAggregated());
}
else
aggrItem.setEnabled(false);
sectItem.setEnabled(someFieldSelected);
subreportItem.setEnabled(ds.canJoinTables());
// Format menu
if (someFieldSelected) {
// Only enable if some field is formattable
boolean enable = someSelectedFieldUsesFormat();
formatItem.setEnabled(enable);
}
else
formatItem.setEnabled(false);
borderItem.setEnabled(someFieldSelected);
boundsItem.setEnabled(someFieldSelected);
alignSubmenu.setEnabled(multipleFieldsSelected);
sizeSubmenu.setEnabled(multipleFieldsSelected);
// Database menu
tableJoinItem.setEnabled(ds.canJoinTables());
sqlQueryTextItem.setEnabled(ds.isSQLGenerated());
connectionItem.setEnabled(ds.isConnectionEditable());
// Report menu
runItem.setEnabled(ds.canRunReports());
exportItem.setEnabled(ds.canRunReports());
selectRecordsItem.setEnabled(ds.areRecordsSelectable());
sortByItem.setEnabled(ds.areRecordsSortable());
groupByItem.setEnabled(ds.canGroupRecords());
}