/* * Copyright 2000-2016 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.find.findUsages; import com.intellij.find.FindBundle; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.impl.search.ThrowSearchUtil; import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.StateRestoringCheckBox; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; public class FindThrowUsagesDialog extends JavaFindUsagesDialog<JavaThrowFindUsagesOptions> { private StateRestoringCheckBox myCbUsages; private JComboBox myCbExns; private boolean myHasFindWhatPanel; private ThrowSearchUtil.Root [] myRoots; public FindThrowUsagesDialog(@NotNull PsiElement element, @NotNull Project project, @NotNull JavaThrowFindUsagesOptions findUsagesOptions, boolean toShowInNewTab, boolean mustOpenInNewTab, boolean isSingleFile, @NotNull FindUsagesHandler handler) { super(element, project, findUsagesOptions, toShowInNewTab, mustOpenInNewTab, isSingleFile, handler); } @Override protected void init () { // Kludge: myRoots used in super.init, which caller from constructor myRoots = ThrowSearchUtil.getSearchRoots(myPsiElement); super.init (); } @Override public JComponent getPreferredFocusedControl() { return myHasFindWhatPanel ? myCbUsages : null; } @Override protected JComponent createNorthPanel() { final JComponent panel = new JPanel(new GridBagLayout()); GridBagConstraints gbConstraints = new GridBagConstraints(); gbConstraints.insets = JBUI.insetsBottom(UIUtil.DEFAULT_VGAP); gbConstraints.fill = GridBagConstraints.BOTH; gbConstraints.weightx = 1; gbConstraints.weighty = 1; gbConstraints.anchor = GridBagConstraints.EAST; myCbExns = new JComboBox (myRoots); panel.add(myCbExns, gbConstraints); return panel; } @Override public void calcFindUsagesOptions(final JavaThrowFindUsagesOptions options) { super.calcFindUsagesOptions(options); options.isUsages = isSelected(myCbUsages) || !myHasFindWhatPanel; } @Override protected JPanel createFindWhatPanel() { final JPanel findWhatPanel = new JPanel(); findWhatPanel.setBorder(IdeBorderFactory.createTitledBorder(FindBundle.message("find.what.group"), true)); findWhatPanel.setLayout(new BoxLayout(findWhatPanel, BoxLayout.Y_AXIS)); myCbUsages = addCheckboxToPanel(FindBundle.message("find.what.usages.checkbox") , myFindUsagesOptions.isUsages, findWhatPanel, true); //final ThrowSearchUtil.Root[] searchRoots = ThrowSearchUtil.getSearchRoots(getPsiElement ()); //final PsiThrowStatement throwStatement = (PsiThrowStatement)getPsiElement(); //final boolean exactExnType = ThrowSearchUtil.isExactExnType(throwStatement.getException ()); //if (exactExnType) { // myCbStrict.setEnabled(false); //} myHasFindWhatPanel = true; return findWhatPanel; } @Override protected void doOKAction() { getFindUsagesOptions().setRoot((ThrowSearchUtil.Root)myCbExns.getSelectedItem()); super.doOKAction(); } @Override protected void update(){ if (!myHasFindWhatPanel){ setOKActionEnabled(true); } else{ getFindUsagesOptions().setRoot((ThrowSearchUtil.Root)myCbExns.getSelectedItem()); final boolean hasSelected = isSelected(myCbUsages); setOKActionEnabled(hasSelected); } } }