/*
* Copyright 2000-2009 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 com.maddyhome.idea.copyright.actions;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.vfs.VirtualFile;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RecursionDlg extends DialogWrapper {
public RecursionDlg(Project project, VirtualFile file) {
super(project, false);
logger.debug("file=" + file);
this.project = project;
this.file = file;
setupControls();
init();
}
public boolean isAll() {
return rbAll.isSelected();
}
public boolean includeSubdirs() {
return cbSubdirs.isSelected();
}
private void setupControls() {
setTitle("Update Copyright");
setOKButtonText("Run");
ButtonGroup group = new ButtonGroup();
group.add(rbFile);
group.add(rbAll);
rbFile.setMnemonic('F');
rbAll.setMnemonic('A');
cbSubdirs.setMnemonic('I');
if (file.isDirectory()) {
rbFile.setText("File");
rbFile.setEnabled(false);
rbAll.setText("All files in " + file.getPresentableUrl());
rbAll.setSelected(true);
cbSubdirs.setSelected(true);
cbSubdirs.setEnabled(true);
}
else {
VirtualFile parent = file.getParent();
rbFile.setText("File '" + file.getPresentableUrl() + '\'');
rbFile.setSelected(true);
if (parent != null) {
rbAll.setText("All files in " + parent.getPresentableUrl());
cbSubdirs.setSelected(true);
cbSubdirs.setEnabled(false);
}
else {
rbAll.setVisible(false);
cbSubdirs.setVisible(false);
}
}
VirtualFile check = file;
if (!file.isDirectory()) {
check = file.getParent();
}
ProjectRootManager prm = ProjectRootManager.getInstance(project);
ProjectFileIndex pfi = prm.getFileIndex();
VirtualFile[] children = check != null ? check.getChildren() : VirtualFile.EMPTY_ARRAY;
boolean hasSubdirs = false;
for (int i = 0; i < children.length && !hasSubdirs; i++) {
if (children[i].isDirectory() && !pfi.isExcluded(children[i])) {
hasSubdirs = true;
}
}
cbSubdirs.setVisible(hasSubdirs);
if (!hasSubdirs) {
cbSubdirs.setEnabled(false);
mainPanel.remove(cbSubdirs);
}
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (cbSubdirs.isVisible()) {
cbSubdirs.setEnabled(rbAll.isSelected());
}
}
};
rbFile.addActionListener(listener);
rbAll.addActionListener(listener);
}
protected JComponent createCenterPanel() {
return mainPanel;
}
private final VirtualFile file;
private JPanel mainPanel;
private JRadioButton rbFile;
private JRadioButton rbAll;
private JCheckBox cbSubdirs;
private final Project project;
private static final Logger logger = Logger.getInstance(RecursionDlg.class.getName());
}