Package org.analyse.core.gui

Source Code of org.analyse.core.gui.AnalyseFrame$WindowHandler

/*
* 05/15/2003 - 22:04:55
*
* AnalyseFrame.java -
* Copyright (C) 2003 Dreux Loic
* dreuxl@free.fr
*
*
* This program 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 any later version.
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

package org.analyse.core.gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import org.analyse.core.gui.action.BasicAction;
import org.analyse.core.gui.action.MainActionListener;
import org.analyse.core.gui.action.NavigationActionFactory;
import org.analyse.core.gui.menu.AnalyseMenu;
import org.analyse.core.gui.panel.HelpPanel;
import org.analyse.core.gui.panel.Navigator;
import org.analyse.core.gui.toolbar.AnalyseToolbar;
import org.analyse.core.modules.AnalysePanel;
import org.analyse.core.util.Constantes;
import org.analyse.core.util.GUIUtilities;
import org.analyse.core.util.Utilities;
import org.analyse.core.util.save.AnalyseSave;
import org.analyse.main.Main;

/**
* Fenetre principale d'AnalyseSI
*/
public class AnalyseFrame extends JFrame {
 
  public static final String DEFAULT = Constantes.DEFAULT ;
  public static final String HELP = Constantes.HELP;

  /* Menu + Toolbar */
  private AnalyseMenu menu;

  private AnalyseToolbar toolbar;

  private AnalyseBar analyseBar;

  /* Listener */
  private MainActionListener actionListener;

  /* Sauvegarde */
  private Properties props;

  private AnalyseSave analyseSave;

  /* Panel */
  private Navigator navigator;

  private JPanel center;

  private AnalysePanel panelCurrent;

  private AnalysePanel helpPanel;

  /* Factory */
  private NavigationActionFactory navigationActionFactory;

  /**
   * Crée une nouvelle Fenetre AnalyseSI
   */
  public AnalyseFrame() {
    /* Construction d'AnalyseFrame */
    super(Utilities.getRelease() + " - sans nom");
    this
        .setIconImage(GUIUtilities.getImageIcon(Constantes.FILE_PNG_ANALYSESI)
            .getImage());

    /* Gestion des évènements */
    this.addWindowListener(new WindowHandler());
    actionListener = new MainActionListener();
    navigationActionFactory = new NavigationActionFactory(this);

    /* Constuction des Menus */
    menu = new AnalyseMenu();
    menu.init();
    toolbar = new AnalyseToolbar();
    Main.splash.setProgress(30);

    /* Constuction du Panel d'aide */
    helpPanel = new HelpPanel();
    Main.splash.setProgress(40);

    /* Container */
    Container c = this.getContentPane();
    c.setLayout(new BorderLayout());

    /* Nord */
    c.add(BorderLayout.NORTH, new JPanel(new BorderLayout()) {
      {
        this.add(BorderLayout.CENTER, new JPanel(new BorderLayout()) {
          {
            this.add(BorderLayout.NORTH, menu.getMenuBar());
            this.add(BorderLayout.SOUTH, toolbar);
          }
        });
        //this.add(BorderLayout.EAST, new AnalyseBar(Constantes.RELEASE));
        this.setBorder(BorderFactory.createEtchedBorder());
      }
    });
    /* Centre */
    navigator = new Navigator(this);
    Main.splash.setProgress(50);

    center = new JPanel(new BorderLayout());
    center.add(BorderLayout.WEST, navigator);
    center.add(BorderLayout.CENTER, new JPanel());

    Dimension minimumSize = new Dimension(200, 50);
    navigator.setMinimumSize(minimumSize);
    c.add(BorderLayout.CENTER, center);
    /* Sud */
    c.add(BorderLayout.SOUTH, Main.statusbar);
    Main.splash.setProgress(60);

    /* Chargement du panel d'aide */
                setPanel( helpPanel ) ;
               

    /* Redimensionnement et mise au centre */
    this.setSize(640, 480);

    GUIUtilities.centerComponent(this);
    Main.splash.setProgress(70);

    /* Gestion des sauvegardes */
    analyseSave = new AnalyseSave(this);
    Main.splash.setProgress(80);

    /* Chargement des propriétés */
    props = new Properties();
    loadProperties();
  }

  /**
   * Méthode exécutée après l'initialisation des modules
   */
  public void initGUI() {
    navigator.addButton(navigationActionFactory.buildNavigationAction(
        GUIUtilities.getImageIcon("About.png"),
        Utilities.getLangueMessage(Constantes.MESSAGE_AIDE),
        Utilities.getLangueMessage(Constantes.MESSAGE_AIDE),
        helpPanel));
  }

