diff --git a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingLibraryManager.java b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingLibraryManager.java index 9a3a9ec9d5bc..48f8969d03c7 100644 --- a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingLibraryManager.java +++ b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ScriptingLibraryManager.java @@ -20,8 +20,6 @@ import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModuleRootManager; -import com.intellij.openapi.roots.ProjectRootManager; -import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable; import com.intellij.openapi.roots.libraries.LibraryTable; import org.jetbrains.annotations.Nullable; @@ -60,6 +58,7 @@ public class ScriptingLibraryManager { public void commitModel() { if (myRootModel != null && !myRootModel.isDisposed()) { myRootModel.commit(); + resetModel(); } } diff --git a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/ScriptingLibrariesPanel.java b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/ScriptingLibrariesPanel.java index 67391b1ecfb3..27cba44d5d85 100644 --- a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/ScriptingLibrariesPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/ScriptingLibrariesPanel.java @@ -19,6 +19,8 @@ import com.intellij.openapi.roots.libraries.LibraryTable; import com.intellij.ui.table.JBTable; import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -33,7 +35,7 @@ public class ScriptingLibrariesPanel { private JPanel myScriptingLibrariesPanel; private JBTable myLibraryTable; private ScriptingLibraryTableModel myLibTableModel; - private boolean myModified; + private String mySelectedLibName; public ScriptingLibrariesPanel(LibraryTable libTable) { myLibTableModel = new ScriptingLibraryTableModel(libTable); @@ -44,12 +46,26 @@ public class ScriptingLibrariesPanel { addLibrary(); } }); + myRemoveLibraryButton.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + if (mySelectedLibName != null) { + myLibTableModel.removeLibrary(mySelectedLibName); + } + } + }); if (libTable == null) { myAddLibraryButton.setEnabled(false); } myRemoveLibraryButton.setEnabled(false); myEditLibraryButton.setEnabled(false); - myModified = false; + myLibraryTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + myLibraryTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + onSelectionChange(); + } + }); } public JPanel getPanel() { @@ -60,24 +76,29 @@ public class ScriptingLibrariesPanel { EditLibraryDialog editLibDialog = new EditLibraryDialog(); editLibDialog.show(); if (editLibDialog.isOK()) { - createLibrary(editLibDialog.getLibName()); - myModified = true; + myLibTableModel.createLibrary(editLibDialog.getLibName()); } } - private void createLibrary(String name) { - myLibTableModel.getLibraryTable().createLibrary(name); - myLibraryTable.repaint(); - } - public boolean isModified() { - return myModified; + return myLibTableModel.isChanged(); } public void resetTable(LibraryTable libTable) { myLibTableModel.resetTable(libTable); - myModified = false; - myLibraryTable.repaint(); + } + + private void onSelectionChange() { + int selectedRow = myLibraryTable.getSelectedRow(); + if (selectedRow >= 0) { + mySelectedLibName = myLibTableModel.getLibNameAt(selectedRow); + myEditLibraryButton.setEnabled(true); + myRemoveLibraryButton.setEnabled(true); + } + else { + myEditLibraryButton.setEnabled(false); + myRemoveLibraryButton.setEnabled(false); + } } } diff --git a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/ScriptingLibraryTableModel.java b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/ScriptingLibraryTableModel.java index b5d66ee5f39a..474645fddba3 100644 --- a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/ScriptingLibraryTableModel.java +++ b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/ScriptingLibraryTableModel.java @@ -15,11 +15,9 @@ */ package com.intellij.ide.scriptingContext.ui; -import com.intellij.ide.scriptingContext.ScriptingLibraryManager; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.LibraryTable; +import org.jetbrains.annotations.Nullable; import javax.swing.table.AbstractTableModel; @@ -31,13 +29,17 @@ public class ScriptingLibraryTableModel extends AbstractTableModel { private static final int LIB_NAME_COL = 0; private LibraryTable myLibTable; + private boolean myTableChanged; public ScriptingLibraryTableModel(LibraryTable libTable) { myLibTable = libTable; + myTableChanged = false; } public void resetTable(LibraryTable libTable) { myLibTable = libTable; + myTableChanged = false; + fireTableDataChanged(); } @Override @@ -69,8 +71,33 @@ public class ScriptingLibraryTableModel extends AbstractTableModel { return "?"; } - public LibraryTable getLibraryTable() { - return myLibTable; + public void createLibrary(String name) { + myLibTable.createLibrary(name); + fireLibTableChanged(); + } + + public void removeLibrary(String name) { + Library libToRemove = myLibTable.getLibraryByName(name); + if (libToRemove != null) { + myLibTable.removeLibrary(libToRemove); + fireLibTableChanged(); + } + } + + public void fireLibTableChanged() { + myTableChanged = true; + fireTableDataChanged(); + } + + @Nullable + public String getLibNameAt(int row) { + Library[] libs = myLibTable.getLibraries(); + if (row < 0 || row > libs.length - 1) return null; + return libs[row].getName(); + } + + public boolean isChanged() { + return myTableChanged; } }