@Override
protected Widget getCompositeLabel() {
ClickHandler leftPatternclick = new ClickHandler() {
public void onClick(ClickEvent event) {
Widget w= (Widget)event.getSource();
showFactTypeSelector(w);
}
};
ClickHandler sourcePatternClick = new ClickHandler() {
public void onClick(ClickEvent event) {
Widget w= (Widget)event.getSource();
showSourcePatternSelector(w);
}
};
String lbl = "<div class='form-field'>" + HumanReadable.getCEDisplayName("from accumulate") + "</div>";
DirtyableFlexTable panel = new DirtyableFlexTable();
int r = 0;
if (pattern.getFactPattern() == null) {
panel.setWidget(r++, 0, new ClickableLabel("<br> <font color='red'>" + constants.clickToAddPattern() + "</font>", leftPatternclick, !this.readOnly));
}
panel.setWidget(r++, 0, new HTML(lbl));
if (this.getFromAccumulatePattern().getSourcePattern() == null) {
panel.setWidget(r++, 0, new ClickableLabel("<br> <font color='red'>" + constants.clickToAddPattern() + "</font>", sourcePatternClick, !this.readOnly));
} else {
IPattern rPattern = this.getFromAccumulatePattern()
.getSourcePattern();
if (rPattern instanceof FactPattern) {
this.sourcePatternWidget = new FactPatternWidget(
this.getModeller(), rPattern, true,
true, this.readOnly);
} else if (rPattern instanceof FromAccumulateCompositeFactPattern) {
this.sourcePatternWidget = new FromAccumulateCompositeFactPatternWidget(
this.getModeller(),
(FromAccumulateCompositeFactPattern) rPattern,
this.readOnly);
} else if (rPattern instanceof FromCollectCompositeFactPattern) {
this.sourcePatternWidget = new FromCollectCompositeFactPatternWidget(
this.getModeller(),
(FromCollectCompositeFactPattern) rPattern,
this.readOnly);
} else if (rPattern instanceof FromCompositeFactPattern) {
this.sourcePatternWidget = new FromCompositeFactPatternWidget(
this.getModeller(),
(FromCompositeFactPattern) rPattern, this.readOnly);
} else {
throw new IllegalArgumentException("Unsupported pattern "
+ rPattern + " for right side of FROM ACCUMULATE");
}
this.sourcePatternWidget.addOnModifiedCommand(new Command() {
public void execute() {
setModified(true);
}
});
panel.setWidget(
r++,
0,
addRemoveButton(this.sourcePatternWidget,
new ClickHandler() {
public void onClick(ClickEvent event) {
if (Window.confirm(constants
.RemoveThisBlockOfData())) {
setModified(true);
getFromAccumulatePattern()
.setSourcePattern(null);
getModeller().refreshWidget();
}
}
}));
}
//REVISIT: Nested TabLayoutPanel does not work, its content is truncated.
//TabLayoutPanel tPanel = new TabLayoutPanel(2, Unit.EM);
TabPanel tPanel = new TabPanel();
DirtyableFlexTable codeTable = new DirtyableFlexTable();
int codeTableRow = 0;
int codeTableCol = 0;
codeTable.setWidget(codeTableRow, codeTableCol++, new HTML("<div class='form-field'>Init:</div>"));
final TextBox initField = new TextBox();
initField.setTitle("init code");
initField.setText(getFromAccumulatePattern().getInitCode());
initField.setEnabled(!this.readOnly);
codeTable.setWidget(codeTableRow++, codeTableCol--, initField);
codeTable.setWidget(codeTableRow, codeTableCol++, new HTML("<div class='form-field'>Action:</div>"));
final TextBox actionField = new TextBox();
actionField.setTitle("action code");
actionField.setText(getFromAccumulatePattern().getActionCode());
actionField.setEnabled(!this.readOnly);
codeTable.setWidget(codeTableRow++, codeTableCol--, actionField);
codeTable.setWidget(codeTableRow, codeTableCol++, new HTML("<div class='form-field'>Reverse:</div>"));
final TextBox reverseField = new TextBox();
reverseField.setTitle("reverse code.");
reverseField.setText(getFromAccumulatePattern().getReverseCode());
reverseField.setEnabled(!this.readOnly);
codeTable.setWidget(codeTableRow++, codeTableCol--, reverseField);
codeTable.setWidget(codeTableRow, codeTableCol++, new HTML("<div class='form-field'>Result:</div>"));
final TextBox resultField = new TextBox();
resultField.setTitle("result code");
resultField.setText(getFromAccumulatePattern().getResultCode());
resultField.setEnabled(!this.readOnly);
codeTable.setWidget(codeTableRow++, codeTableCol--, resultField);
//panel.setWidget(r++, 0, codeTable);
ScrollPanel codePanel = new ScrollPanel();
codePanel.add(codeTable);
tPanel.add(codePanel,"Custom Code");
DirtyableFlexTable functionTable = new DirtyableFlexTable();
functionTable.setWidget(0, 0, new HTML("<div class='form-field'>Function:</div>"));
final TextBox functionField = new TextBox();
functionField.setTitle("function code");
functionField.setText(getFromAccumulatePattern().getFunction());
functionField.setEnabled(!this.readOnly);
functionTable.setWidget(0, 1, functionField);
// panel.setWidget(r++, 0, functionTable);
ScrollPanel functionPanel = new ScrollPanel();
functionPanel.add(functionTable);
tPanel.add(functionPanel,"Function");
ChangeHandler changehandler = new ChangeHandler() {
public void onChange(ChangeEvent event) {
Widget sender = (Widget)event.getSource();
TextBox senderTB = (TextBox) event.getSource();
String code = senderTB.getText();
setModified(true);
if (sender == initField) {
getFromAccumulatePattern().setFunction(null);