import java.awt.Font;\r
import java.io.Serializable;\r
\r
+import javax.swing.ImageIcon;\r
import javax.swing.JLabel;\r
import javax.swing.JPanel;\r
import javax.swing.JTable;\r
import javax.swing.border.LineBorder;\r
import javax.swing.table.TableCellRenderer;\r
\r
+import org.eclipse.jgit.lib.Constants;\r
+\r
import com.gitblit.models.FeedEntryModel;\r
\r
/**\r
\r
private static final long serialVersionUID = 1L;\r
\r
- private static final String R_TAGS = "refs/tags/";\r
-\r
- private static final String R_HEADS = "refs/heads/";\r
-\r
- private static final String R_REMOTES = "refs/remotes/";\r
-\r
private final GitblitClient gitblit;\r
-\r
+ \r
+ private final ImageIcon mergeIcon;\r
+ \r
+ private final ImageIcon blankIcon;\r
+ \r
private final JLabel messageLabel;\r
\r
+ private final JLabel headLabel;\r
+\r
private final JLabel branchLabel;\r
\r
+ private final JLabel remoteLabel;\r
+\r
+ private final JLabel tagLabel;\r
+\r
public MessageRenderer() {\r
this(null);\r
}\r
\r
public MessageRenderer(GitblitClient gitblit) {\r
- super(new FlowLayout(FlowLayout.LEFT, 10, 1));\r
+ super(new FlowLayout(FlowLayout.LEFT, Utils.MARGIN, 1));\r
this.gitblit = gitblit;\r
+ \r
+ mergeIcon = new ImageIcon(getClass().getResource("/commit_merge_16x16.png"));\r
+ blankIcon = new ImageIcon(getClass().getResource("/blank.png"));\r
\r
messageLabel = new JLabel();\r
- branchLabel = new JLabel();\r
- branchLabel.setOpaque(true);\r
- Font font = branchLabel.getFont();\r
- branchLabel.setFont(font.deriveFont(font.getSize2D() - 1f));\r
+ \r
+ headLabel = newRefLabel();\r
+ branchLabel = newRefLabel();\r
+ remoteLabel = newRefLabel();\r
+ tagLabel = newRefLabel();\r
+\r
add(messageLabel);\r
+ add(headLabel);\r
add(branchLabel);\r
+ add(remoteLabel);\r
+ add(tagLabel);\r
+ }\r
+\r
+ private JLabel newRefLabel() { \r
+ JLabel label = new JLabel();\r
+ label.setOpaque(true);\r
+ Font font = label.getFont();\r
+ label.setFont(font.deriveFont(font.getSize2D() - 1f));\r
+ return label;\r
+ }\r
+\r
+ private void resetRef(JLabel label) {\r
+ label.setText("");\r
+ label.setBackground(messageLabel.getBackground());\r
+ label.setBorder(null);\r
+ label.setVisible(false);\r
+ }\r
+\r
+ private void showRef(String ref, JLabel label) {\r
+ String name = ref;\r
+ Color bg = getBackground();\r
+ Border border = null;\r
+ if (name.startsWith(Constants.R_HEADS)) {\r
+ // local branch\r
+ bg = Color.decode("#CCFFCC");\r
+ name = name.substring(Constants.R_HEADS.length());\r
+ border = new LineBorder(Color.decode("#00CC33"), 1);\r
+ } else if (name.startsWith(Constants.R_REMOTES)) {\r
+ // remote branch\r
+ bg = Color.decode("#CAC2F5");\r
+ name = name.substring(Constants.R_REMOTES.length());\r
+ border = new LineBorder(Color.decode("#6C6CBF"), 1);\r
+ } else if (name.startsWith(Constants.R_TAGS)) {\r
+ // tag\r
+ bg = Color.decode("#FFFFAA");\r
+ name = name.substring(Constants.R_TAGS.length());\r
+ border = new LineBorder(Color.decode("#FFCC00"), 1);\r
+ } else if (name.equals(Constants.HEAD)) {\r
+ // HEAD\r
+ bg = Color.decode("#FFAAFF");\r
+ border = new LineBorder(Color.decode("#FF00EE"), 1);\r
+ } else {\r
+ }\r
+ label.setText(name);\r
+ label.setBackground(bg);\r
+ label.setBorder(border);\r
+ label.setVisible(true);\r
}\r
\r
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,\r
}\r
\r
// reset ref label\r
- branchLabel.setText("");\r
- branchLabel.setBackground(messageLabel.getBackground());\r
- branchLabel.setBorder(null);\r
+ resetRef(headLabel);\r
+ resetRef(branchLabel);\r
+ resetRef(remoteLabel);\r
+ resetRef(tagLabel);\r
\r
+ int parentCount = 0;\r
if (entry.tags != null) {\r
for (String tag : entry.tags) {\r
+ if (tag.startsWith("ref:")) {\r
+ // strip ref:\r
+ tag = tag.substring("ref:".length());\r
+ } else {\r
+ // count parents\r
+ if (tag.startsWith("parent:")) {\r
+ parentCount++;\r
+ }\r
+ }\r
if (tag.equals(entry.branch)) {\r
+ // skip current branch label\r
continue;\r
}\r
- String name = tag;\r
- Color bg = getBackground();\r
- Border border = null;\r
- if (name.startsWith(R_HEADS)) {\r
+ if (tag.startsWith(Constants.R_HEADS)) {\r
// local branch\r
- bg = Color.decode("#CCFFCC");\r
- name = name.substring(R_HEADS.length());\r
- border = new LineBorder(Color.decode("#00CC33"), 1);\r
- } else if (name.startsWith(R_REMOTES)) {\r
- // origin branch\r
- bg = Color.decode("#CAC2F5");\r
- name = name.substring(R_REMOTES.length());\r
- border = new LineBorder(Color.decode("#6C6CBF"), 1);\r
- } else if (name.startsWith(R_TAGS)) {\r
+ showRef(tag, branchLabel);\r
+ } else if (tag.startsWith(Constants.R_REMOTES)) {\r
+ // remote branch\r
+ showRef(tag, remoteLabel);\r
+ } else if (tag.startsWith(Constants.R_TAGS)) {\r
// tag\r
- bg = Color.decode("#FFFFAA");\r
- name = name.substring(R_TAGS.length());\r
- border = new LineBorder(Color.decode("#FFCC00"), 1);\r
- } else if (name.equals("HEAD")) {\r
+ showRef(tag, tagLabel);\r
+ } else if (tag.equals(Constants.HEAD)) {\r
// HEAD\r
- bg = Color.decode("#FFAAFF");\r
- border = new LineBorder(Color.decode("#FF00EE"), 1);\r
- } else {\r
-\r
+ showRef(tag, headLabel);\r
}\r
- branchLabel.setText(" " + name + " ");\r
- branchLabel.setBackground(bg);\r
- branchLabel.setBorder(border);\r
}\r
}\r
\r
+ if (parentCount > 1) {\r
+ // multiple parents, show merge icon\r
+ messageLabel.setIcon(mergeIcon);\r
+ } else {\r
+ messageLabel.setIcon(blankIcon);\r
+ }\r
return this;\r
}\r
}
\ No newline at end of file