/** * 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 org.waveprotocol.wave.client.widget.toolbar.buttons; import com.google.gwt.dom.client.Element; import com.google.gwt.user.client.ui.Widget; /** * A {@link ToolbarButtonUi} which records its state to have delegate (proxy) * displays set. When set, the stored state is copied into the proxy and * delegated to from then on. * * @author kalman@google.com (Benjamin Kalman) */ public final class ToolbarButtonUiProxy implements ToolbarButtonUi { /** Delegate display, set in {@link #setDelegate}. */ private ToolbarButtonUi delegate; // State specific to ToolbarButtonUi. private Listener listener; private Boolean isDown; // Delegate all other state to a ToolbarButtonViewProxy. private final ToolbarButtonViewProxy proxy = new ToolbarButtonViewProxy(); public ToolbarButtonUiProxy(ToolbarButtonUi delegate) { setDelegate(delegate); } /** * Sets the delegate, copying in state. */ public void setDelegate(ToolbarButtonUi delegate) { if (this.delegate != delegate) { this.delegate = delegate; proxy.setDelegate(delegate); copyUiStateInto(delegate); } } private void copyUiStateInto(ToolbarButtonUi display) { if (listener != null) { display.setListener(listener); } if (isDown != null) { display.setDown(isDown); } } /** * @return the display currently being delegated to */ public ToolbarButtonUi getDelegate() { return delegate; } /** * @return the {@link ToolbarButtonView.State} of the toolbar, exposed for * the overflow toolbar */ public State hackGetState() { return proxy.hackGetState(); } @Override public void setDown(boolean isDown) { this.isDown = isDown; if (delegate != null) { delegate.setDown(isDown); } } @Override public void setListener(Listener listener) { this.listener = listener; if (delegate != null) { delegate.setListener(listener); } } // // Trivial delegation to a ToolbarButtonViewProxy. // @Override public void addDebugClass(String dc) { proxy.addDebugClass(dc); } @Override public Widget hackGetWidget() { return proxy.hackGetWidget(); } @Override public void removeDebugClass(String dc) { proxy.removeDebugClass(dc); } @Override public void setShowDropdownArrow(boolean showDropdown) { proxy.setShowDropdownArrow(showDropdown); } @Override public void setShowDivider(boolean showDivider) { proxy.setShowDivider(showDivider); } @Override public void setState(State state) { proxy.setState(state); } @Override public void setText(String text) { proxy.setText(text); } @Override public void setTooltip(String tooltip) { proxy.setTooltip(tooltip); } @Override public void setVisualElement(Element element) { proxy.setVisualElement(element); } }