Package org.freeplane.core.ui.components

Source Code of org.freeplane.core.ui.components.BitmapImagePreview

/*
*  Freeplane - mind map editor
*  Copyright (C) 2009 Dimitry
*
*  This file author is Dimitry
*
*  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
*  (at your option) 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, see <http://www.gnu.org/licenses/>.
*/
package org.freeplane.core.ui.components;

/**
* @author Dimitry Polivaev
* 22.08.2009
*/
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;

import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.border.MatteBorder;

import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.util.LogUtils;
import org.freeplane.view.swing.features.filepreview.BitmapViewerComponent;

public class BitmapImagePreview extends JComponent implements PropertyChangeListener {
  /**
   *
   */
  private static final long serialVersionUID = 1L;
  protected static final int BORDER_WIDTH = 2;
  protected final JFileChooser fc;

  public BitmapImagePreview(final JFileChooser fc) {
    super();
    this.fc = fc;
    setBorder(new MatteBorder(BORDER_WIDTH, BORDER_WIDTH, BORDER_WIDTH, BORDER_WIDTH, Color.BLACK));
    final int previewSize = ResourceController.getResourceController().getIntProperty("image_preview_size", 300);
    setPreferredSize(new Dimension(previewSize, previewSize));
    fc.addPropertyChangeListener(this);
  }

  public void propertyChange(final PropertyChangeEvent e) {
    final String prop = e.getPropertyName();
    //If the directory changed, don't show an image.
    final File file;
    if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(prop)) {
      file = null;
      //If a file became selected, find out which one.
    }
    else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(prop)) {
      file = (File) e.getNewValue();
    }
    else {
      return;
    }
    if (file == null || !file.exists()) {
      return;
    }
    if (getComponentCount() == 1) {
      remove(0);
    }
    repaint();
    try {
      updateView(file);
    }
    catch (final MalformedURLException e1) {
      LogUtils.warn(e1);
    }
    catch (final IOException e1) {
      LogUtils.warn(e1);
    }
  }

  protected void updateView(final File file) throws MalformedURLException, IOException {
    final BitmapViewerComponent viewer = new BitmapViewerComponent(file.toURI());
    viewer.setHint(Image.SCALE_FAST);
    final Dimension size = getSize();
    size.width -= 2 * BORDER_WIDTH;
    size.height -= 2 * BORDER_WIDTH;
    viewer.setPreferredSize(size);
    viewer.setSize(size);
    viewer.setLocation(BORDER_WIDTH, BORDER_WIDTH);
    add(viewer);
    viewer.revalidate();
    viewer.repaint();
  }
}
TOP

Related Classes of org.freeplane.core.ui.components.BitmapImagePreview

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.