blob: ac3891bb0b1d09e5c6c619655499e755b3134955 [file] [log] [blame]
/*
* 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.refactoring.migration;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.help.HelpManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.ui.ScrollPaneFactory;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.IOException;
public class MigrationDialog extends DialogWrapper{
private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.migration.MigrationDialog");
private JPanel myPanel;
private JComboBox myMapComboBox;
private JTextArea myDescriptionTextArea;
private JButton myEditMapButton;
private JButton myNewMapButton;
private JButton myRemoveMapButton;
private final Project myProject;
private final MigrationMapSet myMigrationMapSet;
private JLabel promptLabel;
private JSeparator mySeparator;
private JScrollPane myDescriptionScroll;
public MigrationDialog(Project project, MigrationMapSet migrationMapSet) {
super(project, true);
myProject = project;
myMigrationMapSet = migrationMapSet;
setTitle(RefactoringBundle.message("migration.dialog.title"));
setHorizontalStretch(1.2f);
setOKButtonText(RefactoringBundle.message("migration.dialog.ok.button.text"));
init();
}
@NotNull
protected Action[] createActions(){
return new Action[]{getOKAction(),getCancelAction(),getHelpAction()};
}
public JComponent getPreferredFocusedComponent() {
return myMapComboBox;
}
protected JComponent createCenterPanel() {
class MyTextArea extends JTextArea {
public MyTextArea(String s, int a, int b) {
super(s, a, b);
setFocusable(false);
}
}
initMapCombobox();
myDescriptionTextArea = new MyTextArea("", 3, 40);
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myDescriptionTextArea);
myDescriptionScroll.getViewport().add(myDescriptionTextArea);
myDescriptionScroll.setBorder(null);
myDescriptionScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
myDescriptionScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
myDescriptionTextArea.setEditable(false);
myDescriptionTextArea.setFont(promptLabel.getFont());
myDescriptionTextArea.setBackground(myPanel.getBackground());
myDescriptionTextArea.setLineWrap(true);
updateDescription();
myMapComboBox.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
updateDescription();
}
}
);
myEditMapButton.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
editMap();
}
}
);
myRemoveMapButton.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
removeMap();
}
}
);
myNewMapButton.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
addNewMap();
}
}
);
myMapComboBox.registerKeyboardAction(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (myMapComboBox.isPopupVisible()){
myMapComboBox.setPopupVisible(false);
}
else{
clickDefaultButton();
}
}
},
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
);
return myPanel;
}
private void updateDescription() {
if (myDescriptionTextArea == null){
return;
}
MigrationMap map = getMigrationMap();
if (map == null){
myDescriptionTextArea.setText("");
return;
}
myDescriptionTextArea.setText(map.getDescription());
}
private void editMap() {
MigrationMap oldMap = getMigrationMap();
if (oldMap == null){
return;
}
MigrationMap newMap = oldMap.cloneMap();
if (editMap(newMap)){
myMigrationMapSet.replaceMap(oldMap, newMap);
initMapCombobox();
myMapComboBox.setSelectedItem(newMap);
try {
myMigrationMapSet.saveMaps();
}
catch (IOException e) {
LOG.error("Cannot save migration maps", e);
}
}
}
private boolean editMap(MigrationMap map) {
if (map == null)
return false;
EditMigrationDialog dialog = new EditMigrationDialog(myProject, map);
dialog.show();
if (!dialog.isOK())
return false;
map.setName(dialog.getName());
map.setDescription(dialog.getDescription());
return true;
}
private void addNewMap() {
MigrationMap migrationMap = new MigrationMap();
if (editMap(migrationMap)){
myMigrationMapSet.addMap(migrationMap);
initMapCombobox();
myMapComboBox.setSelectedItem(migrationMap);
try {
myMigrationMapSet.saveMaps();
}
catch (IOException e) {
LOG.error("Cannot save migration maps", e);
}
}
}
private void removeMap() {
MigrationMap map = getMigrationMap();
if (map == null){
return;
}
myMigrationMapSet.removeMap(map);
MigrationMap[] maps = myMigrationMapSet.getMaps();
initMapCombobox();
if (maps.length > 0){
myMapComboBox.setSelectedItem(maps[0]);
}
try {
myMigrationMapSet.saveMaps();
}
catch (IOException e) {
LOG.error("Cannot save migration maps", e);
}
}
public MigrationMap getMigrationMap() {
return (MigrationMap)myMapComboBox.getSelectedItem();
}
protected void doHelpAction() {
HelpManager.getInstance().invokeHelp(HelpID.MIGRATION);
}
private void initMapCombobox() {
if (myMapComboBox.getItemCount() > 0){
myMapComboBox.removeAllItems();
}
MigrationMap[] maps = myMigrationMapSet.getMaps();
for (MigrationMap map : maps) {
myMapComboBox.addItem(map);
}
updateDescription();
}
}