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 import java.io.IOException; 025 026 import javax.swing.AbstractAction; 027 import javax.swing.JButton; 028 import javax.swing.JFileChooser; 029 import javax.swing.JTextField; 030 031 import org.mactor.framework.spec.ProjectContext; 032 033 public class ProjectInternalDirSelector extends SimpleRowPanel { 034 JTextField path = new JTextField(20); 035 static JFileChooser fc = new JFileChooser(ProjectContext.getGlobalInstance().getProjectDir()); 036 String relativePath; 037 JButton selectButton = new JButton(new AbstractAction("Select..") { 038 public void actionPerformed(ActionEvent e) { 039 int returnVal = fc.showOpenDialog(ProjectInternalDirSelector.this); 040 if (returnVal == JFileChooser.APPROVE_OPTION) { 041 File f = fc.getSelectedFile(); 042 try { 043 f = new File(f.getCanonicalFile().getAbsolutePath()); 044 } catch (IOException ioe) { 045 ioe.printStackTrace(); 046 } 047 setPath(f); 048 if (l != null) 049 l.dirChanged(f); 050 } 051 } 052 }); 053 public ProjectInternalDirSelector() { 054 add(path); 055 add(selectButton); 056 fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 057 path.setEditable(false); 058 } 059 public String getPath() { 060 return relativePath; 061 } 062 public void setPath(File path) { 063 relativePath = ProjectContext.getGlobalInstance().getRelativePath(path); 064 if (relativePath != null && relativePath.length() > 0) { 065 fc.setSelectedFile(path); 066 this.path.setText(relativePath); 067 } else { 068 fc.setSelectedFile(ProjectContext.getGlobalInstance().getProjectDir()); 069 this.path.setText("[project directory]"); 070 } 071 } 072 DirChangedListener l; 073 public void setDirChangedListener(DirChangedListener l) { 074 this.l = l; 075 } 076 public interface DirChangedListener { 077 void dirChanged(File newConfigDir); 078 } 079 }