com.opendoorlogistics.studio.components.map.plugins.snapshot.ExportImagePanel.java Source code

Java tutorial

Introduction

Here is the source code for com.opendoorlogistics.studio.components.map.plugins.snapshot.ExportImagePanel.java

Source

/*******************************************************************************
 * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser Public License v3
 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
 ******************************************************************************/
package com.opendoorlogistics.studio.components.map.plugins.snapshot;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Window;

import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileNameExtensionFilter;

import org.apache.commons.io.FilenameUtils;

import com.opendoorlogistics.core.utils.strings.Strings;
import com.opendoorlogistics.core.utils.ui.FileBrowserPanel;
import com.opendoorlogistics.core.utils.ui.OkCancelDialog;
import com.opendoorlogistics.core.utils.ui.ShowPanel;
import com.opendoorlogistics.studio.components.map.plugins.snapshot.CreateImageConfig.ImageType;
import com.opendoorlogistics.api.ui.UIFactory.FilenameChangeListener;

final public class ExportImagePanel extends CreateImagePanel {
    private final ExportImageConfig config;
    private final FileBrowserPanel fileBrowser;

    private ExportImagePanel(Dimension defaultSize) {
        this(new ExportImageConfig(), defaultSize);
    }

    private ExportImagePanel(ExportImageConfig inputConfig, Dimension defaultSize) {
        super(inputConfig, defaultSize);
        this.config = inputConfig;

        addCheckBox("Save to clipboard", config.isToClipboard(), new CheckChangedListener() {
            @Override
            public void checkChanged(boolean isChecked) {
                ExportImagePanel.this.config.setToClipboard(isChecked);
            }
        });

        addCheckBox("Save to file", config.isToFile(), new CheckChangedListener() {
            @Override
            public void checkChanged(boolean isChecked) {
                ExportImagePanel.this.config.setToFile(isChecked);
                //   updateAppearance();
            }
        });

        addCheckBox("Show viewer", config.isToViewer(), new CheckChangedListener() {
            @Override
            public void checkChanged(boolean isChecked) {
                ExportImagePanel.this.config.setToViewer(isChecked);
                //   updateAppearance();
            }
        });

        FileNameExtensionFilter[] filters = new FileNameExtensionFilter[ImageType.values().length];
        for (int i = 0; i < filters.length; i++) {
            ImageType type = ImageType.values()[i];
            filters[i] = new FileNameExtensionFilter("Image file (" + type.name().toLowerCase() + ")",
                    type.name().toLowerCase());
        }
        fileBrowser = new FileBrowserPanel(this.config.getFilename(), new FilenameChangeListener() {

            @Override
            public void filenameChanged(String newFilename) {
                ExportImagePanel.this.config.setFilename(newFilename);
                String ext = FilenameUtils.getExtension(newFilename);
                for (ImageType type : ImageType.values()) {
                    if (Strings.equalsStd(ext, type.name())) {
                        imageTypeCombo.getComboBox().setSelectedItem(type);
                        config.setImageType(type);
                        break;
                    }
                }
            }
        }, false, "Select file", filters);
        add(fileBrowser);

        validateFilename();
    }

    public ExportImageConfig getConfig() {
        return config;
    }

    public static void main(String[] args) {
        ShowPanel.showPanel(new ExportImagePanel(new Dimension(200, 400)));
    }

    @Override
    protected void onImageTypeChanged() {
        validateFilename();
    }

    protected void validateFilename() {
        String filename = config.getFilename();
        if (filename.length() > 0 && config.getImageType() != null) {
            //   ImageType type = config.getImageType();
            if (config.getImageType() != null) {
                String ext = FilenameUtils.getExtension(filename);
                if (Strings.equalsStd(ext, config.getImageType().name()) == false) {
                    filename = FilenameUtils.removeExtension(filename);
                    filename += "." + config.getImageType().name().toLowerCase();
                    fileBrowser.setFilename(filename);
                    config.setFilename(filename);
                }
            }
        }

    }

    private static ExportImageConfig showModal(Window ancestor, Component directParent,
            ExportImageConfig inputConfig, Dimension defaultSize) {

        final ExportImagePanel panel = new ExportImagePanel(
                inputConfig != null ? inputConfig.deepCopy() : new ExportImageConfig(), defaultSize);
        OkCancelDialog dlg = new OkCancelDialog(ancestor) {
            @Override
            protected Component createMainComponent(boolean inWindowsBuilder) {
                return panel;
            }
        };
        dlg.setTitle("Export image");

        if (directParent != null) {
            dlg.setLocationRelativeTo(ancestor);
        } else if (panel != null) {
            dlg.setLocationRelativeTo(ancestor);
        }

        if (dlg.showModal() == OkCancelDialog.OK_OPTION) {
            return panel.getConfig();
        }
        return null;
    }

    //   public static CreateImageConfig showModal(Window parent , ExportImageConfig inputConfig){
    //      return showModal(parent, null, inputConfig);
    //   }

    public static ExportImageConfig showModal(Component parent, ExportImageConfig inputConfig,
            Dimension defaultSize) {
        return showModal(parent != null ? SwingUtilities.getWindowAncestor(parent) : null, parent, inputConfig,
                defaultSize);
    }

}