[memory-agent] Use shortcut jetbrainsLibrary for memory agent library in licenses...
[idea/community.git] / java / idea-ui / src / com / intellij / openapi / roots / ui / configuration / OutputEditor.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.intellij.openapi.roots.ui.configuration;
18
19 import com.intellij.ide.JavaUiBundle;
20 import com.intellij.openapi.util.NlsContexts;
21 import com.intellij.ui.IdeBorderFactory;
22 import com.intellij.util.ui.JBUI;
23 import com.intellij.util.ui.UIUtil;
24 import org.jetbrains.annotations.NonNls;
25 import org.jetbrains.annotations.Nullable;
26
27 import javax.swing.*;
28 import javax.swing.border.EmptyBorder;
29 import java.awt.*;
30 import java.util.Arrays;
31 import java.util.List;
32
33 public class OutputEditor extends ModuleElementsEditor {
34   private final BuildElementsEditor myCompilerOutputEditor;
35   private final JavadocEditor myJavadocEditor;
36   private final AnnotationsEditor myAnnotationsEditor;
37   private final List<ModuleElementsEditor> myEditors;
38
39   protected OutputEditor(final ModuleConfigurationState state) {
40     super(state);
41     myCompilerOutputEditor = new BuildElementsEditor(state);
42     myJavadocEditor = new JavadocEditor(state);
43     myAnnotationsEditor = new AnnotationsEditor(state);
44     myEditors = Arrays.asList(myCompilerOutputEditor, myJavadocEditor, myAnnotationsEditor);
45     myEditors.forEach(editor -> editor.addListener(this::fireConfigurationChanged));
46   }
47
48   @Override
49   protected JComponent createComponentImpl() {
50     final JPanel panel = new JPanel(new GridBagLayout());
51     panel.setBorder(new EmptyBorder(UIUtil.PANEL_SMALL_INSETS));
52     final GridBagConstraints gc =
53       new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, JBUI.emptyInsets(), 0, 0);
54     panel.add(myCompilerOutputEditor.createComponentImpl(), gc);
55     final JPanel javadocPanel = (JPanel)myJavadocEditor.createComponentImpl();
56     javadocPanel.setBorder(IdeBorderFactory.createTitledBorder(myJavadocEditor.getDisplayName(), false));
57     gc.weighty = 1;
58     panel.add(javadocPanel, gc);
59     final JPanel annotationsPanel = (JPanel)myAnnotationsEditor.createComponentImpl();
60     annotationsPanel.setBorder(IdeBorderFactory.createTitledBorder(myAnnotationsEditor.getDisplayName(), false));
61     panel.add(annotationsPanel, gc);
62     return panel;
63   }
64
65   @Override
66   public void saveData() {
67     super.saveData();
68     myEditors.forEach(ModuleElementsEditor::saveData);
69   }
70
71   @Override
72   @NlsContexts.ConfigurableName
73   public String getDisplayName() {
74     return getName();
75   }
76
77   @Override
78   public void moduleStateChanged() {
79     super.moduleStateChanged();
80     myEditors.forEach(ModuleElementsEditor::moduleStateChanged);
81   }
82
83
84   @Override
85   public void moduleCompileOutputChanged(final String baseUrl, final String moduleName) {
86     super.moduleCompileOutputChanged(baseUrl, moduleName);
87     myEditors.forEach(editor -> editor.moduleCompileOutputChanged(baseUrl, moduleName));
88   }
89
90   @Override
91   @Nullable
92   @NonNls
93   public String getHelpTopic() {
94     return "projectStructure.modules.paths";
95   }
96
97   public static @NlsContexts.ConfigurableName String getName() {
98     return JavaUiBundle.message("project.roots.path.tab.title");
99   }
100 }