/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.draw9patch.ui; import com.android.draw9patch.ui.action.ExitAction; import com.android.draw9patch.ui.action.OpenAction; import com.android.draw9patch.ui.action.SaveAction; import com.android.draw9patch.graphics.GraphicsUtilities; import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.ActionMap; import javax.swing.JFileChooser; import javax.imageio.ImageIO; import java.awt.HeadlessException; import java.awt.image.BufferedImage; import java.io.File; import java.util.concurrent.ExecutionException; import org.jdesktop.swingworker.SwingWorker; public class MainFrame extends JFrame { private ActionMap actionsMap; private JMenuItem saveMenuItem; private ImageEditorPanel imageEditor; public MainFrame(String path) throws HeadlessException { super("Draw 9-patch"); buildActions(); buildMenuBar(); buildContent(); if (path == null) { showOpenFilePanel(); } else { try { File file = new File(path); BufferedImage img = GraphicsUtilities.loadCompatibleImage(file.toURI().toURL()); showImageEditor(img, file.getAbsolutePath()); } catch (Exception ex) { showOpenFilePanel(); } } // pack(); setSize(1024, 600); } private void buildActions() { actionsMap = new ActionMap(); actionsMap.put(OpenAction.ACTION_NAME, new OpenAction(this)); actionsMap.put(SaveAction.ACTION_NAME, new SaveAction(this)); actionsMap.put(ExitAction.ACTION_NAME, new ExitAction(this)); } private void buildMenuBar() { JMenu fileMenu = new JMenu("File"); JMenuItem openMenuItem = new JMenuItem(); saveMenuItem = new JMenuItem(); JMenuItem exitMenuItem = new JMenuItem(); openMenuItem.setAction(actionsMap.get(OpenAction.ACTION_NAME)); fileMenu.add(openMenuItem); saveMenuItem.setAction(actionsMap.get(SaveAction.ACTION_NAME)); saveMenuItem.setEnabled(false); fileMenu.add(saveMenuItem); exitMenuItem.setAction(actionsMap.get(ExitAction.ACTION_NAME)); fileMenu.add(exitMenuItem); JMenuBar menuBar = new JMenuBar(); menuBar.add(fileMenu); setJMenuBar(menuBar); } private void buildContent() { setContentPane(new GradientPanel()); } private void showOpenFilePanel() { add(new OpenFilePanel(this)); } public SwingWorker<?, ?> open(File file) { if (file == null) { JFileChooser chooser = new JFileChooser(); chooser.setFileFilter(new PngFileFilter()); int choice = chooser.showOpenDialog(this); if (choice == JFileChooser.APPROVE_OPTION) { return new OpenTask(chooser.getSelectedFile()); } else { return null; } } else { return new OpenTask(file); } } void showImageEditor(BufferedImage image, String name) { getContentPane().removeAll(); imageEditor = new ImageEditorPanel(this, image, name); add(imageEditor); saveMenuItem.setEnabled(true); validate(); repaint(); } public SwingWorker<?, ?> save() { if (imageEditor == null) { return null; } File file = imageEditor.chooseSaveFile(); return file != null ? new SaveTask(file) : null; } private class SaveTask extends SwingWorker<Boolean, Void> { private final File file; SaveTask(File file) { this.file = file; } protected Boolean doInBackground() throws Exception { try { ImageIO.write(imageEditor.getImage(), "PNG", file); } catch (Exception e) { e.printStackTrace(); } return true; } } private class OpenTask extends SwingWorker<BufferedImage, Void> { private final File file; OpenTask(File file) { this.file = file; } protected BufferedImage doInBackground() throws Exception { return GraphicsUtilities.loadCompatibleImage(file.toURI().toURL()); } @Override protected void done() { try { showImageEditor(get(), file.getAbsolutePath()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } }