From bc27e656d8ab1af489fe15bd95bb62515e3514a7 Mon Sep 17 00:00:00 2001 From: Akarshit Wal Date: Thu, 16 Jul 2015 20:58:56 +0530 Subject: [PATCH 1/3] Added ellipses, improved error Panel, fixed a previous NPE bug --- .../app/contrib/ContributionListPanel.java | 54 +++++++++---------- .../app/contrib/ContributionListing.java | 3 ++ .../app/contrib/ContributionTab.java | 14 ++--- .../processing/app/contrib/StatusPanel.java | 6 ++- 4 files changed, 41 insertions(+), 36 deletions(-) diff --git a/app/src/processing/app/contrib/ContributionListPanel.java b/app/src/processing/app/contrib/ContributionListPanel.java index 5618c3a9c..12d75d4c3 100644 --- a/app/src/processing/app/contrib/ContributionListPanel.java +++ b/app/src/processing/app/contrib/ContributionListPanel.java @@ -109,7 +109,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib table.setFillsViewportHeight(true); // table.setBorder(); table.setDefaultRenderer(Contribution.class, new StatusRendere()); - table.setRowHeight(30); + table.setRowHeight(40); table.setRowMargin(6); table.getColumnModel().setColumnMargin(-1); table.getColumnModel().getColumn(0).setMaxWidth(60); @@ -271,40 +271,38 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib label.setOpaque(true); // return table.getDefaultRenderer(Icon.class).getTableCellRendererComponent(table, icon, isSelected, false, row, column); } else if (column == 1) { - //TODO add ellipses, currently the height of JTextPane = height of font + 4 - JTextPane name = new JTextPane(); - name.setContentType("text/html"); - name.setEditable(false); - if(!contribution.isCompatible(Base.getRevision())){ - name.setForeground(Color.LIGHT_GRAY); + // Generating ellipses based on fontMetrics + FontMetrics fontMetrics = table.getFontMetrics(table.getFont()); + int colSize = table.getColumnModel().getColumn(1).getWidth(); + String sentence = contribution.getSentence(); + int currentWidth = table.getFontMetrics(table.getFont().deriveFont(Font.BOLD)).stringWidth(contribution.getName()); + int ellipsesWidth = fontMetrics.stringWidth(" ..."); + String name = "" + contribution.getName() + ""; + if (sentence == null) { + label.setText(name + ""); + } else { + sentence = " - " + sentence; + currentWidth += ellipsesWidth; + int i = 0; + for (i = 0; i < sentence.length(); i++) { + currentWidth += fontMetrics.charWidth(sentence.charAt(i)); + if (currentWidth >= colSize) { + break; + } + } + label.setText(name + sentence.substring(0, i) + " ..."); + } + if (!contribution.isCompatible(Base.getRevision())) { + label.setForeground(Color.LIGHT_GRAY); } - name.setText("" + contribution.getName() + " - " - + contribution.getSentence() + ""); - int textHeight = table.getFontMetrics(table.getFont().deriveFont(Font.BOLD)).getHeight() + 4; - - GroupLayout layout = new GroupLayout(label); - layout.setAutoCreateGaps(true); - layout.setHorizontalGroup(layout.createSequentialGroup() - .addComponent(name)); - layout.setVerticalGroup(layout - .createSequentialGroup() - .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, - GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) - .addComponent(name, 0, - textHeight, - textHeight) - .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, - GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)); if (table.isRowSelected(row)) { label.setBackground(Color.BLUE); - name.setOpaque(false); } label.setOpaque(true); - label.setLayout(layout); } else { label = new JLabel( - contribution.isSpecial() ? Toolkit - .getLibIcon("icons/pde-16.png") : null); + contribution.isSpecial() ? Toolkit + .getLibIcon("icons/pde-16.png") : null); StringBuilder name = new StringBuilder(""); String authorList = contribution.getAuthorList(); if (authorList != null) { diff --git a/app/src/processing/app/contrib/ContributionListing.java b/app/src/processing/app/contrib/ContributionListing.java index 67e80f611..75ffdcc86 100644 --- a/app/src/processing/app/contrib/ContributionListing.java +++ b/app/src/processing/app/contrib/ContributionListing.java @@ -486,6 +486,9 @@ public class ContributionListing { String getLatestVersion(Contribution contribution) { Contribution newestContrib = getAvailableContribution(contribution); + if(newestContrib == null){ + return null; + } String latestVersion = newestContrib.getPrettyVersion(); if (latestVersion != null && !latestVersion.isEmpty()) { if (latestVersion.toLowerCase().startsWith("build")) // For Python mode diff --git a/app/src/processing/app/contrib/ContributionTab.java b/app/src/processing/app/contrib/ContributionTab.java index c6e20c6b1..65077d46a 100644 --- a/app/src/processing/app/contrib/ContributionTab.java +++ b/app/src/processing/app/contrib/ContributionTab.java @@ -262,12 +262,14 @@ public class ContributionTab { layout.setAutoCreateGaps(true); layout.setAutoCreateContainerGaps(true); errorPanel.setLayout(layout); + errorPanel.setBorder(BorderFactory.createMatteBorder(2, 0, 0, 0, Color.BLACK)); errorMessage = new JTextPane(); errorMessage.setEditable(false); - 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."); - errorMessage.setMaximumSize(new Dimension(450, 50)); + errorMessage.setContentType("text/html"); + 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."); + errorMessage.setMaximumSize(new Dimension(550, 50)); errorMessage.setOpaque(false); StyledDocument doc = errorMessage.getStyledDocument(); @@ -306,13 +308,13 @@ public class ContributionTab { .addComponent(tryAgainButton, statusPanel.BUTTON_WIDTH, statusPanel.BUTTON_WIDTH, statusPanel.BUTTON_WIDTH)) - .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, + .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) .addComponent(closeButton)); layout.setVerticalGroup(layout .createSequentialGroup() .addGroup(layout.createParallelGroup().addComponent(errorMessage) - .addComponent(closeButton)).addComponent(tryAgainButton)); + .addComponent(closeButton)).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addComponent(tryAgainButton)); errorPanel.setBackground(Color.PINK); errorPanel.validate(); } diff --git a/app/src/processing/app/contrib/StatusPanel.java b/app/src/processing/app/contrib/StatusPanel.java index 97e3a5c87..e4d02b25a 100644 --- a/app/src/processing/app/contrib/StatusPanel.java +++ b/app/src/processing/app/contrib/StatusPanel.java @@ -184,8 +184,10 @@ class StatusPanel extends JPanel { } void clear() { - label.setText(null); - label.repaint(); + if (label != null) { + label.setText(null); + label.repaint(); + } } public void update(ContributionPanel panel) { From 2249bef703da4c253d0bb17faec90f96992de9fa Mon Sep 17 00:00:00 2001 From: Akarshit Wal Date: Thu, 16 Jul 2015 20:59:41 +0530 Subject: [PATCH 2/3] Restored row height --- app/src/processing/app/contrib/ContributionListPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/processing/app/contrib/ContributionListPanel.java b/app/src/processing/app/contrib/ContributionListPanel.java index 12d75d4c3..3c267c9ac 100644 --- a/app/src/processing/app/contrib/ContributionListPanel.java +++ b/app/src/processing/app/contrib/ContributionListPanel.java @@ -109,7 +109,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib table.setFillsViewportHeight(true); // table.setBorder(); table.setDefaultRenderer(Contribution.class, new StatusRendere()); - table.setRowHeight(40); + table.setRowHeight(30); table.setRowMargin(6); table.getColumnModel().setColumnMargin(-1); table.getColumnModel().getColumn(0).setMaxWidth(60); From a01993d0ef1efee6a04874f148528d0cb1c31217 Mon Sep 17 00:00:00 2001 From: Akarshit Wal Date: Thu, 16 Jul 2015 21:07:25 +0530 Subject: [PATCH 3/3] Silly swap --- app/src/processing/app/contrib/ContributionTab.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/processing/app/contrib/ContributionTab.java b/app/src/processing/app/contrib/ContributionTab.java index 65077d46a..46c27a8d2 100644 --- a/app/src/processing/app/contrib/ContributionTab.java +++ b/app/src/processing/app/contrib/ContributionTab.java @@ -308,13 +308,13 @@ public class ContributionTab { .addComponent(tryAgainButton, statusPanel.BUTTON_WIDTH, statusPanel.BUTTON_WIDTH, statusPanel.BUTTON_WIDTH)) - .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) .addComponent(closeButton)); layout.setVerticalGroup(layout .createSequentialGroup() .addGroup(layout.createParallelGroup().addComponent(errorMessage) - .addComponent(closeButton)).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addComponent(tryAgainButton)); + .addComponent(closeButton)).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(tryAgainButton)); errorPanel.setBackground(Color.PINK); errorPanel.validate(); }