Package kameleon.gui.view

Source Code of kameleon.gui.view.SelectionView

/*
* Copyright (c) 2012, Fromentin Xavier, Schnell Michaël, Dervin Cyrielle, Brabant Quentin
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*      * Redistributions of source code must retain the above copyright
*       notice, this list of conditions and the following disclaimer.
*      * Redistributions in binary form must reproduce the above copyright
*       notice, this list of conditions and the following disclaimer in the
*       documentation and/or other materials provided with the distribution.
*      * The names of its contributors may not be used to endorse or promote products
*       derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL Fromentin Xavier, Schnell Michaël, Dervin Cyrielle OR Brabant Quentin
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package kameleon.gui.view;

import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import kameleon.exception.FileReadingException;
import kameleon.exception.KameleonException;
import kameleon.gui.exception.UnknownKeyException;
import kameleon.gui.language.SwitchLanguage;
import kameleon.gui.model.FileModel;
import kameleon.gui.model.Model;
import kameleon.gui.model.Observer;
import kameleon.gui.util.FileConstants;
import kameleon.gui.util.ImageUtility;
import kameleon.gui.util.LanguageConstants;

/**
* View showing the currently selected file as well as the last time the
* current file was used to generate others and the currently used charset.
*
* @author    Fromentin Xavier, Schnell Michaël, Dervin Cyrielle
* @version    1.0
*/
public class SelectionView extends JPanel
implements Observer, FileConstants, LanguageConstants {

  /**
   * Needed to serialize this class.
   *
   * @see    java.io.Serializable
   */
  private static final long serialVersionUID = 6674276013071380986L ;
 
  /**
   * Constant used to initialize graphical components.
   */
  private static final String EMPTY_TEXT = "" ;//$NON-NLS-1$
 
  /**
   * Font used by plain text.
   */
  private final Font PLAIN = new Font(
      this.getFont().getName(), Font.PLAIN, this.getFont().getSize()) ;
 
  /**
   * Font used by italic text.
   */
  private final Font ITALIC = new Font(
      this.getFont().getName(), Font.ITALIC, this.getFont().getSize()) ;
 
  /**
   * Font used by bold text.
   */
  private final Font BOLD = new Font(
      this.getFont().getName(), Font.BOLD, this.getFont().getSize()) ;
 
  /**
   * Model of this view.
   */
  protected Model model ;
 
  /**
   * Label displaying the title for the file name.
   */
  protected JLabel titleName ;
 
  /**
   * Label displaying the the file name.
   */
  protected JLabel fileName ;
 
  /**
   * Label displaying the title of the last generation date.
   */
  protected JLabel dateTitle ;
 
  /**
   * Label displaying the last generation date.
   */
  protected JLabel lastModificationDate ;
 
  /**
   * Label displaying the title for the charset selection.
   */
  protected JLabel encodingTitle ;
 
  /**
   * Combo box used to specify the charset.
   */
  protected JComboBox encodingList ;
 
  /**
   * Button used to access detailed information about the last generation.
   */
  protected JButton moreInfo ;
 
  /**
   * JFrame containing this view.
   */
  protected JFrame parent ;

  /**
   * Sole constructor.
   *
   * @param  model
   *       model of this view
   *
   * @param  container
   *       parent frame of this instance
   *
   * @throws  KameleonException
   *       if an error occurred while building this instance
   */
  public SelectionView(JFrame container, Model model) throws KameleonException {
    super() ;
    this.parent = container;
    this.model = model ;
    this.model.addObserver(this) ;
    this.build() ;
  }// SelectionView(JFrame, Model)

  /**
   * Builds the content of this view.
   *
   * @throws   UnknownKeyException
   *       if a key for a displayed text could not be found
   *
   * @throws   FileReadingException
   *       If a format icon could not be loaded
   */
  protected void build() throws UnknownKeyException, FileReadingException {
    GridBagLayout gridbag = new GridBagLayout() ;
    GridBagConstraints constraints ;
    this.setLayout(gridbag) ;
    this.setBorder(BorderFactory.createTitledBorder(EMPTY_TEXT)) ;

    // Name of the file (title)
    constraints = new GridBagConstraints() ;
    constraints.gridwidth = 1 ;
    constraints.weightx = 0.0 ;
    constraints.weighty = 0.0 ;
    constraints.insets = new Insets(0, 0, 5, 5) ;
    constraints.anchor = GridBagConstraints.BASELINE_TRAILING ;
    this.titleName = new JLabel(EMPTY_TEXT) ;
    this.titleName.setFont(this.BOLD) ;
    this.add(this.titleName) ;
    gridbag.setConstraints(this.titleName, constraints) ;
   
    // Name of the file (value)
    constraints = new GridBagConstraints() ;
    constraints.gridwidth = GridBagConstraints.REMAINDER ;
    constraints.weightx = 1.0 ;
    constraints.weighty = 0.0 ;
    constraints.anchor = GridBagConstraints.BASELINE_LEADING ;
    this.fileName = new JLabel(EMPTY_TEXT) ;
    this.fileName.setFont(this.ITALIC) ;
    this.add(this.fileName) ;
    gridbag.setConstraints(this.fileName, constraints) ;

    // Last generation date (title)
    constraints = new GridBagConstraints() ;
    constraints.gridwidth = 1 ;
    constraints.weightx = 0.0 ;
    constraints.weighty = 0.0 ;
    constraints.insets = new Insets(0, 0, 0, 5) ;
    constraints.anchor = GridBagConstraints.BASELINE_TRAILING ;
    this.dateTitle = new JLabel(EMPTY_TEXT) ;
    this.dateTitle.setFont(this.BOLD) ;
    this.add(this.dateTitle) ;
    gridbag.setConstraints(this.dateTitle, constraints) ;
   
    // Last generation date (value)
    constraints = new GridBagConstraints() ;
    constraints.gridwidth = GridBagConstraints.REMAINDER ;
    constraints.weightx = 1.0 ;
    constraints.weighty = 0.0 ;
    constraints.anchor = GridBagConstraints.BASELINE_LEADING ;
    constraints.weighty = 1.0 ;
    this.lastModificationDate = new JLabel(EMPTY_TEXT) ;
    this.lastModificationDate.setFont(this.ITALIC) ;
    this.add(this.lastModificationDate) ;
    gridbag.setConstraints(this.lastModificationDate, constraints) ;

    // Charset (title)
    constraints = new GridBagConstraints() ;
    constraints.gridwidth = 1 ;
    constraints.weightx = 0.0 ;
    constraints.weighty = 0.0 ;
    constraints.insets = new Insets(0, 0, 0, 5) ;
    constraints.anchor = GridBagConstraints.BASELINE_TRAILING ;
    this.encodingTitle = new JLabel(EMPTY_TEXT) ;
    this.encodingTitle.setFont(this.BOLD) ;
    this.add(this.encodingTitle) ;
    gridbag.setConstraints(this.encodingTitle, constraints) ;
   
    // Charset (value)
    constraints = new GridBagConstraints() ;
    constraints.gridwidth = 1 ;
    constraints.anchor = GridBagConstraints.BASELINE_LEADING ;
    this.encodingList = new JComboBox(FileModel.getDefaultCharsets()) ;
    this.encodingList.setSelectedItem(this.model.getCharset()) ;
    this.encodingList.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        SelectionView.this.model.setCharset(
            (String) SelectionView.this.encodingList.getSelectedItem()) ;
      }// actionPerformed(ActionEvent)
    }) ;
    this.add(this.encodingList) ;
    gridbag.setConstraints(this.encodingList, constraints) ;

    // More information button
    constraints = new GridBagConstraints() ;
    constraints.gridwidth = GridBagConstraints.REMAINDER ;
    constraints.weighty = 0.0 ;
    constraints.anchor = GridBagConstraints.NORTHEAST ;
    InputStream src = new BufferedInputStream(
        SelectionView.class.getResourceAsStream(MORE_INFORMATION_FILE)) ;
    ImageIcon buttonIcon = new ImageIcon(ImageUtility.getImageBytes(src)) ;
    try {
      src.close() ;
    } catch (IOException ioe) {
      throw new FileReadingException(new File(MORE_INFORMATION_FILE)) ;
    }// try
    this.moreInfo = new JButton(buttonIcon);
    this.moreInfo.setToolTipText(MORE_INFO_BUTTON);
    this.moreInfo.setEnabled(SelectionView.this.model.fileIsSelected()
        && (this.model.getSelectedFileInfo().getLastGeneration() != null)) ;
    this.moreInfo.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e){
        try {
          new MoreInformationFrame(SelectionView.this.parent,
              SelectionView.this.model).setVisible(true) ;
        } catch (KameleonException ke) {
          SelectionView.this.model.displayDebugInformation(ke) ;
        }// try
      }
    });
    this.add(this.moreInfo) ;
    gridbag.setConstraints(this.moreInfo, constraints) ;
   
    this.reloadLanguage() ;
  }// build

  /**
   * Updates the displayed information about the currently selected file.
   *
   * @throws   UnknownKeyException
   *       if an error occurred while updating the text of this view
   */
  @Override
  public void update() throws UnknownKeyException {
    SwitchLanguage sl = SwitchLanguage.getInstance() ;
   
    if (this.model.fileIsSelected()) {
      this.fileName.setText(this.model.getSelectedFileInfo().getName()) ;
      this.fileName.setFont(this.PLAIN) ;
      String last = this.model.getFileLastGenerationDate() ;
      if (last == null) {
        this.lastModificationDate.setText(sl.getText(NEVER_GENERATED));
      } else {
        this.lastModificationDate.setText(last) ;
      }// if
      this.lastModificationDate.setFont(this.PLAIN) ;
    } else {
      this.fileName.setText(sl.getText(NO_FILE)) ;
      this.fileName.setFont(this.ITALIC) ;
      this.lastModificationDate.setText(sl.getText(NO_FILE)) ;
      this.lastModificationDate.setFont(this.ITALIC) ;
    }// if
   
    this.moreInfo.setEnabled(SelectionView.this.model.fileIsSelected()
        && (this.model.getSelectedFileInfo().getLastGeneration() != null)) ;
  }// update()

  /**
   * Updates the text to match the currently selected language.
   *
   * @throws   UnknownKeyException
   *       if an error occurred while updating the text of this view
   */
  @Override
  public void reloadLanguage() throws UnknownKeyException {
    SwitchLanguage sl = SwitchLanguage.getInstance() ;
   
    this.setBorder(BorderFactory.createTitledBorder(
        sl.getText(SELECTION_TITLE_BORDER)));
    this.titleName.setText(sl.getText(NAME_LABEL)) ;
    this.dateTitle.setText(sl.getText(LAST_GENERATED)) ;
    this.encodingTitle.setText(sl.getText(CHARSET_SELECTION)) ;
    this.moreInfo.setToolTipText((sl.getText(MORE_INFO_BUTTON))) ;
    if (!this.model.fileIsSelected()) {
      this.lastModificationDate.setText(sl.getText(NO_FILE)) ;
      this.fileName.setText(sl.getText(NO_FILE)) ;
    } else {
      String last = this.model.getFileLastGenerationDate() ;
      if (last == null) {
        this.lastModificationDate.setText(sl.getText(NEVER_GENERATED)) ;
      } else {
        this.lastModificationDate.setText(last) ;
      }// if
    }// if
  }// reloadLanguage()

}// class SelectionView
TOP

Related Classes of kameleon.gui.view.SelectionView

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.