Application.java 10,1 ko
Newer Older
Bruno Mermet's avatar
Bruno Mermet a validé
package edu.mermet.tp8;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Properties;

Bruno Mermet's avatar
Bruno Mermet a validé
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;

import edu.mermet.tp8.aide.ConfigurationMenus;
import edu.mermet.tp8.aide.FenetreHowTo;
Bruno Mermet's avatar
Bruno Mermet a validé
import edu.mermet.tp8.fenetres.FenetreBoutons;
import edu.mermet.tp8.fenetres.FenetreConversion;
import edu.mermet.tp8.fenetres.FenetreDiaporama;
import edu.mermet.tp8.fenetres.FenetreTexte;

/**
 *
 * @author brunomermet
 */
public class Application extends JFrame {
	public final static String MENU_MODE_AUTO = "auto";
	public final static String MENU_MODE_AFFICHE = "affichée";
	public final static String MENU_MODE_CACHE = "cachée";
Bruno Mermet's avatar
Bruno Mermet a validé
    private JInternalFrame conversion;
    private JInternalFrame texte;
    private JInternalFrame diaporama;
    private JInternalFrame boutons;
    private Action actionAfficherConversion;
    private Action actionAfficherTexte;
    private Action actionAfficherDiaporama;
    private Action actionAfficherBoutons;
    private Action actionHowTo;
    private Action actionConfigurationMenus;
Bruno Mermet's avatar
Bruno Mermet a validé
    public Application() {
        super("multi-fenêtres");
        this.setContentPane(new JDesktopPane());

        // ****** Barre de menu ******
        JMenuBar barre = new JMenuBar();
        // ------ menu Fichier ------
        JMenu menuFichier = new JMenu("Fichier");
        menuFichier.setMnemonic(KeyEvent.VK_F);
        JMenuItem quitter = new JMenuItem("Quitter");
        quitter.addActionListener (new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent aev) {
                System.exit(0);
            }
        });
        quitter.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_DOWN_MASK));
        menuFichier.add(quitter);
        barre.add(menuFichier);
        this.setJMenuBar(barre);
        // ------ menu Applications ------
Bruno Mermet's avatar
Bruno Mermet a validé
        JMenu menuApplication = new JMenu("Applications");
        menuApplication.setMnemonic(KeyEvent.VK_A);
        actionAfficherConversion = new ActionAfficherConversion();
        JMenuItem itemConversion = new JMenuItem(actionAfficherConversion);
        menuApplication.add(itemConversion);
        actionAfficherTexte = new ActionAfficherTexte();
        JMenuItem itemTexte = new JMenuItem(actionAfficherTexte);
        menuApplication.add(itemTexte);
        actionAfficherDiaporama = new ActionAfficherDiaporama();
        JMenuItem itemDiaporama = new JMenuItem(actionAfficherDiaporama);
        menuApplication.add(itemDiaporama);
        actionAfficherBoutons = new ActionAfficherBoutons();
        JMenuItem itemBoutons = new JMenuItem(actionAfficherBoutons);
        menuApplication.add(itemBoutons);
        refreshMenuMode();
Bruno Mermet's avatar
Bruno Mermet a validé
        barre.add(menuApplication);
        // ------ menu Aide ------
        JMenu menuAide = new JMenu("Aide");
        menuAide.setMnemonic(KeyEvent.VK_H); // "Help"
        actionHowTo = new ActionHowTo();
        JMenuItem itemHowTo = new JMenuItem(actionHowTo);
        menuAide.add(itemHowTo);
        actionConfigurationMenus = new ActionConfigurationMenus();
        JMenuItem itemConfigurationMenus = new JMenuItem(actionConfigurationMenus);
        menuAide.add(itemConfigurationMenus);
        barre.add(menuAide);
