/*
* 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.idea.core.facet.ui;
import com.intellij.facet.ui.FacetEditorContext;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.ModifiableModuleModel;
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
import com.intellij.ui.TabbedPaneWrapper;
import jetbrains.mps.idea.core.MPSBundle;
import jetbrains.mps.idea.core.facet.MPSConfigurationBean;
import jetbrains.mps.idea.core.icons.MPSIcons;
import jetbrains.mps.idea.core.project.ModuleRuntimeLibrariesImporter;
import jetbrains.mps.idea.core.ui.SModuleConfigurationTab;
import jetbrains.mps.idea.core.ui.UsedLanguagesTable;
import org.jetbrains.mps.openapi.module.SModuleReference;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* evgeny, 10/26/11
*/
public class MPSFacetCommonTabUI implements SModuleConfigurationTab {
private JPanel rootPanel;
private JComponent myCentralComponent;
private JTextField mySolutionNamespace;
private final Disposable myParentDisposable;
private final FacetEditorContext myContext;
private List<SModuleConfigurationTab> myTabs;
public MPSFacetCommonTabUI(FacetEditorContext context, Disposable parentDisposable) {
myParentDisposable = parentDisposable;
myContext = context;
}
@Override
public void reset(MPSConfigurationBean data) {
refreshSolutionDescriptorName();
for (SModuleConfigurationTab tab : myTabs) {
tab.reset(data);
}
}
private void refreshSolutionDescriptorName() {
ModifiableModuleModel moduleModel = ProjectStructureConfigurable.getInstance(myContext.getProject()).getContext().getModulesConfigurator().getModuleModel();
String moduleName = moduleModel.getNewName(myContext.getModule());
if (moduleName == null) {
moduleName = myContext.getModule().getName();
}
mySolutionNamespace.setText(moduleName);
}
@Override
public void apply(MPSConfigurationBean data) {
for (SModuleConfigurationTab tab : myTabs) {
tab.apply(data);
}
}
@Override
public boolean isModified(MPSConfigurationBean data) {
for (SModuleConfigurationTab tab : myTabs) {
if (tab.isModified(data)) {
return true;
}
}
return false;
}
@Override
public JPanel getRootPanel() {
return rootPanel;
}
private void createUIComponents() {
createCentralComponent();
}
private void createCentralComponent() {
TabbedPaneWrapper tabbedPane = new TabbedPaneWrapper(myParentDisposable);
MPSFacetSourcesTab mpsFacetSourcesTab = new MPSFacetSourcesTab(myContext, myParentDisposable);
MPSFacetPathsTab mpsFacetPathsTab = new MPSFacetPathsTab(myContext);
UsedLanguagesTable usedLanguagesTable = new UsedLanguagesTable() {
@Override
protected void doAddElements(final Set<SModuleReference> elementsToAdd) {
super.doAddElements(elementsToAdd);
ApplicationManager.getApplication().runWriteAction(
() -> ModuleRuntimeLibrariesImporter.importForUsedLanguages(myContext, elementsToAdd));
}
};
// can not make it final and init in declaration since idea forms generator does not like it and put $$$setupUI$$$ call before setting the field
myTabs = new ArrayList<>();
myTabs.add(mpsFacetSourcesTab);
myTabs.add(mpsFacetPathsTab);
myTabs.add(usedLanguagesTable);
tabbedPane.addTab(MPSBundle.message("facet.sources.tab.name"), MPSIcons.SOURCES_TAB_ICON, mpsFacetSourcesTab.getRootPanel(), null);
tabbedPane.addTab(MPSBundle.message("facet.paths.tab.name"), MPSIcons.PATHS_TAB_ICON, mpsFacetPathsTab.getRootPanel(), null);
tabbedPane.addTab(MPSBundle.message("facet.languages.tab.name"), MPSIcons.LANGUAGES_TAB_ICON, usedLanguagesTable.getRootPanel(), "Deprecated. Does not affect anything.");
myCentralComponent = tabbedPane.getComponent();
}
@Override
public void onTabEntering() {
refreshSolutionDescriptorName();
myTabs.forEach(SModuleConfigurationTab::onTabEntering);
}
}