mirror of
https://github.com/processing/processing4.git
synced 2026-02-11 17:40:48 +01:00
CM as in mockup
This commit is contained in:
@@ -58,6 +58,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
protected ContributionListing contribListing = ContributionListing.getInstance();
|
||||
protected JTable table;
|
||||
DefaultTableModel dtm;
|
||||
Font myFont;
|
||||
|
||||
public ContributionListPanel() {
|
||||
// TODO Auto-generated constructor stub
|
||||
@@ -72,15 +73,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
|
||||
setLayout(new GridBagLayout());
|
||||
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"));
|
||||
}
|
||||
setBackground(Color.WHITE);
|
||||
|
||||
panelByContribution = new TreeMap<Contribution, ContributionPanel>(contribListing.getComparator());
|
||||
|
||||
@@ -96,13 +89,17 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
TableCellRenderer renderer, int row, int column) {
|
||||
Component c = super.prepareRenderer(renderer, row, column);
|
||||
if (isRowSelected(row)) {
|
||||
c.setBackground(Color.blue);
|
||||
c.setBackground(new Color(0xe0fffd));
|
||||
} else {
|
||||
c.setBackground(Color.white);
|
||||
}
|
||||
return c;
|
||||
}
|
||||
};
|
||||
|
||||
myFont = Toolkit.getSansFont(14, Font.PLAIN);
|
||||
GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(myFont);
|
||||
|
||||
// There is a space before Status
|
||||
String[] colName = { " Status", "Name", "Author" };
|
||||
dtm.setColumnIdentifiers(colName);
|
||||
@@ -110,9 +107,10 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
table.setFillsViewportHeight(true);
|
||||
// table.setBorder();
|
||||
table.setDefaultRenderer(Contribution.class, new StatusRendere());
|
||||
table.setRowHeight(30);
|
||||
table.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
table.setRowHeight(28);
|
||||
table.setRowMargin(6);
|
||||
table.getColumnModel().setColumnMargin(-1);
|
||||
table.getColumnModel().setColumnMargin(0);
|
||||
table.getColumnModel().getColumn(0).setMaxWidth(60);
|
||||
table.getColumnModel().getColumn(2).setMinWidth(ContributionManagerDialog.AUTHOR_WIDTH);
|
||||
table.getColumnModel().getColumn(2).setMaxWidth(ContributionManagerDialog.AUTHOR_WIDTH);
|
||||
@@ -193,8 +191,11 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
setForeground(tableHeader.getForeground());
|
||||
}
|
||||
setIcon(getIcon(table, column));
|
||||
//TODO: put correct Color here
|
||||
setBackground(Color.LIGHT_GRAY);
|
||||
if (column % 2 == 0) {
|
||||
setBackground(new Color(0xdfdfdf));
|
||||
} else {
|
||||
setBackground(new Color(0xebebeb));
|
||||
}
|
||||
setBorder(null);
|
||||
return this;
|
||||
}
|
||||
@@ -257,6 +258,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
if (column == 0) {
|
||||
Icon icon = null;
|
||||
label.setBorder(BorderFactory.createEmptyBorder(2, 17, 0, 0));
|
||||
label.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
if (contribution.isInstalled()) {
|
||||
icon = Toolkit.getLibIcon("manager/up-to-date.png");
|
||||
if (contribListing.hasUpdates(contribution)) {
|
||||
@@ -268,7 +270,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
}
|
||||
label.setIcon(icon);
|
||||
if (isSelected) {
|
||||
label.setBackground(Color.BLUE);
|
||||
label.setBackground(new Color(0xe0fffd));
|
||||
}
|
||||
label.setOpaque(true);
|
||||
// return table.getDefaultRenderer(Icon.class).getTableCellRendererComponent(table, icon, isSelected, false, row, column);
|
||||
@@ -277,13 +279,13 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
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 = "<html><body><b>" + contribution.getName() + "</b>";
|
||||
int currentWidth = table.getFontMetrics(table.getFont().deriveFont(Font.BOLD)).stringWidth(contribution.getName() + " | ");
|
||||
int ellipsesWidth = fontMetrics.stringWidth("...");
|
||||
String name = "<html><body><b>" + contribution.getName();
|
||||
if (sentence == null) {
|
||||
label.setText(name + "</body></html>");
|
||||
label.setText(name + "</b></body></html>");
|
||||
} else {
|
||||
sentence = " - " + sentence;
|
||||
sentence = " | </b>" + sentence;
|
||||
currentWidth += ellipsesWidth;
|
||||
int i = 0;
|
||||
for (i = 0; i < sentence.length(); i++) {
|
||||
@@ -294,7 +296,7 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
}
|
||||
// Adding ellipses only if text doesn't fits into the column
|
||||
if(i != sentence.length()){
|
||||
label.setText(name + sentence.substring(0, i) + " ...</body></html>");
|
||||
label.setText(name + sentence.substring(0, i) + "...</body></html>");
|
||||
}else {
|
||||
label.setText(name + sentence + "</body></html>");
|
||||
}
|
||||
@@ -303,8 +305,9 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
label.setForeground(Color.LIGHT_GRAY);
|
||||
}
|
||||
if (table.isRowSelected(row)) {
|
||||
label.setBackground(Color.BLUE);
|
||||
label.setBackground(new Color(0xe0fffd));
|
||||
}
|
||||
label.setFont(myFont);
|
||||
label.setOpaque(true);
|
||||
} else {
|
||||
label = new JLabel(
|
||||
@@ -332,10 +335,13 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
label.setHorizontalAlignment(SwingConstants.LEFT);
|
||||
if(!contribution.isCompatible(Base.getRevision())){
|
||||
label.setForeground(Color.LIGHT_GRAY);
|
||||
}else{
|
||||
label.setForeground(Color.BLACK);
|
||||
}
|
||||
if (table.isRowSelected(row)) {
|
||||
label.setBackground(Color.BLUE);
|
||||
label.setBackground(new Color(0xe0fffd));
|
||||
}
|
||||
label.setFont(Toolkit.getSansFont(14, Font.BOLD));
|
||||
label.setOpaque(true);
|
||||
}
|
||||
return label;
|
||||
@@ -378,12 +384,16 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
c.anchor = GridBagConstraints.NORTH;
|
||||
add(status, c);*/
|
||||
// System.out.println(dtm.getDataVector());
|
||||
int row = table.getSelectedRow();
|
||||
dtm.getDataVector().removeAllElements();
|
||||
dtm.fireTableDataChanged();
|
||||
for (Contribution entry : contributionsSet) {
|
||||
((MyTableModel) table.getModel()).addRow(new Object[] {
|
||||
entry, entry, entry });
|
||||
}
|
||||
if (row >= 0) {
|
||||
table.setRowSelectionInterval(row, row);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -404,13 +414,6 @@ public class ContributionListPanel extends JPanel implements Scrollable, Contrib
|
||||
updateColors(); // XXX this is the place
|
||||
}
|
||||
}
|
||||
// To make the scroll shift to the first element
|
||||
// http://stackoverflow.com/questions/19400239/scrolling-to-the-top-jpanel-inside-a-jscrollpane
|
||||
EventQueue.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
scrollRectToVisible(new Rectangle(0, 0, 1, 1));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -46,8 +46,10 @@ public class ContributionManagerDialog {
|
||||
static final String ANY_CATEGORY = Language.text("contrib.all");
|
||||
static final int TAB_WIDTH = 100;
|
||||
static final int TAB_HEIGHT = 34;
|
||||
static final int AUTHOR_WIDTH = 150;
|
||||
static final int AUTHOR_WIDTH = 240;
|
||||
static final int STATUS_WIDTH = 60;
|
||||
static final int FILTER_WIDTH = 180;
|
||||
|
||||
JFrame dialog;
|
||||
JTabbedPane tabbedPane;
|
||||
String title;
|
||||
@@ -122,10 +124,10 @@ public class ContributionManagerDialog {
|
||||
tabbedPane.setSelectedIndex(index); //done before as downloadAndUpdateContributionListing() requires the current selected tab
|
||||
downloadAndUpdateContributionListing(editor.getBase());
|
||||
if(index != 4){
|
||||
tabbedPane.getTabComponentAt(tabbedPane.getSelectedIndex()).setBackground(Color.WHITE);
|
||||
tabbedPane.getTabComponentAt(tabbedPane.getSelectedIndex()).setBackground(new Color(0xe0fffd));
|
||||
tabbedPane.getTabComponentAt(tabbedPane.getSelectedIndex()).setForeground(Color.BLACK);
|
||||
}else{
|
||||
updateTabPanel.setBackground(Color.WHITE);
|
||||
updateTabPanel.setBackground(new Color(0xe0fffd));
|
||||
updateTabLabel.setForeground(Color.BLACK);
|
||||
}
|
||||
}
|
||||
@@ -175,10 +177,10 @@ public class ContributionManagerDialog {
|
||||
updateTabLabel.setForeground(Color.WHITE);
|
||||
int currentIndex = tabbedPane.getSelectedIndex();
|
||||
if(currentIndex != 4){
|
||||
tabbedPane.getTabComponentAt(tabbedPane.getSelectedIndex()).setBackground(Color.WHITE);
|
||||
tabbedPane.getTabComponentAt(tabbedPane.getSelectedIndex()).setBackground(new Color(0xe0fffd));
|
||||
tabbedPane.getTabComponentAt(tabbedPane.getSelectedIndex()).setForeground(Color.BLACK);
|
||||
}else{
|
||||
updateTabPanel.setBackground(Color.WHITE);
|
||||
updateTabPanel.setBackground(new Color(0xe0fffd));
|
||||
updateTabLabel.setForeground(Color.BLACK);
|
||||
}
|
||||
// // When the tab is changed update status to the current selected panel
|
||||
@@ -254,20 +256,47 @@ public class ContributionManagerDialog {
|
||||
tabLabels = new JLabel[4];
|
||||
|
||||
for(int i = 0 ; i < 4; i++){
|
||||
tabLabels[i] = new JLabel(tabTitles[i]);
|
||||
final int temp = i;
|
||||
tabLabels[i] = new JLabel(tabTitles[i]){
|
||||
@Override
|
||||
protected void paintComponent(Graphics g) {
|
||||
g.setClip(Toolkit.createRoundRect(0, 0,
|
||||
getWidth(), getHeight(),
|
||||
temp == 0 ? 6 : 0,
|
||||
temp == 3 ? 6 : 0,
|
||||
0, 0));
|
||||
super.paintComponent(g);
|
||||
|
||||
}
|
||||
};
|
||||
tabLabels[i].setForeground(Color.WHITE);
|
||||
tabLabels[i].setBackground(new Color(0x2d4251));
|
||||
tabLabels[i].setOpaque(true);
|
||||
tabLabels[i].setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
|
||||
tabLabels[i].setPreferredSize(new Dimension(TAB_WIDTH, TAB_HEIGHT));
|
||||
tabLabels[i].setHorizontalAlignment(SwingConstants.CENTER);
|
||||
tabLabels[i].setFont(Toolkit.getSansFont(14, Font.BOLD));
|
||||
tabbedPane.setTabComponentAt(i, tabLabels[i]);
|
||||
}
|
||||
|
||||
updateTabPanel = new JPanel(true);
|
||||
updateTabPanel = new JPanel(){
|
||||
@Override
|
||||
protected void paintComponent(Graphics g) {
|
||||
g.setClip(Toolkit.createRoundRect(0, 0,
|
||||
getWidth(), getHeight(),
|
||||
6,
|
||||
6,
|
||||
0, 0));
|
||||
super.paintComponent(g);
|
||||
|
||||
}
|
||||
};;
|
||||
updateTabLabel = new JLabel("Updates");
|
||||
updateTabLabel.setFont(Toolkit.getSansFont(14, Font.BOLD));
|
||||
numberLabel.setVerticalTextPosition(SwingConstants.CENTER);
|
||||
numberLabel.setHorizontalTextPosition(SwingConstants.CENTER);
|
||||
numberLabel.setFont(Toolkit.getSansFont(14, Font.BOLD));
|
||||
numberLabel.setForeground(Color.WHITE);
|
||||
updateTabPanel.setOpaque(true);
|
||||
updateTabPanel.setBackground(new Color(0x2d4251));
|
||||
updateTabLabel.setForeground(Color.WHITE);
|
||||
@@ -292,8 +321,16 @@ public class ContributionManagerDialog {
|
||||
GroupLayout tabLayout = new GroupLayout(updateTabPanel);
|
||||
tabLayout.setAutoCreateGaps(true);
|
||||
updateTabPanel.setLayout(tabLayout);
|
||||
tabLayout.setHorizontalGroup(tabLayout.createSequentialGroup()
|
||||
.addComponent(updateTabLabel).addComponent(numberLabel));
|
||||
tabLayout.setHorizontalGroup(tabLayout
|
||||
.createSequentialGroup()
|
||||
|
||||
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,
|
||||
GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
|
||||
.addComponent(updateTabLabel)
|
||||
.addComponent(numberLabel)
|
||||
|
||||
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,
|
||||
GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE));
|
||||
tabLayout.setVerticalGroup(tabLayout
|
||||
.createParallelGroup(GroupLayout.Alignment.CENTER)
|
||||
.addComponent(numberLabel).addComponent(updateTabLabel));
|
||||
@@ -303,16 +340,18 @@ public class ContributionManagerDialog {
|
||||
|
||||
|
||||
public class SpacedTabbedPaneUI extends BasicTabbedPaneUI {
|
||||
protected Color hazAlfa(int fila) {
|
||||
int alfa = 0;
|
||||
if (fila >= 0) {
|
||||
alfa = 50 + (fila > 7 ? 70 : 10 * fila);
|
||||
}
|
||||
return new Color(0, 0, 0, alfa);
|
||||
}
|
||||
@Override
|
||||
protected void installDefaults() {
|
||||
UIManager.put("TabbedPane.selected", Color.BLACK);
|
||||
UIManager.put("TabbedPane.tabsOverlapBorder" , true);
|
||||
super.installDefaults();
|
||||
highlight = Color.RED;
|
||||
lightHighlight = Color.GRAY;
|
||||
shadow = Color.GREEN;
|
||||
darkShadow = Color.BLACK;
|
||||
focus = Color.YELLOW;
|
||||
tabInsets = new Insets(0, 0, 0, 0);
|
||||
contentBorderInsets = new Insets(0, 0, 0, 0);
|
||||
tabAreaInsets = new Insets(0, 0, 0, 0);
|
||||
@@ -327,6 +366,17 @@ public class ContributionManagerDialog {
|
||||
// protected int getTabLabelShiftY(int tabPlacement, int tabIndex,
|
||||
// boolean isSelected) {
|
||||
// return 3;
|
||||
// }
|
||||
// @Override
|
||||
// protected void paintTab(Graphics g, int tabPlacement,
|
||||
// Rectangle[] rects, int tabIndex,
|
||||
// Rectangle iconRect, Rectangle textRect) {
|
||||
// Graphics2D g2 = (Graphics2D) g;
|
||||
// g2.fill(Toolkit.createRoundRect(rects[tabIndex].x, rects[tabIndex].y,
|
||||
// rects[tabIndex].x + rects[tabIndex].width, rects[tabIndex].y + rects[tabIndex].height,
|
||||
// 6,
|
||||
// 6,
|
||||
// 0, 0));
|
||||
// }
|
||||
@Override
|
||||
protected void paintTabBackground(Graphics g, int tabPlacement,
|
||||
@@ -704,18 +754,10 @@ public class ContributionManagerDialog {
|
||||
|
||||
|
||||
if (error) {
|
||||
if (exception instanceof SocketTimeoutException) {
|
||||
activeTab.statusPanel.setErrorMessage(Language
|
||||
.text("contrib.errors.list_download.timeout"));
|
||||
} else {
|
||||
activeTab.statusPanel.setErrorMessage(Language
|
||||
.text("contrib.errors.list_download"));
|
||||
}
|
||||
exception.printStackTrace();
|
||||
makeAndShowTab(true,false);
|
||||
} else {
|
||||
makeAndShowTab(false, false);
|
||||
activeTab.statusPanel.setMessage(Language.text("contrib.status.done"));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -459,13 +459,27 @@ class ContributionPanel extends JPanel {
|
||||
} else {
|
||||
description.append("<a href=\"" + contrib.getUrl() + "\">" + contrib.getName() + "</a>");
|
||||
}
|
||||
description.append("</b>");
|
||||
description.append("</b> ");
|
||||
|
||||
String version = contrib.getPrettyVersion();
|
||||
|
||||
// TODO this has no place here, we shouldn't be cleaning up contrib
|
||||
// information in the f*king GUI.
|
||||
if (version != null && !version.isEmpty()) {
|
||||
if (version.toLowerCase().startsWith("build")) // For Python mode
|
||||
description.append(version.substring(5, version.indexOf(',')).trim());
|
||||
else if (version.toLowerCase().startsWith("v")) // For ketai library
|
||||
description.append(version);
|
||||
else
|
||||
description.append(version);
|
||||
}
|
||||
description.append(" <br/>");
|
||||
|
||||
String authorList = contrib.getAuthorList();
|
||||
if (authorList != null && !authorList.isEmpty()) {
|
||||
description.append(" by ");
|
||||
description.append(toHtmlLinks(contrib.getAuthorList()));
|
||||
}
|
||||
description.append("<br/>");
|
||||
description.append("<br/><br/>");
|
||||
|
||||
if (contrib.isDeletionFlagged()) {
|
||||
description.append(REMOVE_RESTART_MESSAGE);
|
||||
@@ -484,21 +498,6 @@ class ContributionPanel extends JPanel {
|
||||
description.append(sentence);
|
||||
}
|
||||
|
||||
String version = contrib.getPrettyVersion();
|
||||
|
||||
// TODO this has no place here, we shouldn't be cleaning up contrib
|
||||
// information in the f*king GUI.
|
||||
if (version != null && !version.isEmpty()) {
|
||||
description.append("<br/>");
|
||||
if (version.toLowerCase().startsWith("build")) // For Python mode
|
||||
description.append("v"
|
||||
+ version.substring(5, version.indexOf(',')).trim());
|
||||
else if (version.toLowerCase().startsWith("v")) // For ketai library
|
||||
description.append(version);
|
||||
else
|
||||
description.append("v" + version);
|
||||
}
|
||||
|
||||
long lastUpdatedUTC = contrib.getLastUpdated();
|
||||
if (lastUpdatedUTC != 0) {
|
||||
DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.MEDIUM);
|
||||
|
||||
@@ -22,7 +22,10 @@
|
||||
package processing.app.contrib;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.ComponentOrientation;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.Font;
|
||||
import java.awt.event.*;
|
||||
import java.util.*;
|
||||
|
||||
@@ -48,7 +51,6 @@ public class ContributionTab {
|
||||
ContributionListPanel contributionListPanel;
|
||||
StatusPanel statusPanel;
|
||||
FilterField filterField;
|
||||
JLabel filterLabel;
|
||||
JButton restartButton;
|
||||
JLabel categoryLabel;
|
||||
JLabel loaderLabel;
|
||||
@@ -138,8 +140,6 @@ public class ContributionTab {
|
||||
loaderLabel = new JLabel(Toolkit.getLibIcon("manager/loader.gif"));
|
||||
loaderLabel.setOpaque(false);
|
||||
loaderLabel.setBackground(Color.WHITE);
|
||||
filterLabel = new JLabel("Filter");
|
||||
filterLabel.setOpaque(false);
|
||||
}
|
||||
|
||||
/*restartButton = new JButton(Language.text("contrib.restart"));
|
||||
@@ -198,17 +198,18 @@ public class ContributionTab {
|
||||
.createParallelGroup(GroupLayout.Alignment.CENTER)
|
||||
.addGroup(layout
|
||||
.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(filterLabel)
|
||||
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(filterField)
|
||||
.addGap(ContributionManagerDialog.STATUS_WIDTH)
|
||||
.addComponent(filterField,
|
||||
ContributionManagerDialog.FILTER_WIDTH,
|
||||
ContributionManagerDialog.FILTER_WIDTH,
|
||||
ContributionManagerDialog.FILTER_WIDTH)
|
||||
// .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,
|
||||
GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
|
||||
.addComponent(categoryChooser,
|
||||
ContributionManagerDialog.AUTHOR_WIDTH,
|
||||
ContributionManagerDialog.AUTHOR_WIDTH,
|
||||
ContributionManagerDialog.AUTHOR_WIDTH)
|
||||
ContributionManagerDialog.AUTHOR_WIDTH - 10,
|
||||
ContributionManagerDialog.AUTHOR_WIDTH - 10,
|
||||
ContributionManagerDialog.AUTHOR_WIDTH - 10)
|
||||
.addContainerGap()).addComponent(loaderLabel)
|
||||
.addComponent(contributionListPanel).addComponent(errorPanel)
|
||||
.addComponent(statusPanel));
|
||||
@@ -217,7 +218,7 @@ public class ContributionTab {
|
||||
.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER)
|
||||
.addComponent(filterLabel).addComponent(categoryChooser)
|
||||
.addComponent(categoryChooser)
|
||||
.addComponent(filterField))
|
||||
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER)
|
||||
@@ -228,7 +229,7 @@ public class ContributionTab {
|
||||
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE));
|
||||
layout.linkSize(SwingConstants.VERTICAL, categoryChooser, filterField);
|
||||
layout.setHonorsVisibility(contributionListPanel, false);
|
||||
|
||||
|
||||
panel.setBackground(Color.WHITE);
|
||||
panel.setBorder(null);
|
||||
}
|
||||
@@ -242,6 +243,7 @@ public class ContributionTab {
|
||||
|
||||
categoryChooser = new JComboBox<String>();
|
||||
categoryChooser.setMaximumRowCount(20);
|
||||
categoryChooser.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
|
||||
updateCategoryChooser();
|
||||
|
||||
@@ -274,6 +276,7 @@ public class ContributionTab {
|
||||
errorMessage.setText("<html><body>Could not connect to the Processing server.<br>"
|
||||
+ "Contributions cannot be installed or updated without an Internet connection.<br>"
|
||||
+ "Please verify your network connection again, then try connecting again.</body></html>");
|
||||
errorMessage.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
errorMessage.setMaximumSize(new Dimension(550, 50));
|
||||
errorMessage.setOpaque(false);
|
||||
|
||||
@@ -293,6 +296,7 @@ public class ContributionTab {
|
||||
}
|
||||
});
|
||||
tryAgainButton = new JButton("Try Again");
|
||||
tryAgainButton.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
// tryAgainButton.setContentAreaFilled(false);
|
||||
// tryAgainButton.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.BLACK, 1),BorderFactory.createEmptyBorder(3, 0, 3, 0)));
|
||||
tryAgainButton.addActionListener(new ActionListener() {
|
||||
@@ -417,24 +421,44 @@ public class ContributionTab {
|
||||
class FilterField extends JTextField {
|
||||
Icon searchIcon;
|
||||
List<String> filters;
|
||||
JLabel filterLabel;
|
||||
|
||||
public FilterField () {
|
||||
|
||||
super("");
|
||||
|
||||
filterLabel = new JLabel("Filter");
|
||||
filterLabel.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
filterLabel.setOpaque(false);
|
||||
|
||||
setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
searchIcon = Toolkit.getLibIcon("manager/search.png");
|
||||
setOpaque(false);
|
||||
|
||||
setBorder(BorderFactory.createMatteBorder(0, 33, 0, 0, searchIcon));
|
||||
|
||||
GroupLayout fl = new GroupLayout(this);
|
||||
setLayout(fl);
|
||||
fl.setHorizontalGroup(fl.createSequentialGroup().addComponent(filterLabel));
|
||||
fl.setVerticalGroup(fl.createSequentialGroup()
|
||||
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,
|
||||
GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
|
||||
.addComponent(filterLabel)
|
||||
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,
|
||||
GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE));
|
||||
|
||||
filters = new ArrayList<String>();
|
||||
|
||||
addFocusListener(new FocusListener() {
|
||||
public void focusLost(FocusEvent focusEvent) {
|
||||
if (getText().isEmpty()) {
|
||||
setBorder(BorderFactory.createMatteBorder(0, 33, 0, 0, searchIcon));
|
||||
filterLabel.setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void focusGained(FocusEvent focusEvent) {
|
||||
setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 0));
|
||||
filterLabel.setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ package processing.app.contrib;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
@@ -61,7 +62,7 @@ class StatusPanel extends JPanel {
|
||||
|
||||
public StatusPanel(int width, final ContributionTab contributionTab) {
|
||||
super();
|
||||
setBackground(Color.LIGHT_GRAY);
|
||||
setBackground(new Color(0xebebeb));
|
||||
// setBorder(BorderFactory.createMatteBorder(2, 0, 0, 0, Color.BLACK));
|
||||
this.contributionTab = contributionTab;
|
||||
|
||||
@@ -71,6 +72,7 @@ class StatusPanel extends JPanel {
|
||||
label.setEditable(false);
|
||||
label.setOpaque(false);
|
||||
label.setContentType("text/html");
|
||||
label.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
label.addHyperlinkListener(new HyperlinkListener() {
|
||||
|
||||
@Override
|
||||
@@ -82,7 +84,8 @@ class StatusPanel extends JPanel {
|
||||
}
|
||||
}
|
||||
});
|
||||
installButton = new JButton("Install", Toolkit.getLibIcon("manager/update.png"));
|
||||
installButton = new JButton("Install", Toolkit.getLibIcon("manager/install.png"));
|
||||
installButton.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
installButton.setHorizontalAlignment(SwingConstants.LEFT);
|
||||
// installButton.setContentAreaFilled(false);
|
||||
// installButton.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.BLACK, 1),BorderFactory.createEmptyBorder(3, 0, 3, 0)));
|
||||
@@ -100,7 +103,9 @@ class StatusPanel extends JPanel {
|
||||
progressBarPanel.setLayout(new BorderLayout());
|
||||
progressBarPanel.setOpaque(false);
|
||||
updateLabel = new JLabel(" ");
|
||||
updateLabel.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
updateButton = new JButton("Update", Toolkit.getLibIcon("manager/update.png"));
|
||||
updateButton.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
updateButton.setHorizontalAlignment(SwingConstants.LEFT);
|
||||
// updateButton.setAlignmentX(SwingConstants.LEFT);
|
||||
// updateButton.setContentAreaFilled(false);
|
||||
@@ -117,6 +122,7 @@ class StatusPanel extends JPanel {
|
||||
});
|
||||
|
||||
removeButton = new JButton("Remove", Toolkit.getLibIcon("manager/remove.png"));
|
||||
removeButton.setFont(Toolkit.getSansFont(14, Font.BOLD));
|
||||
removeButton.setHorizontalAlignment(SwingConstants.LEFT);
|
||||
// removeButton.setContentAreaFilled(false);
|
||||
// removeButton.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.BLACK, 1),BorderFactory.createEmptyBorder(3, 0, 3, 0)));
|
||||
@@ -186,7 +192,6 @@ class StatusPanel extends JPanel {
|
||||
|
||||
void setMessage(String message) {
|
||||
if (label != null) {
|
||||
label.setForeground(Color.BLACK);
|
||||
label.setText(message);
|
||||
label.repaint();
|
||||
}
|
||||
@@ -194,8 +199,6 @@ class StatusPanel extends JPanel {
|
||||
|
||||
void setErrorMessage(String message) {
|
||||
if (label != null) {
|
||||
//setForeground(Color.RED);
|
||||
label.setForeground(new Color(160, 0, 0));
|
||||
label.setText(message);
|
||||
label.repaint();
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package processing.app.contrib;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Font;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.Comparator;
|
||||
@@ -20,12 +21,17 @@ import javax.swing.JScrollPane;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.LayoutStyle;
|
||||
import javax.swing.ListSelectionModel;
|
||||
import javax.swing.SwingConstants;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.table.DefaultTableCellRenderer;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.JTableHeader;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import javax.swing.table.TableModel;
|
||||
import javax.swing.table.TableRowSorter;
|
||||
|
||||
import processing.app.Base;
|
||||
import processing.app.contrib.ContributionListPanel.MyColumnHeaderRenderer;
|
||||
import processing.app.ui.Editor;
|
||||
import processing.app.ui.Toolkit;
|
||||
|
||||
@@ -85,22 +91,22 @@ public class UpdateContributionTab extends ContributionTab {
|
||||
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"));
|
||||
}
|
||||
setBackground(Color.WHITE);
|
||||
|
||||
// statusPlaceholder = new JPanel();
|
||||
// statusPlaceholder.setVisible(false);
|
||||
// status = new StatusPanel(null);
|
||||
|
||||
String[] colName = { "", "Name", "Author", "Installed", "Update To" };
|
||||
dtm = new MyTableModel();
|
||||
dtm = new MyTableModel(){
|
||||
@Override
|
||||
public Class<?> getColumnClass(int columnIndex) {
|
||||
if (columnIndex == 0) {
|
||||
return Icon.class;
|
||||
}
|
||||
return String.class;
|
||||
}
|
||||
};
|
||||
dtm.setColumnIdentifiers(colName);
|
||||
table = new JTable(dtm){
|
||||
@Override
|
||||
@@ -119,8 +125,8 @@ public class UpdateContributionTab extends ContributionTab {
|
||||
public void changeSelection(int rowIndex, int columnIndex,
|
||||
boolean toggle, boolean extend) {
|
||||
String title = (String) getValueAt(rowIndex, 1);
|
||||
if(title.equals(title.equals("<html><i>Library</i></html>") || title.equals("<html><i>Tools</i></html>")
|
||||
|| title.equals("<html><i>Modes</i></html>") || title.equals("<html><i>Examples</i></html>"))){
|
||||
if(title.equals("<html><i>Library</i></html>") || title.equals("<html><i>Tools</i></html>")
|
||||
|| title.equals("<html><i>Modes</i></html>") || title.equals("<html><i>Examples</i></html>")){
|
||||
return;
|
||||
}
|
||||
super.changeSelection(rowIndex, columnIndex, toggle, extend);
|
||||
@@ -135,6 +141,9 @@ public class UpdateContributionTab extends ContributionTab {
|
||||
};
|
||||
JScrollPane scrollPane = new JScrollPane(table);
|
||||
table.setFillsViewportHeight(true);
|
||||
table.setSelectionBackground(new Color(0xe0fffd));
|
||||
table.setSelectionForeground(table.getForeground());
|
||||
table.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
table.setRowHeight(30);
|
||||
table.setRowMargin(6);
|
||||
table.getColumnModel().setColumnMargin(-1);
|
||||
@@ -144,6 +153,7 @@ public class UpdateContributionTab extends ContributionTab {
|
||||
table.setRowSelectionAllowed(true);
|
||||
table.setAutoCreateColumnsFromModel(true);
|
||||
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
table.setDefaultRenderer(String.class, new StatusRendere());
|
||||
table.getTableHeader().setDefaultRenderer(new MyColumnHeaderRenderer() {
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table,
|
||||
@@ -158,11 +168,12 @@ public class UpdateContributionTab extends ContributionTab {
|
||||
setForeground(tableHeader.getForeground());
|
||||
}
|
||||
setIcon(getIcon(table, column));
|
||||
setBackground(Color.LIGHT_GRAY);
|
||||
setBackground(new Color(0xebebeb));
|
||||
// setBorder(BorderFactory.createMatteBorder(2, 0, 2, 0, Color.BLACK));
|
||||
return this;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
GroupLayout layout = new GroupLayout(this);
|
||||
layout.setHorizontalGroup(layout.createParallelGroup().addComponent(scrollPane));
|
||||
@@ -205,6 +216,18 @@ public class UpdateContributionTab extends ContributionTab {
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
class StatusRendere extends DefaultTableCellRenderer {
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table,
|
||||
Object value,
|
||||
boolean isSelected,
|
||||
boolean hasFocus, int row,
|
||||
int column) {
|
||||
return super.getTableCellRendererComponent(table, value, isSelected, false,
|
||||
row, column);
|
||||
}
|
||||
}
|
||||
//
|
||||
// @Override
|
||||
// public void contributionAdded(Contribution contribution) {
|
||||
@@ -246,12 +269,12 @@ public class UpdateContributionTab extends ContributionTab {
|
||||
}
|
||||
Icon icon = null;
|
||||
if (entry.isInstalled()) {
|
||||
icon = Toolkit.getLibIcon("icons/installedAndUptodate.png");
|
||||
icon = Toolkit.getLibIcon("manager/up-to-date.png");
|
||||
if (contribListing.hasUpdates(entry)) {
|
||||
icon = Toolkit.getLibIcon("icons/installedNeedsUpdate.png");
|
||||
icon = Toolkit.getLibIcon("manager/update-available.png");
|
||||
}
|
||||
if (!entry.isCompatible(Base.getRevision())) {
|
||||
icon = Toolkit.getLibIcon("icons/installedIncompatible.png");
|
||||
icon = Toolkit.getLibIcon("manager/incompatible.png");
|
||||
}
|
||||
}
|
||||
dtm
|
||||
@@ -280,7 +303,9 @@ public class UpdateContributionTab extends ContributionTab {
|
||||
public class UpdateStatusPanel extends StatusPanel {
|
||||
public UpdateStatusPanel(int width, final ContributionTab contributionTab) {
|
||||
super();
|
||||
updateButton = new JButton("Update All");
|
||||
updateButton = new JButton("Update All", Toolkit.getLibIcon("manager/update.png"));
|
||||
updateButton.setFont(Toolkit.getSansFont(14, Font.PLAIN));
|
||||
updateButton.setHorizontalAlignment(SwingConstants.LEFT);
|
||||
// updateButton.setContentAreaFilled(false);
|
||||
// updateButton.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.BLACK, 1),BorderFactory.createEmptyBorder(3, 0, 3, 0)));
|
||||
updateButton.addActionListener(new ActionListener() {
|
||||
@@ -292,7 +317,7 @@ public class UpdateContributionTab extends ContributionTab {
|
||||
}
|
||||
}
|
||||
});
|
||||
this.setBackground(Color.LIGHT_GRAY);
|
||||
this.setBackground(new Color(0xe0fffd));
|
||||
// this.setBorder(BorderFactory.createMatteBorder(2, 0, 0, 0, Color.BLACK));
|
||||
layout = new GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
@@ -309,9 +334,14 @@ public class UpdateContributionTab extends ContributionTab {
|
||||
.addComponent(updateButton));
|
||||
updateButton.setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(ContributionPanel panel) {
|
||||
|
||||
if (contributionListPanel.getNoOfRows() > 0) {
|
||||
updateButton.setEnabled(true);
|
||||
} else {
|
||||
updateButton.setEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user