swingx-master/swingx-demos/swingx-demos-content/src/main/java/org/jdesktop/swingx/demos/imageview/ImageViewDemo.java
/*
 * $Id$
 *
 * Copyright 2009 Sun Microsystems, Inc., 4150 Network Circle,
 * Santa Clara, California 95054, U.S.A. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library 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
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
package org.jdesktop.swingx.demos.imageview;

import static org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ;

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JToggleButton;

import org.jdesktop.beansbinding.BeanProperty;
import org.jdesktop.beansbinding.Bindings;
import org.jdesktop.swingx.JXImageView;
import org.jdesktop.swingx.VerticalLayout;
import org.jdesktop.swingxset.DefaultDemoPanel;

import com.sun.swingset3.DemoProperties;

/**
 * A demo for the {@code JXImageView}.
 *
 * @author Karl George Schaefer
 * @author jm158417 (original JXImageViewDemoPanel)
 */
@DemoProperties(
    value = "JXImageView Demo",
    category = "Controls",
    description = "Demonstrates JXImageView, a control for displaying and manipulating images.",
    sourceFiles = {
        "org/jdesktop/swingx/demos/imageview/ImageViewDemo.java",
        "org/jdesktop/swingx/demos/imageview/resources/ImageViewDemo.properties",
        "org/jdesktop/swingx/demos/imageview/resources/ImageViewDemo.html",
        "org/jdesktop/swingx/demos/imageview/resources/images/ImageViewDemo.png",
        "org/jdesktop/swingx/demos/imageview/resources/images/flower.thumbnail.jpg"
    }
)
@SuppressWarnings("serial")
public class ImageViewDemo extends DefaultDemoPanel {
    private JXImageView imageView;
    private JButton openButton;
    private JButton saveButton;
    private JButton rotateCWButton;
    private JButton rotateCCWButton;
    private JButton zoomInButton;
    private JButton zoomOutButton;
    private JToggleButton dragEnabledButton;
    
    /**
     * main method allows us to run as a standalone demo.
     */
    public static void main(String[] args) {
        runDemo(ImageViewDemo.class);
    }

    /**
     * {@inheritDoc}
     */
    protected void createDemo() {
        setLayout(new BorderLayout());
        
        imageView = new JXImageView();
        imageView.setName("imageView");
        add(imageView);
        
        JPanel sidebar = new JPanel(new VerticalLayout());
        openButton = new JButton();
        openButton.setName("openButton");
        sidebar.add(openButton);
        
        saveButton = new JButton();
        saveButton.setName("saveButton");
        sidebar.add(saveButton);
        
        rotateCWButton = new JButton();
        rotateCWButton.setName("rotateCW");
        sidebar.add(rotateCWButton);
        
        rotateCCWButton = new JButton();
        rotateCCWButton.setName("rotateCCW");
        sidebar.add(rotateCCWButton);
        
        zoomInButton = new JButton();
        zoomInButton.setName("zoomIn");
        sidebar.add(zoomInButton);
        
        zoomOutButton = new JButton();
        zoomOutButton.setName("zoomOut");
        sidebar.add(zoomOutButton);
        
        dragEnabledButton = new JToggleButton();
        dragEnabledButton.setName("dragEnabled");
        sidebar.add(dragEnabledButton);
        
        add(sidebar, BorderLayout.LINE_START);
    }
    
    /**
     * {@inheritDoc}
     */
    protected void bind() {
        openButton.addActionListener(imageView.getOpenAction());
        saveButton.addActionListener(imageView.getSaveAction());
        rotateCWButton.addActionListener(imageView.getRotateClockwiseAction());
        rotateCCWButton.addActionListener(imageView.getRotateCounterClockwiseAction());
        zoomInButton.addActionListener(imageView.getZoomInAction());
        zoomOutButton.addActionListener(imageView.getZoomOutAction());
        Bindings.createAutoBinding(READ,
                dragEnabledButton, BeanProperty.create("selected"),
                imageView, BeanProperty.create("dragEnabled")).bind();
    }
}
