initial phase

This commit is contained in:
Akarshit Wal
2015-06-18 01:33:05 +05:30
parent f797d2c3e5
commit cb17c98c5b
7 changed files with 1195 additions and 568 deletions

View File

@@ -105,12 +105,9 @@ public class Base {
PreferencesFrame preferencesFrame;
// A single instance of the library manager window
ContributionManagerDialog libraryManagerFrame;
ContributionManagerDialog toolManagerFrame;
ContributionManagerDialog modeManagerFrame;
ContributionManagerDialog exampleManagerFrame;
ContributionManagerDialog updateManagerFrame;
ContributionManagerDialog contributionManagerFrame;
// Location for untitled items
static File untitledFolder;
@@ -391,16 +388,8 @@ public class Base {
}
}
libraryManagerFrame =
new ContributionManagerDialog(ContributionType.LIBRARY);
toolManagerFrame =
new ContributionManagerDialog(ContributionType.TOOL);
modeManagerFrame =
new ContributionManagerDialog(ContributionType.MODE);
exampleManagerFrame =
new ContributionManagerDialog(ContributionType.EXAMPLES);
updateManagerFrame =
new ContributionManagerDialog(null);
contributionManagerFrame =
new ContributionManagerDialog();
// Make sure ThinkDifferent has library examples too
nextMode.rebuildLibraryList();
@@ -1394,7 +1383,7 @@ public class Base {
* Show the library installer window.
*/
public void handleOpenLibraryManager() {
libraryManagerFrame.showFrame(activeEditor);
contributionManagerFrame.showFrame(activeEditor);
}
@@ -1402,7 +1391,7 @@ public class Base {
* Show the tool installer window.
*/
public void handleOpenToolManager() {
toolManagerFrame.showFrame(activeEditor);
contributionManagerFrame.showFrame(activeEditor);
}
@@ -1410,7 +1399,7 @@ public class Base {
* Show the mode installer window.
*/
public void handleOpenModeManager() {
modeManagerFrame.showFrame(activeEditor);
contributionManagerFrame.showFrame(activeEditor);
}
@@ -1418,12 +1407,12 @@ public class Base {
* Show the examples installer window.
*/
public void handleOpenExampleManager() {
exampleManagerFrame.showFrame(activeEditor);
contributionManagerFrame.showFrame(activeEditor);
}
public void handleShowUpdates() {
updateManagerFrame.showFrame(activeEditor);
contributionManagerFrame.showFrame(activeEditor);
}

View File

@@ -122,14 +122,8 @@ public class UpdateCheck {
// Wait for xml file to be downloaded and updates to come in.
// (this should really be handled better).
Thread.sleep(5 * 1000);
if ((!base.libraryManagerFrame.hasAlreadyBeenOpened()
&& !base.toolManagerFrame.hasAlreadyBeenOpened()
&& !base.modeManagerFrame.hasAlreadyBeenOpened()
&& !base.exampleManagerFrame.hasAlreadyBeenOpened())
&& (base.libraryManagerFrame.hasUpdates(base)
|| base.toolManagerFrame.hasUpdates(base)
|| base.modeManagerFrame.hasUpdates(base)
|| base.exampleManagerFrame.hasUpdates(base))) {
if ((!base.contributionManagerFrame.hasAlreadyBeenOpened()
&& (base.contributionManagerFrame.hasUpdates(base)))){
promptToOpenContributionManager();
}
}

View File

@@ -41,7 +41,7 @@ import processing.app.Base;
public class ContributionListPanel extends JPanel implements Scrollable, ContributionChangeListener {
ContributionManagerDialog contribManager;
ContributionTab contributionTab;
TreeMap<Contribution, ContributionPanel> panelByContribution;
static HyperlinkListener nullHyperlinkListener = new HyperlinkListener() {
@@ -56,10 +56,10 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
private ContributionListing contribListing = ContributionListing.getInstance();
public ContributionListPanel(ContributionManagerDialog libraryManager,
public ContributionListPanel(ContributionTab contributionTab,
ContributionFilter filter) {
super();
this.contribManager = libraryManager;
this.contributionTab = contributionTab;
this.filter = filter;
// contribListing = ContributionListing.getInstance();

View File

@@ -396,6 +396,9 @@ public class ContributionListing {
new Thread(new Runnable() {
public void run() {
downloadingListingLock.lock();
// if(hasDownloadedLatestList == true){
// return;
// }
URL url = null;
try {

File diff suppressed because it is too large Load Diff

View File

@@ -128,7 +128,7 @@ class ContributionPanel extends JPanel {
installActionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
listPanel.contribManager.status.clear();
listPanel.contributionTab.status.clear();
isInstallInProgress = true;
((CardLayout) barButtonCardPane.getLayout()).show(barButtonCardPane, PROGRESS_BAR_CONSTRAINT);
if (contrib instanceof AvailableContribution) {
@@ -140,7 +140,7 @@ class ContributionPanel extends JPanel {
undoActionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
listPanel.contribManager.status.clear();
listPanel.contributionTab.status.clear();
if (contrib instanceof LocalContribution) {
LocalContribution installed = (LocalContribution) contrib;
installed.setDeletionFlag(false);
@@ -157,14 +157,14 @@ class ContributionPanel extends JPanel {
}
}
}
listPanel.contribManager.restartButton.setVisible(toBeRestarted);
listPanel.contributionTab.restartButton.setVisible(toBeRestarted);
}
}
};
removeActionListener = new ActionListener() {
public void actionPerformed(ActionEvent arg) {
listPanel.contribManager.status.clear();
listPanel.contributionTab.status.clear();
if (contrib.isInstalled() && contrib instanceof LocalContribution) {
isRemoveInProgress = true;
((CardLayout) barButtonCardPane.getLayout()).show(barButtonCardPane, PROGRESS_BAR_CONSTRAINT);
@@ -193,12 +193,12 @@ class ContributionPanel extends JPanel {
reorganizePaneComponents();
setSelected(true);
ContributionManagerDialog manager = listPanel.contribManager;
ContributionTab contributionTab = listPanel.contributionTab;
boolean isModeActive = false;
if (contrib.getType() == ContributionType.MODE) {
ModeContribution m = (ModeContribution) contrib;
// TODO there's gotta be a cleaner way to do this accessor
for (Editor e : manager.editor.getBase().getEditors()) {
for (Editor e : contributionTab.editor.getBase().getEditors()) {
//Iterator<Editor> iter = listPanel.contribManager.editor.getBase().getEditors().iterator();
//while (iter.hasNext()) {
//Editor e = iter.next();
@@ -211,13 +211,13 @@ class ContributionPanel extends JPanel {
if (isModeActive) {
updateButton.setEnabled(true);
} else {
manager.restartButton.setVisible(true);
contributionTab.restartButton.setVisible(true);
}
}
};
ContributionManagerDialog manager = listPanel.contribManager;
ContributionTab contributionTab = listPanel.contributionTab;
LocalContribution localContrib = (LocalContribution) contrib;
localContrib.removeContribution(manager.editor, monitor, manager.status);
localContrib.removeContribution(contributionTab.editor, monitor, contributionTab.status);
}
}
};
@@ -248,7 +248,7 @@ class ContributionPanel extends JPanel {
} else {
final String msg = contrib.getName() +
" is not compatible with this version of Processing";
listPanel.contribManager.status.setErrorMessage(msg);
listPanel.contributionTab.status.setErrorMessage(msg);
}
}
});
@@ -306,7 +306,7 @@ class ContributionPanel extends JPanel {
updateButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
listPanel.contribManager.status.clear();
listPanel.contributionTab.status.clear();
isUpdateInProgress = true;
if (contrib.getType().requiresRestart()) {
installRemoveButton.setEnabled(false);
@@ -328,7 +328,7 @@ class ContributionPanel extends JPanel {
public void cancel() {
super.cancel();
resetInstallProgressBarState();
listPanel.contribManager.status.setMessage("");
listPanel.contributionTab.status.setMessage("");
isUpdateInProgress = false;
installRemoveButton.setEnabled(true);
if (contrib.isDeletionFlagged()) {
@@ -343,7 +343,7 @@ class ContributionPanel extends JPanel {
//Iterator<Editor> iter = listPanel.contribManager.editor.getBase().getEditors().iterator();
//while (iter.hasNext()) {
// TODO there's gotta be a cleaner way to do this accessor
Base base = listPanel.contribManager.editor.getBase();
Base base = listPanel.contributionTab.editor.getBase();
for (Editor e : base.getEditors()) {
//Editor e = iter.next();
if (e.getMode().equals(m.getMode())) {
@@ -355,13 +355,13 @@ class ContributionPanel extends JPanel {
if (isModeActive) {
updateButton.setEnabled(true);
} else {
listPanel.contribManager.restartButton.setVisible(true);
listPanel.contributionTab.restartButton.setVisible(true);
}
}
};
((LocalContribution) contrib)
.removeContribution(listPanel.contribManager.editor,
progress, listPanel.contribManager.status);
.removeContribution(listPanel.contributionTab.editor,
progress, listPanel.contributionTab.status);
} else {
updateButton.setEnabled(false);
installRemoveButton.setEnabled(false);
@@ -689,7 +689,7 @@ class ContributionPanel extends JPanel {
private void installContribution(AvailableContribution info) {
if (info.link == null) {
listPanel.contribManager.status.setErrorMessage(Language.interpolate("contrib.unsupported_operating_system", info.getType()));
listPanel.contributionTab.status.setErrorMessage(Language.interpolate("contrib.unsupported_operating_system", info.getType()));
} else {
installContribution(info, info.link);
}
@@ -729,7 +729,7 @@ class ContributionPanel extends JPanel {
installRemoveButton.setEnabled(!contrib.isUpdateFlagged());
if (isError()) {
listPanel.contribManager.status.setErrorMessage(Language.text("contrib.download_error"));
listPanel.contributionTab.status.setErrorMessage(Language.text("contrib.download_error"));
}
((CardLayout) barButtonCardPane.getLayout()).show(barButtonCardPane, BUTTON_CONSTRAINT);
isInstallInProgress = false;
@@ -744,10 +744,10 @@ class ContributionPanel extends JPanel {
}
};
ContributionManager.downloadAndInstall(listPanel.contribManager.editor,
ContributionManager.downloadAndInstall(listPanel.contributionTab.editor,
downloadUrl, ad,
downloadProgress, installProgress,
listPanel.contribManager.status);
listPanel.contributionTab.status);
} catch (MalformedURLException e) {
Base.showWarning(Language.text("contrib.errors.install_failed"),

View File

@@ -0,0 +1,616 @@
/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
Part of the Processing project - http://processing.org
Copyright (c) 2013 The Processing Foundation
Copyright (c) 2011-12 Ben Fry and Casey Reas
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package processing.app.contrib;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.net.SocketTimeoutException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import processing.app.Base;
import processing.app.Editor;
import processing.app.Language;
import processing.app.Library;
public class ContributionTab {
static final String ANY_CATEGORY = Language.text("contrib.all");
JPanel panel;
ContributionType contributionType;
String title;
ContributionFilter filter;
JComboBox<String> categoryChooser;
JScrollPane scrollPane;
ContributionListPanel contributionListPanel;
StatusPanel status;
FilterField filterField;
JButton restartButton;
JButton retryConnectingButton;
JProgressBar progressBar;
// the calling editor, so updates can be applied
Editor editor;
String category;
String compatibleCheckboxLabel;
boolean isCompatibilityFilter;
ContributionListing contribListing;
public ContributionTab(ContributionType type) {
if (type == null) {
title = Language.text("contrib.manager_title.update");
filter = ContributionType.createUpdateFilter();
compatibleCheckboxLabel = Language.text("contrib.show_only_compatible.update");
} else {
if (type == ContributionType.MODE) {
title = Language.text("contrib.manager_title.mode");
compatibleCheckboxLabel = Language.text("contrib.show_only_compatible.mode");
}
else if (type == ContributionType.TOOL) {
title = Language.text("contrib.manager_title.tool");
compatibleCheckboxLabel = Language.text("contrib.show_only_compatible.tool");
}
else if (type == ContributionType.LIBRARY) {
title = Language.text("contrib.manager_title.library");
compatibleCheckboxLabel = Language.text("contrib.show_only_compatible.library");
}
else if (type == ContributionType.EXAMPLES) {
title = Language.text("contrib.manager_title.examples");
compatibleCheckboxLabel = Language.text("contrib.show_only_compatible.examples");
}
filter = type.createFilter();
}
contribListing = ContributionListing.getInstance();
contributionListPanel = new ContributionListPanel(this, filter);
contribListing.addContributionListener(contributionListPanel);
}
public boolean hasUpdates() {
return contribListing.hasUpdates();
}
public boolean hasUpdates(Base base) {
return contribListing.hasUpdates(base);
}
protected JPanel makeTextPanel(String text) {
JPanel panel = new JPanel(false);
JLabel filler = new JLabel(text);
filler.setHorizontalAlignment(JLabel.CENTER);
panel.setLayout(new GridLayout(1, 1));
panel.add(filler);
return panel;
}
public void showFrame(final Editor editor) {
this.editor = editor;
if (panel == null) {
makePanel(editor);
}
panel.setVisible(true);
contributionListPanel.grabFocus();
if (!contribListing.hasDownloadedLatestList() && contributionType == ContributionType.TOOL) {
// updateContributionListing();
} else {
downloadAndUpdateContributionListing();
}
}
public JPanel makePanel(final Editor editor) {
panel = makeTextPanel("Panel #1");
restartButton = new JButton(Language.text("contrib.restart"));
restartButton.setVisible(false);
restartButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
Iterator<Editor> iter = editor.getBase().getEditors().iterator();
while (iter.hasNext()) {
Editor ed = iter.next();
if (ed.getSketch().isModified()) {
int option = Base
.showYesNoQuestion(editor, title,
Language.text("contrib.unsaved_changes"),
Language.text("contrib.unsaved_changes.prompt"));
if (option == JOptionPane.NO_OPTION)
return;
else
break;
}
}
// Thanks to http://stackoverflow.com/a/4160543
StringBuilder cmd = new StringBuilder();
cmd.append(System.getProperty("java.home") + File.separator + "bin"
+ File.separator + "java ");
for (String jvmArg : ManagementFactory.getRuntimeMXBean()
.getInputArguments()) {
cmd.append(jvmArg + " ");
}
cmd.append("-cp ")
.append(ManagementFactory.getRuntimeMXBean().getClassPath())
.append(" ");
cmd.append(Base.class.getName());
try {
Runtime.getRuntime().exec(cmd.toString());
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
}
});
retryConnectingButton = new JButton("Retry");
retryConnectingButton.setVisible(false);
retryConnectingButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// The message is set to null so that every time the retry button is hit
// no previous error is displayed in the status
status.setMessage(null);
downloadAndUpdateContributionListing();
}
});
progressBar = new JProgressBar();
progressBar.setVisible(true);
createComponents();
return panel;
}
/** Creates and arranges the Swing components in the dialog.
* @param panel1 */
private void createComponents() {
Container pane = panel;
// pane.setLayout(new GridBagLayout());
//
// { // Shows "Filter by Category" and the combo box for selecting a category
// GridBagConstraints c = new GridBagConstraints();
// c.gridx = 0;
// c.gridy = 0;
pane.setLayout(new BorderLayout());
JPanel filterPanel = new JPanel();
filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.X_AXIS));
// pane.add(filterPanel, c);
pane.add(filterPanel, BorderLayout.NORTH);
filterPanel.add(Box.createHorizontalStrut(6));
JLabel categoryLabel = new JLabel(Language.text("contrib.category"));
filterPanel.add(categoryLabel);
filterPanel.add(Box.createHorizontalStrut(5));
categoryChooser = new JComboBox<String>();
categoryChooser.setMaximumRowCount(20);
updateCategoryChooser();
// filterPanel.add(categoryChooser, c);
filterPanel.add(categoryChooser);
categoryChooser.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
category = (String) categoryChooser.getSelectedItem();
if (ContributionManagerDialog.ANY_CATEGORY.equals(category)) {
category = null;
}
filterLibraries(category, filterField.filters, isCompatibilityFilter);
contributionListPanel.updateColors();
}
});
filterPanel.add(Box.createHorizontalStrut(5));
// filterPanel.add(Box.createHorizontalGlue());
filterField = new FilterField();
filterPanel.add(filterField);
filterPanel.add(Box.createHorizontalStrut(5));
final JCheckBox compatibleContrib = new JCheckBox(compatibleCheckboxLabel);
compatibleContrib.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent arg0) {
isCompatibilityFilter = compatibleContrib.isSelected();
filterLibraries(category, filterField.filters, isCompatibilityFilter);
contributionListPanel.updateColors();
}
});
filterPanel.add(compatibleContrib);
// filterPanel.add(Box.createHorizontalGlue());
// }
//filterPanel.setBorder(new EmptyBorder(13, 13, 13, 13));
filterPanel.setBorder(new EmptyBorder(7, 7, 7, 7));
// { // The scroll area containing the contribution listing and the status bar.
// GridBagConstraints c = new GridBagConstraints();
// c.fill = GridBagConstraints.BOTH;
// c.gridx = 0;
// c.gridy = 1;
// c.gridwidth = 2;
// c.weighty = 1;
// c.weightx = 1;
scrollPane = new JScrollPane();
scrollPane.setPreferredSize(new Dimension(300, 300));
scrollPane.setViewportView(contributionListPanel);
// scrollPane.getViewport().setOpaque(true);
// scrollPane.getViewport().setBackground(contributionListPanel.getBackground());
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
// scrollPane.setBorder(new EmptyBorder(0, 7, 0, 7));
pane.add(scrollPane, BorderLayout.CENTER);
pane.add(Box.createHorizontalStrut(10), BorderLayout.WEST);
pane.add(Box.createHorizontalStrut(10), BorderLayout.EAST);
status = new StatusPanel();
// status.setBorder(new EmptyBorder(7, 7, 7, 7));
JPanel statusRestartPane = new JPanel();
statusRestartPane.setLayout(new BorderLayout());
statusRestartPane.setBorder(new EmptyBorder(7, 7, 7, 7));
statusRestartPane.setOpaque(false);
statusRestartPane.add(status, BorderLayout.WEST);
statusRestartPane.add(progressBar, BorderLayout.LINE_END);
// Adding both of these to EAST shouldn't pose too much of a problem,
// since they can never get added together.
statusRestartPane.add(restartButton, BorderLayout.EAST);
statusRestartPane.add(retryConnectingButton, BorderLayout.EAST);
pane.add(statusRestartPane, BorderLayout.SOUTH);
// status = new StatusPanel();
// status.setBorder(BorderFactory.createEtchedBorder());
// final JLayeredPane layeredPane = new JLayeredPane();
// layeredPane.add(scrollPane, JLayeredPane.DEFAULT_LAYER);
// layeredPane.add(status, JLayeredPane.PALETTE_LAYER);
//
// layeredPane.addComponentListener(new ComponentAdapter() {
//
// void resizeLayers() {
// scrollPane.setSize(layeredPane.getSize());
// scrollPane.updateUI();
// }
//
// public void componentShown(ComponentEvent e) {
// resizeLayers();
// }
//
// public void componentResized(ComponentEvent arg0) {
// resizeLayers();
// }
// });
//
// final JViewport viewport = scrollPane.getViewport();
// viewport.addComponentListener(new ComponentAdapter() {
// void resizeLayers() {
// status.setLocation(0, viewport.getHeight() - 18);
//
// Dimension d = viewport.getSize();
// d.height = 20;
// d.width += 3;
// status.setSize(d);
// }
// public void componentShown(ComponentEvent e) {
// resizeLayers();
// }
// public void componentResized(ComponentEvent e) {
// resizeLayers();
// }
// });
//
// pane.add(layeredPane, c);
// }
// { // The filter text area
// GridBagConstraints c = new GridBagConstraints();
// c.gridx = 0;
// c.gridy = 2;
// c.gridwidth = 2;
// c.weightx = 1;
// c.fill = GridBagConstraints.HORIZONTAL;
// filterField = new FilterField();
//
// pane.add(filterField, c);
// }
panel.setMinimumSize(new Dimension(450, 400));
}
private void updateCategoryChooser() {
if (categoryChooser != null) {
ArrayList<String> categories;
categoryChooser.removeAllItems();
categories = new ArrayList<String>(contribListing.getCategories(filter));
// for (int i = 0; i < categories.size(); i++) {
// System.out.println(i + " category: " + categories.get(i));
// }
Collections.sort(categories);
// categories.add(0, ContributionManagerDialog.ANY_CATEGORY);
boolean categoriesFound = false;
categoryChooser.addItem(ContributionManagerDialog.ANY_CATEGORY);
for (String s : categories) {
categoryChooser.addItem(s);
if (!s.equals("Unknown")) {
categoriesFound = true;
}
}
categoryChooser.setEnabled(categoriesFound);
}
}
protected void filterLibraries(String category, List<String> filters) {
List<Contribution> filteredLibraries =
contribListing.getFilteredLibraryList(category, filters);
contributionListPanel.filterLibraries(filteredLibraries);
}
protected void filterLibraries(String category, List<String> filters, boolean isCompatibilityFilter) {
List<Contribution> filteredLibraries =
contribListing.getFilteredLibraryList(category, filters);
filteredLibraries = contribListing.getCompatibleContributionList(filteredLibraries, isCompatibilityFilter);
contributionListPanel.filterLibraries(filteredLibraries);
}
protected void updateContributionListing() {
if (editor != null) {
ArrayList<Contribution> contributions = new ArrayList<Contribution>();
ArrayList<Library> libraries =
new ArrayList<Library>(editor.getMode().contribLibraries);
contributions.addAll(libraries);
//ArrayList<ToolContribution> tools = editor.contribTools;
List<ToolContribution> tools = editor.getToolContribs();
contributions.addAll(tools);
List<ModeContribution> modes = editor.getBase().getModeContribs();
contributions.addAll(modes);
List<ExamplesContribution> examples = editor.getBase().getExampleContribs();
contributions.addAll(examples);
// ArrayList<LibraryCompilation> compilations = LibraryCompilation.list(libraries);
//
// // Remove libraries from the list that are part of a compilations
// for (LibraryCompilation compilation : compilations) {
// Iterator<Library> it = libraries.iterator();
// while (it.hasNext()) {
// Library current = it.next();
// if (compilation.getFolder().equals(current.getFolder().getParentFile())) {
// it.remove();
// }
// }
// }
contribListing.updateInstalledList(contributions);
}
}
protected void downloadAndUpdateContributionListing() {
retryConnectingButton.setEnabled(false);
status.setMessage(Language.text("contrib.status.downloading_list"));
contribListing.downloadAvailableList(new ContribProgressBar(progressBar) {
@Override
public void startTask(String name, int maxValue) {
super.startTask(name, maxValue);
progressBar.setString(null);
}
@Override
public void setProgress(int value) {
super.setProgress(value);
// int percent = 100 * value / this.max;
progressBar.setValue(value);
progressBar.setStringPainted(true);
status.setMessage(Language.text("contrib.status.downloading_list"));
}
@Override
public void finishedAction() {
progressBar.setVisible(false);
updateContributionListing();
updateCategoryChooser();
retryConnectingButton.setEnabled(true);
if (error) {
if (exception instanceof SocketTimeoutException) {
status.setErrorMessage(Language
.text("contrib.errors.list_download.timeout"));
} else {
status.setErrorMessage(Language
.text("contrib.errors.list_download"));
}
exception.printStackTrace();
retryConnectingButton.setVisible(true);
} else {
status.setMessage(Language.text("contrib.status.done"));
retryConnectingButton.setVisible(false);
}
}
});
}
protected void setFilterText(String filter) {
if (filter == null || filter.isEmpty()) {
filterField.setText("");
filterField.showingHint = true;
} else {
filterField.setText(filter);
filterField.showingHint = false;
}
filterField.applyFilter();
}
// private JPanel getPlaceholder() {
// return contributionListPanel.statusPlaceholder;
// }
class FilterField extends JTextField {
String filterHint;
boolean showingHint;
List<String> filters;
public FilterField () {
super(Language.text("contrib.filter_your_search"));
filterHint = Language.text("contrib.filter_your_search");
showingHint = true;
filters = new ArrayList<String>();
updateStyle();
addFocusListener(new FocusListener() {
public void focusLost(FocusEvent focusEvent) {
if (filterField.getText().isEmpty()) {
showingHint = true;
}
updateStyle();
}
public void focusGained(FocusEvent focusEvent) {
if (showingHint) {
showingHint = false;
filterField.setText("");
}
updateStyle();
}
});
getDocument().addDocumentListener(new DocumentListener() {
public void removeUpdate(DocumentEvent e) {
applyFilter();
}
public void insertUpdate(DocumentEvent e) {
applyFilter();
}
public void changedUpdate(DocumentEvent e) {
applyFilter();
}
});
}
public void applyFilter() {
String filter = filterField.getFilterText();
filter = filter.toLowerCase();
// Replace anything but 0-9, a-z, or : with a space
filter = filter.replaceAll("[^\\x30-\\x39^\\x61-\\x7a^\\x3a]", " ");
filters = Arrays.asList(filter.split(" "));
filterLibraries(category, filters, isCompatibilityFilter);
contributionListPanel.updateColors();
}
public String getFilterText() {
return showingHint ? "" : getText();
}
public void updateStyle() {
if (showingHint) {
setText(filterHint);
// setForeground(UIManager.getColor("TextField.light")); // too light
setForeground(Color.gray);
setFont(getFont().deriveFont(Font.ITALIC));
} else {
setForeground(UIManager.getColor("TextField.foreground"));
setFont(getFont().deriveFont(Font.PLAIN));
}
}
}
public boolean hasAlreadyBeenOpened() {
return panel != null;
}
}