-/*
- * Jexer - Java Text User Interface
- *
- * The MIT License (MIT)
- *
- * Copyright (C) 2019 Kevin Lamonte
- *
- * 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:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * 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
- */
-package jexer.backend;
-
-import java.awt.Insets;
-
-/**
- * SwingSessionInfo provides a session implementation with a callback into
- * Swing to support queryWindowSize(). The username is blank, language is
- * "en_US", with a 80x25 text window.
- */
-public class SwingSessionInfo implements SessionInfo {
-
- // ------------------------------------------------------------------------
- // Variables --------------------------------------------------------------
- // ------------------------------------------------------------------------
-
- /**
- * The Swing JFrame or JComponent.
- */
- private SwingComponent swing;
-
- /**
- * The width of a text cell in pixels.
- */
- private int textWidth = 10;
-
- /**
- * The height of a text cell in pixels.
- */
- private int textHeight = 10;
-
- /**
- * User name.
- */
- private String username = "";
-
- /**
- * Language.
- */
- private String language = "en_US";
-
- /**
- * Text window width.
- */
- private int windowWidth = 80;
-
- /**
- * Text window height.
- */
- private int windowHeight = 25;
-
- // ------------------------------------------------------------------------
- // Constructors -----------------------------------------------------------
- // ------------------------------------------------------------------------
-
- /**
- * Public constructor.
- *
- * @param swing the Swing JFrame or JComponent
- * @param textWidth the width of a cell in pixels
- * @param textHeight the height of a cell in pixels
- */
- public SwingSessionInfo(final SwingComponent swing, final int textWidth,
- final int textHeight) {
-
- this.swing = swing;
- this.textWidth = textWidth;
- this.textHeight = textHeight;
- }
-
- /**
- * Public constructor.
- *
- * @param swing the Swing JFrame or JComponent
- * @param textWidth the width of a cell in pixels
- * @param textHeight the height of a cell in pixels
- * @param width the number of columns
- * @param height the number of rows
- */
- public SwingSessionInfo(final SwingComponent swing, final int textWidth,
- final int textHeight, final int width, final int height) {
-
- this.swing = swing;
- this.textWidth = textWidth;
- this.textHeight = textHeight;
- this.windowWidth = width;
- this.windowHeight = height;
- }
-
- // ------------------------------------------------------------------------
- // SessionInfo ------------------------------------------------------------
- // ------------------------------------------------------------------------
-
- /**
- * Username getter.
- *
- * @return the username
- */
- public String getUsername() {
- return this.username;
- }
-
- /**
- * Username setter.
- *
- * @param username the value
- */
- public void setUsername(final String username) {
- this.username = username;
- }
-
- /**
- * Language getter.
- *
- * @return the language
- */
- public String getLanguage() {
- return this.language;
- }
-
- /**
- * Language setter.
- *
- * @param language the value
- */
- public void setLanguage(final String language) {
- this.language = language;
- }
-
- /**
- * Text window width getter.
- *
- * @return the window width
- */
- public int getWindowWidth() {
- return windowWidth;
- }
-
- /**
- * Text window height getter.
- *
- * @return the window height
- */
- public int getWindowHeight() {
- return windowHeight;
- }
-
- /**
- * Re-query the text window size.
- */
- public void queryWindowSize() {
- Insets insets = swing.getInsets();
- int width = swing.getWidth() - insets.left - insets.right;
- int height = swing.getHeight() - insets.top - insets.bottom;
- // In theory, if Java reported pixel-perfect dimensions, the
- // expressions above would precisely line up with the requested
- // window size from SwingComponent.setDimensions(). In practice,
- // there appears to be a small difference. Add half a text cell in
- // both directions before the division to hopefully reach the same
- // result as setDimensions() was supposed to give us.
- width += (textWidth / 2);
- height += (textHeight / 2);
- windowWidth = width / textWidth;
- windowHeight = height / textHeight;
-
- /*
- System.err.printf("queryWindowSize(): frame %d %d window %d %d\n",
- swing.getWidth(), swing.getHeight(),
- windowWidth, windowHeight);
- */
- }
-
- // ------------------------------------------------------------------------
- // SwingSessionInfo -------------------------------------------------------
- // ------------------------------------------------------------------------
-
- /**
- * Set the dimensions of a single text cell.
- *
- * @param textWidth the width of a cell in pixels
- * @param textHeight the height of a cell in pixels
- */
- public void setTextCellDimensions(final int textWidth,
- final int textHeight) {
-
- this.textWidth = textWidth;
- this.textHeight = textHeight;
- }
-
- /**
- * Getter for the underlying Swing component.
- *
- * @return the SwingComponent
- */
- public SwingComponent getSwingComponent() {
- return swing;
- }
-
-}