/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * 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.uberfire.wbtest.client.panels.custom; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.enterprise.event.Observes; import javax.inject.Inject; import javax.inject.Named; import com.google.common.collect.ImmutableMap; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.SimplePanel; import org.uberfire.client.mvp.PlaceManager; import org.uberfire.mvp.impl.DefaultPlaceRequest; import org.uberfire.wbtest.client.api.AbstractTestScreenActivity; @Dependent @Named("org.uberfire.wbtest.client.panels.custom.CustomPanelMakerScreen") public class CustomPanelMakerScreen extends AbstractTestScreenActivity { private final Panel panel = new FlowPanel(); private final Label liveCustomPanelInstances = new Label("?"); private final Label totalCustomPanelInstances = new Label("?"); /** * A popup that can show and hide multiple times, and can host different custom panels over its life. */ private final PopupPanel reusablePopup = new PopupPanel(false); @Inject CustomPanelInstanceCounter instanceCounter; /** * The most recent popup that was shown by clicking the "Open custom place in new popup" button. * This popup will only be used one time. */ private PopupPanel popup; @Inject private PlaceManager placeManager; @Inject public CustomPanelMakerScreen(PlaceManager placeManager) { super(placeManager); } @PostConstruct private void setup() { Button open = new Button("Open Custom Place in New Popup"); open.ensureDebugId("CustomPanelMakerScreen-open"); open.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { SimplePanel customContainer = new SimplePanel(); customContainer.setPixelSize(200, 200); popup = new PopupPanel(false); popup.setWidget(customContainer); popup.setPopupPosition(150, 150); popup.show(); ImmutableMap<String, String> params = ImmutableMap.of("debugId", "" + instanceCounter.getCreationCount()); DefaultPlaceRequest popupPlace = new DefaultPlaceRequest(CustomPanelContentScreen.class.getName(), params); placeManager.goTo(popupPlace, customContainer); } }); Button closeWithPlaceManager = new Button("Close Latest New Popup With PlaceManager"); closeWithPlaceManager.ensureDebugId("CustomPanelMakerScreen-closeWithPlaceManager"); closeWithPlaceManager.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { ImmutableMap<String, String> params = ImmutableMap.of("debugId", "" + (instanceCounter.getCreationCount() - 1)); DefaultPlaceRequest place = new DefaultPlaceRequest(CustomPanelContentScreen.class.getName(), params); placeManager.closePlace(place); } }); Button closeByRemovingFromDom = new Button("Remove Latest New Popup From DOM"); closeByRemovingFromDom.ensureDebugId("CustomPanelMakerScreen-closeByRemovingFromDom"); closeByRemovingFromDom.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (popup != null) { popup.hide(); popup = null; } } }); final SimplePanel reusedCustomContainer = new SimplePanel(); reusedCustomContainer.setPixelSize(200, 200); reusablePopup.setWidget(reusedCustomContainer); reusablePopup.setPopupPosition(400, 150); final DefaultPlaceRequest reusablePlace = new DefaultPlaceRequest(CustomPanelContentScreen.class.getName(), ImmutableMap.of("debugId", "reusable")); Button openInReusablePopup = new Button("Open Custom Place in Reusable Popup"); openInReusablePopup.ensureDebugId("CustomPanelMakerScreen-openReusable"); openInReusablePopup.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { reusablePopup.show(); placeManager.goTo(reusablePlace, reusedCustomContainer); } }); Button closeReusableWithPlaceManager = new Button("Close Reusable Popup with PlaceManager"); closeReusableWithPlaceManager.ensureDebugId("CustomPanelMakerScreen-closeReusableWithPlaceManager"); closeReusableWithPlaceManager.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { placeManager.closePlace(reusablePlace); } }); Button closeReusableByRemovingFromDom = new Button("Remove Reusable Popup from DOM"); closeReusableByRemovingFromDom.ensureDebugId("CustomPanelMakerScreen-closeReusableByRemovingFromDom"); closeReusableByRemovingFromDom.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { reusablePopup.hide(); } }); liveCustomPanelInstances.ensureDebugId("CustomPanelMakerScreen-liveCustomPanelInstances"); totalCustomPanelInstances.ensureDebugId("CustomPanelMakerScreen-totalCustomPanelInstances"); panel.add(open); panel.add(closeWithPlaceManager); panel.add(closeByRemovingFromDom); panel.add(openInReusablePopup); panel.add(closeReusableWithPlaceManager); panel.add(closeReusableByRemovingFromDom); panel.add(liveCustomPanelInstances); panel.add(totalCustomPanelInstances); onInstanceCountChanged(instanceCounter); } @Override public IsWidget getWidget() { return panel; } void onInstanceCountChanged(@Observes CustomPanelInstanceCounter instanceCounter) { liveCustomPanelInstances.setText("Live Instances: " + instanceCounter.getLiveInstances()); totalCustomPanelInstances.setText("Total Instances: " + instanceCounter.getCreationCount()); } }