From 2ffa83ff77e935ffaa74adf20b9279a3dd82ba87 Mon Sep 17 00:00:00 2001 From: Akarshit Wal Date: Sun, 12 Jul 2015 02:10:28 +0530 Subject: [PATCH] Update Tab started --- .../app/contrib/ContributionListPanel.java | 39 ++-- .../app/contrib/ContributionTab.java | 8 +- .../contrib/UpdateContribListingPanel.java | 184 ++++++++++++++++++ 3 files changed, 209 insertions(+), 22 deletions(-) create mode 100644 app/src/processing/app/contrib/UpdateContribListingPanel.java diff --git a/app/src/processing/app/contrib/ContributionListPanel.java b/app/src/processing/app/contrib/ContributionListPanel.java index 6cbf86979..56abcd4ee 100644 --- a/app/src/processing/app/contrib/ContributionListPanel.java +++ b/app/src/processing/app/contrib/ContributionListPanel.java @@ -52,13 +52,15 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib private ContributionPanel selectedPanel; // protected JPanel statusPlaceholder; // private StatusPanel status; - private ContributionFilter filter; + protected ContributionFilter filter; // private ContributionListing contribListing; private ContributionListing contribListing = ContributionListing.getInstance(); - private JTable table; + protected JTable table; DefaultTableModel dtm; - + public ContributionListPanel() { + // TODO Auto-generated constructor stub + } public ContributionListPanel(final ContributionTab contributionTab, ContributionFilter filter) { super(); @@ -117,7 +119,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){ public void valueChanged(ListSelectionEvent event) { //TODO this executes 2 times when clicked and 1 time when traversed using arrow keys - //Ideally this should always be try but while clearing the table something fishy is going on + //Ideally this should always be true but while clearing the table something fishy is going on if(table.getSelectedRow() != -1){ setSelectedPanel(panelByContribution.get(table.getValueAt(table.getSelectedRow(), 0))); } @@ -164,6 +166,9 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib JTextPane name = new JTextPane(); name.setContentType("text/html"); name.setEditable(false); + if(!contribution.isCompatible(Base.getRevision())){ + name.setForeground(Color.LIGHT_GRAY); + } name.setText("" + contribution.getName() + " - " + contribution.getSentence() + ""); GroupLayout layout = new GroupLayout(label); @@ -204,6 +209,9 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib author.setText(name.toString()); author.setEditable(false); author.setOpaque(false); + if(!contribution.isCompatible(Base.getRevision())){ + author.setForeground(Color.LIGHT_GRAY); + } if (table.isRowSelected(row)) { label.setBackground(Color.BLUE); } @@ -222,7 +230,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib } } - class MyTableModel extends DefaultTableModel{ + private class MyTableModel extends DefaultTableModel{ MyTableModel() { super(0,0); } @@ -232,17 +240,11 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib } @Override public Class getColumnClass(int columnIndex) { -// if(columnIndex == 0){ -// return Icon.class; -// } -// if(columnIndex == 1){ -// return String.class; -// } return Contribution.class; } } - private void updatePanelOrdering(Set contributionsSet) { + void updatePanelOrdering(Set contributionsSet) { /* int row = 0; for (Entry entry : panelByContribution.entrySet()) { GridBagConstraints c = new GridBagConstraints(); @@ -264,15 +266,12 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib c.anchor = GridBagConstraints.NORTH; add(status, c);*/ // System.out.println(dtm.getDataVector()); - if(contributionTab.contributionType == null){ - contributionTab.contributionManagerDialog.numberLabel.setText(Integer.toString(panelByContribution.size())); + dtm.getDataVector().removeAllElements(); + dtm.fireTableDataChanged(); + for (Contribution entry : contributionsSet) { + ((MyTableModel) table.getModel()).addRow(new Object[] { + entry, entry, entry }); } - dtm.getDataVector().removeAllElements(); - dtm.fireTableDataChanged(); - for (Contribution entry : contributionsSet) { - ((MyTableModel) table.getModel()).addRow(new Object[] { - entry, entry, entry }); - } } diff --git a/app/src/processing/app/contrib/ContributionTab.java b/app/src/processing/app/contrib/ContributionTab.java index f32821356..2cf319102 100644 --- a/app/src/processing/app/contrib/ContributionTab.java +++ b/app/src/processing/app/contrib/ContributionTab.java @@ -86,11 +86,15 @@ public class ContributionTab { filter = type.createFilter(); } - statusPanel = new StatusPanel(450,this); + this.statusPanel = new StatusPanel(450,this); this.contributionType = type; this.contributionManagerDialog = contributionManagerDialog; contribListing = ContributionListing.getInstance(); - contributionListPanel = new ContributionListPanel(this, filter); + if (contributionType == null) { + contributionListPanel = new UpdateContribListingPanel(this, filter); + } else { + contributionListPanel = new ContributionListPanel(this, filter); + } contribListing.addContributionListener(contributionListPanel); } diff --git a/app/src/processing/app/contrib/UpdateContribListingPanel.java b/app/src/processing/app/contrib/UpdateContribListingPanel.java new file mode 100644 index 000000000..4a22e6d91 --- /dev/null +++ b/app/src/processing/app/contrib/UpdateContribListingPanel.java @@ -0,0 +1,184 @@ +package processing.app.contrib; + +import java.awt.Color; +import java.awt.Component; +import java.util.Comparator; +import java.util.Set; +import java.util.TreeMap; + +import javax.swing.BorderFactory; +import javax.swing.GroupLayout; +import javax.swing.JComponent; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.UIManager; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableCellRenderer; + +import processing.app.Base; + +public class UpdateContribListingPanel extends ContributionListPanel { + + public UpdateContribListingPanel(ContributionTab contributionTab, + ContributionFilter filter) { + super.contributionTab = contributionTab; + super.filter = filter; + setOpaque(true); + + if (Base.isLinux()) { + // Because of a bug with GNOME, getColor returns the wrong value for + // List.background. We'll just assume its white. The number of people + // using Linux and an inverted color theme should be small enough. + setBackground(Color.white); + } else { + setBackground(UIManager.getColor("List.background")); + } + +// statusPlaceholder = new JPanel(); +// statusPlaceholder.setVisible(false); +// status = new StatusPanel(null); + + String[] colName = { "", "Name", "Author", "Installed", "Update To" }; + dtm = new MyTableModel(); + dtm.setColumnIdentifiers(colName); + table = new JTable(dtm){ + @Override + public Component prepareRenderer( + TableCellRenderer renderer, int row, int column) { + Component c = super.prepareRenderer(renderer, row, column); + String title = (String) getValueAt(row, 1); + if (title.equals("Library") || title.equals("Tools") + || title.equals("Modes") || title.equals("Examples")) { + ((JComponent) c).setBorder(BorderFactory + .createMatteBorder(row == 0 ? 0 : 2, 0, 2, 0, Color.BLACK)); + } + return c; + } + @Override + public void changeSelection(int rowIndex, int columnIndex, + boolean toggle, boolean extend) { + String title = (String) getValueAt(rowIndex, 1); + if(title.equals("Library")){ + return; + } + super.changeSelection(rowIndex, columnIndex, toggle, extend); + } +// @Override +// public boolean isRowSelected(int row) { +// if (row == 0) { +// return false; +// } +// return super.isRowSelected(row); +// } + }; + JScrollPane scrollPane = new JScrollPane(table); + table.setFillsViewportHeight(true); + table.setRowHeight(30); + table.setRowMargin(6); + table.getColumnModel().setColumnMargin(-1); + table.getColumnModel().getColumn(0).setMaxWidth(60); + table.setShowGrid(false); + table.setCellSelectionEnabled(false); + table.setRowSelectionAllowed(true); + table.setAutoCreateColumnsFromModel(true); + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + + GroupLayout layout = new GroupLayout(this); + layout.setHorizontalGroup(layout.createParallelGroup().addComponent(scrollPane)); + layout.setVerticalGroup(layout.createSequentialGroup().addComponent(scrollPane)); + + this.setLayout(layout); + table.setVisible(true); + + panelByContribution = new TreeMap(new Comparator() { + + @Override + public int compare(Contribution o1, Contribution o2) { + int val1 = 0; + int val2 = 0; + switch(o1.getType()){ + case LIBRARY: val1 = 1; + break; + case TOOL: val1 = 2; + break; + case MODE: val1 = 3; + break; + case EXAMPLES: val1 = 4; + break; + } + switch(o2.getType()){ + case LIBRARY: val2 = 1; + break; + case TOOL: val2 = 2; + break; + case MODE: val2 = 3; + break; + case EXAMPLES: val2 = 4; + break; + } + if(val1 == val2){ + return o1.getName().toLowerCase().compareTo(o2.getName().toLowerCase()); + } + return val1 - val2; + } + }); + + } +// +// @Override +// public void contributionAdded(Contribution contribution) { +// if(filter.matches(contribution)){ +// super.contributionAdded(contribution); +// } +// } +// + @Override + void updatePanelOrdering(Set contributionsSet) { + contributionTab.contributionManagerDialog.numberLabel.setText(Integer + .toString(panelByContribution.size())); + dtm.getDataVector().removeAllElements(); + dtm.fireTableDataChanged(); + ContributionType temp = null; + for (Contribution entry : contributionsSet) { + if(entry.getType() != temp){ + temp = entry.getType(); + dtm.addRow(new Object[] { null, "" + temp.getTitle() + "", null, null, null }); + } + //TODO Make this into a function + StringBuilder name = new StringBuilder(""); + String authorList = entry.getAuthorList(); + if (authorList != null) { + for (int i = 0; i < authorList.length(); i++) { + + if (authorList.charAt(i) == '[' || authorList.charAt(i) == ']') { + continue; + } + if (authorList.charAt(i) == '(') { + i++; + while (authorList.charAt(i) != ')') { + i++; + } + } else { + name.append(authorList.charAt(i)); + } + } + } + dtm + .addRow(new Object[] { + "", "" + entry.getName() + "", name, entry.getPrettyVersion(), + contributionTab.contribListing.getLatestVersion(entry) }); + } + } + private class MyTableModel extends DefaultTableModel{ + MyTableModel() { + super(0,0); + } + @Override + public boolean isCellEditable(int row, int column) { + return false; + } + } +}