blob: 744c06b6eaaccdd348840f6b8f9af922029e76b0 [file] [log] [blame]
/*
* Copyright 2000-2014 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 org.jetbrains.plugins.groovy.doc;
import com.intellij.openapi.actionSystem.ActionGroup;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.ActionToolbar;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.NonFocusableCheckBox;
import com.intellij.ui.ScrollPaneFactory;
import com.intellij.ui.components.JBList;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.doc.actions.GroovyDocAddPackageAction;
import org.jetbrains.plugins.groovy.doc.actions.GroovyDocReducePackageAction;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.util.HashSet;
import java.util.Set;
public final class GroovyDocGenerationPanel extends JPanel {
JPanel myPanel;
TextFieldWithBrowseButton myOutputDir;
NonFocusableCheckBox myIsUse;
NonFocusableCheckBox myIsPrivate;
NonFocusableCheckBox myOpenInBrowserCheckBox;
TextFieldWithBrowseButton myInputDir;
private JTextField myWindowTitle;
JList myPackagesList;
private JPanel myPackagesPanel;
private DefaultActionGroup myActionGroup;
private GroovyDocAddPackageAction myAddPackageAction;
private GroovyDocReducePackageAction myReducePackageAction;
private final DefaultListModel myDataModel;
GroovyDocGenerationPanel() {
myInputDir.addBrowseFolderListener(GroovyDocBundle.message("groovydoc.generate.directory.browse"), null, null,
FileChooserDescriptorFactory.createSingleFolderDescriptor());
myOutputDir.addBrowseFolderListener(GroovyDocBundle.message("groovydoc.generate.directory.browse"), null, null,
FileChooserDescriptorFactory.createSingleFolderDescriptor());
myDataModel = new DefaultListModel();
myPackagesList = new JBList(myDataModel);
myPackagesList.setMinimumSize(new Dimension(100, 150));
JScrollPane packagesScrollPane = ScrollPaneFactory.createScrollPane(myPackagesList);
myPackagesPanel.setLayout(new BorderLayout());
myPackagesPanel.setBorder(IdeBorderFactory.createTitledBorder("Source packages", false));
ActionToolbar actionToolbar = ActionManager.getInstance().createActionToolbar("GroovyDoc", getActionGroup(), true);
myPackagesPanel.add(actionToolbar.getComponent(), BorderLayout.NORTH);
myPackagesPanel.add(packagesScrollPane, BorderLayout.SOUTH);
actionToolbar.updateActionsImmediately();
myPanel.setMinimumSize(new Dimension(275, 350));
}
private ActionGroup getActionGroup() {
if (myActionGroup == null) {
initActions();
myActionGroup = new DefaultActionGroup();
myActionGroup.add(myAddPackageAction);
myActionGroup.add(myReducePackageAction);
}
return myActionGroup;
}
private void initActions() {
myAddPackageAction = new GroovyDocAddPackageAction(myDataModel);
myReducePackageAction = new GroovyDocReducePackageAction(myPackagesList, myDataModel);
}
public void setPackagesList(String packagesName) {
myDataModel.removeAllElements();
myDataModel.add(0, packagesName);
}
public DefaultListModel getDataModel() {
return myDataModel;
}
public void apply(GroovyDocConfiguration configuration) {
configuration.OUTPUT_DIRECTORY = toSystemIndependentFormat(myOutputDir.getText());
configuration.INPUT_DIRECTORY = toSystemIndependentFormat(myInputDir.getText());
configuration.PACKAGES = toStringArray(getDataModel());
configuration.OPEN_IN_BROWSER = myOpenInBrowserCheckBox.isSelected();
configuration.OPTION_IS_USE = myIsUse.isSelected();
configuration.OPTION_IS_PRIVATE = myIsPrivate.isSelected();
configuration.WINDOW_TITLE = myWindowTitle.getText();
}
public void reset(GroovyDocConfiguration configuration){
myOutputDir.setText(toUserSystemFormat(configuration.OUTPUT_DIRECTORY));
myInputDir.setText(toUserSystemFormat(configuration.INPUT_DIRECTORY));
setPackagesList(configuration.PACKAGES[0]);
myOpenInBrowserCheckBox.setSelected(configuration.OPEN_IN_BROWSER);
myIsUse.setSelected(configuration.OPTION_IS_USE);
myIsPrivate.setSelected(configuration.OPTION_IS_PRIVATE);
}
@Nullable
private static String toSystemIndependentFormat(String directory) {
if (directory.isEmpty()) {
return null;
}
return directory.replace(File.separatorChar, '/');
}
private static String toUserSystemFormat(String directory) {
if (directory == null) {
return "";
}
return directory.replace('/', File.separatorChar);
}
private static String[] toStringArray(final DefaultListModel model) {
final int count = model.getSize();
Set<String> result = new HashSet<String>();
for (int i = 0; i < count; i++) {
final Object o = model.getElementAt(i);
assert o instanceof String;
result.add((String)o);
}
return ArrayUtil.toStringArray(result);
}
public JPanel getPanel() {
return myPanel;
}
}