-/**
+/*
* Jexer - Java Text User Interface
*
- * License: LGPLv3 or later
- *
- * This module is licensed under the GNU Lesser General Public License
- * Version 3. Please see the file "COPYING" in this directory for more
- * information about the GNU Lesser General Public License Version 3.
+ * The MIT License (MIT)
*
- * Copyright (C) 2015 Kevin Lamonte
+ * Copyright (C) 2019 Kevin Lamonte
*
- * This program 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.
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
*
- * 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
- * General Public License for more details.
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
*
- * 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/, or write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
*
* @author Kevin Lamonte [kevin.lamonte@gmail.com]
* @version 1
import java.util.ArrayList;
import java.util.List;
+import java.util.ResourceBundle;
import jexer.event.TKeypressEvent;
import static jexer.TKeypress.*;
* TMessageBox is a system-modal dialog with buttons for OK, Cancel, Yes, or
* No. Call it like:
*
- * <p>
* <pre>
* {@code
- * box = application.messageBox(title, caption,
+ * box = messageBox(title, caption,
* TMessageBox.Type.OK | TMessageBox.Type.CANCEL);
*
* if (box.getResult() == TMessageBox.OK) {
*/
public class TMessageBox extends TWindow {
+ /**
+ * Translated strings.
+ */
+ private static final ResourceBundle i18n = ResourceBundle.getBundle(TMessageBox.class.getName());
+
+ // ------------------------------------------------------------------------
+ // Constants --------------------------------------------------------------
+ // ------------------------------------------------------------------------
+
/**
* Message boxes have these supported types.
*/
YESNOCANCEL
};
- /**
- * The type of this message box.
- */
- private Type type;
-
- /**
- * My buttons.
- */
- List<TButton> buttons;
-
/**
* Message boxes have these possible results.
*/
NO
};
+ // ------------------------------------------------------------------------
+ // Variables --------------------------------------------------------------
+ // ------------------------------------------------------------------------
+
/**
- * Which button was clicked: OK, CANCEL, YES, or NO.
+ * The type of this message box.
*/
- private Result result = Result.OK;
+ private Type type;
/**
- * Get the result.
- *
- * @return the result: OK, CANCEL, YES, or NO.
+ * My buttons.
*/
- public final Result getResult() {
- return result;
- }
+ private List<TButton> buttons;
+
+ /**
+ * Which button was clicked: OK, CANCEL, YES, or NO.
+ */
+ private Result result = Result.OK;
+
+ // ------------------------------------------------------------------------
+ // Constructors -----------------------------------------------------------
+ // ------------------------------------------------------------------------
/**
* Public constructor. The message box will be centered on screen.
protected TMessageBox(final TApplication application, final String title,
final String caption, final Type type, final boolean yield) {
- // Start as 50x50 at (1, 1). These will be changed later.
+ // Start as 100x100 at (1, 1). These will be changed later.
super(application, title, 1, 1, 100, 100, CENTERED | MODAL);
// Hang onto type so that we can provide more convenience in
setWidth(15);
}
buttonX = (getWidth() - 11) / 2;
- buttons.add(addButton(" &OK ", buttonX, lineI,
+ buttons.add(addButton(i18n.getString("okButton"), buttonX, lineI,
new TAction() {
public void DO() {
result = Result.OK;
setWidth(26);
}
buttonX = (getWidth() - 22) / 2;
- buttons.add(addButton(" &OK ", buttonX, lineI,
+ buttons.add(addButton(i18n.getString("okButton"), buttonX, lineI,
new TAction() {
public void DO() {
result = Result.OK;
)
);
buttonX += 8 + 4;
- buttons.add(addButton("&Cancel", buttonX, lineI,
+ buttons.add(addButton(i18n.getString("cancelButton"), buttonX, lineI,
new TAction() {
public void DO() {
result = Result.CANCEL;
setWidth(20);
}
buttonX = (getWidth() - 16) / 2;
- buttons.add(addButton("&Yes", buttonX, lineI,
+ buttons.add(addButton(i18n.getString("yesButton"), buttonX, lineI,
new TAction() {
public void DO() {
result = Result.YES;
)
);
buttonX += 5 + 4;
- buttons.add(addButton("&No", buttonX, lineI,
+ buttons.add(addButton(i18n.getString("noButton"), buttonX, lineI,
new TAction() {
public void DO() {
result = Result.NO;
setWidth(31);
}
buttonX = (getWidth() - 27) / 2;
- buttons.add(addButton("&Yes", buttonX, lineI,
+ buttons.add(addButton(i18n.getString("yesButton"), buttonX, lineI,
new TAction() {
public void DO() {
result = Result.YES;
)
);
buttonX += 5 + 4;
- buttons.add(addButton("&No", buttonX, lineI,
+ buttons.add(addButton(i18n.getString("noButton"), buttonX, lineI,
new TAction() {
public void DO() {
result = Result.NO;
)
);
buttonX += 4 + 4;
- buttons.add(addButton("&Cancel", buttonX, lineI,
+ buttons.add(addButton(i18n.getString("cancelButton"), buttonX,
+ lineI,
new TAction() {
public void DO() {
result = Result.CANCEL;
break;
default:
- throw new IllegalArgumentException("Invalid message box type: " + type);
+ throw new IllegalArgumentException("Invalid message box type: " +
+ type);
}
- // Set the secondaryThread to run me
- getApplication().enableSecondaryEventReceiver(this);
-
if (yield) {
+ // Set the secondaryThread to run me
+ getApplication().enableSecondaryEventReceiver(this);
+
// Yield to the secondary thread. When I come back from the
// constructor response will already be set.
getApplication().yield();
}
}
+ // ------------------------------------------------------------------------
+ // TWindow ----------------------------------------------------------------
+ // ------------------------------------------------------------------------
+
/**
* Handle keystrokes.
*
break;
default:
- throw new IllegalArgumentException("Invalid message box type: " + type);
+ throw new IllegalArgumentException("Invalid message box type: " +
+ type);
}
super.onKeypress(keypress);
}
+ // ------------------------------------------------------------------------
+ // TMessageBox ------------------------------------------------------------
+ // ------------------------------------------------------------------------
+
+ /**
+ * Get the result.
+ *
+ * @return the result: OK, CANCEL, YES, or NO.
+ */
+ public final Result getResult() {
+ return result;
+ }
+
+ /**
+ * See if the user clicked YES.
+ *
+ * @return true if the user clicked YES
+ */
+ public final boolean isYes() {
+ return (result == Result.YES);
+ }
+
+ /**
+ * See if the user clicked NO.
+ *
+ * @return true if the user clicked NO
+ */
+ public final boolean isNo() {
+ return (result == Result.NO);
+ }
+
+ /**
+ * See if the user clicked OK.
+ *
+ * @return true if the user clicked OK
+ */
+ public final boolean isOk() {
+ return (result == Result.OK);
+ }
+
+ /**
+ * See if the user clicked CANCEL.
+ *
+ * @return true if the user clicked CANCEL
+ */
+ public final boolean isCancel() {
+ return (result == Result.CANCEL);
+ }
+
}