@@ -177,12 +177,7 @@ public void update() {
177177 if (isCollaborator ) {
178178 GitHubCache cache = GitHubCache .create (repository );
179179 // milestone
180- List <Milestone > milestones = cache .getMilestones ();
181- milestoneComboBoxModel .removeAllElements ();
182- milestoneComboBoxModel .addElement (null );
183- for (Milestone milestone : milestones ) {
184- milestoneComboBoxModel .addElement (milestone );
185- }
180+ updateMilestones (cache , false );
186181
187182 // assignee
188183 List <User > collaborators = cache .getCollaborators ();
@@ -192,6 +187,7 @@ public void update() {
192187 assigneeComboBoxModel .addElement (collaborator );
193188 }
194189
190+ // label
195191 updateLables (cache , false );
196192 }
197193
@@ -262,6 +258,15 @@ public void update() {
262258 fireChange ();
263259 }
264260
261+ private void updateMilestones (GitHubCache cache , boolean force ) {
262+ List <Milestone > milestones = cache .getMilestones (force );
263+ milestoneComboBoxModel .removeAllElements ();
264+ milestoneComboBoxModel .addElement (null );
265+ for (Milestone milestone : milestones ) {
266+ milestoneComboBoxModel .addElement (milestone );
267+ }
268+ }
269+
265270 private void updateLables (GitHubCache cache , boolean force ) {
266271 List <Label > labels = cache .getLabels (force );
267272 labelsListModel .removeAllElements ();
@@ -291,6 +296,9 @@ private void setAssigneeSelected(User assignee) {
291296 }
292297
293298 private void setMilestoneSelected (Milestone milestone ) {
299+ if (milestone == null ) {
300+ return ;
301+ }
294302 int size = milestoneComboBoxModel .getSize ();
295303 for (int i = 0 ; i < size ; i ++) {
296304 Milestone m = milestoneComboBoxModel .getElementAt (i );
@@ -332,6 +340,7 @@ private void setCollaboratorsComponentsVisible(boolean isVisible) {
332340 assigneeLabel .setVisible (isVisible );
333341 assigneeComboBox .setVisible (isVisible );
334342 addLabelButton .setVisible (isVisible );
343+ newMilestoneButton .setVisible (isVisible );
335344 }
336345
337346 @ NbBundle .Messages ({
@@ -543,6 +552,7 @@ private void initComponents() {
543552 jSeparator1 = new javax .swing .JSeparator ();
544553 refreshLinkButton = new org .netbeans .modules .bugtracking .commons .LinkButton ();
545554 addLabelButton = new javax .swing .JButton ();
555+ newMilestoneButton = new javax .swing .JButton ();
546556 mainScrollPane = new javax .swing .JScrollPane ();
547557 mainPanel = new javax .swing .JPanel ();
548558 assigneeLabel = new javax .swing .JLabel ();
@@ -606,6 +616,13 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
606616 }
607617 });
608618
619+ org .openide .awt .Mnemonics .setLocalizedText (newMilestoneButton , org .openide .util .NbBundle .getMessage (GitHubIssuePanel .class , "GitHubIssuePanel.newMilestoneButton.text" )); // NOI18N
620+ newMilestoneButton .addActionListener (new java .awt .event .ActionListener () {
621+ public void actionPerformed (java .awt .event .ActionEvent evt ) {
622+ newMilestoneButtonActionPerformed (evt );
623+ }
624+ });
625+
609626 javax .swing .GroupLayout headerPanelLayout = new javax .swing .GroupLayout (headerPanel );
610627 headerPanel .setLayout (headerPanelLayout );
611628 headerPanelLayout .setHorizontalGroup (
@@ -616,6 +633,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
616633 .addGroup (javax .swing .GroupLayout .Alignment .TRAILING , headerPanelLayout .createSequentialGroup ()
617634 .addComponent (headerErrorLabel )
618635 .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED , javax .swing .GroupLayout .DEFAULT_SIZE , Short .MAX_VALUE )
636+ .addComponent (newMilestoneButton )
637+ .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED )
619638 .addComponent (addLabelButton )
620639 .addPreferredGap (javax .swing .LayoutStyle .ComponentPlacement .RELATED )
621640 .addComponent (headerSubmitButton ))
@@ -667,7 +686,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
667686 .addGroup (headerPanelLayout .createParallelGroup (javax .swing .GroupLayout .Alignment .BASELINE )
668687 .addComponent (headerSubmitButton )
669688 .addComponent (headerErrorLabel )
670- .addComponent (addLabelButton )))
689+ .addComponent (addLabelButton )
690+ .addComponent (newMilestoneButton )))
671691 );
672692
673693 mainPanel .setAutoscrolls (true );
@@ -844,6 +864,32 @@ private void addLabelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GE
844864 }
845865 }//GEN-LAST:event_addLabelButtonActionPerformed
846866
867+ @ NbBundle .Messages ({
868+ "GitHubIssuePanel.message.addMilestone.error=Can't add a milestone"
869+ })
870+ private void newMilestoneButtonActionPerformed (java .awt .event .ActionEvent evt ) {//GEN-FIRST:event_newMilestoneButtonActionPerformed
871+ assert gitHubIssue != null ;
872+ GitHubRepository repository = getRepository ();
873+ if (repository == null ) {
874+ return ;
875+ }
876+ GitHubCache cache = GitHubCache .create (repository );
877+ Milestone milestone = MilestonePanel .showDialog (cache .getMilestones ());
878+ if (milestone != null ) {
879+ Milestone newMilestone = repository .addMilestone (milestone );
880+ if (newMilestone == null ) {
881+ // show dialog
882+ UiUtils .showErrorDialog (Bundle .GitHubIssuePanel_message_addMilestone_error ());
883+ return ;
884+ }
885+ updateMilestones (cache , true );
886+ Issue issue = getIssue ().getIssue ();
887+ if (issue != null ) {
888+ setMilestoneSelected (issue .getMilestone ());
889+ }
890+ }
891+ }//GEN-LAST:event_newMilestoneButtonActionPerformed
892+
847893 // Variables declaration - do not modify//GEN-BEGIN:variables
848894 private javax .swing .JButton addLabelButton ;
849895 private javax .swing .JComboBox <User > assigneeComboBox ;
@@ -876,6 +922,7 @@ private void addLabelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GE
876922 private javax .swing .JButton newCommentCloseReopenIssueButton ;
877923 private javax .swing .JLabel newCommentLabel ;
878924 private com .junichi11 .netbeans .modules .github .issues .issue .ui .CommentTabbedPanel newCommentTabbedPanel ;
925+ private javax .swing .JButton newMilestoneButton ;
879926 private org .netbeans .modules .bugtracking .commons .LinkButton refreshLinkButton ;
880927 private javax .swing .JLabel titleLabel ;
881928 private javax .swing .JTextField titleTextField ;
0 commit comments