![JAR search and dependency download from the Maven repository](/logo.png)
es.gob.jmulticard.ui.passwordcallback.gui.AbstractJAccessibilityCustomDialog Maven / Gradle / Ivy
/*
* Controlador Java de la Secretaria de Estado de Administraciones Publicas
* para el DNI electronico.
*
* El Controlador Java para el DNI electronico es un proveedor de seguridad de JCA/JCE
* que permite el acceso y uso del DNI electronico en aplicaciones Java de terceros
* para la realizacion de procesos de autenticacion, firma electronica y validacion
* de firma. Para ello, se implementan las funcionalidades KeyStore y Signature para
* el acceso a los certificados y claves del DNI electronico, asi como la realizacion
* de operaciones criptograficas de firma con el DNI electronico. El Controlador ha
* sido disenado para su funcionamiento independiente del sistema operativo final.
*
* Copyright (C) 2012 Direccion General de Modernizacion Administrativa, Procedimientos
* e Impulso de la Administracion Electronica
*
* Este programa es software libre y utiliza un licenciamiento dual (LGPL 2.1+
* o EUPL 1.1+), lo cual significa que los usuarios podran elegir bajo cual de las
* licencias desean utilizar el codigo fuente. Su eleccion debera reflejarse
* en las aplicaciones que integren o distribuyan el Controlador, ya que determinara
* su compatibilidad con otros componentes.
*
* El Controlador puede ser redistribuido y/o modificado bajo los terminos de la
* Lesser GNU General Public License publicada por la Free Software Foundation,
* tanto en la version 2.1 de la Licencia, o en una version posterior.
*
* El Controlador puede ser redistribuido y/o modificado bajo los terminos de la
* European Union Public License publicada por la Comision Europea,
* tanto en la version 1.1 de la Licencia, o en una version posterior.
*
* Deberia recibir una copia de la GNU Lesser General Public License, si aplica, junto
* con este programa. Si no, consultelo en .
*
* Deberia recibir una copia de la European Union Public License, si aplica, junto
* con este programa. Si no, consultelo en .
*
* Este programa es distribuido con la esperanza de que sea util, pero
* SIN NINGUNA GARANTIA; incluso sin la garantia implicita de comercializacion
* o idoneidad para un proposito particular.
*/
package es.gob.jmulticard.ui.passwordcallback.gui;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;
import es.gob.jmulticard.ui.passwordcallback.Messages;
/** Componente que define un diálogo de alerta.
* @author Inteco */
abstract class AbstractJAccessibilityCustomDialog extends JDialog {
/**
* uid.
*/
private static final long serialVersionUID = 1L;
/** Posición X actual. */
private static int actualPositionX = -1;
/** Posición Y actual. */
private static int actualPositionY = -1;
/** Ancho actual. */
private static int actualWidth = -1;
/** Alto actual. */
private static int actualHeight = -1;
/** Indica si el diálogo requiere un tamaño
* grande por defecto. */
private boolean bigSizeDefault = false;
/** Si se trata de un diálogo de confirmación o tiene entradas */
private transient final boolean isInputDialog;
/** Constructor con parámetros.
* @param dialog Diálogo base.
* @param modal true
si el diálogo debe ser modal,
* false
en caso contrario.
* @param isInputDlg true
si el diálogo es de entrada de datos,
* false
en caso contrario. */
AbstractJAccessibilityCustomDialog(final JDialog dialog, final boolean modal, final boolean isInputDlg){
super(dialog, modal);
isInputDialog = isInputDlg;
final ResizingAdaptor adaptador = new ResizingAdaptor(this);
addComponentListener(adaptador);
setResizable(false);
}
/** Constructor con par&aacuute;metros.
* @param frame Componente base.
* @param modal true
si el diálogo debe ser modal,
* false
en caso contrario.
* @param isInputDlg true
si el diálogo es de entrada de datos,
* false
en caso contrario. */
AbstractJAccessibilityCustomDialog(final JFrame frame, final boolean modal, final boolean isInputDlg){
super(frame, modal);
isInputDialog = isInputDlg;
final ResizingAdaptor adaptador = new ResizingAdaptor(this);
addComponentListener(adaptador);
setResizable(false);
}
/** Constructor.
* @param isInputDlg Indica si el diálogo es de entrada de datos. */
AbstractJAccessibilityCustomDialog(final boolean isInputDlg){
isInputDialog = isInputDlg;
final ResizingAdaptor adaptador = new ResizingAdaptor(this);
addComponentListener(adaptador);
setResizable(false);
}
/** Relación mínima que se aplica para la redimensión de los componentes.
* Cuanto menor es este número menor es la redimensión aplicada.
* @return int Relación mínima */
abstract int getMinimumRelation();
/** Obtiene el componente horizontal de la posición en pantalla del diálogo.
* @return Componente horizontal de la posición del diálogo. */
static int getActualPositionX() {
return actualPositionX;
}
/** Establece el componente horizontal de la posición en pantalla del diálogo.
* @param positionX Componente horizontal de la posición del diálogo. */
static void setActualPositionX(final int positionX) {
AbstractJAccessibilityCustomDialog.actualPositionX = positionX;
}
/** Obtiene el componente vertical de la posición en pantalla del diálogo.
* @return Componente vertical de la posición del diálogo. */
static int getActualPositionY() {
return actualPositionY;
}
/** Establece el componente vertical de la posición en pantalla del diálogo.
* @param positionY Componente vertical de la posición del diálogo. */
static void setActualPositionY(final int positionY) {
AbstractJAccessibilityCustomDialog.actualPositionY = positionY;
}
/** Obtiene el ancho actual del diálogo.
* @return Ancho actual del diálogo. */
static int getActualWidth() {
return actualWidth;
}
/** Establece el ancho del diálogo.
* @param width Ancho del diálogo. */
static void setActualWidth(final int width) {
AbstractJAccessibilityCustomDialog.actualWidth = width;
}
/** Obtiene el alto actual del diálogo.
* @return Alto actual del diálogo. */
static int getActualHeight() {
return actualHeight;
}
/** Establece el alto del diálogo.
* @param height Alto del diálogo. */
static void setActualHeight(final int height) {
AbstractJAccessibilityCustomDialog.actualHeight = height;
}
/** Indica si el diálogo debe tener un tamaño grande por defecto.
* @return true
si el diálogo debe tener un tamaño
* grande por defecto, false
en caso contrario. */
boolean isBigSizeDefault() {
return bigSizeDefault;
}
/** Indica si el diálogo debe tener un tamaño grande por defecto.
* @param bigSizeByDefault true
si el diálogo debe tener un
* tamaño grande por defecto, false
* en caso contrario. */
void setBigSizeDefault(final boolean bigSizeByDefault) {
bigSizeDefault = bigSizeByDefault;
}
/** Devuelve el ancho inicial del diálogo.
* @return Ancho inicial del diálogo. */
int getInitialWidth(){
if(isInputDialog){
return AccesiblityConstants.CUSTOMDIALOG_INITIAL_WIDTH;
}
return AccesiblityConstants.CUSTOMCONFIRMATION_INITIAL_WIDTH;
}
/** Devuelve el alto inicial del diálogo.
* @return Alto inicial del diálogo. */
int getInitialHeight(){
if(isInputDialog){
return AccesiblityConstants.CUSTOMDIALOG_INITIAL_HEIGHT;
}
return AccesiblityConstants.CUSTOMCONFIRMATION_INITIAL_HEIGHT;
}
/** Devuelve el ancho máximo del diálogo.
* @return Ancho máximo del diálogo. */
int getMaxWidth(){
if(isInputDialog){
return AccesiblityConstants.CUSTOMDIALOG_MAX_WIDTH;
}
return AccesiblityConstants.CUSTOMCONFIRMATION_MAX_WIDTH;
}
/** Devuelve el alto máximo del diálogo.
* @return Alto máximo del diálogo. */
int getMaxHeight(){
if(isInputDialog){
return AccesiblityConstants.CUSTOMDIALOG_MAX_HEIGHT;
}
return AccesiblityConstants.CUSTOMCONFIRMATION_MAX_HEIGHT;
}
/** Crea el panel de botones de accesibilidad.
* @return Panel de botones de accesibilidad. */
protected JPanel createAccessibilityButtonsPanel() {
final JPanel accessibilityButtonsPanel = new JPanel(new GridBagLayout());
// Para el tooltip
final JWindow tip = new JWindow();
final JLabel tipText = new JLabel();
// Panel que va a contener los botones de accesibilidad
final JPanel panel = new JPanel(new GridBagLayout());
// Restricciones para los botones
final GridBagConstraints consButtons = new GridBagConstraints();
consButtons.fill = GridBagConstraints.BOTH;
consButtons.gridx = 0;
consButtons.gridy = 0;
consButtons.weightx = 1.0;
consButtons.weighty = 1.0;
consButtons.insets = new Insets(0, 0, 0, 0); // right padding
// Restore button
final JPanel restorePanel = new JPanel();
final ImageIcon imageIconRestore = new ImageIcon(InputPasswordSmartcardDialog.class.getResource("/images/restore.png")); //$NON-NLS-1$
final JButton restoreButton = new JButton(imageIconRestore);
restoreButton.setMnemonic(KeyEvent.VK_R);
restoreButton.setToolTipText(Messages.getString("Wizard.restaurar.description")); //$NON-NLS-1$
restoreButton.getAccessibleContext().setAccessibleName(restoreButton.getToolTipText());
restoreButton.addFocusListener(new FocusListener() {
/** Evento que se produce cuando el componente pierde el foco. */
@Override
public void focusLost(final FocusEvent e) {
AccesibilityUtils.showToolTip(false, tip, restoreButton, tipText);
}
/** Evento que se produce cuando el componente tiene el foco. */
@Override
public void focusGained(final FocusEvent e) {
AccesibilityUtils.showToolTip(true, tip, restoreButton, tipText);
}
});
final Dimension dimension = new Dimension(20, 20);
restoreButton.setPreferredSize(dimension);
restoreButton.addKeyListener(
new KeyListener() {
@Override public void keyTyped(final KeyEvent arg0) { /* No necesario */ }
@Override public void keyReleased(final KeyEvent arg0) { /* No necesario */ }
@Override
public void keyPressed(final KeyEvent ke) {
if (10 == ke.getKeyCode()) {
restoreButton.doClick();
}
}
}
);
restoreButton.setName("restaurar"); //$NON-NLS-1$
restorePanel.add(restoreButton);
AccesibilityUtils.remarcar(restoreButton);
panel.add(restorePanel, consButtons);
consButtons.gridx = 1;
consButtons.insets = new Insets(0, 0, 0, 0); // right padding
// Maximize button
final JPanel maximizePanel = new JPanel();
final ImageIcon imageIconMaximize = new ImageIcon(InputPasswordSmartcardDialog.class.getResource("/images/maximize.png")); //$NON-NLS-1$
final JButton maximizeButton = new JButton(imageIconMaximize);
maximizeButton.setMnemonic(KeyEvent.VK_M);
maximizeButton.setToolTipText(Messages.getString("Wizard.maximizar.description")); //$NON-NLS-1$
maximizeButton.getAccessibleContext().setAccessibleName(maximizeButton.getToolTipText());
maximizeButton.addKeyListener(
new KeyListener() {
@Override public void keyTyped(final KeyEvent arg0) { /* No necesario */ }
@Override public void keyReleased(final KeyEvent arg0) { /* No necesario */ }
@Override
public void keyPressed(final KeyEvent ke) {
if (10 == ke.getKeyCode()) {
maximizeButton.doClick();
}
}
}
);
maximizeButton.setName("maximizar"); //$NON-NLS-1$
// Se asigna una dimension por defecto
maximizeButton.setPreferredSize(dimension);
AccesibilityUtils.remarcar(maximizeButton);
maximizePanel.add(maximizeButton);
maximizeButton.addFocusListener(new FocusListener() {
/** Evento que se produce cuando el componente pierde el foco. */
@Override
public void focusLost(final FocusEvent e) {
AccesibilityUtils.showToolTip(false, tip, maximizeButton, tipText);
}
/** Evento que se produce cuando el componente tiene el foco. */
@Override
public void focusGained(final FocusEvent e) {
AccesibilityUtils.showToolTip(true, tip, maximizeButton, tipText);
}
});
panel.add(maximizePanel, consButtons);
// Se anade al panel general
// Restricciones para el panel de botones
final GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = 0;
c.weightx = 1.0;
c.weighty = 1.0;
c.insets = new Insets(0, 0, 0, 0);
c.anchor = GridBagConstraints.SOUTH;
accessibilityButtonsPanel.add(panel, c);
// Asignamos las acciones
restoreButton.addActionListener(
new ActionListener() {
/** Acción del botón. */
@Override
public void actionPerformed(final ActionEvent e) {
restaurarActionPerformed(restoreButton, maximizeButton);
}
}
);
maximizeButton.addActionListener(
new ActionListener() {
/** Acción del botón. */
@Override
public void actionPerformed(final ActionEvent e) {
maximizarActionPerformed(restoreButton, maximizeButton);
}
}
);
// Habilitado/Deshabilitado de botones restaurar/maximizar
if (GeneralConfig.isMaximized()) {
// Se deshabilita el boton de maximizado
maximizeButton.setEnabled(false);
// Se habilita el boton de restaurar
restoreButton.setEnabled(true);
}
else {
// Se habilita el boton de maximizado
maximizeButton.setEnabled(true);
// Se deshabilita el boton de restaurar
restoreButton.setEnabled(false);
}
return accessibilityButtonsPanel;
}
/** Cambia el tamaño de la ventana al tamaño máximo de pantalla
* menos el tamaño de la barra de tareas de Windows. */
void maximizarActionPerformed(final JButton restoreButton, final JButton maximizeButton) {
setActualPositionX(getX());
setActualPositionY(getY());
setActualWidth(getWidth());
setActualHeight(getHeight());
// Se obtienen las dimensiones de maximizado
final int maxWidth = getMaxWidth();
final int maxHeight = getMaxHeight();
// Se hace el resize
this.setBounds(getInitialX(maxWidth), getInitialY(maxHeight), maxWidth, maxHeight);
// Habilitado/Deshabilitado de botones restaurar/maximizar
maximizeButton.setEnabled(false);
restoreButton.setEnabled(true);
}
/** Restaura el tamaño de la ventana a la posicion anterior al maximizado. */
void restaurarActionPerformed(final JButton restoreButton, final JButton maximizeButton) {
// Dimensiones de restaurado
int minWidth = getInitialWidth();
int minHeight = getInitialHeight();
// Se comprueba las opciones de accesibilidad activas
if (GeneralConfig.isBigFontSize() || GeneralConfig.isFontBold() || isBigSizeDefault()) {
minWidth = AccesiblityConstants.CUSTOMDIALOG_FONT_INITIAL_WIDTH;
minHeight = AccesiblityConstants.CUSTOMDIALOG_FONT_INITIAL_HEIGHT;
}
// Se establece el tamano minimo
setMinimumSize(new Dimension(minWidth, minHeight));
// Se situa el dialogo
if (getActualPositionX() != -1 && getActualPositionY() != -1 && getActualWidth() != -1 && getActualHeight() != -1) {
this.setBounds(getActualPositionX(), getActualPositionY(), getActualWidth(), getActualHeight());
}
else {
setBounds(getInitialX(minWidth), getInitialY(minHeight), minWidth, minHeight);
}
// Habilitado/Deshabilitado de botones restaurar/maximizar
maximizeButton.setEnabled(true);
restoreButton.setEnabled(false);
}
/** Posición X inicial de la ventana dependiendo de la resolución de pantalla.
* @param width Ancho de la ventana.
* @return int Posición X */
private static int getInitialX(final int width) {
final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
return screenSize.width / 2 - width / 2;
}
/** Posición Y inicial de la ventana dependiendo del sistema operativo y de la
* resolución de pantalla.
* @param height Alto de la ventana.
* @return int Posición Y. */
private static int getInitialY(final int height) {
final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
return screenSize.height / 2 - height / 2;
}
/** Acción por defecto de los botones accesibles. */
protected static final class ButtonAbstractAction extends AbstractAction {
/** UID. */
private static final long serialVersionUID = 1L;
/** Botón asociado a la acción. */
private transient final JButton button;
ButtonAbstractAction(final JButton actionButton) {
button = actionButton;
}
/** Indica que la accion es la de pulsar el boton cancelar. */
@Override
public void actionPerformed(final ActionEvent event) {
if (button != null) {
button.doClick();
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy