From 48bf15ccdda06a53b2d86e985761ecaf093f707f Mon Sep 17 00:00:00 2001 From: markiewb Date: 17.12.2012 22:21:30 * added simple action which opens the BrowserTopComponent * BrowserTopComponents adds a lookup-listener for Nodes and repaints itself diff --git a/nbproject/project.properties b/nbproject/project.properties index 53f14db..808d17b 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -19,3 +19,4 @@ license.file=LICENSE nbm.homepage=http://nbgit.org/ nbm.module.author=Alex Coles , Jonas Fonseca +run.args.extra=-J-javaagent:d:/tools/JRebel/jrebel.jar -J-Drebel.log=true diff --git a/src/org/nbgit/ui/browser/BrowserTopComponent.form b/src/org/nbgit/ui/browser/BrowserTopComponent.form index 418009f..293bf1b 100644 --- a/src/org/nbgit/ui/browser/BrowserTopComponent.form +++ b/src/org/nbgit/ui/browser/BrowserTopComponent.form @@ -71,7 +71,7 @@ - + diff --git a/src/org/nbgit/ui/browser/BrowserTopComponent.java b/src/org/nbgit/ui/browser/BrowserTopComponent.java index 5e5c406..5a45ae6 100644 --- a/src/org/nbgit/ui/browser/BrowserTopComponent.java +++ b/src/org/nbgit/ui/browser/BrowserTopComponent.java @@ -35,6 +35,9 @@ */ package org.nbgit.ui.browser; +import java.util.Collection; +import javax.swing.JComponent; +import javax.swing.JOptionPane; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.event.DocumentEvent; @@ -43,48 +46,34 @@ import javax.swing.event.ListSelectionListener; import org.eclipse.jgit.awtui.CommitGraphPane; +import org.eclipse.jgit.lib.Constants; +import org.netbeans.modules.versioning.spi.VCSContext; +import org.openide.nodes.Node; import org.openide.util.NbBundle; import org.openide.windows.TopComponent; import org.openide.util.ImageUtilities; +import org.openide.util.Lookup.Result; +import org.openide.util.LookupEvent; +import org.openide.util.LookupListener; +import org.openide.util.Utilities; /** * Repository browser top component. */ -public final class BrowserTopComponent extends TopComponent { +public final class BrowserTopComponent extends TopComponent implements LookupListener { private static final String ICON_PATH = "org/nbgit/resources/icons/gitvcs-icon.png"; // NOI18N private static final String PREFERRED_ID = "org-nbgit-ui-browser"; // NOI18N private int commitIndex = -1; + private Result lookupResult; public BrowserTopComponent(BrowserModel model) { initComponents(); setName(_("CTL_BrowserTopComponent")); // NOI18N setToolTipText(_("HINT_BrowserTopComponent")); // NOI18N setIcon(ImageUtilities.loadImage(ICON_PATH, true)); - model.setCommitList(commitGraphPane.getCommitList()); - textArea.setDocument(model.getDocument()); - model.getDocument().addDocumentListener(new DocumentListener() { - - public void updateId(DocumentEvent e) { - String id = e.getDocument().getProperty(BrowserModel.CONTENT_ID).toString(); - idField.setText(id); - scrollTextToStart(); - } - - public void insertUpdate(DocumentEvent e) { - updateId(e); - } - - public void removeUpdate(DocumentEvent e) { - updateId(e); - } - - public void changedUpdate(DocumentEvent e) { - updateId(e); - } - }); + setModel(model); commitGraphPane.getSelectionModel().addListSelectionListener(new ListSelectionListener() { - public void valueChanged(ListSelectionEvent event) { ListSelectionModel listModel = (ListSelectionModel) event.getSource(); for (int i = event.getFirstIndex(); i <= event.getLastIndex(); i++) { @@ -95,18 +84,15 @@ break; } } - }); } private void scrollTextToStart() { SwingUtilities.invokeLater(new Runnable() { - public void run() { idField.setCaretPosition(0); textArea.setCaretPosition(0); } - }); } @@ -128,10 +114,10 @@ return NbBundle.getMessage(BrowserTopComponent.class, id, args); } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { @@ -188,7 +174,6 @@ .add(browserSplitPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables private final javax.swing.JSplitPane browserSplitPane = new javax.swing.JSplitPane(); private final CommitGraphPane commitGraphPane = new CommitGraphPane(); @@ -200,4 +185,67 @@ private final javax.swing.JScrollPane textScrollPane = new javax.swing.JScrollPane(); private final javax.swing.JToolBar toolBar = new javax.swing.JToolBar(); // End of variables declaration//GEN-END:variables + + public void resultChanged(LookupEvent le) { + this.setDisplayName(lookupResult.allInstances().toString()); + Collection nodes = lookupResult.allInstances(); + updateViewForNodes(nodes); + } + + @Override + protected void componentOpened() { + lookupResult = Utilities.actionsGlobalContext().lookupResult(Node.class); + lookupResult.addLookupListener(this); + } + + @Override + protected void componentClosed() { + lookupResult.removeLookupListener(this); + } + + private void setModel(BrowserModel model) { + model.setCommitList(commitGraphPane.getCommitList()); + textArea.setDocument(model.getDocument()); + model.getDocument().addDocumentListener(new DocumentListener() { + public void updateId(DocumentEvent e) { + String id = e.getDocument().getProperty(BrowserModel.CONTENT_ID).toString(); + idField.setText(id); + scrollTextToStart(); + } + + public void insertUpdate(DocumentEvent e) { + updateId(e); + } + + public void removeUpdate(DocumentEvent e) { + updateId(e); + } + + public void changedUpdate(DocumentEvent e) { + updateId(e); + } + }); + } + + public void updateViewForNodes(Collection nodeColl) { + final BrowserTopComponent comp = this; + final Node[] nodes = nodeColl.toArray(new Node[nodeColl.size()]); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + + final VCSContext ctx = VCSContext.forNodes(nodes); + if (ctx != null && ctx.getRootFiles() != null && !ctx.getRootFiles().isEmpty()) { + + BrowserModel model = new BrowserModel(ctx.getRootFiles(), Constants.HEAD); + setModel(model); + System.out.println("model" + model); + + BrowserController controller = new BrowserController(comp, model); + controller.show(); + + SwingUtilities.updateComponentTreeUI(comp); + } + } + }); + } } diff --git a/src/org/nbgit/ui/browser/ShowCommitGraphWindowAction.java b/src/org/nbgit/ui/browser/ShowCommitGraphWindowAction.java new file mode 100644 index 0000000..afd65fb --- /dev/null +++ b/src/org/nbgit/ui/browser/ShowCommitGraphWindowAction.java @@ -0,0 +1,55 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.nbgit.ui.browser; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.List; +import javax.swing.SwingUtilities; +import org.eclipse.jgit.lib.Constants; +import org.netbeans.modules.versioning.spi.VCSContext; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.nodes.Node; +import org.openide.util.NbBundle.Messages; + +@ActionID( + category = "Versioning", + id = "org.nbgit.ui.browser.ShowCommitGraphWindow") +@ActionRegistration( + displayName = "#CTL_ShowCommitGraphWindowAction") +@ActionReference(path = "Menu/File", position = 0) +@Messages("CTL_ShowCommitGraphWindowAction=Show CommitGraph ") +public final class ShowCommitGraphWindowAction implements ActionListener { + + private final List context; + + public ShowCommitGraphWindowAction(List context) { + this.context = context; + } + + @Override + public void actionPerformed(ActionEvent ev) { + Node[] nodes = context.toArray(new Node[context.size()]); + final VCSContext ctx = VCSContext.forNodes(nodes); + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + if (ctx != null && ctx.getRootFiles() != null && !ctx.getRootFiles().isEmpty()) { + + BrowserModel model = new BrowserModel(ctx.getRootFiles(), Constants.HEAD); + BrowserTopComponent view = new BrowserTopComponent(model); + view.setDisplayName(ctx.toString()); + view.open(); + view.requestActive(); + + BrowserController controller = new BrowserController(view, model); + controller.show(); + } + } + }); + } +}