This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 235838
Collapse All | Expand All

(-)git/nbproject/project.xml (+9 lines)
Lines 33-38 Link Here
33
                    </run-dependency>
33
                    </run-dependency>
34
                </dependency>
34
                </dependency>
35
                <dependency>
35
                <dependency>
36
                    <code-name-base>org.netbeans.modules.editor.completion</code-name-base>
37
                    <build-prerequisite/>
38
                    <compile-dependency/>
39
                    <run-dependency>
40
                        <release-version>1</release-version>
41
                        <specification-version>1.38</specification-version>
42
                    </run-dependency>
43
                </dependency>
44
                <dependency>
36
                    <code-name-base>org.netbeans.modules.editor.errorstripe</code-name-base>
45
                    <code-name-base>org.netbeans.modules.editor.errorstripe</code-name-base>
37
                    <build-prerequisite/>
46
                    <build-prerequisite/>
38
                    <compile-dependency/>
47
                    <compile-dependency/>
(-)git/src/org/netbeans/modules/git/ui/commit/CommitPanel.form (-5 / +1 lines)
Lines 89-99 Link Here
89
89
90
      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
90
      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
91
      <SubComponents>
91
      <SubComponents>
92
        <Component class="javax.swing.JTextArea" name="messageTextArea">
92
        <Component class="javax.swing.JEditorPane" name="messageTextArea">
93
          <Properties>
94
            <Property name="columns" type="int" value="20"/>
95
            <Property name="rows" type="int" value="5"/>
96
          </Properties>
97
          <AuxValues>
93
          <AuxValues>
98
            <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="16"/>
94
            <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="16"/>
99
          </AuxValues>
95
          </AuxValues>
