| /* |
| * 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.jetbrains.python.refactoring.classes.pullUp; |
| |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.ui.ComboBox; |
| import com.intellij.refactoring.RefactoringBundle; |
| import com.jetbrains.python.psi.PyClass; |
| import com.jetbrains.python.refactoring.classes.membersManager.vp.MembersBasedViewSwingImpl; |
| import com.jetbrains.python.refactoring.classes.ui.PyClassCellRenderer; |
| import org.jetbrains.annotations.NotNull; |
| |
| import javax.swing.*; |
| import java.awt.*; |
| import java.awt.event.ItemEvent; |
| import java.awt.event.ItemListener; |
| |
| |
| /** |
| * @author Ilya.Kazakevich |
| * Pull up view implementation |
| */ |
| class PyPullUpViewSwingImpl extends MembersBasedViewSwingImpl<PyPullUpPresenter, PyPullUpViewInitializationInfo> implements PyPullUpView, |
| ItemListener { |
| @NotNull |
| private final ComboBox myParentsCombo; |
| @NotNull |
| private final DefaultComboBoxModel myParentsComboBoxModel; |
| @NotNull |
| private final PyPullUpNothingToRefactorMessage myNothingToRefactorMessage; |
| |
| /** |
| * @param project project where refactoring takes place |
| * @param presenter presenter for this view |
| * @param clazz class to refactor |
| * @param nothingToRefactorMessage class that displays message "nothing to refactor" when presenter calls {@link #showNothingToRefactor()} |
| */ |
| PyPullUpViewSwingImpl( |
| @NotNull final Project project, |
| @NotNull final PyPullUpPresenter presenter, |
| @NotNull final PyClass clazz, |
| @NotNull final PyPullUpNothingToRefactorMessage nothingToRefactorMessage) { |
| super(project, presenter, RefactoringBundle.message("members.to.be.pulled.up"), true); |
| setTitle(PyPullUpHandler.REFACTORING_NAME); |
| myNothingToRefactorMessage = nothingToRefactorMessage; |
| |
| myParentsComboBoxModel = new DefaultComboBoxModel(); |
| |
| myParentsCombo = new ComboBox(myParentsComboBoxModel); |
| myParentsCombo.setRenderer(new PyClassCellRenderer()); |
| |
| final JLabel mainLabel = new JLabel(); |
| mainLabel.setText(RefactoringBundle.message("pull.up.members.to", PyClassCellRenderer.getClassText(clazz))); |
| mainLabel.setLabelFor(myParentsCombo); |
| |
| |
| myTopPanel.setLayout(new GridBagLayout()); |
| final GridBagConstraints gbConstraints = new GridBagConstraints(); |
| |
| gbConstraints.insets = new Insets(4, 8, 4, 8); |
| gbConstraints.weighty = 1; |
| gbConstraints.weightx = 1; |
| gbConstraints.gridy = 0; |
| gbConstraints.gridwidth = GridBagConstraints.REMAINDER; |
| gbConstraints.fill = GridBagConstraints.BOTH; |
| gbConstraints.anchor = GridBagConstraints.WEST; |
| myTopPanel.add(mainLabel, gbConstraints); |
| myTopPanel.add(mainLabel, gbConstraints); |
| gbConstraints.gridy++; |
| myTopPanel.add(myParentsCombo, gbConstraints); |
| |
| gbConstraints.gridy++; |
| myCenterPanel.add(myPyMemberSelectionPanel, BorderLayout.CENTER); |
| } |
| |
| @Override |
| @NotNull |
| protected String getHelpId() { |
| return "python.reference.pullMembersUp"; |
| } |
| |
| |
| @NotNull |
| @Override |
| public PyClass getSelectedParent() { |
| return (PyClass)myParentsComboBoxModel.getSelectedItem(); |
| } |
| |
| @Override |
| public void showNothingToRefactor() { |
| myNothingToRefactorMessage.showNothingToRefactor(); |
| } |
| |
| @Override |
| public void configure(@NotNull final PyPullUpViewInitializationInfo configInfo) { |
| super.configure(configInfo); |
| for (final PyClass parent : configInfo.getParents()) { |
| myParentsComboBoxModel.addElement(parent); |
| } |
| myPresenter.parentChanged(); |
| myParentsCombo.addItemListener(this); |
| } |
| |
| @Override |
| public void itemStateChanged(final ItemEvent e) { |
| if (e.getStateChange() == ItemEvent.SELECTED) { |
| myPyMemberSelectionPanel.redraw(); |
| myPresenter.parentChanged(); |
| } |
| } |
| } |