/* * Copyright (c) 2011 PonySDK * Owners: * Luciano Broussal <luciano.broussal AT gmail.com> * Mathieu Barbier <mathieu.barbier AT gmail.com> * Nicolas Ciaravola <nicolas.ciaravola.pro AT gmail.com> * * WebSite: * http://code.google.com/p/pony-sdk/ * * 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 com.ponysdk.sample.client.page; import com.ponysdk.core.ui.basic.*; import com.ponysdk.core.ui.basic.event.PCloseEvent; import com.ponysdk.core.ui.basic.event.PCloseHandler; import com.ponysdk.core.ui.rich.PNotificationManager; import java.util.ArrayList; import java.util.List; public class WindowPageActivity extends SamplePageActivity implements PCloseHandler { protected List<PWindow> windows = new ArrayList<>(); private PTextBox urlTextBox; private PTextBox nameTextBox; private PTextBox featuresTextBox; private PTextBox popNameTextBox; private PTextBox popFeaturesTextBox; public WindowPageActivity() { super("Window", "Popup"); } @Override protected void onFirstShowPage() { super.onFirstShowPage(); final PVerticalPanel verticalPanel = Element.newPVerticalPanel(); verticalPanel.setSpacing(10); // Open popup with custom URL final PFlexTable table = Element.newPFlexTable(); table.setWidget(0, 0, Element.newPLabel("URL")); table.setWidget(0, 1, urlTextBox = Element.newPTextBox("https://github.com/PonySDK/PonySDK")); table.setWidget(1, 0, Element.newPLabel("Name")); table.setWidget(1, 1, nameTextBox = Element.newPTextBox("PonySDK")); table.setWidget(2, 0, Element.newPLabel("Features")); table.setWidget(2, 1, featuresTextBox = Element.newPTextBox("width=1280,height=800,resizable,status=1")); final PButton open = Element.newPButton("Open new window"); open.addClickHandler(event -> { final String url = urlTextBox.getText(); final String name = nameTextBox.getText(); final String features = featuresTextBox.getText(); final PWindow w = Element.newPWindow(url, name, features); w.open(); }); // Open popup that communicate with server final PFlexTable table2 = Element.newPFlexTable(); table2.setWidget(0, 0, Element.newPLabel("Name")); table2.setWidget(0, 1, popNameTextBox = Element.newPTextBox("Popup")); table2.setWidget(1, 0, Element.newPLabel("Features")); table2.setWidget(1, 1, popFeaturesTextBox = Element.newPTextBox("width=500,height=300,resizable")); final PButton open2 = Element.newPButton("Open new window"); open2.addClickHandler(event -> { final String disc = windows.isEmpty() ? "" : Integer.toString(windows.size()); final String name = popNameTextBox.getText(); final String features = popFeaturesTextBox.getText(); final MyWindow window = new MyWindow(name + disc, features); window.open(); window.addCloseHandler(WindowPageActivity.this); windows.add(window); }); final PButton postHello = Element.newPButton("Post message"); postHello.addClickHandler(event -> { for (final PWindow window : windows) { PNotificationManager.showHumanizedNotification(window, "Hello from opener"); } }); final PButton closeAllWindow = Element.newPButton("Close all windows"); closeAllWindow.addClickHandler(event -> { for (final PWindow window : windows) { window.close(); } }); verticalPanel.add(Element.newPHTML("<b>Simple popup</b>")); verticalPanel.add(table); verticalPanel.add(open); verticalPanel.add(Element.newPHTML("<br><br><b>Communicating popup</b>")); verticalPanel.add(table2); verticalPanel.add(open2); verticalPanel.add(postHello); verticalPanel.add(closeAllWindow); examplePanel.setWidget(verticalPanel); } private static class MyWindow extends PWindow { private int count = 1; public MyWindow(final String name, final String features) { super(false, null, name, features); } // @Override protected void onLoad() { final PFlowPanel flow = Element.newPFlowPanel(); final PButton addMessage = Element.newPButton("Add message"); addMessage.addClickHandler(event -> flow.add(Element.newPLabel("Hello " + count++))); final PButton clearMessage = Element.newPButton("Clear message"); clearMessage.addClickHandler(event -> { for (int i = flow.getWidgetCount() - 1; i > 2; i--) { flow.remove(i); } }); final PButton execJs = Element.newPButton("Exec javascript"); execJs.addClickHandler(event -> PScript.execute(PWindow.getMain(), "alert('from the popup');")); flow.add(addMessage); flow.add(clearMessage); flow.add(execJs); add(flow); } } @Override public void onClose(final PCloseEvent closeEvent) { final PWindow source = (PWindow) closeEvent.getSource(); final boolean remove = windows.remove(source); if (remove) { PNotificationManager.showTrayNotification(getView().asWidget().getWindow(), "Window #" + source.getID() + " closed."); } } }