/* * Copyright 2000-2009 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.plugins.haxe.ide.refactoring.memberPushDown; import com.intellij.openapi.help.HelpManager; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMember; import com.intellij.refactoring.HelpID; import com.intellij.refactoring.JavaRefactoringSettings; import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.classMembers.MemberInfoChange; import com.intellij.refactoring.classMembers.MemberInfoModel; import com.intellij.refactoring.classMembers.UsedByDependencyMemberInfoModel; import com.intellij.refactoring.memberPushDown.JavaPushDownHandler; import com.intellij.refactoring.ui.DocCommentPanel; import com.intellij.refactoring.ui.MemberSelectionPanel; import com.intellij.refactoring.ui.RefactoringDialog; import com.intellij.refactoring.util.DocCommentPolicy; import com.intellij.refactoring.util.classMembers.MemberInfo; import javax.swing.*; import java.awt.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class HaxePushDownDialog extends RefactoringDialog { private final List<MemberInfo> myMemberInfos; private final PsiClass myClass; private DocCommentPanel myJavaDocPanel; private MemberInfoModel<PsiMember, MemberInfo> myMemberInfoModel; public HaxePushDownDialog(Project project, MemberInfo[] memberInfos, PsiClass aClass) { super(project, true); myMemberInfos = Arrays.asList(memberInfos); myClass = aClass; setTitle(JavaPushDownHandler.REFACTORING_NAME); init(); } public int getJavaDocPolicy() { return myJavaDocPanel.getPolicy(); } public MemberInfo[] getSelectedMemberInfos() { ArrayList<MemberInfo> list = new ArrayList<MemberInfo>(myMemberInfos.size()); for (MemberInfo info : myMemberInfos) { if (info.isChecked() && myMemberInfoModel.isMemberEnabled(info)) { list.add(info); } } return list.toArray(new MemberInfo[list.size()]); } protected void doHelpAction() { HelpManager.getInstance().invokeHelp(HelpID.MEMBERS_PUSH_DOWN); } protected String getDimensionServiceKey() { return "#com.intellij.refactoring.memberPushDown.HaxePushDownDialog"; } protected JComponent createNorthPanel() { GridBagConstraints gbConstraints = new GridBagConstraints(); JPanel panel = new JPanel(new GridBagLayout()); gbConstraints.insets = new Insets(4, 0, 10, 8); gbConstraints.weighty = 1; gbConstraints.weightx = 1; gbConstraints.gridy = 0; gbConstraints.gridwidth = GridBagConstraints.REMAINDER; gbConstraints.fill = GridBagConstraints.BOTH; gbConstraints.anchor = GridBagConstraints.WEST; panel.add(new JLabel(RefactoringBundle.message("push.members.from.0.down.label", myClass.getQualifiedName())), gbConstraints); return panel; } protected JComponent createCenterPanel() { JPanel panel = new JPanel(new BorderLayout()); final MemberSelectionPanel memberSelectionPanel = new MemberSelectionPanel( RefactoringBundle.message("members.to.be.pushed.down.panel.title"), myMemberInfos, RefactoringBundle.message("keep.abstract.column.header")); panel.add(memberSelectionPanel, BorderLayout.CENTER); myMemberInfoModel = new MyMemberInfoModel(); myMemberInfoModel.memberInfoChanged(new MemberInfoChange<PsiMember, MemberInfo>(myMemberInfos)); memberSelectionPanel.getTable().setMemberInfoModel(myMemberInfoModel); memberSelectionPanel.getTable().addMemberInfoChangeListener(myMemberInfoModel); myJavaDocPanel = new DocCommentPanel(RefactoringBundle.message("push.down.javadoc.panel.title")); myJavaDocPanel.setPolicy(JavaRefactoringSettings.getInstance().PULL_UP_MEMBERS_JAVADOC); panel.add(myJavaDocPanel, BorderLayout.EAST); return panel; } protected void doAction() { if(!isOKActionEnabled()) return; JavaRefactoringSettings.getInstance().PUSH_DOWN_PREVIEW_USAGES = isPreviewUsages(); invokeRefactoring (new PushDownProcessor( getProject(), getSelectedMemberInfos(), myClass, new DocCommentPolicy(getJavaDocPolicy()))); } private class MyMemberInfoModel extends UsedByDependencyMemberInfoModel<PsiMember, PsiClass, MemberInfo> { public MyMemberInfoModel() { super(myClass); } } }