/*
* Copyright 2000-2014 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.ide.plugins;
import com.intellij.ide.plugins.sorters.SortByDownloadsAction;
import com.intellij.ide.plugins.sorters.SortByRatingAction;
import com.intellij.ide.plugins.sorters.SortByUpdatedAction;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.ComboBoxAction;
import com.intellij.openapi.project.DumbAware;
import com.intellij.ui.ScrollPaneFactory;
import com.intellij.util.ui.update.UiNotifyConnector;
import consulo.annotations.RequiredDispatchThread;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.util.List;
import java.util.TreeSet;
/**
* User: anna
*/
public class AvailablePluginsManagerMain extends PluginManagerMain {
public static final String MANAGE_REPOSITORIES = "Manage repositories...";
public static final String N_A = "N/A";
private PluginManagerMain installed;
public AvailablePluginsManagerMain(PluginManagerMain installed, PluginManagerUISettings uiSettings) {
super(uiSettings);
this.installed = installed;
init();
myActionsPanel.setVisible(false);
/*final JButton manageRepositoriesBtn = new JButton(MANAGE_REPOSITORIES);
if (myVendorFilter == null) {
manageRepositoriesBtn.setMnemonic('m');
manageRepositoriesBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (ShowSettingsUtil.getInstance().editConfigurable(myActionsPanel, new PluginHostsConfigurable())) {
final List<String> pluginHosts = UpdateSettings.getInstance().getStoredPluginHosts();
if (!pluginHosts.contains(((AvailablePluginsTableModel)pluginsModel).getRepository())) {
((AvailablePluginsTableModel)pluginsModel).setRepository(AvailablePluginsTableModel.ALL, myFilter.getFilter().toLowerCase());
}
loadAvailablePlugins();
}
}
});
myActionsPanel.add(manageRepositoriesBtn, BorderLayout.EAST);
} */
/* final JButton httpProxySettingsButton = new JButton(IdeBundle.message("button.http.proxy.settings"));
httpProxySettingsButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (HttpConfigurable.editConfigurable(getMainPanel())) {
loadAvailablePlugins();
}
}
});
myActionsPanel.add(httpProxySettingsButton, BorderLayout.WEST); */
myPanelDescription.setVisible(false);
}
@Override
protected JScrollPane createTable() {
myPluginsModel = new AvailablePluginsTableModel();
myPluginTable = new PluginTable(myPluginsModel);
myPluginTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//pluginTable.setColumnWidth(PluginManagerColumnInfo.COLUMN_DOWNLOADS, 70);
//pluginTable.setColumnWidth(PluginManagerColumnInfo.COLUMN_DATE, 80);
//pluginTable.setColumnWidth(PluginManagerColumnInfo.COLUMN_RATE, 80);
return ScrollPaneFactory.createScrollPane(myPluginTable);
}
@Override
protected DefaultActionGroup createSortersGroup() {
final DefaultActionGroup group = super.createSortersGroup();
group.addAction(new SortByDownloadsAction(myPluginTable, myPluginsModel));
group.addAction(new SortByRatingAction(myPluginTable, myPluginsModel));
group.addAction(new SortByUpdatedAction(myPluginTable, myPluginsModel));
return group;
}
@Override
public void reset() {
UiNotifyConnector.doWhenFirstShown(getPluginTable(), this::loadAvailablePlugins);
super.reset();
}
@Override
protected PluginManagerMain getAvailable() {
return this;
}
@Override
protected PluginManagerMain getInstalled() {
return installed;
}
@Override
protected ActionGroup getActionGroup(boolean inToolbar) {
DefaultActionGroup actionGroup = new DefaultActionGroup();
actionGroup.add(new RefreshAction());
if (inToolbar) {
actionGroup.add(new MyFilterCategoryAction());
}
else {
actionGroup.add(createSortersGroup());
actionGroup.add(AnSeparator.getInstance());
actionGroup.add(new InstallPluginAction(getAvailable(), getInstalled()));
}
return actionGroup;
}
@Override
protected void propagateUpdates(List<IdeaPluginDescriptor> list) {
installed.modifyPluginsList(list);
}
private class MyFilterCategoryAction extends ComboBoxAction implements DumbAware {
@RequiredDispatchThread
@Override
public void update(@NotNull AnActionEvent e) {
super.update(e);
String category = ((AvailablePluginsTableModel)myPluginsModel).getCategory();
if (category == null) {
category = N_A;
}
e.getPresentation().setText("Category: " + category);
}
@NotNull
@Override
protected DefaultActionGroup createPopupActionGroup(JComponent button) {
final TreeSet<String> availableCategories = ((AvailablePluginsTableModel)myPluginsModel).getAvailableCategories();
final DefaultActionGroup gr = new DefaultActionGroup();
gr.add(createFilterByCategoryAction(AvailablePluginsTableModel.ALL));
final boolean noCategory = availableCategories.remove(N_A);
for (final String availableCategory : availableCategories) {
gr.add(createFilterByCategoryAction(availableCategory));
}
if (noCategory) {
gr.add(createFilterByCategoryAction(N_A));
}
return gr;
}
private AnAction createFilterByCategoryAction(final String availableCategory) {
return new AnAction(availableCategory) {
@Override
public void actionPerformed(AnActionEvent e) {
final String filter = myFilter.getFilter().toLowerCase();
((AvailablePluginsTableModel)myPluginsModel).setCategory(availableCategory, filter);
}
};
}
}
}