4343
4444import com .junichi11 .netbeans .modules .github .issues .utils .DateUtils ;
4545import com .junichi11 .netbeans .modules .github .issues .utils .UiUtils ;
46+ import java .awt .Font ;
4647import java .util .Date ;
48+ import javax .swing .Icon ;
4749import org .eclipse .egit .github .core .Comment ;
4850import org .openide .util .NbBundle ;
4951
5456public class CommentPanel extends javax .swing .JPanel {
5557
5658 private static final long serialVersionUID = -1191208334240462498L ;
59+ private static final String HTML_MIME_TYPE = "text/html" ; // NOI18N
60+ private static final String PLAIN_MIME_TYPE = "text/plain" ; // NOI18N
5761
5862 private Comment comment ;
5963 private boolean isQuote ;
@@ -67,25 +71,39 @@ private CommentPanel() {
6771 initComponents ();
6872 }
6973
70- public CommentPanel (Comment comment ) {
74+ public CommentPanel (Comment comment , Icon icon ) {
7175 this .comment = comment ;
7276 initComponents ();
73- load ();
77+ init ();
78+ load (icon );
7479 }
7580
76- final void load () {
81+ private void init () {
82+ // set monospaced font
83+ Font contentFont = contentTextPane .getFont ();
84+ contentTextPane .setFont (new Font (Font .MONOSPACED , contentFont .getStyle (), contentFont .getSize ()));
85+
86+ previewLinkButton .setText (Bundle .CommentPanel_previewLinkButton_title_html ());
87+ }
88+
89+ final void load (Icon icon ) {
7790 if (comment != null ) {
7891 setUserName (comment .getUser ().getLogin ());
92+ setUserIcon (icon );
7993 setCreatedDate (comment .getCreatedAt ());
8094 setUpdatedDate (comment .getUpdatedAt ());
81- setContent (comment .getBodyHtml ());
95+ setContent (comment .getBody ());
8296 }
8397 }
8498
8599 private void setUserName (String name ) {
86100 userLinkButton .setText (name );
87101 }
88102
103+ private void setUserIcon (Icon icon ) {
104+ userLinkButton .setIcon (icon );
105+ }
106+
89107 private void setCreatedDate (Date date ) {
90108 if (date != null ) {
91109 createdDateLabel .setText (DateUtils .DEFAULT_DATE_TIME_FORMAT .format (date ));
@@ -165,6 +183,7 @@ private void initComponents() {
165183 contentTextPane = new javax .swing .JTextPane ();
166184 quoteLinkButton = new org .netbeans .modules .bugtracking .commons .LinkButton ();
167185 deleteLinkButton = new org .netbeans .modules .bugtracking .commons .LinkButton ();
186+ previewLinkButton = new org .netbeans .modules .bugtracking .commons .LinkButton ();
168187
169188 org .openide .awt .Mnemonics .setLocalizedText (createdLabel , org .openide .util .NbBundle .getMessage (CommentPanel .class , "CommentPanel.createdLabel.text" )); // NOI18N
170189
@@ -185,7 +204,6 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
185204
186205 contentTextPane .setEditable (false );
187206 contentTextPane .setBorder (javax .swing .BorderFactory .createEmptyBorder (3 , 5 , 3 , 5 ));
188- contentTextPane .setContentType ("text/html" ); // NOI18N
189207
190208 org .openide .awt .Mnemonics .setLocalizedText (quoteLinkButton , org .openide .util .NbBundle .getMessage (CommentPanel .class , "CommentPanel.quoteLinkButton.text" )); // NOI18N
191209 quoteLinkButton .addActionListener (new java .awt .event .ActionListener () {
@@ -201,6 +219,13 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
201219 }
202220 });
203221
222+ org .openide .awt .Mnemonics .setLocalizedText (previewLinkButton , org .openide .util .NbBundle .getMessage (CommentPanel .class , "CommentPanel.previewLinkButton.text" )); // NOI18N
223+ previewLinkButton .addActionListener (new java .awt .event .ActionListener () {
224+ public void actionPerformed (java .awt .event .ActionEvent evt ) {
225+ previewLinkButtonActionPerformed (evt );
226+ }
227+ });
228+
204229 javax .swing .GroupLayout layout = new javax .swing .GroupLayout (this );
205230 this .setLayout (layout );
206231 layout .setHorizontalGroup (
@@ -211,7 +236,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
211236 .addComponent (contentTextPane )
212237 .addGroup (javax .swing .GroupLayout .Alignment .LEADING , layout .createSequentialGroup ()
213238 .addComponent (userLinkButton , javax .swing .GroupLayout .PREFERRED_SIZE , javax .swing .GroupLayout .DEFAULT_SIZE , javax .swing .GroupLayout .PREFERRED_SIZE )
214- .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED , 56 , Short .MAX_VALUE )
239+ .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED , 66 , Short .MAX_VALUE )
215240 .addComponent (createdLabel )
216241 .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED )
217242 .addComponent (createdDateLabel )
@@ -220,6 +245,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
220245 .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED )
221246 .addComponent (updatedDateLabel )
222247 .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED )
248+ .addComponent (previewLinkButton , javax .swing .GroupLayout .PREFERRED_SIZE , javax .swing .GroupLayout .DEFAULT_SIZE , javax .swing .GroupLayout .PREFERRED_SIZE )
249+ .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED )
223250 .addComponent (quoteLinkButton , javax .swing .GroupLayout .PREFERRED_SIZE , javax .swing .GroupLayout .DEFAULT_SIZE , javax .swing .GroupLayout .PREFERRED_SIZE )
224251 .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED )
225252 .addComponent (editLinkButton , javax .swing .GroupLayout .PREFERRED_SIZE , javax .swing .GroupLayout .DEFAULT_SIZE , javax .swing .GroupLayout .PREFERRED_SIZE )
@@ -240,7 +267,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
240267 .addComponent (userLinkButton , javax .swing .GroupLayout .PREFERRED_SIZE , javax .swing .GroupLayout .DEFAULT_SIZE , javax .swing .GroupLayout .PREFERRED_SIZE )
241268 .addComponent (editLinkButton , javax .swing .GroupLayout .PREFERRED_SIZE , javax .swing .GroupLayout .DEFAULT_SIZE , javax .swing .GroupLayout .PREFERRED_SIZE )
242269 .addComponent (quoteLinkButton , javax .swing .GroupLayout .PREFERRED_SIZE , javax .swing .GroupLayout .DEFAULT_SIZE , javax .swing .GroupLayout .PREFERRED_SIZE )
243- .addComponent (deleteLinkButton , javax .swing .GroupLayout .PREFERRED_SIZE , javax .swing .GroupLayout .DEFAULT_SIZE , javax .swing .GroupLayout .PREFERRED_SIZE ))
270+ .addComponent (deleteLinkButton , javax .swing .GroupLayout .PREFERRED_SIZE , javax .swing .GroupLayout .DEFAULT_SIZE , javax .swing .GroupLayout .PREFERRED_SIZE )
271+ .addComponent (previewLinkButton , javax .swing .GroupLayout .PREFERRED_SIZE , javax .swing .GroupLayout .DEFAULT_SIZE , javax .swing .GroupLayout .PREFERRED_SIZE ))
244272 .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED )
245273 .addComponent (jSeparator1 , javax .swing .GroupLayout .PREFERRED_SIZE , javax .swing .GroupLayout .DEFAULT_SIZE , javax .swing .GroupLayout .PREFERRED_SIZE )
246274 .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED )
@@ -270,13 +298,36 @@ private void editLinkButtonActionPerformed(java.awt.event.ActionEvent evt) {//GE
270298 firePropertyChange (CommentsPanel .PROP_COMMENT_EDITED , null , null );
271299 }//GEN-LAST:event_editLinkButtonActionPerformed
272300
301+ @ NbBundle .Messages ({
302+ "CommentPanel.previewLinkButton.title.html=HTML" ,
303+ "CommentPanel.previewLinkButton.title.plain=Plain"
304+ })
305+ private void previewLinkButtonActionPerformed (java .awt .event .ActionEvent evt ) {//GEN-FIRST:event_previewLinkButtonActionPerformed
306+ String text = previewLinkButton .getText ();
307+ if (text .equals (Bundle .CommentPanel_previewLinkButton_title_html ())) {
308+ previewLinkButton .setText (Bundle .CommentPanel_previewLinkButton_title_plain ());
309+ } else {
310+ previewLinkButton .setText (Bundle .CommentPanel_previewLinkButton_title_html ());
311+ }
312+
313+ String contentType = contentTextPane .getContentType ();
314+ if (contentType .equals (HTML_MIME_TYPE )) {
315+ contentTextPane .setContentType (PLAIN_MIME_TYPE );
316+ contentTextPane .setText (comment .getBody ());
317+ return ;
318+ }
319+ contentTextPane .setContentType (HTML_MIME_TYPE );
320+ contentTextPane .setText (comment .getBodyHtml ());
321+ }//GEN-LAST:event_previewLinkButtonActionPerformed
322+
273323 // Variables declaration - do not modify//GEN-BEGIN:variables
274324 private javax .swing .JTextPane contentTextPane ;
275325 private javax .swing .JLabel createdDateLabel ;
276326 private javax .swing .JLabel createdLabel ;
277327 private org .netbeans .modules .bugtracking .commons .LinkButton deleteLinkButton ;
278328 private org .netbeans .modules .bugtracking .commons .LinkButton editLinkButton ;
279329 private javax .swing .JSeparator jSeparator1 ;
330+ private org .netbeans .modules .bugtracking .commons .LinkButton previewLinkButton ;
280331 private org .netbeans .modules .bugtracking .commons .LinkButton quoteLinkButton ;
281332 private javax .swing .JLabel updatedDateLabel ;
282333 private javax .swing .JLabel updatedLabel ;
0 commit comments