/** * 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.button; import org.waveprotocol.wave.client.widget.button.ClickButton.ClickButtonListener; import org.waveprotocol.wave.client.widget.button.icon.IconButtonTemplate.IconButtonStyle; import org.waveprotocol.wave.client.widget.button.text.TextButton.TextButtonStyle; /** * Use this to creates buttons if you don't like long parameter lists. * This will create an extra instance which IEs garbage collector does * not like, so don't use in a tight loop (please GWT can we get the * compiler to be able optimize this sort of stuff away!). * * TODO(tirsen): support all the other buttons and styles * */ public class ButtonBuilder { /** * Properties supported by all types of buttons. */ @SuppressWarnings({"unchecked"}) // we're doing some clever tricks in here public abstract static class Base<T extends Base> { protected String text; protected String tooltip; protected String debugClass; protected String styleName; public T label(String label) { this.text = label; return (T) this; } public T tooltip(String tooltip) { this.tooltip = tooltip; return (T) this; } public T debugClass(String debugClass) { this.debugClass = debugClass; return (T) this; } public T styleName(String style) { this.styleName = style; return (T) this; } } public static class Click extends Base<Click> { private ClickButtonListener listener; private TextButtonStyle textStyle = TextButtonStyle.REGULAR_BUTTON; private IconButtonStyle iconStyle = null; public Click listener(ClickButtonListener listener) { this.listener = listener; return this; } public ClickButtonWidget build() { ClickButtonWidget result; if (text != null) { result = ButtonFactory.createTextClickButton(text, textStyle, tooltip, listener); } else { result = ButtonFactory.createIconClickButton(iconStyle, tooltip, listener); } if (styleName != null) { result.addStyleName(styleName); } if (debugClass != null) { // DebugClassHelper.addDebugClass(result, debugClass); } return result; } public Click iconStyle(IconButtonStyle style) { this.text = null; this.iconStyle = style; return this; } public Click textStyle(TextButtonStyle style) { this.textStyle = style; return this; } } public Click clickButton() { return new Click(); } }