| /* |
| * 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 com.intellij.profile.codeInspection.ui; |
| |
| import com.intellij.codeInspection.ex.InspectionProfileImpl; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.ui.DialogWrapper; |
| import com.intellij.psi.search.scope.NonProjectFilesScope; |
| import com.intellij.psi.search.scope.packageSet.CustomScopesProviderEx; |
| import com.intellij.psi.search.scope.packageSet.NamedScope; |
| import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; |
| import com.intellij.ui.*; |
| import com.intellij.ui.components.JBList; |
| import com.intellij.util.ui.UIUtil; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| import javax.swing.*; |
| import java.awt.*; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.List; |
| |
| /** |
| * @author Dmitry Batkovich |
| */ |
| public class ScopesOrderDialog extends DialogWrapper { |
| |
| private final JList myOptionsList = new JBList(); |
| |
| private final InspectionProfileImpl myInspectionProfile; |
| private final Project myProject; |
| private final JPanel myPanel; |
| |
| public ScopesOrderDialog(final @NotNull Component parent, |
| final InspectionProfileImpl inspectionProfile, |
| final Project project) { |
| super(parent, true); |
| myInspectionProfile = inspectionProfile; |
| myProject = project; |
| |
| final JPanel listPanel = ToolbarDecorator.createDecorator(myOptionsList).setMoveDownAction(new AnActionButtonRunnable() { |
| @Override |
| public void run(AnActionButton anActionButton) { |
| ListUtil.moveSelectedItemsDown(myOptionsList); |
| } |
| }).setMoveUpAction(new AnActionButtonRunnable() { |
| @Override |
| public void run(AnActionButton anActionButton) { |
| ListUtil.moveSelectedItemsUp(myOptionsList); |
| } |
| }).disableRemoveAction().disableAddAction().createPanel(); |
| final JLabel descr = new JLabel("<html><p>If file appears in two or more scopes, it will be " + |
| "inspected with settings of the topmost scope in list above.</p><p/>" + |
| "<p>Scope order is set globally for all inspections in the profile.</p></html>"); |
| descr.setPreferredSize(new Dimension(300, 100)); |
| UIUtil.applyStyle(UIUtil.ComponentStyle.SMALL, descr); |
| myPanel = new JPanel(); |
| myPanel.setLayout(new BorderLayout()); |
| myPanel.add(listPanel, BorderLayout.CENTER); |
| myPanel.add(descr, BorderLayout.SOUTH); |
| fillList(); |
| init(); |
| setTitle("Scopes Order"); |
| } |
| |
| private void fillList() { |
| DefaultListModel model = new DefaultListModel(); |
| model.removeAllElements(); |
| |
| final List<String> scopes = new ArrayList<String>(); |
| for (final NamedScopesHolder holder : NamedScopesHolder.getAllNamedScopeHolders(myProject)) { |
| for (final NamedScope scope : holder.getScopes()) { |
| if (!(scope instanceof NonProjectFilesScope)) { |
| scopes.add(scope.getName()); |
| } |
| } |
| } |
| scopes.remove(CustomScopesProviderEx.getAllScope().getName()); |
| Collections.sort(scopes, new ScopeOrderComparator(myInspectionProfile)); |
| for (String scopeName : scopes) { |
| model.addElement(scopeName); |
| } |
| myOptionsList.setModel(model); |
| myOptionsList.setSelectedIndex(0); |
| } |
| |
| @Nullable |
| @Override |
| protected JComponent createCenterPanel() { |
| return myPanel; |
| } |
| |
| @Override |
| protected void doOKAction() { |
| final int size = myOptionsList.getModel().getSize(); |
| final String[] newScopeOrder = new String[size]; |
| for (int i = 0; i < size; i++) { |
| final String scopeName = (String) myOptionsList.getModel().getElementAt(i); |
| newScopeOrder[i] = scopeName; |
| } |
| if (!Arrays.equals(newScopeOrder, myInspectionProfile.getScopesOrder())) { |
| myInspectionProfile.setScopesOrder(newScopeOrder); |
| } |
| super.doOKAction(); |
| } |
| } |