Bruno Mermet's avatar
Bruno Mermet a validé
        // ****** Fin barre de menu ******
        
        // ****** Création des fenêtres ******
        // ------ fenêtre conversion ------
        conversion = new FenetreConversion(actionAfficherConversion);
        this.add(conversion);
        // ------ fenêtre texte ------
        texte = new FenetreTexte(actionAfficherTexte);
        this.add(texte);
        // ------ fenêtre diaporama ------
        diaporama = new FenetreDiaporama(actionAfficherDiaporama);
        this.add(diaporama);
        // ------ fenêtre boutons ------
        boutons = new FenetreBoutons(this,actionAfficherBoutons);
        this.add(boutons);
        // ****** Fin création fenêtres ******
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,300);
        this.setLocationRelativeTo(null);
        setVisible(true);
    }

    public void refreshMenuMode() {
    	String path =  System.getProperty("user.home") + "/.ihm/" + System.getProperty("user.name") + ".xml";
    	Properties utilisateur = new Properties();
    	try {
	    	utilisateur.loadFromXML(new FileInputStream(new File(path)));
			enableConversion(shouldEnable(utilisateur.getProperty("Conversion/MenuMode")));
			enableTexte(shouldEnable(utilisateur.getProperty("Saisie de Texte/MenuMode")));
			enableDiaporama(shouldEnable(utilisateur.getProperty("Diaporama/MenuMode")));
			enableBoutons(shouldEnable(utilisateur.getProperty("Boutons/MenuMode")));
    	} catch(Exception e) {
    		e.printStackTrace();
    		System.err.println("Impossible d'utiliser les données de l'utilisateur");
    	}
    private boolean shouldEnable(String menuMode) {
    	switch(menuMode) {
    	case MENU_MODE_AFFICHE:
    		return true;
		case MENU_MODE_CACHE:
    		return false;
		default: 
    	case MENU_MODE_AUTO:
    		return true;	
    	}
    }
    
	private void loadMenuMode() {
		try {
			String path =  System.getProperty("user.home") + "/.ihm/" + System.getProperty("user.name") + ".xml";
			File donneesUtilisateur = new File(path);
			if(!donneesUtilisateur.exists()) {
				File ihmDirectory = new File(System.getProperty("user.home") + "/.ihm");
				if(!ihmDirectory.exists()) {
					ihmDirectory.mkdir();
				}
				System.out.println("ah bah non");
				Properties nouvelUtilisateur = new Properties();
				OutputStream os = new FileOutputStream(donneesUtilisateur);
				nouvelUtilisateur.setProperty("Conversion/MenuMode", MENU_MODE_AUTO);
				nouvelUtilisateur.setProperty("Saisie de Texte/MenuMode", MENU_MODE_AUTO);
				nouvelUtilisateur.setProperty("Diaporama/MenuMode", MENU_MODE_AUTO);
				nouvelUtilisateur.setProperty("Boutons/MenuMode", MENU_MODE_AUTO);
				nouvelUtilisateur.storeToXML(os, null, "UTF-8");
			}
		} catch( Exception e) {
			e.printStackTrace();
			System.err.println("Impossible d'utiliser les données de l'utilisateur");	
	}

	private class ActionAfficherBoutons extends AbstractAction {
Bruno Mermet's avatar
Bruno Mermet a validé
        public ActionAfficherBoutons() {
            super("Boutons");
            putValue(Action.ACCELERATOR_KEY,KeyStroke.getKeyStroke(KeyEvent.VK_B, InputEvent.CTRL_DOWN_MASK));
            putValue(Action.MNEMONIC_KEY,KeyEvent.VK_B);
        }

        @Override
        public void actionPerformed(ActionEvent ae) {
            boutons.setVisible(true);
            enableBoutons(false);
        }
    }

    private class ActionAfficherDiaporama extends AbstractAction {
        public ActionAfficherDiaporama() {
            super("Diaporama");
            putValue(Action.ACCELERATOR_KEY,KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_DOWN_MASK));
            putValue(Action.MNEMONIC_KEY,KeyEvent.VK_D);
        }

        @Override
        public void actionPerformed(ActionEvent ae) {
            diaporama.setVisible(true);
            enableDiaporama(false);
        }
    }

    private class ActionAfficherTexte extends AbstractAction {
        public ActionAfficherTexte() {
            super("Saisie de texte");
            putValue(Action.ACCELERATOR_KEY,KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_DOWN_MASK));
            putValue(Action.MNEMONIC_KEY,KeyEvent.VK_T);
        }

        @Override
        public void actionPerformed(ActionEvent ae) {
            texte.setVisible(true);
            enableTexte(false);
        }
    }
    
    public class ActionAfficherConversion extends AbstractAction {
        public ActionAfficherConversion() {
            super("Conversion Celsius/Farenheit");
            putValue(Action.ACCELERATOR_KEY,KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK));
            putValue(Action.MNEMONIC_KEY,KeyEvent.VK_C);
        }

        @Override
        public void actionPerformed(ActionEvent ae) {
            conversion.setVisible(true);
            enableConversion(false);
        }
    }
    private class ActionHowTo extends AbstractAction {
        public ActionHowTo() {
            super("Comment faire ?");
            putValue(Action.ACCELERATOR_KEY,KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_DOWN_MASK));
            putValue(Action.MNEMONIC_KEY,KeyEvent.VK_F);
        }

        @Override
        public void actionPerformed(ActionEvent ae) {
            new FenetreHowTo(Application.this);
        }
    }
    
    private class ActionConfigurationMenus extends AbstractAction {
        public ActionConfigurationMenus() {
            super("Configuration des menus");
            putValue(Action.ACCELERATOR_KEY,KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_DOWN_MASK));
            putValue(Action.MNEMONIC_KEY,KeyEvent.VK_G);
        }

        @Override
        public void actionPerformed(ActionEvent ae) {
            new ConfigurationMenus(Application.this);
        }
    }
Bruno Mermet's avatar
Bruno Mermet a validé

    public void enableConversion(boolean b) {
        actionAfficherConversion.setEnabled(b);
    }

    public void enableTexte(boolean b) {
        actionAfficherTexte.setEnabled(b);
    }

    public void enableDiaporama(boolean b) {
        actionAfficherDiaporama.setEnabled(b);
    }

    public void enableBoutons(boolean b) {
        actionAfficherBoutons.setEnabled(b);
    }

    public Action getActionAfficherConversion() {
        return actionAfficherConversion;
    }

    public Action getActionAfficherTexte() {
        return actionAfficherTexte;
    }

    public Action getActionAfficherDiaporama() {
        return actionAfficherDiaporama;
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(Application::new);
    }
    
}