| /* |
| * Copyright 2000-2013 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.ui; |
| |
| import com.google.common.base.Preconditions; |
| import com.intellij.refactoring.classMembers.MemberInfoModel; |
| import com.intellij.ui.IdeBorderFactory; |
| import com.intellij.ui.ScrollPaneFactory; |
| import com.jetbrains.python.psi.PyElement; |
| import com.jetbrains.python.refactoring.classes.membersManager.PyMemberInfo; |
| import org.jetbrains.annotations.NotNull; |
| |
| import javax.swing.*; |
| import javax.swing.border.Border; |
| import java.awt.*; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.List; |
| |
| /** |
| * Panel that handles table with list of class members with selection checkboxes. |
| * |
| * @author Dennis.Ushakov |
| */ |
| public class PyMemberSelectionPanel extends JPanel { |
| private static final List<PyMemberInfo<PyElement>> EMPTY_MEMBER_INFO = Collections.emptyList(); |
| private final PyMemberSelectionTable myTable; |
| private boolean myInitialized; |
| |
| |
| /** |
| * Creates empty panel to be filled later by {@link #init(com.intellij.refactoring.classMembers.MemberInfoModel, java.util.Collection)} |
| * |
| * @param title |
| */ |
| public PyMemberSelectionPanel(@NotNull String title, boolean supportAbstract) { |
| this(title, EMPTY_MEMBER_INFO, null, supportAbstract); |
| } |
| |
| /** |
| * Creates panel and fills its table (see {@link #init(com.intellij.refactoring.classMembers.MemberInfoModel, java.util.Collection)} ) with members info |
| * |
| * @param title Title for panel |
| * @param memberInfo list of members |
| * @param model model |
| */ |
| public PyMemberSelectionPanel( |
| String title, |
| List<PyMemberInfo<PyElement>> memberInfo, |
| final MemberInfoModel<PyElement, PyMemberInfo<PyElement>> model, |
| final boolean supportAbstract) { |
| Border titledBorder = IdeBorderFactory.createTitledBorder(title, false); |
| Border emptyBorder = BorderFactory.createEmptyBorder(0, 5, 5, 5); |
| Border border = BorderFactory.createCompoundBorder(titledBorder, emptyBorder); |
| setBorder(border); |
| setLayout(new BorderLayout()); |
| |
| myTable = new PyMemberSelectionTable(memberInfo, model, supportAbstract); |
| JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myTable); |
| |
| |
| add(scrollPane, BorderLayout.CENTER); |
| } |
| |
| |
| /** |
| * Inits panel. |
| * |
| * @param memberInfoModel model to display memebers in table |
| * @param members members to display |
| */ |
| public void init(@NotNull final MemberInfoModel<PyElement, PyMemberInfo<PyElement>> memberInfoModel, |
| @NotNull final Collection<PyMemberInfo<PyElement>> members) { |
| Preconditions.checkState(!myInitialized, "Already myInitialized"); |
| myTable.setMemberInfos(members); |
| myTable.setMemberInfoModel(memberInfoModel); |
| myTable.addMemberInfoChangeListener(memberInfoModel); |
| myInitialized = true; |
| } |
| |
| /** |
| * @return list of members, selected by user |
| */ |
| @NotNull |
| public Collection<PyMemberInfo<PyElement>> getSelectedMemberInfos() { |
| Preconditions.checkState(myInitialized, "Call #init first"); |
| return myTable.getSelectedMemberInfos(); |
| } |
| |
| /** |
| * Redraws table. Call it when some new data is available. |
| */ |
| public void redraw() { |
| myTable.redraw(); |
| } |
| } |