  /**
   * Sauvegarde les propriétés dans un fichier.
   */
  public void saveProperties() {
    try {
      FileOutputStream fos = new FileOutputStream(new File(
          Main.USER_PROPS));

      props.setProperty("X", "" + this.getX());
      props.setProperty("Y", "" + this.getY());
      props.setProperty("width", "" + this.getWidth());
      props.setProperty("height", "" + this.getHeight());
      props.setProperty("tree", "" + toolbar.getTreeSelected());

      props.store(fos, "properties");
    } catch (IOException e) {

    }
  }

  /**
   * Récupère les propriétés depuis un fichier.
   */
  public void loadProperties() {
    try {
      FileInputStream fis = new FileInputStream(new File(Main.USER_PROPS));

      props.load(fis);

    } catch (IOException e) {
      initProperties();
    }

    if (!validProperties())
      initProperties();

    this.setBounds(new Integer(props.getProperty("X")).intValue(),
        new Integer(props.getProperty("Y")).intValue(), new Integer(
            props.getProperty("width")).intValue(), new Integer(
            props.getProperty("height")).intValue());
    toolbar.setTreeSelected(new Boolean(props.getProperty("tree"))
        .booleanValue());
    this.showHideNavigator();
  }

  /**
   * Vérifie que toutes les propriétés sont correctes.
   */
  public boolean validProperties() {
    return props.getProperty("X") != null && props.getProperty("Y") != null
        && props.getProperty("height") != null
        && props.getProperty("width") != null
        && props.getProperty("tree") != null;
  }

  /**
   * Initialise les propriétés par défaut.
   */
  public void initProperties() {
    File dir = new File(Main.SETTINGS_DIRECTORY);
    File file = new File(Main.USER_PROPS);
    FileInputStream stream;

    if (!dir.exists())
      dir.mkdir();

    try {
      FileOutputStream fos = new FileOutputStream(new File(
          Main.USER_PROPS));

      props.setProperty("X", "400");
      props.setProperty("Y", "250");
      props.setProperty("width", "640");
      props.setProperty("height", "480");
      props.setProperty("tree", "true");

      props.store(fos, "properties");
    } catch (IOException e) {
    }
  }

  public void showHideNavigator() {
    if (!toolbar.getTreeSelected())
      center.remove(navigator);
    else
      center.add(BorderLayout.WEST, navigator);

    center.revalidate();
    center.repaint();

  }

  /**
   * Modifie le panel courant.
   *
   * @param c
   *            nouveau panel
   */
  public void setPanel(AnalysePanel panelCurrent) {
    if (this.panelCurrent != null)
      center.remove(this.panelCurrent);

    center.add(BorderLayout.CENTER, panelCurrent);
    center.revalidate();
    center.repaint();

    this.panelCurrent = panelCurrent;
  }

  /**
   * Retourne le panel courant.
   */
  public AnalysePanel getCurrentPanel() {
    return panelCurrent;
  }

  /**
   * Retourne la bar de titre.
   */
  public AnalyseBar getAnalyseBar() {
    return analyseBar;
  }

  /**
   * Retourne la classe qui gère les sauvegardes.
   */
  public AnalyseSave getAnalyseSave() {
    return analyseSave;
  }

  /**
   * Retourne la fabrique d'action de navigation
   *
   */
  public NavigationActionFactory getNavigationActionFactory() {
    return navigationActionFactory;
  }

  /**
   * Ajoute un menu avant le menu aide
   *
   */
  public void addMenu(JMenu menu) {
    this.menu.addMenu(menu);
  }

  /**
   * Ajoute un bouton dans la barre d'outil
   *
   */
  public void addButton(JButton button) {
    this.toolbar.addButton(button);
  }

  /**
   * Ajoute un bouton de navigation
   *
   */
  public void addNavigateButton(BasicAction action) {
    this.navigator.addButton(action);
  }

  /**
   * Ferme proprement en sauvegardant les paramètres.
   */
  public boolean exit() {
   
    int  reponse  = analyseSave.closeProgram();

    if ( reponse == JOptionPane.YES_OPTION || reponse == JOptionPane.NO_OPTION  ) {    // Bug #348263 
      saveProperties();
      System.exit(0);
    }
   
    if ( reponse == JOptionPane.CANCEL_OPTION )   // c'est fait exprès ( chemin tortueux à modifier )
      return false ;
    else
      return true  // Bug #348263

  }

  private class WindowHandler extends WindowAdapter {
    public void windowClosing(WindowEvent evt) {
      boolean sortir = exit();
     
      // Bug #348263
      if ( ! sortir )
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
      else
        System.exit(0);     
    }
  }
}
TOP

Related Classes of org.analyse.core.gui.AnalyseFrame$WindowHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.