package gitj.ui; import java.awt.BorderLayout; import java.util.List; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.SwingUtilities; import git.Commit; import git.Diff; import git.Repository; import gitj.Main; import gitj.ui.components.DiffHolderPanel; import gitj.ui.components.DiffPanel; import gitj.ui.components.IDiffSelectionListener; @SuppressWarnings("serial") public class CommitPanel extends AbstractPanel { private MainFrame parent; private PanelUncommited panelList; private CommitButtonPanel buttonPanel; private MainPanel parentPanel; private DiffHolderPanel diffHolderPanel; private JSplitPane topSplitPane; private JSplitPane splitPane; public CommitPanel(MainFrame parent, MainPanel parentPanel, Repository repo) { super(repo); this.parent = parent; this.parentPanel = parentPanel; setLayout(new BorderLayout(0, 0)); splitPane = new JSplitPane(); splitPane.setResizeWeight(0.75); splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT); add(splitPane, BorderLayout.CENTER); topSplitPane = new JSplitPane(); topSplitPane.setResizeWeight(0.5); panelList = new PanelUncommited(this, repo); panelList.addListener(new DiffSelectionListener()); reload(); diffHolderPanel = new DiffHolderPanel(); JScrollPane scrollPane = new JScrollPane(); scrollPane.getVerticalScrollBar().setUnitIncrement(10); scrollPane.setViewportView(diffHolderPanel); topSplitPane.setRightComponent(scrollPane); topSplitPane.setLeftComponent(panelList); splitPane.setLeftComponent(topSplitPane); buttonPanel = new CommitButtonPanel(this); splitPane.setRightComponent(buttonPanel); loadDiffs(repo.getUncommitedDiffs()); } public PanelUncommited getListPanel() { return panelList; } public void reloadDividers() { SwingUtilities.invokeLater(new Runnable() { public void run() { topSplitPane.setDividerLocation(topSplitPane.getSize().width / 2); } }); } /** * Closes current tab */ public void cancel() { parent.removePanel(this); reload(); } @Override public void reload() { try { panelList.reload(); parentPanel.reload(); } catch (Exception e) { e.printStackTrace(); Main.displayError(e); } reloadDividers(); } public MainFrame getParentFrame() { return parent; } public void loadDiffs(final List<Diff> diffs) { SwingUtilities.invokeLater(new Runnable() { public void run() { diffHolderPanel.clear(); for (Diff diff : diffs) { diffHolderPanel.addDiffPanel(new DiffPanel(diff)); } diffHolderPanel.revalidate(); } }); } public class DiffSelectionListener implements IDiffSelectionListener { @Override public void onSelect(Commit c, List<Diff> d, List<Diff> all) { try { loadDiffs(d); } catch (Exception ex) { ex.printStackTrace(); Main.displayError(ex); } } } }