All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.jgit.awtui.CommitGraphPane Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2008, Shawn O. Pearce  and others
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0 which is available at
 * https://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

package org.eclipse.jgit.awtui;

import java.awt.BasicStroke;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Stroke;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;

import org.eclipse.jgit.awtui.SwingCommitList.SwingLane;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.revplot.PlotCommit;
import org.eclipse.jgit.revplot.PlotCommitList;
import org.eclipse.jgit.util.References;

/**
 * Draws a commit graph in a JTable.
 * 

* This class is currently a very primitive commit visualization tool. It shows * a table of 3 columns: *

    *
  1. Commit graph and short message
  2. *
  3. Author name and email address
  4. *
  5. Author date and time
  6. *
*/ public class CommitGraphPane extends JTable { private static final long serialVersionUID = 1L; private final SwingCommitList allCommits; /** * Create a new empty panel. */ public CommitGraphPane() { allCommits = new SwingCommitList(); configureHeader(); setShowHorizontalLines(false); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); configureRowHeight(); } private void configureRowHeight() { int h = 0; for (int i = 0; i lastCommit; PersonIdent lastAuthor; @Override public int getColumnCount() { return 3; } @Override public int getRowCount() { return allCommits != null ? allCommits.size() : 0; } @Override public Object getValueAt(int rowIndex, int columnIndex) { final PlotCommit c = allCommits.get(rowIndex); switch (columnIndex) { case 0: return c; case 1: return authorFor(c); case 2: return authorFor(c); default: return null; } } PersonIdent authorFor(PlotCommit c) { if (!References.isSameObject(c, lastCommit)) { lastCommit = c; lastAuthor = c.getAuthorIdent(); } return lastAuthor; } } static class NameCellRender extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; @Override public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected, final boolean hasFocus, final int row, final int column) { final PersonIdent pi = (PersonIdent) value; final String valueStr; if (pi != null) valueStr = pi.getName() + " <" + pi.getEmailAddress() + ">"; //$NON-NLS-1$ //$NON-NLS-2$ else valueStr = ""; //$NON-NLS-1$ return super.getTableCellRendererComponent(table, valueStr, isSelected, hasFocus, row, column); } } static class DateCellRender extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; private final DateFormat fmt = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); //$NON-NLS-1$ @Override public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected, final boolean hasFocus, final int row, final int column) { final PersonIdent pi = (PersonIdent) value; final String valueStr; if (pi != null) valueStr = fmt.format(pi.getWhen()); else valueStr = ""; //$NON-NLS-1$ return super.getTableCellRendererComponent(table, valueStr, isSelected, hasFocus, row, column); } } static class GraphCellRender extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; private final AWTPlotRenderer renderer = new AWTPlotRenderer(this); PlotCommit commit; @Override @SuppressWarnings("unchecked") public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected, final boolean hasFocus, final int row, final int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); commit = (PlotCommit) value; return this; } @Override protected void paintComponent(Graphics inputGraphics) { if (inputGraphics == null) return; renderer.paint(inputGraphics, commit); } } static final Stroke[] strokeCache; static { strokeCache = new Stroke[4]; for (int i = 1; i < strokeCache.length; i++) strokeCache[i] = new BasicStroke(i); } static Stroke stroke(int width) { if (width < strokeCache.length) return strokeCache[width]; return new BasicStroke(width); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy