*/
private void createEditableLabel(String labelText,
ChangeListener onUpdate, String okButtonText,
String cancelButtonText) {
// Put everything in a VerticalPanel
FlowPanel instance = new FlowPanel();
if (labelText == null || labelText.length() < 1) {
labelText = "Click to edit me";
}
// Create the Label element and add a ClickListener to call out
// Change method when clicked
text = new Label(labelText);
text.setStylePrimaryName("editableLabel-label");
text.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
changeTextLabel();
}
});
text.addMouseListener(new MouseListenerAdapter() {
public void onMouseEnter(Widget sender) {
text.addStyleDependentName(HOVER_STYLE);
}
public void onMouseLeave(Widget sender) {
text.removeStyleDependentName(HOVER_STYLE);
}
});
// Create the TextBox element used for non word wrapped Labels
// and add a KeyboardListener for Return and Esc key presses
changeText = new TextBox();
changeText.setStyleName("editableLabel-textBox");
changeText.addKeyboardListener(new KeyboardListenerAdapter() {
public void onKeyPress(Widget sender, char keyCode,
int modifiers) {
// If return then save, if Esc cancel the change,
// otherwise do nothing
switch (keyCode) {
case 13:
setTextLabel();
break;
case 27:
cancelLabelChange();
break;
}
}
});
// Create the TextAre element used for word-wrapped Labels
// and add a KeyboardListener for Esc key presses (not return in
// this case)
changeTextArea = new TextArea();
changeTextArea.setStyleName("editableLabel-textArea");
changeTextArea.addKeyboardListener(new KeyboardListenerAdapter() {
public void onKeyPress(Widget sender, char keyCode,
int modifiers) {
// If Esc then cancel the change, otherwise do nothing
switch (keyCode) {
case 27:
cancelLabelChange();
break;
}
}
});
// Set up Confirmation Button
confirmChange = createConfirmButton(okButtonText);
if (!(confirmChange instanceof SourcesClickEvents)) {
throw new RuntimeException(
"Confirm change button must allow for click events");
}
((SourcesClickEvents) confirmChange)
.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
setTextLabel();
}
});
// Set up Cancel Button
cancelChange = createCancelButton(cancelButtonText);
if (!(cancelChange instanceof SourcesClickEvents)) {
throw new RuntimeException(
"Cancel change button must allow for click events");
}
((SourcesClickEvents) cancelChange)
.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
cancelLabelChange();
}
});
// Put the buttons in a panel
FlowPanel buttonPanel = new FlowPanel();
buttonPanel.setStyleName("editableLabel-buttonPanel");
buttonPanel.add(confirmChange);
buttonPanel.add(cancelChange);
// Add panels/widgets to the widget panel
instance.add(text);
instance.add(changeText);
instance.add(changeTextArea);