Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/* Copyright (C) 2011 [Gobierno de Espana]
* This file is part of "Cliente @Firma".
* "Cliente @Firma" is free software; you can redistribute it and/or modify it under the terms of:
* - the GNU General Public License as published by the Free Software Foundation;
* either version 2 of the License, or (at your option) any later version.
* - or The European Software License; either version 1.1 or (at your option) any later version.
* You may contact the copyright holder at: [email protected]
*/
package es.gob.afirma.standalone.ui;
import java.awt.Component;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import java.lang.reflect.Method;
import java.util.EventObject;
import java.util.logging.Logger;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
import es.gob.afirma.core.AOCancelledOperationException;
import es.gob.afirma.core.misc.Platform;
import es.gob.afirma.core.ui.AOUIFactory;
import es.gob.afirma.standalone.AutoFirmaUtil;
import es.gob.afirma.standalone.SimpleAfirma;
import es.gob.afirma.standalone.SimpleAfirmaMessages;
import es.gob.afirma.standalone.ui.hash.CheckHashDialog;
import es.gob.afirma.standalone.ui.hash.CheckHashFiles;
import es.gob.afirma.standalone.ui.hash.CreateHashDialog;
import es.gob.afirma.standalone.ui.hash.CreateHashFiles;
import es.gob.afirma.standalone.ui.preferences.PreferencesDialog;
import es.gob.afirma.standalone.ui.restoreconfig.RestoreConfigDialog;
/** Barra de menú para toda la aplicación.
* @author Tomás García-Merás */
public final class MainMenu extends JMenuBar {
private static final long serialVersionUID = -8361808353554036015L;
private final JMenuItem firmarMenuItem;
private final JMenuItem abrirMenuItem;
private final JFrame parent;
JFrame getParentComponent() {
return this.parent;
}
private final SimpleAfirma saf;
SimpleAfirma getSimpleAfirma() {
return this.saf;
}
/** Construye la barra de menú de la aplicación.
* En MS-Windows y Linux se crean los siguientes atajos de teclado:
*
*
Alt+A = Menu archivo
*
*
*
Alt+B = Abrir archivo
*
Alt+I = Firmar archivo
*
Alt+H = Huellas digitales
*
*
*
Alt+L = Calcular huella digital
*
Alt+R = Comprobar huella digital
*
*
*
Alt+F4 = Salir del programa
*
*
*
Alt+Y = Menu Ayuda
*
*
*
Alt+U = Ayuda
*
Alt+R = Acerca de...
*
*
*
Alt+S = Seleccionar fichero
*
Alt+F = Firmar fichero
*
Ctrl+A = Seleccionar fichero
*
Ctrl+F = Firmar fichero
*
Alt+F4 = Salir del programa
*
F1 = Ayuda
*
Ctrl+R = Acerca de...
*
Ctrl+H = Calcular huella digital
*
Ctrl+U = Comprobar huella digital
*
* @param p Componente padre para la modalidad
* @param s Aplicación padre, para determinar el número de
* locales e invocar a ciertos comandos de menú */
public MainMenu(final JFrame p, final SimpleAfirma s) {
this.saf = s;
this.parent = p;
this.firmarMenuItem = new JMenuItem();
this.abrirMenuItem = new JMenuItem();
// Importante: No cargar en un invokeLater, da guerra
createUI();
}
private void createUI() {
final boolean isMac = Platform.OS.MACOSX.equals(Platform.getOS());
final JMenu menuArchivo = new JMenu();
menuArchivo.setText(SimpleAfirmaMessages.getString("MainMenu.0")); //$NON-NLS-1$
menuArchivo.setMnemonic(KeyEvent.VK_A);
menuArchivo.getAccessibleContext().setAccessibleDescription(
SimpleAfirmaMessages.getString("MainMenu.1") //$NON-NLS-1$
);
menuArchivo.setEnabled(true);
this.abrirMenuItem.setText(SimpleAfirmaMessages.getString("MainMenu.2")); //$NON-NLS-1$
this.abrirMenuItem.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_A,
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()
)
);
this.abrirMenuItem.getAccessibleContext().setAccessibleDescription(
SimpleAfirmaMessages.getString("MainMenu.3") //$NON-NLS-1$
);
this.abrirMenuItem.addActionListener(
ae -> {
final File fileToLoad;
try {
fileToLoad = AOUIFactory.getLoadFiles(
SimpleAfirmaMessages.getString("MainMenu.4"), //$NON-NLS-1$
null,
null,
null,
null,
false,
false,
AutoFirmaUtil.getDefaultDialogsIcon(),
MainMenu.this
)[0];
}
catch(final AOCancelledOperationException e) {
return;
}
MainMenu.this.getSimpleAfirma().loadFileToSign(fileToLoad);
}
);
menuArchivo.add(this.abrirMenuItem);
this.firmarMenuItem.setText(SimpleAfirmaMessages.getString("MainMenu.5")); //$NON-NLS-1$
this.firmarMenuItem.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_F, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())
);
this.firmarMenuItem.getAccessibleContext().setAccessibleDescription(
SimpleAfirmaMessages.getString("MainMenu.6") //$NON-NLS-1$
);
this.firmarMenuItem.setEnabled(false);
this.firmarMenuItem.addActionListener(
e -> MainMenu.this.getSimpleAfirma().signLoadedFile()
);
menuArchivo.add(this.firmarMenuItem);
final JMenu toolsMenu = new JMenu(
SimpleAfirmaMessages.getString("MainMenu.32") //$NON-NLS-1$
);
toolsMenu.setMnemonic(KeyEvent.VK_R);
toolsMenu.getAccessibleContext().setAccessibleDescription(
SimpleAfirmaMessages.getString("MainMenu.33") //$NON-NLS-1$
);
toolsMenu.setEnabled(true);
final JMenu huellaMenu = new JMenu(
SimpleAfirmaMessages.getString("MainMenu.25") //$NON-NLS-1$
);
final JMenu huellaDirMenu = new JMenu(
SimpleAfirmaMessages.getString("MainMenu.31") //$NON-NLS-1$
);
huellaDirMenu.setMnemonic('D');
final JMenu huellaFileMenu = new JMenu(
SimpleAfirmaMessages.getString("MainMenu.30") //$NON-NLS-1$
);
huellaFileMenu.setMnemonic('F');
final JMenuItem createHashFileMenuItem = new JMenuItem(
SimpleAfirmaMessages.getString("MainMenu.26") //$NON-NLS-1$
);
createHashFileMenuItem.setMnemonic('a');
createHashFileMenuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_H, Toolkit.getDefaultToolkit()
.getMenuShortcutKeyMask()));
createHashFileMenuItem.addActionListener(e -> CreateHashDialog.startHashCreation(getParentComponent())
);
huellaFileMenu.add(createHashFileMenuItem);
final JMenuItem checkHashFileMenuItem = new JMenuItem(
SimpleAfirmaMessages.getString("MainMenu.27") //$NON-NLS-1$
);
checkHashFileMenuItem.setMnemonic('o');
checkHashFileMenuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_U, Toolkit.getDefaultToolkit()
.getMenuShortcutKeyMask()));
checkHashFileMenuItem.addActionListener(e -> CheckHashDialog.launch(getParentComponent())
);
final JMenuItem createHashDirMenuItem = new JMenuItem(
SimpleAfirmaMessages.getString("MainMenu.28") //$NON-NLS-1$
);
createHashDirMenuItem.setMnemonic('a');
createHashDirMenuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_D, Toolkit.getDefaultToolkit()
.getMenuShortcutKeyMask()));
createHashDirMenuItem.addActionListener(e -> CreateHashFiles.startHashCreation(getParentComponent()));
final JMenuItem checkHashDirMenuItem = new JMenuItem(
SimpleAfirmaMessages.getString("MainMenu.29") //$NON-NLS-1$
);
checkHashDirMenuItem.setMnemonic('o');
checkHashDirMenuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_K, Toolkit.getDefaultToolkit()
.getMenuShortcutKeyMask()));
checkHashDirMenuItem.addActionListener(e -> CheckHashFiles.startHashCheck(getParentComponent()));
huellaDirMenu.add(createHashDirMenuItem);
huellaDirMenu.add(checkHashDirMenuItem);
huellaFileMenu.add(createHashFileMenuItem);
huellaFileMenu.add(checkHashFileMenuItem);
huellaMenu.setMnemonic('H');
huellaMenu.add(huellaFileMenu);
huellaMenu.add(huellaDirMenu);
if (!isMac) {
huellaMenu.setMnemonic('H');
createHashFileMenuItem.setMnemonic('l');
}
// En Mac OS X el salir lo gestiona el propio OS
if (!isMac) {
menuArchivo.addSeparator();
final JMenuItem salirMenuItem = new JMenuItem(
SimpleAfirmaMessages.getString("MainMenu.7")); //$NON-NLS-1$
salirMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,
ActionEvent.ALT_MASK));
salirMenuItem.getAccessibleContext().setAccessibleDescription(
SimpleAfirmaMessages.getString("MainMenu.8") //$NON-NLS-1$
);
salirMenuItem.addActionListener(ae -> exitApplication()
);
salirMenuItem.setMnemonic(KeyEvent.VK_L);
menuArchivo.add(salirMenuItem);
}
this.add(menuArchivo);
toolsMenu.add(huellaMenu);
// Preparamos la opcion de menu para "restaurar la configuracion de los
// navegadores" en el menu de herramientas
final JMenuItem restoreConfigMenuItem = new JMenuItem(SimpleAfirmaMessages.getString("MainMenu.20")); //$NON-NLS-1$
restoreConfigMenuItem.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_R, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
restoreConfigMenuItem.setMnemonic(KeyEvent.VK_R);
restoreConfigMenuItem.getAccessibleContext()
.setAccessibleDescription(SimpleAfirmaMessages.getString("MainMenu.20") //$NON-NLS-1$
);
restoreConfigMenuItem.addActionListener(ae -> showRestoreConfig());
// toolsMenu.addSeparator();
toolsMenu.add(restoreConfigMenuItem);
this.add(toolsMenu);
if (!isMac) {
final JMenuItem preferencesMenuItem = new JMenuItem(SimpleAfirmaMessages.getString("MainMenu.12")); //$NON-NLS-1$
preferencesMenuItem.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_P, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())
);
preferencesMenuItem.setMnemonic(KeyEvent.VK_P);
preferencesMenuItem.getAccessibleContext().setAccessibleDescription(
SimpleAfirmaMessages.getString("MainMenu.16") //$NON-NLS-1$
);
preferencesMenuItem.addActionListener(
ae -> showPreferences()
);
toolsMenu.addSeparator();
toolsMenu.add(preferencesMenuItem);
}
// En Mac OS X el menu es "Preferencias" dentro de la opcion principal
else {
try {
final Method showPreferencesMethod = getClass().getDeclaredMethod("showPreferences", new Class[]{EventObject.class}); //$NON-NLS-1$
OSXHandler.setPreferencesHandler(this, showPreferencesMethod);
}
catch(final Exception | Error e) {
Logger.getLogger("es.gob.afirma").warning( //$NON-NLS-1$
"No ha sido posible establecer el menu de preferencias de OS X: " + e //$NON-NLS-1$
);
}
}
// Separador para que la ayuda quede a la derecha, se ignora en Mac OS X
this.add(Box.createHorizontalGlue());
final JMenu menuAyuda = new JMenu(SimpleAfirmaMessages.getString("MainMenu.9")); //$NON-NLS-1$
menuAyuda.setMnemonic(KeyEvent.VK_Y);
menuAyuda.getAccessibleContext().setAccessibleDescription(
SimpleAfirmaMessages.getString("MainMenu.10") //$NON-NLS-1$
);
final JMenuItem ayudaMenuItem = new JMenuItem();
ayudaMenuItem.setText(SimpleAfirmaMessages.getString("MainMenu.11")); //$NON-NLS-1$
ayudaMenuItem.setAccelerator(KeyStroke.getKeyStroke("F1")); //$NON-NLS-1$
ayudaMenuItem.getAccessibleContext().setAccessibleDescription(
SimpleAfirmaMessages.getString("MainMenu.13") //$NON-NLS-1$
);
ayudaMenuItem.addActionListener(
e -> SimpleAfirma.showHelp()
);
menuAyuda.add(ayudaMenuItem);
// En Mac OS X el Acerca de lo gestiona el propio OS
if (!isMac) {
menuAyuda.addSeparator();
final JMenuItem acercaMenuItem = new JMenuItem(SimpleAfirmaMessages.getString("MainMenu.15")); //$NON-NLS-1$
acercaMenuItem.getAccessibleContext().setAccessibleDescription(
SimpleAfirmaMessages.getString("MainMenu.17") //$NON-NLS-1$
);
acercaMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
acercaMenuItem.addActionListener(ae -> showAbout(MainMenu.this.getParentComponent() == null ? MainMenu.this : MainMenu.this.getParentComponent()));
acercaMenuItem.setMnemonic(KeyEvent.VK_R);
menuAyuda.add(acercaMenuItem);
this.add(menuAyuda);
}
// Los mnemonicos en elementos de menu violan las normas de interfaz de Apple,
// asi que prescindimos de ellos en Mac OS X
if (!isMac) {
this.abrirMenuItem.setMnemonic(KeyEvent.VK_B);
ayudaMenuItem.setMnemonic(KeyEvent.VK_U);
this.firmarMenuItem.setMnemonic(KeyEvent.VK_F);
}
// Acciones especificas de Mac OS X
else {
try {
final Method aboutMethod = getClass().getDeclaredMethod("showAbout", new Class[]{EventObject.class}); //$NON-NLS-1$
OSXHandler.setAboutHandler(this, aboutMethod);
}
catch (final Exception e) {
e.printStackTrace();
}
try {
final Method exitApplicationMethod = getClass().getDeclaredMethod("exitApplication", new Class[]{EventObject.class, Object.class}); //$NON-NLS-1$
OSXHandler.setQuitHandler(this, exitApplicationMethod);
}
catch (final Exception e) {
e.printStackTrace();
}
}
}
/** Habilita o deshabilita el menú de operaciones sobre ficheros.
* @param en true para habilitar las operaciones sobre ficheros, false para deshabilitarlas */
public void setEnabledOpenCommand(final boolean en) {
if (this.abrirMenuItem != null) {
this.abrirMenuItem.setEnabled(en);
}
}
/** Habilita o deshabilita el elemento de menú de firma de fichero.
* @param en true para habilitar el elemento de menú de firma de fichero, false para deshabilitarlo */
public void setEnabledSignCommand(final boolean en) {
if (this.firmarMenuItem != null) {
this.firmarMenuItem.setEnabled(en);
}
}
void showPreferences(final EventObject event) {
showPreferences();
}
void showPreferences() {
PreferencesDialog.show(MainMenu.this.getParentComponent(), true);
}
void showRestoreConfig() {
RestoreConfigDialog.show(MainMenu.this.getParentComponent(), true);
}
@SuppressWarnings("unused")
void showAbout(final EventObject event) {
showAbout(MainMenu.this.getParentComponent() == null ? MainMenu.this : MainMenu.this.getParentComponent());
}
/** Muestra en OS X el menú "Acerca de...".
* @param parentComponent Componente padre para la modalidad. */
public static void showAbout(final Component parentComponent) {
AOUIFactory.showMessageDialog(
parentComponent,
SimpleAfirmaMessages.getString("MainMenu.14", SimpleAfirma.getVersion(), System.getProperty("java.version")), //$NON-NLS-1$ //$NON-NLS-2$,
SimpleAfirmaMessages.getString("MainMenu.15"), //$NON-NLS-1$
JOptionPane.PLAIN_MESSAGE
);
}
@SuppressWarnings("unused")
boolean exitApplication(final EventObject event, final Object response) {
return this.saf.askForClosing();
}
boolean exitApplication() {
return this.saf.askForClosing();
}
}