# This patch file was generated by NetBeans IDE
# Following Index: paths are relative to: D:\ws\main
# This patch can be applied using context Tools: Patch action on respective folder.
# It uses platform neutral UTF-8 encoding and \n newlines.
# Above lines and this line are ignored by the patching process.
Index: git/nbproject/project.xml
--- git/nbproject/project.xml
+++ git/nbproject/project.xml
@@ -33,6 +33,15 @@
+ org.netbeans.modules.editor.completion
+
+
+
+ 1
+ 1.38
+
+
+
org.netbeans.modules.editor.errorstripe
Index: git/src/org/netbeans/modules/git/git-layer.xml
--- git/src/org/netbeans/modules/git/git-layer.xml
+++ git/src/org/netbeans/modules/git/git-layer.xml
Index: git/src/org/netbeans/modules/git/ui/commit/CommitPanel.form
--- git/src/org/netbeans/modules/git/ui/commit/CommitPanel.form
+++ git/src/org/netbeans/modules/git/ui/commit/CommitPanel.form
@@ -89,11 +89,7 @@
-
-
-
-
-
+
Index: git/src/org/netbeans/modules/git/ui/commit/CommitPanel.java
--- git/src/org/netbeans/modules/git/ui/commit/CommitPanel.java
+++ git/src/org/netbeans/modules/git/ui/commit/CommitPanel.java
@@ -57,6 +57,7 @@
import javax.swing.JComboBox;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
+import javax.swing.text.EditorKit;
import javax.swing.text.JTextComponent;
import org.netbeans.modules.git.GitModuleConfig;
import org.netbeans.modules.spellchecker.api.Spellchecker;
@@ -65,6 +66,7 @@
import org.netbeans.modules.versioning.util.UndoRedoSupport;
import org.netbeans.modules.versioning.util.common.CommitMessageMouseAdapter;
import org.openide.awt.Mnemonics;
+import org.openide.text.CloneableEditorSupport;
import org.openide.util.NbBundle;
/**
@@ -84,11 +86,6 @@
initComponents();
Mnemonics.setLocalizedText(messageLabel, getMessage("CTL_CommitForm_Message")); // NOI18N
- messageTextArea.setColumns(60); //this determines the preferred width of the whole dialog
- messageTextArea.setLineWrap(true);
- messageTextArea.setRows(4);
- messageTextArea.setTabSize(4);
- messageTextArea.setWrapStyleWord(true);
messageTextArea.setMinimumSize(new Dimension(100, 18));
messageTextArea.getAccessibleContext().setAccessibleName(getMessage("ACSN_CommitForm_Message")); // NOI18N
@@ -103,7 +100,17 @@
Spellchecker.register (messageTextArea);
initCommitMessage(commitMessage, preferredMessage);
+
+// final String mimetype = "text/vcs-commitmsg";
+ final String mimetype = "text/plain";
+
+ EditorKit kit = CloneableEditorSupport.getEditorKit(mimetype);
+ messageTextArea.setEditorKit(kit);
+ messageTextArea.setContentType(mimetype);
+ messageTextArea.putClientProperty("previousCommitMessages", parameters.getCommitMessages());
+
attacheMessageListener();
+
}
private void setCaretPosition(JComboBox cbo) {
@@ -202,8 +209,8 @@
messageLabel.setLabelFor(messageTextArea);
org.openide.awt.Mnemonics.setLocalizedText(messageLabel, org.openide.util.NbBundle.getMessage(CommitPanel.class, "CommitPanel.messageLabel.text")); // NOI18N
- messageTextArea.setColumns(20);
- messageTextArea.setRows(5);
+ // messageTextArea.setColumns(20);
+ // messageTextArea.setRows(5);
jScrollPane1.setViewportView(messageTextArea);
jLabel2.setLabelFor(authorComboBox);
@@ -295,7 +302,7 @@
private javax.swing.JLabel jLabel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel messageLabel;
- final javax.swing.JTextArea messageTextArea = new javax.swing.JTextArea();
+ final javax.swing.JEditorPane messageTextArea = new javax.swing.JEditorPane();
private javax.swing.JLabel recentLabel;
private javax.swing.JLabel templatesLabel;
// End of variables declaration//GEN-END:variables
Index: git/src/org/netbeans/modules/git/ui/commit/GitCommitParameters.java
--- git/src/org/netbeans/modules/git/ui/commit/GitCommitParameters.java
+++ git/src/org/netbeans/modules/git/ui/commit/GitCommitParameters.java
@@ -53,6 +53,7 @@
import java.util.prefs.Preferences;
import java.util.regex.Pattern;
import javax.swing.JComboBox;
+import javax.swing.JEditorPane;
import javax.swing.JTextField;
import javax.swing.event.DocumentListener;
import org.netbeans.libs.git.GitUser;
@@ -95,12 +96,12 @@
return panel;
}
- public JLabel getMessagesTemplateLink(JTextArea text) {
+ public JLabel getMessagesTemplateLink(JEditorPane text) {
return super.getMessagesTemplateLink(text, "org.netbeans.modules.git.ui.commit.TemplatePanel"); //NOI18N
}
@Override
- public JLabel getRecentMessagesLink(JTextArea text) {
+ public JLabel getRecentMessagesLink(JEditorPane text) {
return super.getRecentMessagesLink(text);
}
Index: git/src/org/netbeans/modules/git/ui/commit/RecentMessagesCompletionProvider.java
--- git/src/org/netbeans/modules/git/ui/commit/RecentMessagesCompletionProvider.java
+++ git/src/org/netbeans/modules/git/ui/commit/RecentMessagesCompletionProvider.java
@@ -0,0 +1,177 @@
+package org.netbeans.modules.git.ui.commit;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.event.KeyEvent;
+import java.net.URL;
+import java.util.List;
+import javax.swing.Action;
+import javax.swing.ImageIcon;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.JTextComponent;
+import org.netbeans.api.editor.mimelookup.MimeRegistration;
+import org.netbeans.modules.versioning.util.common.VCSCommitParameters;
+import org.netbeans.spi.editor.completion.CompletionDocumentation;
+import org.netbeans.spi.editor.completion.CompletionItem;
+import org.netbeans.spi.editor.completion.CompletionProvider;
+import org.netbeans.spi.editor.completion.CompletionResultSet;
+import org.netbeans.spi.editor.completion.CompletionTask;
+import org.netbeans.spi.editor.completion.support.AsyncCompletionQuery;
+import org.netbeans.spi.editor.completion.support.AsyncCompletionTask;
+import org.netbeans.spi.editor.completion.support.CompletionUtilities;
+import org.openide.util.Exceptions;
+
+@MimeRegistration(mimeType = "text/plain", service = CompletionProvider.class)
+public class RecentMessagesCompletionProvider implements CompletionProvider {
+
+ @Override
+ public CompletionTask createTask(int queryType, JTextComponent jtc) {
+ if (queryType != CompletionProvider.COMPLETION_QUERY_TYPE) {
+ return null;
+ }
+ final List prevCommitMessages = (List) jtc.getClientProperty("previousCommitMessages");
+ return new AsyncCompletionTask(new AsyncCompletionQuery() {
+
+ @Override
+ protected void query(CompletionResultSet resultSet, Document doc, int caretOffset) {
+ if (prevCommitMessages != null) {
+ for (String commitMessage : prevCommitMessages) {
+ resultSet.addItem(new RecentMessageCompletionItem(commitMessage, caretOffset));
+ }
+ }
+
+ resultSet.finish();
+ }
+ });
+ }
+
+ @Override
+ public int getAutoQueryTypes(JTextComponent component, String typedText) {
+ return 0;
+ }
+
+ private static class RecentMessageCompletionItem implements CompletionItem {
+
+ private final String text;
+ private static final ImageIcon icon = new ImageIcon(VCSCommitParameters.class.getResource("/org/netbeans/modules/versioning/util/resources/recent_messages.png"));
+
+ private final int caretOffset;
+ private final String firstLine;
+
+ public RecentMessageCompletionItem(String text, int caretOffset) {
+ this.text = text;
+ this.firstLine = getFirstLineOfMessage(text);
+ this.caretOffset = caretOffset;
+ }
+
+ private String getFirstLineOfMessage(String text) {
+ String result;
+ String[] split = text.split("[\n\r]");
+ if (null != split && split.length > 0) {
+ result = split[0];
+ } else {
+ result = text;
+ }
+ //prevent too long lines in CC
+ if (result.length() > 200) {
+ result = result.substring(0, 200);
+ }
+ return result;
+ }
+
+ @Override
+ public void defaultAction(JTextComponent component) {
+ //TODO insert at current caret
+// try {
+// component.getDocument().insertString(caretOffset, text, null);
+// } catch (BadLocationException ex) {
+// Exceptions.printStackTrace(ex);
+// }
+ }
+
+ @Override
+ public void processKeyEvent(KeyEvent evt) {
+ }
+
+ @Override
+ public int getPreferredWidth(Graphics g, Font defaultFont) {
+ return CompletionUtilities.getPreferredWidth(firstLine, null, g, defaultFont);
+ }
+
+ @Override
+ public void render(Graphics g, Font defaultFont, Color defaultColor, Color backgroundColor, int width, int height, boolean selected) {
+ CompletionUtilities.renderHtml(icon, firstLine, null, g, defaultFont, defaultColor, width, height, selected);
+ }
+
+ @Override
+ public CompletionTask createDocumentationTask() {
+ return new AsyncCompletionTask(new AsyncCompletionQuery() {
+ @Override
+ protected void query(CompletionResultSet completionResultSet, Document document, int i) {
+ completionResultSet.setDocumentation(new RecentMessageCompletionDocumentation(RecentMessageCompletionItem.this));
+ completionResultSet.finish();
+ }
+ });
+ }
+
+ @Override
+ public CompletionTask createToolTipTask() {
+ return null;
+ }
+
+ @Override
+ public boolean instantSubstitution(JTextComponent component) {
+ return false;
+ }
+
+ @Override
+ public int getSortPriority() {
+ //TODO use order of recent messages
+ return 0;
+ }
+
+ @Override
+ public CharSequence getSortText() {
+ return firstLine;
+ }
+
+ @Override
+ public CharSequence getInsertPrefix() {
+ return firstLine;
+ }
+
+ }
+
+ private static class RecentMessageCompletionDocumentation implements CompletionDocumentation {
+
+ private final RecentMessageCompletionItem item;
+
+ public RecentMessageCompletionDocumentation(RecentMessageCompletionItem item) {
+ this.item = item;
+ }
+
+ @Override
+ public String getText() {
+ //TODO replace linebreaks with
+ return item.text;
+ }
+
+ @Override
+ public URL getURL() {
+ return null;
+ }
+
+ @Override
+ public CompletionDocumentation resolveLink(String string) {
+ return null;
+ }
+
+ @Override
+ public Action getGotoSourceAction() {
+ return null;
+ }
+
+ }
+}