001package com.github.gwtbootstrap.client.ui; 002 003import com.github.gwtbootstrap.client.ui.base.DivWidget; 004import com.github.gwtbootstrap.client.ui.base.HasIcon; 005import com.github.gwtbootstrap.client.ui.base.HasVisibility; 006import com.github.gwtbootstrap.client.ui.base.HasVisibleHandlers; 007import com.github.gwtbootstrap.client.ui.base.IconAnchor; 008import com.github.gwtbootstrap.client.ui.constants.*; 009import com.github.gwtbootstrap.client.ui.event.HiddenHandler; 010import com.github.gwtbootstrap.client.ui.event.HideHandler; 011import com.github.gwtbootstrap.client.ui.event.ShowHandler; 012import com.github.gwtbootstrap.client.ui.event.ShownHandler; 013import com.google.gwt.event.shared.HandlerRegistration; 014import com.google.gwt.uibinder.client.UiChild; 015import com.google.gwt.user.client.ui.Widget; 016 017/** 018 * Collapsible Widget like accordion. 019 * <p> 020 * Please see {@link Accordion} 021 * </p> 022 * @since 2.2.1.0 023 * @author ohashi keisuke 024 * @see Accordion 025 * @see Collapse 026 * @see CollapseTrigger 027 * @see <a href="http://twitter.github.com/bootstrap/javascript.html#collapse">Twitter Bootstrap document</a> 028 * 029 */ 030public class AccordionGroup extends DivWidget implements HasIcon,HasVisibility, HasVisibleHandlers { 031 032 private DivWidget innerBody = new DivWidget(Constants.ACCORDION_INNER); 033 034 private IconAnchor trigger = new IconAnchor(); 035 036 private Collapse collapse; 037 038 private CollapseTrigger collapseTrigger; 039 040 private boolean defaultOpen; 041 042 public AccordionGroup() { 043 super(Constants.ACCORDION_GROUP); 044 045 DivWidget body = new DivWidget(Constants.ACCORDION_BODY); 046 047 body.add(innerBody); 048 049 collapse = new Collapse(); 050 051 collapse.setWidget(body); 052 053 collapse.setExistTrigger(true); 054 055 trigger.addStyleName(Constants.ACCORDION_TOGGLE); 056 057 collapseTrigger = new CollapseTrigger("#" + collapse.getId()); 058 059 collapseTrigger.setWidget(trigger); 060 061 DivWidget heading = new DivWidget(Constants.ACCORDION_HEADING); 062 063 heading.add(collapseTrigger); 064 065 super.add(heading); 066 067 super.add(collapse.asWidget()); 068 } 069 070 /** 071 * {@inheritDoc} 072 */ 073 @Override 074 public void setIcon(IconType type) { 075 setBaseIcon(type); 076 } 077 078 /** 079 * {@inheritDoc} 080 */ 081 @Override 082 public void setBaseIcon(BaseIconType type) { 083 trigger.setBaseIcon(type); 084 } 085 086 /** 087 * {@inheritDoc} 088 */ 089 @Override 090 public void setIconSize(IconSize size) { 091 trigger.setIconSize(size); 092 } 093 094 public void setParent(String parent) { 095 collapseTrigger.setParent(parent); 096 } 097 098 /** 099 * {@inheritDoc} 100 */ 101 @Override 102 public HandlerRegistration addHideHandler(HideHandler handler) { 103 return collapse.addHideHandler(handler); 104 } 105 106 /** 107 * {@inheritDoc} 108 */ 109 @Override 110 public HandlerRegistration addHiddenHandler(HiddenHandler handler) { 111 return collapse.addHiddenHandler(handler); 112 } 113 114 /** 115 * {@inheritDoc} 116 */ 117 @Override 118 public HandlerRegistration addShowHandler(ShowHandler handler) { 119 return collapse.addShowHandler(handler); 120 } 121 122 /** 123 * {@inheritDoc} 124 */ 125 @Override 126 public HandlerRegistration addShownHandler(ShownHandler handler) { 127 return collapse.addShownHandler(handler); 128 } 129 130 /** 131 * {@inheritDoc} 132 */ 133 @Override 134 public void show() { 135 collapse.show(); 136 } 137 138 /** 139 * {@inheritDoc} 140 */ 141 @Override 142 public void hide() { 143 collapse.hide(); 144 } 145 146 /** 147 * {@inheritDoc} 148 */ 149 @Override 150 public void toggle() { 151 collapse.toggle(); 152 } 153 154 /** 155 * {@inheritDoc} 156 */ 157 @Override 158 public void add(Widget w) { 159 innerBody.add(w); 160 } 161 162 /** 163 * {@inheritDoc} 164 */ 165 @Override 166 public void clear() { 167 innerBody.clear(); 168 } 169 170 /** 171 * {@inheritDoc} 172 */ 173 @Override 174 public boolean remove(Widget w) { 175 return innerBody.remove(w); 176 } 177 178 /** 179 * Add a widget to trigger anchor 180 * @param w added widget 181 */ 182 @UiChild(limit=1,tagname="customTrigger") 183 public void addCustomTrigger(Widget w) { 184 trigger.insert(w, 0); 185 } 186 187 /** 188 * is opened on attached. 189 * @return defaultOpen true:open false:close 190 */ 191 public boolean isDefaultOpen() { 192 return defaultOpen; 193 } 194 195 /** 196 * Set is opened on attached. 197 * @param defaultOpen true:open false:close 198 */ 199 public void setDefaultOpen(boolean defaultOpen) { 200 this.defaultOpen = defaultOpen; 201 202 if(!isAttached()) { 203 collapse.getWidget().setStyleName("in", defaultOpen); 204 } 205 206 } 207 208 public void setHeading(String heading) { 209 trigger.setText(heading); 210 } 211 212 /** 213 * {@inheritDoc} 214 */ 215 @Override 216 public void setCustomIconStyle(String customIconStyle) { 217 trigger.setCustomIconStyle(customIconStyle); 218 } 219 220 /** 221 * {@inheritDoc} 222 */ 223 @Override 224 public void setIconPosition(IconPosition position) { 225 trigger.setIconPosition(position); 226 } 227 228}