165 lines
4.8 KiB
Java
165 lines
4.8 KiB
Java
/*
|
|
* 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() throws HeadlessException {
|
|
super("Draw 9-patch");
|
|
|
|
buildActions();
|
|
buildMenuBar();
|
|
buildContent();
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|