diff --git a/platform/lang-impl/src/com/intellij/ide/scriptingContext/LangScriptingContextProvider.java b/platform/lang-impl/src/com/intellij/ide/scriptingContext/LangScriptingContextProvider.java index 33a6324db490..443e67eaf6cb 100644 --- a/platform/lang-impl/src/com/intellij/ide/scriptingContext/LangScriptingContextProvider.java +++ b/platform/lang-impl/src/com/intellij/ide/scriptingContext/LangScriptingContextProvider.java @@ -23,6 +23,8 @@ import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; + /** * @author Rustam Vishnyakov */ @@ -44,5 +46,11 @@ public abstract class LangScriptingContextProvider { @Nullable public abstract String getDefaultDocUrl(VirtualFile file); + + @Nullable + public abstract String getOfflineDocUrl(String defaultDocUrl); + + @Nullable + public abstract String downloadOfflineDoc(Project project, String offlineDocUrl, JComponent parent); } diff --git a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/EditLibraryDialog.form b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/EditLibraryDialog.form index e547839fa495..413d843568fc 100644 --- a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/EditLibraryDialog.form +++ b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/EditLibraryDialog.form @@ -91,7 +91,7 @@ - + @@ -109,7 +109,7 @@ - + @@ -117,7 +117,7 @@ - + @@ -136,14 +136,22 @@ - + - + + + + + + + + + diff --git a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/EditLibraryDialog.java b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/EditLibraryDialog.java index 17cb54b3e73a..baf05e820c89 100644 --- a/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/EditLibraryDialog.java +++ b/platform/lang-impl/src/com/intellij/ide/scriptingContext/ui/EditLibraryDialog.java @@ -65,6 +65,7 @@ public class EditLibraryDialog extends DialogWrapper { private JButton myAddDocUrlButton; private JButton myRemoveDocUrlButton; private JBList myDocUrlList; + private JButton myDownloadButton; private Project myProject; private FileTableModel myFileTableModel; private VirtualFile mySelectedFile; @@ -110,6 +111,7 @@ public class EditLibraryDialog extends DialogWrapper { @Override public void intervalAdded(ListDataEvent e) { myRemoveDocUrlButton.setEnabled(true); + checkDownloadOfflineDocEnabled(); } @Override @@ -117,6 +119,7 @@ public class EditLibraryDialog extends DialogWrapper { Object source = e.getSource(); if (source instanceof MyDocUrlListModel && ((MyDocUrlListModel)source).getDocUrls().length == 0) { myRemoveDocUrlButton.setEnabled(false); + checkDownloadOfflineDocEnabled(); } } @@ -133,6 +136,14 @@ public class EditLibraryDialog extends DialogWrapper { } }); + myDownloadButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + downloadDocumentation(); + } + }); + myDownloadButton.setVisible(false); //TODO Remove + myRemoveDocUrlButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -161,6 +172,28 @@ public class EditLibraryDialog extends DialogWrapper { if (docUrls.length > 0) { myRemoveDocUrlButton.setEnabled(true); } + checkDownloadOfflineDocEnabled(); + } + + private void checkDownloadOfflineDocEnabled() { + for (String url : getDocUrls()) { + if (myProvider.getOfflineDocUrl(url) != null) { + myDownloadButton.setEnabled(true); + return; + } + } + myDownloadButton.setEnabled(false); + } + + private void downloadDocumentation() { + for (String url : getDocUrls()) { + String offlineDocUrl = myProvider.getOfflineDocUrl(url); + if (offlineDocUrl != null) { + String targetFile = myProvider.downloadOfflineDoc(myProject, offlineDocUrl, getRootPane()); + myDocUrlListModel.addUrl(targetFile); + return; + } + } } private class MyTableCellRenderer extends DefaultTableCellRenderer { @@ -454,10 +487,13 @@ public class EditLibraryDialog extends DialogWrapper { } public int addUrl(String url) { - myDocUrls.add(url); - int newIndex = myDocUrls.indexOf(url); - fireIntervalAdded(this, newIndex, newIndex); - return newIndex; + if (!myDocUrls.contains(url)) { + myDocUrls.add(url); + int newIndex = myDocUrls.indexOf(url); + fireIntervalAdded(this, newIndex, newIndex); + return newIndex; + } + return myDocUrls.indexOf(url); } public int indexOf(String url) { @@ -491,6 +527,7 @@ public class EditLibraryDialog extends DialogWrapper { int index = myDocUrlListModel.addUrl(url); myDocUrlList.ensureIndexIsVisible(index); myDocUrlList.setSelectedIndex(index); + checkDownloadOfflineDocEnabled(); } }