/* * This file is part of lanterna (http://code.google.com/p/lanterna/). * * lanterna is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Copyright (C) 2010-2017 Martin Berglund */ package com.googlecode.lanterna.gui2.dialogs; import com.googlecode.lanterna.gui2.*; /** * Dialog that displays a text message, an optional spinning indicator and an optional progress bar. There is no buttons * in this dialog so it has to be explicitly closed through code. * @author martin */ public class WaitingDialog extends DialogWindow { private WaitingDialog(String title, String text) { super(title); Panel mainPanel = Panels.horizontal( new Label(text), AnimatedLabel.createClassicSpinningLine()); setComponent(mainPanel); } @Override public Object showDialog(WindowBasedTextGUI textGUI) { showDialog(textGUI, true); return null; } /** * Displays the waiting dialog and optionally blocks until another thread closes it * @param textGUI GUI to add the dialog to * @param blockUntilClosed If {@code true}, the method call will block until another thread calls {@code close()} on * the dialog, otherwise the method call returns immediately */ public void showDialog(WindowBasedTextGUI textGUI, boolean blockUntilClosed) { textGUI.addWindow(this); if(blockUntilClosed) { //Wait for the window to close, in case the window manager doesn't honor the MODAL hint waitUntilClosed(); } } /** * Creates a new waiting dialog * @param title Title of the waiting dialog * @param text Text to display on the waiting dialog * @return Created waiting dialog */ public static WaitingDialog createDialog(String title, String text) { return new WaitingDialog(title, text); } /** * Creates and displays a waiting dialog without blocking for it to finish * @param textGUI GUI to add the dialog to * @param title Title of the waiting dialog * @param text Text to display on the waiting dialog * @return Created waiting dialog */ public static WaitingDialog showDialog(WindowBasedTextGUI textGUI, String title, String text) { WaitingDialog waitingDialog = createDialog(title, text); waitingDialog.showDialog(textGUI, false); return waitingDialog; } }