/* * Copyright 2003-2011 JetBrains s.r.o. * * 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 jetbrains.mps.workbench.dialogs; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDialog; import com.intellij.openapi.fileChooser.FileChooserFactory; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.DocumentAdapter; import com.intellij.ui.IdeBorderFactory; import jetbrains.mps.ide.vfs.VirtualFileUtils; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.event.DocumentEvent; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class MoveFileDialog extends DialogWrapper { private JLabel myLabel; private TextFieldWithBrowseButton myDirectoryField = new TextFieldWithBrowseButton(); public MoveFileDialog(final Project project, final String initialText, boolean isDirectory) { super(project); setTitle("Move"); myDirectoryField.setText(initialText); myDirectoryField.addActionListener(e -> ApplicationManager.getApplication().invokeLater(() -> { FileChooserDescriptor chooser = new FileChooserDescriptor(false, true, false, false, false, false); FileChooserDialog dialog = FileChooserFactory.getInstance().createFileChooser(chooser, project, getOwner()); VirtualFile[] selectedFiles = dialog.choose(project, VirtualFileUtils.getVirtualFile(initialText)); if (selectedFiles.length > 0 && selectedFiles[0] != null) { myDirectoryField.setText(selectedFiles[0].getPath()); } }, ModalityState.current())); myDirectoryField.getTextField().getDocument().addDocumentListener(new DocumentAdapter() { @Override protected void textChanged(DocumentEvent e) { // Check that destination path exist and block apply if not final VirtualFile virtualFile = VirtualFileUtils.getVirtualFile(myDirectoryField.getText()); if (virtualFile == null || !virtualFile.exists()) { MoveFileDialog.this.setErrorText("Destination does not exists"); MoveFileDialog.this.setOKActionEnabled(false); } else { MoveFileDialog.this.setErrorText(null); MoveFileDialog.this.setOKActionEnabled(true); } } }); String type = (isDirectory) ? "directory" : "file"; myLabel = new JLabel("Move " + type + " " + initialText); init(); } @Override protected JComponent createCenterPanel() { final JPanel centerComponent = new JPanel(new BorderLayout()); JPanel panel = new JPanel(); panel.setLayout(new GridBagLayout()); panel.setBorder(IdeBorderFactory.createBorder()); panel.add(myLabel, new GridBagConstraints(0, 0, 2, 1, 1, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(4, 8, 4, 8), 0, 0)); panel.add(new JLabel("To directory"), new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(4, 8, 4, 8), 0, 0)); myDirectoryField.setTextFieldPreferredWidth(60); panel.add(myDirectoryField, new GridBagConstraints(1, 1, 1, 1, 1, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(4, 0, 4, 8), 0, 0)); centerComponent.add(panel, BorderLayout.NORTH); return centerComponent; } public String getResult() { return myDirectoryField.getText(); } }