001 package org.sonar.api.web.gwt.client.widgets; 002 003 import com.google.gwt.user.client.ui.ClickListener; 004 import com.google.gwt.user.client.ui.Hyperlink; 005 import com.google.gwt.user.client.ui.Widget; 006 007 public class ExpandCollapseLink extends Hyperlink { 008 009 private Widget expandOrCollapse; 010 011 public ExpandCollapseLink(Widget expandOrCollapse) { 012 super(); 013 this.expandOrCollapse = expandOrCollapse; 014 setText(getLinkLabel(!expandOrCollapse.isVisible())); 015 getElement().setId("expand-" + expandOrCollapse.getElement().getId()); 016 setStyleName("expandCollapseLink"); 017 final ExpandCollapseLink link = this; 018 this.addClickListener(new ClickListener() { 019 public void onClick(Widget sender) { 020 link.toggle(); 021 } 022 }); 023 getElement().getFirstChildElement().setAttribute("href", "#"); 024 } 025 026 public void toggle() { 027 boolean visible = expandOrCollapse.isVisible(); 028 setText(getLinkLabel(visible)); 029 expandOrCollapse.setVisible(!visible); 030 } 031 032 protected String getLinkLabel(boolean show) { 033 return (show ? "expand" : "collapse"); 034 } 035 036 }