| /* |
| * Copyright 2010 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.gwt.sample.dynatablerf.client.widgets; |
| |
| import com.google.gwt.editor.client.EditorDelegate; |
| import com.google.gwt.editor.client.ValueAwareEditor; |
| import com.google.gwt.event.dom.client.ClickEvent; |
| import com.google.gwt.event.dom.client.ClickHandler; |
| import com.google.gwt.event.shared.EventBus; |
| import com.google.gwt.event.shared.HandlerRegistration; |
| import com.google.gwt.sample.dynatablerf.client.events.EditPersonEvent; |
| import com.google.gwt.sample.dynatablerf.shared.PersonProxy; |
| import com.google.gwt.user.client.ui.Composite; |
| import com.google.gwt.user.client.ui.Label; |
| |
| /** |
| * This NameLabel uses the EditorDelegate to receive notifications on updates to |
| * the displayed object. |
| */ |
| class NameLabel extends Composite implements ValueAwareEditor<PersonProxy> { |
| /** |
| * Many of the GWT UI widgets that implement TakesValue also implement |
| * IsEditor and are directly usable as sub-Editors. |
| */ |
| final Label nameEditor = new Label(); |
| private PersonProxy person; |
| private HandlerRegistration subscription; |
| |
| public NameLabel() { |
| this(null); |
| } |
| |
| public NameLabel(final EventBus eventBus) { |
| initWidget(nameEditor); |
| |
| if (eventBus != null) { |
| nameEditor.addClickHandler(new ClickHandler() { |
| public void onClick(ClickEvent event) { |
| eventBus.fireEvent(new EditPersonEvent(person)); |
| } |
| }); |
| } |
| } |
| |
| public void flush() { |
| // No-op |
| } |
| |
| public void onPropertyChange(String... paths) { |
| } |
| |
| public void setDelegate(EditorDelegate<PersonProxy> delegate) { |
| if (subscription != null) { |
| subscription.removeHandler(); |
| } |
| subscription = delegate.subscribe(); |
| } |
| |
| public void setValue(PersonProxy value) { |
| person = value; |
| } |
| |
| /** |
| * Unhook event notifications when being permanently disposed of by |
| * FavoritesWidget. |
| */ |
| protected void cancelSubscription() { |
| if (subscription != null) { |
| subscription.removeHandler(); |
| } |
| } |
| } |