001 /******************************************************************************
002 * Copyright (C) MActor Developers. All rights reserved. *
003 * ---------------------------------------------------------------------------*
004 * This file is part of MActor. *
005 * *
006 * MActor is free software; you can redistribute it and/or modify *
007 * it under the terms of the GNU General Public License as published by *
008 * the Free Software Foundation; either version 2 of the License, or *
009 * (at your option) any later version. *
010 * *
011 * MActor is distributed in the hope that it will be useful, *
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
014 * GNU General Public License for more details. *
015 * *
016 * You should have received a copy of the GNU General Public License *
017 * along with MActor; if not, write to the Free Software *
018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
019 ******************************************************************************/
020 package org.mactor.ui.gui.project.editors;
021
022 import java.awt.event.ActionEvent;
023 import java.io.File;
024
025 import javax.swing.AbstractAction;
026 import javax.swing.JButton;
027 import javax.swing.JFileChooser;
028 import javax.swing.JOptionPane;
029 import javax.swing.JTextField;
030
031 import org.mactor.framework.spec.ProjectContext;
032
033 public class ProjectInternalFileSelector extends SimpleRowPanel {
034 JTextField pathText = new JTextField(20);
035 static JFileChooser fc = new JFileChooser(ProjectContext.getGlobalInstance().getProjectDir());
036 JButton selectButton = new JButton(new AbstractAction("Select..") {
037 public void actionPerformed(ActionEvent e) {
038 int returnVal = fc.showOpenDialog(ProjectInternalFileSelector.this);
039 if (returnVal == JFileChooser.APPROVE_OPTION) {
040 File f = fc.getSelectedFile();
041 pathText.setText(ProjectContext.getGlobalInstance().getRelativePath(f));
042 if (l != null)
043 l.fileChanged(f);
044 }
045 }
046 });
047 JButton editButton = new JButton(new AbstractAction("Edit...") {
048 public void actionPerformed(ActionEvent e) {
049 File path = ProjectContext.getGlobalInstance().getAbsolutePath(pathText.getText());
050 if (!path.exists()) {
051 if (JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(ProjectInternalFileSelector.this, "The file '" + pathText.getText() + "' does not exist. Create it?", "Create file",
052 JOptionPane.OK_CANCEL_OPTION)) {
053 return;
054 }
055 }
056 new TextFileEditor(pathText.getText(), "Edit", null).setVisible(true);
057 }
058 });
059 public ProjectInternalFileSelector() {
060 this(true);
061 }
062 public ProjectInternalFileSelector(boolean showPath) {
063 if (showPath)
064 add(pathText);
065 add(selectButton);
066 add(editButton);
067 }
068 public String getPath() {
069 return pathText.getText();
070 }
071 public void setPath(String path) {
072 if (path != null && path.length() > 0)
073 fc.setSelectedFile(ProjectContext.getGlobalInstance().getAbsolutePath(path));
074 this.pathText.setText(path);
075 }
076 FileChangedListener l;
077 public void setFileChangedListener(FileChangedListener l) {
078 this.l = l;
079 }
080 public interface FileChangedListener {
081 void fileChanged(File newFile);
082 }
083 }