(-)git/src/org/netbeans/modules/git/ui/commit/CommitPanel.java (-8 / +15 lines)
Lines 57-62 Link Here
57
import javax.swing.JComboBox;
57
import javax.swing.JComboBox;
58
import javax.swing.event.DocumentEvent;
58
import javax.swing.event.DocumentEvent;
59
import javax.swing.event.DocumentListener;
59
import javax.swing.event.DocumentListener;
60
import javax.swing.text.EditorKit;
60
import javax.swing.text.JTextComponent;
61
import javax.swing.text.JTextComponent;
61
import org.netbeans.modules.git.GitModuleConfig;
62
import org.netbeans.modules.git.GitModuleConfig;
62
import org.netbeans.modules.spellchecker.api.Spellchecker;
63
import org.netbeans.modules.spellchecker.api.Spellchecker;
Lines 65-70 Link Here
65
import org.netbeans.modules.versioning.util.UndoRedoSupport;
66
import org.netbeans.modules.versioning.util.UndoRedoSupport;
66
import org.netbeans.modules.versioning.util.common.CommitMessageMouseAdapter;
67
import org.netbeans.modules.versioning.util.common.CommitMessageMouseAdapter;
67
import org.openide.awt.Mnemonics;
68
import org.openide.awt.Mnemonics;
69
import org.openide.text.CloneableEditorSupport;
68
import org.openide.util.NbBundle;
70
import org.openide.util.NbBundle;
69
71
70
/**
72
/**
Lines 84-94 Link Here
84
        initComponents();
86
        initComponents();
85
        Mnemonics.setLocalizedText(messageLabel, getMessage("CTL_CommitForm_Message")); // NOI18N
87
        Mnemonics.setLocalizedText(messageLabel, getMessage("CTL_CommitForm_Message")); // NOI18N
86
        
88
        
87
        messageTextArea.setColumns(60);    //this determines the preferred width of the whole dialog
88
        messageTextArea.setLineWrap(true);
89
        messageTextArea.setRows(4);
90
        messageTextArea.setTabSize(4);
91
        messageTextArea.setWrapStyleWord(true);
92
        messageTextArea.setMinimumSize(new Dimension(100, 18));
89
        messageTextArea.setMinimumSize(new Dimension(100, 18));
93
        
90
        
94
        messageTextArea.getAccessibleContext().setAccessibleName(getMessage("ACSN_CommitForm_Message")); // NOI18N
91
        messageTextArea.getAccessibleContext().setAccessibleName(getMessage("ACSN_CommitForm_Message")); // NOI18N
Lines 103-109 Link Here
103
        
100
        
104
        Spellchecker.register (messageTextArea);  
101
        Spellchecker.register (messageTextArea);  
105
        initCommitMessage(commitMessage, preferredMessage);
102
        initCommitMessage(commitMessage, preferredMessage);
103
        
104
//        final String mimetype = "text/vcs-commitmsg";
105
        final String mimetype = "text/plain";
106
        
107
        EditorKit kit = CloneableEditorSupport.getEditorKit(mimetype);
108
        messageTextArea.setEditorKit(kit);
109
        messageTextArea.setContentType(mimetype);
110
        messageTextArea.putClientProperty("previousCommitMessages", parameters.getCommitMessages());
111
106
        attacheMessageListener();
112
        attacheMessageListener();
113
        
107
    }
114
    }
108
115
109
    private void setCaretPosition(JComboBox cbo) {
116
    private void setCaretPosition(JComboBox cbo) {
Lines 202-209 Link Here
202
        messageLabel.setLabelFor(messageTextArea);
209
        messageLabel.setLabelFor(messageTextArea);
203
        org.openide.awt.Mnemonics.setLocalizedText(messageLabel, org.openide.util.NbBundle.getMessage(CommitPanel.class, "CommitPanel.messageLabel.text")); // NOI18N
210
        org.openide.awt.Mnemonics.setLocalizedText(messageLabel, org.openide.util.NbBundle.getMessage(CommitPanel.class, "CommitPanel.messageLabel.text")); // NOI18N
204
211
205
        messageTextArea.setColumns(20);
212
        // messageTextArea.setColumns(20);
206
        messageTextArea.setRows(5);
213
        // messageTextArea.setRows(5);
207
        jScrollPane1.setViewportView(messageTextArea);
214
        jScrollPane1.setViewportView(messageTextArea);
208
215
209
        jLabel2.setLabelFor(authorComboBox);
216
        jLabel2.setLabelFor(authorComboBox);
Lines 295-301 Link Here
295
    private javax.swing.JLabel jLabel3;
302
    private javax.swing.JLabel jLabel3;
296
    private javax.swing.JScrollPane jScrollPane1;
303
    private javax.swing.JScrollPane jScrollPane1;
297
    private javax.swing.JLabel messageLabel;
304
    private javax.swing.JLabel messageLabel;
298
    final javax.swing.JTextArea messageTextArea = new javax.swing.JTextArea();
305
    final javax.swing.JEditorPane messageTextArea = new javax.swing.JEditorPane();
299
    private javax.swing.JLabel recentLabel;
306
    private javax.swing.JLabel recentLabel;
300
    private javax.swing.JLabel templatesLabel;
307
    private javax.swing.JLabel templatesLabel;
301
    // End of variables declaration//GEN-END:variables
308
    // End of variables declaration//GEN-END:variables
(-)git/src/org/netbeans/modules/git/ui/commit/GitCommitParameters.java (-2 / +3 lines)
Lines 53-58 Link Here
53
import java.util.prefs.Preferences;
53
import java.util.prefs.Preferences;
54
import java.util.regex.Pattern;
54
import java.util.regex.Pattern;
55
import javax.swing.JComboBox;
55
import javax.swing.JComboBox;
56
import javax.swing.JEditorPane;
56
import javax.swing.JTextField;
57
import javax.swing.JTextField;
57
import javax.swing.event.DocumentListener;
58
import javax.swing.event.DocumentListener;
58
import org.netbeans.libs.git.GitUser;
59
import org.netbeans.libs.git.GitUser;
Lines 95-106 Link Here
95
        return panel;
96
        return panel;
96
    }
97
    }
97
98
98
    public JLabel getMessagesTemplateLink(JTextArea text) {
99
    public JLabel getMessagesTemplateLink(JEditorPane text) {
99
        return super.getMessagesTemplateLink(text, "org.netbeans.modules.git.ui.commit.TemplatePanel"); //NOI18N
100
        return super.getMessagesTemplateLink(text, "org.netbeans.modules.git.ui.commit.TemplatePanel"); //NOI18N
100
    }
101
    }
101
102
102
    @Override
103
    @Override
103
    public JLabel getRecentMessagesLink(JTextArea text) {
104
    public JLabel getRecentMessagesLink(JEditorPane text) {
104
        return super.getRecentMessagesLink(text);
105
        return super.getRecentMessagesLink(text);
105
    }
106
    }
106
    
107
    
(-)git/src/org/netbeans/modules/git/ui/commit/RecentMessagesCompletionProvider.java (+177 lines)
Line 0 Link Here
1
package org.netbeans.modules.git.ui.commit;
2
3
import java.awt.Color;
4
import java.awt.Font;
5
import java.awt.Graphics;
6
import java.awt.event.KeyEvent;
7
import java.net.URL;
8
import java.util.List;
9
import javax.swing.Action;
10
import javax.swing.ImageIcon;
11
import javax.swing.text.BadLocationException;
12
import javax.swing.text.Document;
13
import javax.swing.text.JTextComponent;
14
import org.netbeans.api.editor.mimelookup.MimeRegistration;
15
import org.netbeans.modules.versioning.util.common.VCSCommitParameters;
16
import org.netbeans.spi.editor.completion.CompletionDocumentation;
17
import org.netbeans.spi.editor.completion.CompletionItem;
18
import org.netbeans.spi.editor.completion.CompletionProvider;
19
import org.netbeans.spi.editor.completion.CompletionResultSet;
20
import org.netbeans.spi.editor.completion.CompletionTask;
21
import org.netbeans.spi.editor.completion.support.AsyncCompletionQuery;
22
import org.netbeans.spi.editor.completion.support.AsyncCompletionTask;
23
import org.netbeans.spi.editor.completion.support.CompletionUtilities;
24
import org.openide.util.Exceptions;
25
26
@MimeRegistration(mimeType = "text/plain", service = CompletionProvider.class)
27
public class RecentMessagesCompletionProvider implements CompletionProvider {
28
29
    @Override
30
    public CompletionTask createTask(int queryType, JTextComponent jtc) {
31
        if (queryType != CompletionProvider.COMPLETION_QUERY_TYPE) {
32
            return null;
33
        }
34
        final List<String> prevCommitMessages = (List<String>) jtc.getClientProperty("previousCommitMessages");
35
        return new AsyncCompletionTask(new AsyncCompletionQuery() {
36
37
            @Override
38
            protected void query(CompletionResultSet resultSet, Document doc, int caretOffset) {
39
                if (prevCommitMessages != null) {
40
                    for (String commitMessage : prevCommitMessages) {
41
                        resultSet.addItem(new RecentMessageCompletionItem(commitMessage, caretOffset));
42
                    }
43
                }
44
45
                resultSet.finish();
46
            }
47
        });
48
    }
49
50
    @Override
51
    public int getAutoQueryTypes(JTextComponent component, String typedText) {
52
        return 0;
53
    }
54
55
    private static class RecentMessageCompletionItem implements CompletionItem {
56
57
        private final String text;
58
        private static final ImageIcon icon = new ImageIcon(VCSCommitParameters.class.getResource("/org/netbeans/modules/versioning/util/resources/recent_messages.png"));
59
60
        private final int caretOffset;
61
        private final String firstLine;
62
63
        public RecentMessageCompletionItem(String text, int caretOffset) {
64
            this.text = text;
65
            this.firstLine = getFirstLineOfMessage(text);
66
            this.caretOffset = caretOffset;
67
        }
68
69
        private String getFirstLineOfMessage(String text) {
70
            String result;
71
            String[] split = text.split("[\n\r]");
72
            if (null != split && split.length > 0) {
73
                result = split[0];
74
            } else {
75
                result = text;
76
            }
77
            //prevent too long lines in CC
78
            if (result.length() > 200) {
79
                result = result.substring(0, 200);
80
            }
81
            return result;
82
        }
83
84
        @Override
85
        public void defaultAction(JTextComponent component) {
86
            //TODO insert at current caret
87
//            try {
88
//                component.getDocument().insertString(caretOffset, text, null);
89
//            } catch (BadLocationException ex) {
90
//                Exceptions.printStackTrace(ex);
91
//            }
92
        }
93
94
        @Override
95
        public void processKeyEvent(KeyEvent evt) {
96
        }
97
98
        @Override
99
        public int getPreferredWidth(Graphics g, Font defaultFont) {
100
            return CompletionUtilities.getPreferredWidth(firstLine, null, g, defaultFont);
101
        }
102
103
        @Override
104
        public void render(Graphics g, Font defaultFont, Color defaultColor, Color backgroundColor, int width, int height, boolean selected) {
105
            CompletionUtilities.renderHtml(icon, firstLine, null, g, defaultFont, defaultColor, width, height, selected);
106
        }
107
108
        @Override
109
        public CompletionTask createDocumentationTask() {
110
            return new AsyncCompletionTask(new AsyncCompletionQuery() {
111
                @Override
112
                protected void query(CompletionResultSet completionResultSet, Document document, int i) {
113
                    completionResultSet.setDocumentation(new RecentMessageCompletionDocumentation(RecentMessageCompletionItem.this));
114
                    completionResultSet.finish();
115
                }
116
            });
117
        }
118
119
        @Override
120
        public CompletionTask createToolTipTask() {
121
            return null;
122
        }
123
124
        @Override
125
        public boolean instantSubstitution(JTextComponent component) {
126
            return false;
127
        }
128
129
        @Override
130
        public int getSortPriority() {
131
            //TODO use order of recent messages
132
            return 0;
133
        }
134
135
        @Override
136
        public CharSequence getSortText() {
137
            return firstLine;
138
        }
139
140
        @Override
141
        public CharSequence getInsertPrefix() {
142
            return firstLine;
143
        }
144
145
    }
146
147
    private static class RecentMessageCompletionDocumentation implements CompletionDocumentation {
148
149
        private final RecentMessageCompletionItem item;
150
151
        public RecentMessageCompletionDocumentation(RecentMessageCompletionItem item) {
152
            this.item = item;
153
        }
154
155
        @Override
156
        public String getText() {
157
            //TODO replace linebreaks with <br>
158
            return item.text;
159
        }
160
161
        @Override
162
        public URL getURL() {
163
            return null;
164
        }
165
166
        @Override
167
        public CompletionDocumentation resolveLink(String string) {
168
            return null;
169
        }
170
171
        @Override
172
        public Action getGotoSourceAction() {
173
            return null;
174
        }
175
176
    }
177
}

Return to bug 235838