more cleanup, start on optimization of contrib manager

This commit is contained in:
Ben Fry
2022-01-17 07:32:32 -05:00
parent 5c1d51a188
commit fd2d187354
8 changed files with 55 additions and 58 deletions

View File

@@ -52,7 +52,7 @@ public class ContributionListing {
Map<String, List<Contribution>> librariesByCategory;
Map<String, Contribution> librariesByImportHeader;
// TODO: Every contribution is getting added twice
// and nothing is replaced ever.
// and nothing is replaced ever.
Set<Contribution> allContributions;
boolean listDownloaded;
boolean listDownloadFailed;
@@ -67,7 +67,6 @@ public class ContributionListing {
allContributions = new LinkedHashSet<>();
downloadingListingLock = new ReentrantLock();
//listingFile = Base.getSettingsFile("contributions.txt");
listingFile = Base.getSettingsFile(LOCAL_FILENAME);
boolean writable = listingFile.setWritable(true, false);
if (writable && listingFile.exists()) {
@@ -100,8 +99,8 @@ public class ContributionListing {
/**
* Adds the installed libraries to the listing of libraries, replacing any
* pre-existing libraries by the same name as one in the list.
* Adds the installed libraries to the listing of libraries, replacing
* any pre-existing libraries by the same name as one in the list.
*/
protected void updateInstalledList(List<Contribution> installed) {
for (Contribution contribution : installed) {

View File

@@ -82,7 +82,8 @@ public class ContributionTab extends JPanel {
// long t4 = System.currentTimeMillis();
contributionListPanel = new ListPanel(this, filter, false);
// long t5 = System.currentTimeMillis();
contribListing.addListener(contributionListPanel); // TODO optimize: this line is taking all of the time
// TODO optimize: this line is taking all of the time
contribListing.addListener(contributionListPanel);
// long t6 = System.currentTimeMillis();
// System.out.println("ContributionTab.<init> " + (t4-t1) + " " + (t5-t4) + " " + (t6-t5));
}

View File

@@ -32,7 +32,6 @@ import java.text.DateFormat;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.HyperlinkEvent;
import javax.swing.text.Document;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.StyleSheet;
@@ -136,12 +135,12 @@ class DetailPanel extends JPanel {
setExpandListener(this, new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (contrib.isCompatible(Base.getRevision())) {
listPanel.setSelectedPanel(DetailPanel.this);
} else {
setErrorMessage(contrib.getName() +
" cannot be used with this version of Processing");
}
if (contrib.isCompatible(Base.getRevision())) {
listPanel.setSelectedPanel(DetailPanel.this);
} else {
setErrorMessage(contrib.getName() +
" cannot be used with this version of Processing");
}
}
});
}
@@ -152,6 +151,7 @@ class DetailPanel extends JPanel {
* when the library panel is not clicked.
*/
private void addPaneComponents() {
System.out.println("DetailPanel.addPaneComponents()");
setLayout(new BorderLayout());
descriptionPane = new JTextPane();
@@ -165,8 +165,8 @@ class DetailPanel extends JPanel {
// HTMLEditorKit kit = new HTMLEditorKit();
HTMLEditorKit kit = Toolkit.createHtmlEditorKit();
StyleSheet stylesheet = new StyleSheet();
stylesheet.addRule(getBodyStyle());
stylesheet.addRule("a { color: #000000; text-decoration:underline; text-decoration-style: dotted; }");
stylesheet.addRule(StatusPanel.getBodyStyle());
// stylesheet.addRule("a { color: #000000; text-decoration:underline; text-decoration-style: dotted; }");
kit.setStyleSheet(stylesheet);
HTMLDocument hd = (HTMLDocument) kit.createDefaultDocument();
descriptionPane.setEditorKit(kit);
@@ -293,20 +293,6 @@ class DetailPanel extends JPanel {
}
static String getBodyStyle() {
return "body { " +
" margin: 0; " +
" padding: 0;" +
" font-family: " + Toolkit.getSansFontName() + ", Helvetica, Arial, sans-serif;" +
" font-size: 11px;" +
// " font-size: 100%;" +
// " font-size: 0.95em; " +
// "}";
"}" +
"a { color: #444; text-decoration: none; }";
}
private void reorganizePaneComponents() {
BorderLayout layout = (BorderLayout) this.getLayout();
remove(layout.getLayoutComponent(BorderLayout.SOUTH));
@@ -406,6 +392,8 @@ class DetailPanel extends JPanel {
public void setContribution(Contribution contrib) {
// System.out.println("DetailPanel.setContribution " + contrib.name);
new Exception("DetailPanel.setContribution " + contrib.name).printStackTrace(System.out);
this.contrib = contrib;
if (contrib.isSpecial()) {

View File

@@ -39,7 +39,7 @@ import processing.app.ui.Toolkit;
// The "Scrollable" implementation and its methods here take care of preventing
// the scrolling area from running exceptionally slowly. Not sure why they're
// necessary in the first place, however; seems like odd behavior.
// necessary in the first place, however. Is that hiding a bigger problem?
// It also allows the description text in the panels to wrap properly.
public class ListPanel extends JPanel
@@ -66,10 +66,10 @@ implements Scrollable, ContributionListing.ChangeListener {
static final Color SELECTION_COLOR = new Color(0xffe0fffd);
static final SectionHeaderContribution[] sections = {
new SectionHeaderContribution(ContributionType.LIBRARY),
new SectionHeaderContribution(ContributionType.MODE),
new SectionHeaderContribution(ContributionType.TOOL),
new SectionHeaderContribution(ContributionType.EXAMPLES)
new SectionHeaderContribution(ContributionType.LIBRARY),
new SectionHeaderContribution(ContributionType.MODE),
new SectionHeaderContribution(ContributionType.TOOL),
new SectionHeaderContribution(ContributionType.EXAMPLES)
};

View File

@@ -63,7 +63,6 @@ public class ManagerFrame {
public ManagerFrame(Base base) {
this.base = base;
// long t1 = System.currentTimeMillis();
final int smallSize = Toolkit.zoom(12);
final int normalSize = Toolkit.zoom(14);
SMALL_PLAIN = Toolkit.getSansFont(smallSize, Font.PLAIN);
@@ -73,19 +72,21 @@ public class ManagerFrame {
// TODO Optimize these inits... unfortunately it needs to run on the EDT,
// and Swing is a piece of s*t, so it's gonna be slow with lots of contribs.
// All the time is being used up between t2 and t3.
// In particular, load everything and then fire the update events.
// Also, don't pull all the colors over and over again.
// long t2 = System.currentTimeMillis();
long t1 = System.currentTimeMillis();
librariesTab = new ContributionTab(this, ContributionType.LIBRARY);
long t2 = System.currentTimeMillis();
modesTab = new ContributionTab(this, ContributionType.MODE);
long t3 = System.currentTimeMillis();
toolsTab = new ContributionTab(this, ContributionType.TOOL);
long t4 = System.currentTimeMillis();
examplesTab = new ContributionTab(this, ContributionType.EXAMPLES);
// long t3 = System.currentTimeMillis();
long t5 = System.currentTimeMillis();
updatesTab = new UpdateContributionTab(this);
long t6 = System.currentTimeMillis();
// long t4 = System.currentTimeMillis();
// System.out.println("ManagerFrame.<init> " + (t2-t1) + " " + (t3-t2) + " " + (t4-t3));
System.out.println("ManagerFrame.<init> " + (t2-t1) + " " + (t3-t2) + " " + (t4-t3) + " " + (t5-t4) + " " + (t6-t5));
}

View File

@@ -64,11 +64,7 @@ class StatusPanel extends JPanel {
// private String bodyRule;
/** Needed by ContributionListPanel */
public StatusPanel() { }
public StatusPanel(final ContributionTab contributionTab, int width) {
public StatusPanel(final ContributionTab contributionTab) {
this.contributionTab = contributionTab;
if (foundationIcon == null) {
@@ -78,6 +74,11 @@ class StatusPanel extends JPanel {
removeIcon = Toolkit.getLibIconX("manager/remove");
buttonFont = ManagerFrame.NORMAL_PLAIN;
}
}
public StatusPanel(final ContributionTab contributionTab, int width) {
this(contributionTab);
setBackground(new Color(0xebebeb));
@@ -224,12 +225,27 @@ class StatusPanel extends JPanel {
}
static String getBodyStyle() {
return "body { " +
" margin: 0; " +
" padding: 0;" +
" font-family: " + Toolkit.getSansFontName() + ", Helvetica, Arial, sans-serif;" +
" font-size: 11px;" +
// " font-size: 100%;" +
// " font-size: 0.95em; " +
// "}";
"}" +
"a { color: #444; text-decoration: none; }";
}
public void update(DetailPanel panel) {
System.out.println("rebuilding status panel for " + panel.getContrib().name);
progressPanel.removeAll();
iconLabel.setIcon(panel.getContrib().isSpecial() ? foundationIcon : null);
label.setText(panel.description);
((HTMLDocument)label.getDocument()).getStyleSheet().addRule(DetailPanel.getBodyStyle());
((HTMLDocument)label.getDocument()).getStyleSheet().addRule(getBodyStyle());
//((HTMLDocument)label.getDocument()).getStyleSheet().addRule("a { color: black; text-decoration:underline; text-decoration-style: dotted; }");
//((HTMLDocument)label.getDocument()).getStyleSheet().addRule("a { color: black; text-decoration:underline dotted; }");
// ((HTMLDocument)label.getDocument()).getStyleSheet().addRule("a { color: #666; text-decoration: none; }");

View File

@@ -27,7 +27,7 @@ public class UpdateContributionTab extends ContributionTab {
contributionListPanel = new UpdateListPanel(this, filter);
// contributionListPanel.setBorder(new EmptyBorder(8, 8, 8, 8));
statusPanel = new UpdateStatusPanel(this, 650);
statusPanel = new UpdateStatusPanel(this);
contribListing = ContributionListing.getInstance();
contribListing.addListener(contributionListPanel);
}

View File

@@ -21,8 +21,6 @@
package processing.app.contrib;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.GroupLayout;
import javax.swing.LayoutStyle;
@@ -33,22 +31,16 @@ import processing.app.ui.Toolkit;
public class UpdateStatusPanel extends StatusPanel {
public UpdateStatusPanel(UpdateContributionTab tab, int width) {
super();
this.contributionTab = tab;
public UpdateStatusPanel(UpdateContributionTab tab) {
super(tab);
updateButton = Toolkit.createIconButton("Update All", "manager/update");
updateButton = Toolkit.createIconButton("Update All", updateIcon);
updateButton.setFont(ManagerFrame.NORMAL_PLAIN);
updateButton.setHorizontalAlignment(SwingConstants.LEFT);
updateButton.setVisible(true);
updateButton.setEnabled(false);
updateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
contributionTab.updateAll();
}
});
updateButton.addActionListener(e -> contributionTab.updateAll());
setBackground(new Color(0xebebeb));
layout = new GroupLayout(this);
setLayout(layout);