diff --git a/app/src/processing/app/contrib/ContributionTab.java b/app/src/processing/app/contrib/ContributionTab.java index 86a35e774..015989003 100644 --- a/app/src/processing/app/contrib/ContributionTab.java +++ b/app/src/processing/app/contrib/ContributionTab.java @@ -193,7 +193,8 @@ public class ContributionTab extends JPanel { errorMessage.setText("
Could not connect to the Processing server.
" + "Contributions cannot be installed or updated without an Internet connection.
" + "Please verify your network connection again, then try connecting again.
"); - DetailPanel.setTextStyle(errorMessage, "1em"); + //DetailPanel.setTextStyle(errorMessage, "1em"); + //errorMessage.addStyle(DetailPanel.getBodyStyle()); Dimension dim = new Dimension(550, 60); errorMessage.setMaximumSize(dim); errorMessage.setMinimumSize(dim); diff --git a/app/src/processing/app/contrib/DetailPanel.java b/app/src/processing/app/contrib/DetailPanel.java index c42fb40c9..78f879ef6 100644 --- a/app/src/processing/app/contrib/DetailPanel.java +++ b/app/src/processing/app/contrib/DetailPanel.java @@ -34,6 +34,7 @@ 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; import processing.app.*; @@ -45,27 +46,27 @@ import processing.app.ui.Toolkit; * Panel that expands and gives a brief overview of a library when clicked. */ class DetailPanel extends JPanel { - static public final String REMOVE_RESTART_MESSAGE = + static private final String REMOVE_RESTART_MESSAGE = String.format("%s", Language.text("contrib.messages.remove_restart")); - static public final String INSTALL_RESTART_MESSAGE = + static private final String INSTALL_RESTART_MESSAGE = String.format("%s", Language.text("contrib.messages.install_restart")); - static public final String UPDATE_RESTART_MESSAGE = + static private final String UPDATE_RESTART_MESSAGE = String.format("%s", Language.text("contrib.messages.update_restart")); - static public final String PROGRESS_BAR_CONSTRAINT = "Install/Remove Progress Bar Panel"; + static private final String PROGRESS_BAR_CONSTRAINT = "Install/Remove Progress Bar Panel"; - static public final String BUTTON_CONSTRAINT = "Install/Remove Button Panel"; + static private final String BUTTON_CONSTRAINT = "Install/Remove Button Panel"; - static public final String INCOMPATIBILITY_BLUR = "This contribution is not compatible with " + static private final String INCOMPATIBILITY_BLUR = "This contribution is not compatible with " + "the current revision of Processing"; private final ListPanel listPanel; private final ContributionListing contribListing = ContributionListing.getInstance(); - static final int BUTTON_WIDTH = Toolkit.zoom(100); - static Icon foundationIcon; + static private final int BUTTON_WIDTH = Toolkit.zoom(100); + static private Icon foundationIcon; /** * Should only be set through setContribution(), @@ -86,8 +87,11 @@ class DetailPanel extends JPanel { private JTextPane descriptionPane; private JLabel notificationLabel; private JButton updateButton; - JProgressBar installProgressBar; private JButton installRemoveButton; + + // TODO why is this being added by StatusPanel? [fry 220116] + JProgressBar installProgressBar; + final private JPopupMenu contextMenu; final private JMenuItem openFolder; @@ -132,20 +136,20 @@ 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"); + } } }); } /** - * Create the widgets for the header panel which is visible when the - * library panel is not clicked. + * Create the widgets for the header panel that is visible + * when the library panel is not clicked. */ private void addPaneComponents() { setLayout(new BorderLayout()); @@ -156,8 +160,18 @@ class DetailPanel extends JPanel { Insets margin = descriptionPane.getMargin(); margin.bottom = 0; descriptionPane.setMargin(margin); - descriptionPane.setContentType("text/html"); - setTextStyle(descriptionPane, "0.95em"); +// descriptionPane.setContentType("text/html"); + +// 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; }"); + kit.setStyleSheet(stylesheet); + HTMLDocument hd = (HTMLDocument) kit.createDefaultDocument(); + descriptionPane.setEditorKit(kit); + descriptionPane.setDocument(hd); + descriptionPane.setOpaque(false); if (UIManager.getLookAndFeel().getID().equals("Nimbus")) { descriptionPane.setBackground(new Color(0, 0, 0, 0)); @@ -167,8 +181,8 @@ class DetailPanel extends JPanel { descriptionPane.setHighlighter(null); descriptionPane.addHyperlinkListener(e -> { if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { - // for 3.2.3, added the isSelected() prompt here, rather than - // adding/removing the listener repeatedly + // for 3.2.3, added the isSelected() prompt here, + // rather than adding/removing the listener repeatedly if (isSelected()) { if (enableHyperlinks && e.getURL() != null) { Platform.openURL(e.getURL().toString()); @@ -279,6 +293,18 @@ class DetailPanel extends JPanel { } + static String getBodyStyle() { + return "body { " + + " margin: 0; " + + " padding: 0;" + + " font-family: " + Toolkit.getSansFontName() + ", Helvetica, Arial, sans-serif;" + + " font-size: 12px;" + +// " font-size: 100%;" + +// " font-size: 0.95em; " + + "}"; + } + + private void reorganizePaneComponents() { BorderLayout layout = (BorderLayout) this.getLayout(); remove(layout.getLayoutComponent(BorderLayout.SOUTH)); @@ -613,6 +639,7 @@ class DetailPanel extends JPanel { } + /* @Override public void setForeground(Color fg) { super.setForeground(fg); @@ -622,15 +649,16 @@ class DetailPanel extends JPanel { setForegroundStyle(descriptionPane, installed, isSelected()); } } + */ // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - /** + /* * Sets coloring based on whether installed or not; * also makes ugly blue HTML links into the specified color (black). - */ + * static void setForegroundStyle(JTextPane textPane, boolean installed, boolean selected) { Document doc = textPane.getDocument(); @@ -658,6 +686,7 @@ class DetailPanel extends JPanel { "}"); } } + */ /* diff --git a/app/src/processing/app/contrib/ListPanel.java b/app/src/processing/app/contrib/ListPanel.java index 25194b112..34992d632 100644 --- a/app/src/processing/app/contrib/ListPanel.java +++ b/app/src/processing/app/contrib/ListPanel.java @@ -578,14 +578,14 @@ implements Scrollable, ContributionListing.ChangeListener { // Thread: EDT public void contributionRemoved(final Contribution contribution) { - DetailPanel panel = panelByContribution.get(contribution); - if (panel != null) { - remove(panel); - panelByContribution.remove(contribution); - } - model.fireTableDataChanged(); - updateColors(); - updateUI(); + DetailPanel panel = panelByContribution.get(contribution); + if (panel != null) { + remove(panel); + panelByContribution.remove(contribution); + } + model.fireTableDataChanged(); + updateColors(); + updateUI(); } diff --git a/app/src/processing/app/contrib/StatusPanel.java b/app/src/processing/app/contrib/StatusPanel.java index 4c25c5ec1..db8d89fc6 100644 --- a/app/src/processing/app/contrib/StatusPanel.java +++ b/app/src/processing/app/contrib/StatusPanel.java @@ -64,7 +64,7 @@ class StatusPanel extends JPanel { ContributionListing contributionListing = ContributionListing.getInstance(); ContributionTab contributionTab; - private String bodyRule; +// private String bodyRule; /** Needed by ContributionListPanel */ @@ -83,6 +83,7 @@ class StatusPanel extends JPanel { } setBackground(new Color(0xebebeb)); + setBackground(Color.GREEN); iconLabel = new JLabel(); iconLabel.setHorizontalAlignment(SwingConstants.CENTER); @@ -91,8 +92,10 @@ class StatusPanel extends JPanel { label.setEditable(false); label.setOpaque(false); label.setContentType("text/html"); - bodyRule = "a, body { font-family: " + buttonFont.getFamily() + "; " + - "font-size: " + buttonFont.getSize() + "pt; color: black; text-decoration: none;}"; +// bodyRule = "a, body { font-family: " + buttonFont.getFamily() + "; " + +// "font-size: " + buttonFont.getSize() + "pt; color: black; text-decoration: none;}"; +// bodyRule = ""; +// bodyRule = DetailPanel.getBodyStyle(); label.addHyperlinkListener(new HyperlinkListener() { @Override @@ -239,7 +242,9 @@ class StatusPanel extends JPanel { iconLabel.setIcon(panel.getContrib().isSpecial() ? foundationIcon : null); label.setText(panel.description); - ((HTMLDocument)label.getDocument()).getStyleSheet().addRule(bodyRule); + ((HTMLDocument)label.getDocument()).getStyleSheet().addRule(DetailPanel.getBodyStyle()); + ((HTMLDocument)label.getDocument()).getStyleSheet().addRule("a { color: black; text-decoration:underline; text-decoration-style: dotted; }"); + updateButton.setEnabled(contributionListing.hasDownloadedLatestList() && (contributionListing.hasUpdates(panel.getContrib()) && diff --git a/app/src/processing/app/ui/Toolkit.java b/app/src/processing/app/ui/Toolkit.java index 8f8a18bc9..ec944ef13 100644 --- a/app/src/processing/app/ui/Toolkit.java +++ b/app/src/processing/app/ui/Toolkit.java @@ -70,6 +70,8 @@ import javax.swing.JPopupMenu; import javax.swing.JRootPane; import javax.swing.KeyStroke; import javax.swing.border.EmptyBorder; +import javax.swing.text.html.HTMLEditorKit; +import javax.swing.text.html.StyleSheet; import processing.app.Language; import processing.app.Messages; @@ -1202,4 +1204,29 @@ public class Toolkit { //return new TextLayout("H", font, frc).getBounds().getHeight(); return new TextLayout("H", g.getFont(), frc).getBounds().getHeight(); } + + + static public HTMLEditorKit createHtmlEditorKit() { + return new HTMLEditorKit() { + private StyleSheet style; + + @Override + public StyleSheet getStyleSheet() { + return style == null ? super.getStyleSheet() : style; + } + + @Override + public void setStyleSheet(StyleSheet s) { + this.style = s; + } + + public StyleSheet getDefaultStyleSheet() { + return super.getStyleSheet(); + } + + public void setDefaultStyleSheet(StyleSheet s) { + super.setStyleSheet(s); + } + }; + } }