/* * 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.issue; import com.googlecode.lanterna.TextColor; import com.googlecode.lanterna.gui2.*; import com.googlecode.lanterna.gui2.dialogs.ActionListDialogBuilder; import com.googlecode.lanterna.screen.Screen; import com.googlecode.lanterna.screen.TerminalScreen; import com.googlecode.lanterna.terminal.DefaultTerminalFactory; import com.googlecode.lanterna.terminal.Terminal; import java.io.IOException; public class Issue155 { public static void main(String... args) throws IOException { Terminal term = new DefaultTerminalFactory().createTerminal(); Screen screen = new TerminalScreen(term); WindowManager windowManager = new DefaultWindowManager(); Component background = new EmptySpace(TextColor.ANSI.DEFAULT); final WindowBasedTextGUI gui = new MultiWindowTextGUI(screen, windowManager, background); screen.startScreen(); gui.addWindowAndWait(new BasicWindow("Issue155") {{ setComponent(createUi(gui, this)); }}); screen.stopScreen(); } private static Panel createUi(WindowBasedTextGUI gui, BasicWindow window) { return createUi(gui, window, 1); } private static Panel createUi(WindowBasedTextGUI gui, final BasicWindow window, final int counter) { final int nextCounter = counter + 3; return Panels.vertical( new Button("Open Dialog (and crush stuff)", openDialog(gui, window, nextCounter)), new CheckBoxList<String>() {{ for (int i = counter; i < nextCounter; ++i) { addItem(String.valueOf(i)); } }}, new Button("Quit", new Runnable() { @Override public void run() { window.close(); } }) ); } private static Runnable openDialog(final WindowBasedTextGUI gui, final BasicWindow window, final int counter) { return new Runnable() { @Override public void run() { new ActionListDialogBuilder(). setCanCancel(true). addAction("Reinstall UI (this crashes everything)", setupUI(gui, window, counter)). build(). showDialog(gui); } }; } private static Runnable setupUI(final WindowBasedTextGUI gui, final BasicWindow window, final int counter) { return new Runnable() { @Override public void run() { window.setComponent(createUi(gui, window, counter)); } }; } }