package org.yournamehere.client; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.DockPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.KeyboardListenerAdapter; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.MouseListener; import com.google.gwt.user.client.ui.SourcesClickEvents; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; public class GWTFlickrEditableLabelPanel extends Composite { private TextBox newName; private Label originalName; private String originalText; private Button saveButton; private Button cancelButton; private Image image = new Image("images/sample.jpg"); private Label orLabel = new Label("or"); public GWTFlickrEditableLabelPanel() { originalName = new Label("MyImage"); originalName.setStyleName("flickrPanel-label"); originalName.addClickListener(new ClickListener() { public void onClick(Widget sender) { ShowText(); } }); originalName.addMouseListener(new MouseListener() { public void onMouseDown(Widget sender, int x, int y) { } public void onMouseEnter(Widget sender) { originalName.setStyleName("flickrPanel-label-hover"); } public void onMouseLeave(Widget sender) { originalName.setStyleName("flickrPanel-label"); } public void onMouseMove(Widget sender, int x, int y) { } public void onMouseUp(Widget sender, int x, int y) { } }); newName = new TextBox(); newName.setStyleName("flickrPanel-textBox"); newName.addKeyboardListener(new KeyboardListenerAdapter() { public void onKeyPress(Widget sender, char keyCode, int modifiers) { switch (keyCode) { case KeyboardListenerAdapter.KEY_ENTER: saveChange(); break; case KeyboardListenerAdapter.KEY_ESCAPE: cancelChange(); break; } } }); saveButton = new Button(); saveButton.setStyleName("flickrPanel-buttons"); saveButton.addStyleName("flickrPanel-save"); saveButton.setText("SAVE"); ((SourcesClickEvents) saveButton).addClickListener(new ClickListener() { public void onClick(Widget sender) { saveChange(); } }); cancelButton = new Button(); cancelButton.setStyleName("flickrPanel-buttons"); cancelButton.addStyleName("flickrPanel-cancel"); cancelButton.setText("CANCEL"); ((SourcesClickEvents) cancelButton).addClickListener(new ClickListener() { public void onClick(Widget sender) { cancelChange(); } }); originalName.setVisible(true); newName.setVisible(false); saveButton.setVisible(false); orLabel.setVisible(false); cancelButton.setVisible(false); HorizontalPanel buttonPanel = new HorizontalPanel(); buttonPanel.setStyleName("flickrPanel-buttonPanel"); buttonPanel.add(saveButton); buttonPanel.add(orLabel); buttonPanel.add(cancelButton); DockPanel workPane = new DockPanel(); VerticalPanel workPanel = new VerticalPanel(); workPanel.setStyleName("flickrPanel"); workPanel.add(image); workPanel.add(originalName); workPanel.add(newName); workPanel.add(buttonPanel); workPane.add(workPanel, DockPanel.CENTER); workPane.setCellHeight(workPanel, "100%"); workPane.setCellWidth(workPanel, "100%"); initWidget(workPane); } private void ShowText() { originalText = originalName.getText(); originalName.setVisible(false); saveButton.setVisible(true); orLabel.setVisible(true); cancelButton.setVisible(true); newName.setText(originalText); newName.setVisible(true); newName.setFocus(true); newName.setStyleName("flickrPanel-textBox-edit"); } private void showLabel() { originalName.setVisible(true); saveButton.setVisible(false); orLabel.setVisible(false); cancelButton.setVisible(false); newName.setVisible(false); } private void saveChange() { originalName.setText(newName.getText()); showLabel(); // This is where you can call an RPC service to update // a db or call some other service to propagate // the change. In this example we just change the // text of the label. } public void cancelChange() { originalName.setText(originalText); showLabel(); } public void onShow() { } }