/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.refactor; /** */ import com.intellij.psi.PsiModifier; import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.ui.VisibilityPanelBase; import com.intellij.util.VisibilityUtil; import com.intellij.ui.IdeBorderFactory; import com.intellij.util.ui.UIUtil; import gw.lang.parser.Keyword; import gw.plugin.ij.lang.psi.api.auxilary.IGosuModifier; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.EventListener; public class GosuVisibilityPanel extends VisibilityPanelBase { private JRadioButton myRbAsIs; private JRadioButton myRbEscalate; private final JRadioButton myRbPrivate; private final JRadioButton myRbProtected; private final JRadioButton myRbPackageLocal; private final JRadioButton myRbPublic; public GosuVisibilityPanel(boolean hasAsIs, final boolean hasEscalate) { setBorder(IdeBorderFactory.createTitledBorder(RefactoringBundle.message("visibility.border.title"), true, new Insets(IdeBorderFactory.TITLED_BORDER_TOP_INSET, UIUtil.DEFAULT_HGAP, IdeBorderFactory.TITLED_BORDER_BOTTOM_INSET, IdeBorderFactory.TITLED_BORDER_RIGHT_INSET))); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); ButtonGroup bg = new ButtonGroup(); ItemListener listener = new ItemListener() { public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { ChangeListener multicaster = (ChangeListener) myEventDispatcher.getMulticaster(); multicaster.stateChanged(new ChangeEvent(this)); } } }; if (hasEscalate) { myRbEscalate = new JRadioButton(); myRbEscalate.setText(RefactoringBundle.getEscalateVisibility()); myRbEscalate.addItemListener(listener); add(myRbEscalate); bg.add(myRbEscalate); } if (hasAsIs) { myRbAsIs = new JRadioButton(); myRbAsIs.setText(RefactoringBundle.getVisibilityAsIs()); myRbAsIs.addItemListener(listener); add(myRbAsIs); bg.add(myRbAsIs); } myRbPrivate = new JRadioButton(); myRbPrivate.setText(RefactoringBundle.getVisibilityPrivate()); myRbPrivate.addItemListener(listener); myRbPrivate.setFocusable(false); add(myRbPrivate); bg.add(myRbPrivate); myRbPackageLocal = new JRadioButton(); myRbPackageLocal.setText( "Internal" ); myRbPackageLocal.addItemListener(listener); myRbPackageLocal.setFocusable(false); myRbPackageLocal.setMnemonic( 'I' ); add(myRbPackageLocal); bg.add(myRbPackageLocal); myRbProtected = new JRadioButton(); myRbProtected.setText(RefactoringBundle.getVisibilityProtected()); myRbProtected.addItemListener(listener); myRbProtected.setFocusable(false); add(myRbProtected); bg.add(myRbProtected); myRbPublic = new JRadioButton(); myRbPublic.setText(RefactoringBundle.getVisibilityPublic()); myRbPublic.addItemListener(listener); myRbPublic.setFocusable(false); add(myRbPublic); bg.add(myRbPublic); } public String getVisibility() { if (myRbPublic.isSelected()) { return IGosuModifier.PUBLIC; } if (myRbPackageLocal.isSelected()) { return IGosuModifier.INTERNAL; } if (myRbProtected.isSelected()) { return IGosuModifier.PROTECTED; } if (myRbPrivate.isSelected()) { return IGosuModifier.PRIVATE; } if (myRbEscalate != null && myRbEscalate.isSelected()) { return VisibilityUtil.ESCALATE_VISIBILITY; } return null; } @Override public void setVisibility(Object visibility) { if (PsiModifier.PUBLIC.equals(visibility)) { myRbPublic.setSelected(true); } else if (PsiModifier.PROTECTED.equals(visibility)) { myRbProtected.setSelected(true); } else if (PsiModifier.PACKAGE_LOCAL.equals(visibility)) { myRbPackageLocal.setSelected(true); } else if (PsiModifier.PRIVATE.equals(visibility)) { myRbPrivate.setSelected(true); } else if (myRbEscalate != null) { myRbEscalate.setSelected(true); } else if (myRbAsIs != null) { myRbAsIs.setSelected(true); } } public void setVisibility(String visibility) { if (IGosuModifier.PUBLIC.equals(visibility)) { myRbPublic.setSelected(true); } else if (IGosuModifier.PROTECTED.equals(visibility)) { myRbProtected.setSelected(true); } else if (IGosuModifier.INTERNAL.equals(visibility)) { myRbPackageLocal.setSelected(true); } else if (IGosuModifier.PRIVATE.equals(visibility)) { myRbPrivate.setSelected(true); } else if (myRbEscalate != null) { myRbEscalate.setSelected(true); } else if (myRbAsIs != null) { myRbAsIs.setSelected(true); } } public void disableAllButPublic() { myRbPrivate.setEnabled(false); myRbProtected.setEnabled(false); myRbPackageLocal.setEnabled(false); if (myRbEscalate != null) { myRbEscalate.setEnabled(false); } if (myRbAsIs != null) { myRbAsIs.setEnabled(false); } myRbPublic.setEnabled(true); myRbPublic.setSelected(true); } }