Package kameleon.gui.view

Source Code of kameleon.gui.view.FormatView$FormatMouseListener

/*
* 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.BorderLayout;
import java.awt.Cursor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

import kameleon.exception.FileReadingException;
import kameleon.exception.KameleonException;
import kameleon.gui.exception.UnknownKeyException;
import kameleon.gui.language.SwitchLanguage;
import kameleon.gui.model.FileInfo;
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;
import kameleon.plugin.PlugInInfo;

/**
* View showing the file format of the currently selected file.
* The file format is displayed using the coloured picture of the
* format.
*
* @author    Schnell Michaël
* @version    1.0
*/
public class FormatView extends JPanel
implements Observer, LanguageConstants, FileConstants {

  /**
   * Needed to serialize this class.
   *
   * @see    java.io.Serializable
   */
  private static final long serialVersionUID = 6674276013071380986L ;

  /**
   * Icon representing an unknown file format or that no file
   * is currently selected.
   */
  protected static final ImageIcon UNKNOWN_FORMAT_IMAGE =
      getUnknownFormatIcon() ;

  /**
   * Model of this view.
   */
  protected Model model ;
 
  /**
   * Component displaying the icon of the format.
   */
  protected JLabel formatIcon ;
 
  /**
   * Parent {@code JFrame} of this instance.
   */
  protected JFrame container ;
 
  /**
   * Plug-in information about the currently displayed format.
   */
  protected PlugInInfo currentAnalyzer ;

  /**
   * Builds an instance with the given model and parent.
   *
   * @param  model
   *       model of this view
   *
   * @param  container
   *       parent {@code JFrame} of this component
   */
  public FormatView(Model model, JFrame container) {
    super() ;
    this.model = model ;
    this.model.addObserver(this) ;
    this.container = container ;
    this.currentAnalyzer = null ;
    this.build() ;
  }// FormatView(Model, JFrame)

  /**
   * Builds the content of this view.
   */
  private void build() {
    this.setBorder(BorderFactory.createTitledBorder("")) ; //$NON-NLS-1$
    this.setLayout(new BorderLayout()) ;

    this.formatIcon = new JLabel(UNKNOWN_FORMAT_IMAGE) ;
    this.formatIcon.addMouseListener(new FormatMouseListener()) ;
    this.add(this.formatIcon, BorderLayout.CENTER) ;
  }// build()

  /**
   * Updates the displayed icon base on the currently selected file.
   *
   * @throws  UnknownKeyException
   *       if a key needed for a displayed text was not found
   *
   * @throws  FileReadingException
   *       if an icon could not be read
   */
  @SuppressWarnings("null")
  @Override
  public void update()
      throws FileReadingException, UnknownKeyException {
    // Update the format icon
    if (this.model.selectionHasChanged()) {
      // Update the cursor
      SwitchLanguage sl = SwitchLanguage.getInstance() ;
     
      // Determine the new icon and tooltip
      String newTooltip = null ;
      ImageIcon newIcon  = null ;
      int cursorType = Cursor.HAND_CURSOR ;
      FileInfo currentFile = this.model.getSelectedFileInfo() ;
      PlugInInfo newAnalyzer = null ;
     
      boolean formatIsUnknown = true ;
      if (currentFile != null) {
        newAnalyzer = this.model.getAnalyzer(
            currentFile.getIdFormat()) ;
        formatIsUnknown = (newAnalyzer == null) ;
      }// if
     
      if (formatIsUnknown) {
        newTooltip = sl.getText(UNKNOWN_FORMAT) ;
        newIcon = UNKNOWN_FORMAT_IMAGE ;
        cursorType = Cursor.HAND_CURSOR ;
        this.currentAnalyzer = null ;
      } else {
        // A new icon has to be loaded
        if (!newAnalyzer.equals(this.currentAnalyzer)) {
          newTooltip = newAnalyzer.getFormatName() ;
          newIcon = new ImageIcon(
              ImageUtility.getImageBytes(String.format(
                  COLOR_ICON, newAnalyzer.getId()))) ;
          this.currentAnalyzer = newAnalyzer ;
        }// if
      }// if
     
      // Do the actual updating, if necessary
      if (newTooltip != null) {
        this.formatIcon.setIcon(newIcon) ;
        this.formatIcon.setToolTipText(newTooltip) ;
        this.formatIcon.setCursor(
            Cursor.getPredefinedCursor(cursorType)) ;
      }// if
    }// if
  }// 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() ;
    TitledBorder border = (TitledBorder) this.getBorder() ;
    border.setTitle(sl.getText(FORMAT_TITLE_BORDER)) ;
    if (!this.model.fileIsSelected()
        || (this.model.getCurrentFileFormat() == null)) {
      this.formatIcon.setToolTipText(
          sl.getText(LanguageConstants.UNKNOWN_FORMAT)) ;
    }// if
  }// reloadLanguage()

  /**
   * Returns an instance of {@code ImageIcon} used to display an
   * unknown format (or that no file is currently selected).
   *
   * @return  Instance of {@code ImageIcon} used to display an
   *       unknown format
   */
  protected static ImageIcon getUnknownFormatIcon() {
    InputStream src = null ;
    ImageIcon result = null ;
    try {
      src = new BufferedInputStream(
          SelectionView.class.getResourceAsStream(
              UNKNOWN_FORMAT_FILE)) ;
      result = new ImageIcon(ImageUtility.getImageBytes(src)) ;
      src.close() ;
    } catch (KameleonException ke) {
      //TODO Throw exception ?
      /* This should not happen. */
    } catch (IOException oie) {
      //TODO Handle exception
//      throw new FileReadingException(new File(UNKNOWN_FORMAT_FILE)) ;
    }// try
    return result ;
  }// getUnknownFormatIcon()

  /**
   * Listener handling the clicks on the format icon. Displays
   * the frame for the selection of the format for the currently
   * selected file.
   *
   * @author  Schnell Michaël
   * @version  1.0
   */
  private class FormatMouseListener extends MouseAdapter {
   
    /**
     * Sole constructor.
     */
    public FormatMouseListener() {
      super() ;
    }// FormatMouseListener()

    /**
     * Opens the frame for the selection of the format for the
     * currently selected file, if possible.
     */
    @Override
    public void mouseClicked(MouseEvent me) {
      if (FormatView.this.model.fileIsSelected()) {
        try {
          new EntryFormatSelectionFrame(
              FormatView.this.container,
              FormatView.this.model).setVisible(true) ;
        } catch (KameleonException ex) {
          /* This should not happend ! */
          //TODO Add Handle in case is does !
        }// try
      }// if
    }// mouseClicked(MouseEvent)
   
  }// class FormatMouseListener

}// class FormatView
TOP

Related Classes of kameleon.gui.view.FormatView$FormatMouseListener

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.