Skip to content

Commit

Permalink
[GH-13] Add the possibility to disable toggling (#14)
Browse files Browse the repository at this point in the history
* [GH-13] Add the possibility to disable toggling

* [GH-13] Fix method name

* [GH-13] Add a click listener to the disabled header
  • Loading branch information
aspan authored and mouellet committed Nov 11, 2017
1 parent 98e959c commit 0454a2c
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Panel;
Expand Down Expand Up @@ -69,8 +70,14 @@ public void toggleClick(StackPanel source) {
section5.setCaptionAsHtml(true);
section5.setIcon(VaadinIcons.CART);
StackPanel panel5 = StackPanel.extend(section5);

setContent(new VerticalLayout(section0, section1, section2, section3, section4, section5));
CheckBox enableDisable = new CheckBox("Section 5 enabled");
enableDisable.setValue(true);
enableDisable.addValueChangeListener((v) -> {
panel5.setToggleEnabled(v.getValue());
});
panel5.addToggleDisabledClickListener(s -> Notification.show("Header Clicked!"));
panel5.addToggleListener(s -> Notification.show("Toggle Clicked!"));
setContent(new VerticalLayout(section0, section1, section2, section3, section4, section5, enableDisable));
}

public static class SectionPanel extends Panel {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,15 @@
public class StackPanel extends AbstractExtension {

public interface ToggleListener {
void toggleClick(StackPanel source);
}

public void toggleClick(StackPanel source);
public interface ToggleDisabledClickListener {
void toggleDisabledClick(StackPanel source);
}

private List<ToggleListener> listeners = new ArrayList<>();
private List<ToggleDisabledClickListener> toggleDisabledClickListeners = new ArrayList<>();

private ServerRpc rpc = new StackPanelRpc() {

Expand All @@ -39,6 +43,13 @@ public void toggleClick() {
}
}

@Override
public void toggleDisabledClick() {
for (ToggleDisabledClickListener listener : toggleDisabledClickListeners) {
listener.toggleDisabledClick(StackPanel.this);
}
}

@Override
public void setToggleDownHtml(String toogleDownHtml) {
getState().setToggleDownHtml(toogleDownHtml);
Expand Down Expand Up @@ -90,6 +101,14 @@ public void setToggleUpIcon(FontIcon toggleUpIcon) {
getState().setToggleUpHtml(toggleUpIcon.getHtml());
}

public void setToggleEnabled(boolean enabled) {
getState().setToggleEnabled(enabled);
}

public boolean isToggleEnabled() {
return getState().isToggleEnabled();
}

@Override
protected StackPanelState getState() {
return (StackPanelState) super.getState();
Expand All @@ -103,6 +122,14 @@ public void removeToggleListener(ToggleListener listener) {
listeners.remove(listener);
}

public void addToggleDisabledClickListener(ToggleDisabledClickListener listener) {
toggleDisabledClickListeners.add(listener);
}

public void removeToggleDisabledClickListener(ToggleDisabledClickListener listener) {
toggleDisabledClickListeners.remove(listener);
}

@Override
public Class<? extends SharedState> getStateType() {
return StackPanelState.class;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.UIObject;
import com.vaadin.client.ComponentConnector;
Expand All @@ -24,13 +25,39 @@ public class StackPanelConnector extends AbstractExtensionConnector {
public static final String CLASSNAME = "v-stackpanel";
private static final String STYLENAME_SUFFIX_OPEN = CLASSNAME + "-open";
private static final String STYLENAME_SUFFIX_CLOSED = CLASSNAME + "-closed";
private static final String STYLENAME_SUFFIX_DISABLED= CLASSNAME + "-disabled";

private StackPanelRpc rpc = RpcProxy.create(StackPanelRpc.class, this);

private VPanel panel;

private final Element captionToggle = DOM.createSpan();

private final ClickHandler toggleClickHandler = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (DOM.asOld(panel.captionNode).isOrHasChild(Element.as(event.getNativeEvent().getEventTarget()))) {
getState().setOpen(!getState().isOpen());
refresh();
rpc.setOpen(getState().isOpen());

//fire toggle listener
rpc.toggleClick();
}
}
};

private final ClickHandler toggleDisabledClickHandler = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (DOM.asOld(panel.captionNode).isOrHasChild(Element.as(event.getNativeEvent().getEventTarget()))) {
rpc.toggleDisabledClick();
}
}
};

private HandlerRegistration clickHandlerRegistration;

@Override
protected void extend(ServerConnector target) {
panel = (VPanel) ((ComponentConnector) target).getWidget();
Expand All @@ -42,27 +69,13 @@ protected void extend(ServerConnector target) {

updateStyleName(panel);

panel.addDomHandler(new ClickHandler() {

@Override
public void onClick(ClickEvent event) {
if (DOM.asOld(panel.captionNode).isOrHasChild(Element.as(event.getNativeEvent().getEventTarget()))) {
getState().setOpen(!getState().isOpen());
refresh();
rpc.setOpen(getState().isOpen());

//fire toggle listener
rpc.toggleClick();
}
}

}, ClickEvent.getType());
clickHandlerRegistration = panel.addDomHandler(toggleClickHandler, ClickEvent.getType());
}

@Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
super.onStateChanged(stateChangeEvent);
if (stateChangeEvent.hasPropertyChanged("open")) {
if (stateChangeEvent.hasPropertyChanged("open") || stateChangeEvent.hasPropertyChanged("toggleEnabled")) {
refresh();
}
}
Expand All @@ -74,6 +87,18 @@ public void refresh() {
if (getState().isToggleIconEnabled()) {
updateToggleIcon(getState().isOpen());
}

if (getState().isToggleEnabled()) {
if (clickHandlerRegistration != null) {
clickHandlerRegistration.removeHandler();
}
clickHandlerRegistration = panel.addDomHandler(toggleClickHandler, ClickEvent.getType());
} else {
if (clickHandlerRegistration != null) {
clickHandlerRegistration.removeHandler();
}
clickHandlerRegistration = panel.addDomHandler(toggleDisabledClickHandler, ClickEvent.getType());
}
}

private void updateToggleIcon(Boolean isOpen) {
Expand All @@ -92,6 +117,12 @@ private void updateStyleName(VPanel panel) {
panel.removeStyleName(STYLENAME_SUFFIX_OPEN);
panel.addStyleName(STYLENAME_SUFFIX_CLOSED);
}

if (getState().isToggleEnabled()) {
panel.removeStyleName(STYLENAME_SUFFIX_DISABLED);
} else {
panel.addStyleName(STYLENAME_SUFFIX_DISABLED);
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,6 @@ public interface StackPanelRpc extends ServerRpc {
void setToggleUpHtml(String toogleUpHtml);

void toggleClick();

void toggleDisabledClick();
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
public class StackPanelState extends SharedState {

private boolean open;
private boolean toggleEnabled = true;
private boolean toggleIconEnabled;
private String toggleDownHtml;
private String toggleUpHtml;
Expand Down Expand Up @@ -42,4 +43,12 @@ public void setToggleIconEnabled(boolean toggleIconEnabled) {
this.toggleIconEnabled = toggleIconEnabled;
}

public boolean isToggleEnabled() {
return toggleEnabled;
}

public void setToggleEnabled(boolean toggleEnabled) {
this.toggleEnabled = toggleEnabled;
setToggleIconEnabled(toggleEnabled);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,8 @@ div.v-stackpanel .v-stackpanel-toggle {

div.v-stackpanel .v-stackpanel-toggle:hover {
opacity: 1;
}

div.v-stackpanel.v-stackpanel-disabled .v-stackpanel-toggle {
visibility: hidden;
}

0 comments on commit 0454a2c

Please sign in to comment.