Lines 48-72
Link Here
|
48 |
import java.awt.BorderLayout; |
48 |
import java.awt.BorderLayout; |
49 |
import java.awt.Component; |
49 |
import java.awt.Component; |
50 |
import java.awt.Dimension; |
50 |
import java.awt.Dimension; |
|
|
51 |
import java.awt.EventQueue; |
51 |
import java.awt.event.ItemEvent; |
52 |
import java.awt.event.ItemEvent; |
52 |
import java.awt.event.ItemListener; |
53 |
import java.awt.event.ItemListener; |
53 |
import java.beans.PropertyChangeEvent; |
54 |
import java.beans.PropertyChangeEvent; |
54 |
import java.beans.PropertyChangeListener; |
55 |
import java.beans.PropertyChangeListener; |
|
|
56 |
import java.util.logging.Logger; |
55 |
import javax.swing.DefaultComboBoxModel; |
57 |
import javax.swing.DefaultComboBoxModel; |
56 |
import javax.swing.DefaultListCellRenderer; |
58 |
import javax.swing.DefaultListCellRenderer; |
57 |
import javax.swing.JButton; |
59 |
import javax.swing.JButton; |
58 |
import javax.swing.JList; |
60 |
import javax.swing.JList; |
|
|
61 |
import javax.swing.event.PopupMenuEvent; |
62 |
import javax.swing.event.PopupMenuListener; |
59 |
import org.netbeans.modules.bugtracking.ui.search.QuickSearchComboBar; |
63 |
import org.netbeans.modules.bugtracking.ui.search.QuickSearchComboBar; |
60 |
import org.netbeans.modules.bugtracking.spi.Issue; |
64 |
import org.netbeans.modules.bugtracking.spi.Issue; |
61 |
import org.netbeans.modules.bugtracking.spi.Repository; |
65 |
import org.netbeans.modules.bugtracking.spi.Repository; |
62 |
import org.netbeans.modules.bugtracking.util.BugtrackingUtil; |
66 |
import org.netbeans.modules.bugtracking.util.BugtrackingUtil; |
63 |
import org.netbeans.modules.versioning.util.VerticallyNonResizingPanel; |
67 |
import org.netbeans.modules.versioning.util.VerticallyNonResizingPanel; |
|
|
68 |
import static java.util.logging.Level.FINER; |
64 |
|
69 |
|
65 |
/** |
70 |
/** |
66 |
* |
71 |
* |
67 |
* @author Tomas Stupka |
72 |
* @author Tomas Stupka |
68 |
*/ |
73 |
*/ |
69 |
public class HookPanel extends VerticallyNonResizingPanel implements ItemListener, PropertyChangeListener { |
74 |
public class HookPanel extends VerticallyNonResizingPanel implements ItemListener, PropertyChangeListener { |
|
|
75 |
|
76 |
private static Logger LOG = Logger.getLogger("org.netbeans.modules.bugtracking.vcshooks.HookPanel"); // NOI18N |
77 |
|
70 |
private QuickSearchComboBar qs; |
78 |
private QuickSearchComboBar qs; |
71 |
private Repository selectedRepository; |
79 |
private Repository selectedRepository; |
72 |
|
80 |
|
Lines 98-111
Link Here
|
98 |
} |
106 |
} |
99 |
private UpdateFiledsState updateFiledsState = null; |
107 |
private UpdateFiledsState updateFiledsState = null; |
100 |
|
108 |
|
101 |
public HookPanel(Repository[] repos, Repository toSelect) { |
109 |
public HookPanel(Repository[] repos) { |
102 |
initComponents(); |
110 |
initComponents(); |
103 |
|
111 |
|
104 |
qs = new QuickSearchComboBar(this); |
112 |
qs = new QuickSearchComboBar(this); |
105 |
issuePanel.add(qs, BorderLayout.NORTH); |
113 |
issuePanel.add(qs, BorderLayout.NORTH); |
106 |
issueLabel.setLabelFor(qs.getCommand()); |
114 |
issueLabel.setLabelFor(qs.getCommand()); |
|
|
115 |
|
116 |
Repository[] comboData; |
117 |
if (repos == null) { |
118 |
comboData = new Repository[1]; |
119 |
comboData[0] = null; |
120 |
} else { |
121 |
comboData = new Repository[repos.length + 1]; |
122 |
comboData[0] = null; |
123 |
if (repos.length != 0) { |
124 |
System.arraycopy(repos, 0, comboData, 1, repos.length); |
125 |
} |
126 |
} |
107 |
|
127 |
|
108 |
repositoryComboBox.setModel(new DefaultComboBoxModel(repos != null ? repos : new Repository[0])); |
128 |
repositoryComboBox.setModel(new DefaultComboBoxModel(comboData)); |
109 |
repositoryComboBox.setRenderer(new DefaultListCellRenderer() { |
129 |
repositoryComboBox.setRenderer(new DefaultListCellRenderer() { |
110 |
@Override |
130 |
@Override |
111 |
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
131 |
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
Lines 118-135
Link Here
|
118 |
}); |
138 |
}); |
119 |
|
139 |
|
120 |
repositoryComboBox.addItemListener(this); |
140 |
repositoryComboBox.addItemListener(this); |
121 |
if(toSelect != null) { |
141 |
enableFields(); |
122 |
repositoryComboBox.setSelectedItem(toSelect); |
142 |
} |
123 |
qs.setRepository(toSelect); |
143 |
|
|
|
144 |
/** |
145 |
* Selects the given repository in the combo-box if no repository has been |
146 |
* selected yet by the user. |
147 |
* If the user had already selected some repository before this method |
148 |
* was called, this method does nothing. If this method is called at |
149 |
* the moment the popup of the combo-box is opened, the operation of |
150 |
* pre-selecting the repository is deferred until the popup is closed. If |
151 |
* the popup had been displayed at the moment this method was called |
152 |
* and the user selects some repository during the period since the |
153 |
* call of this method until the deferred selection takes place, the |
154 |
* deferred selection operation is cancelled. |
155 |
* |
156 |
* @param repoToPreselect repository to preselect |
157 |
*/ |
158 |
void preselectRepository(final Repository repoToPreselect) { |
159 |
assert EventQueue.isDispatchThread(); |
160 |
|
161 |
if (repoToPreselect == null) { |
162 |
LOG.finer("preselectRepository(null)"); //NOI18N |
163 |
return; |
164 |
} |
165 |
|
166 |
if (LOG.isLoggable(FINER)) { |
167 |
LOG.finer("preselectRepository(" + repoToPreselect.getDisplayName() + ')'); //NOI18N |
168 |
} |
169 |
|
170 |
if (repositoryComboBox.getSelectedItem() != null) { |
171 |
LOG.finest(" - cancelled - already selected by the user"); //NOI18N |
172 |
return; |
173 |
} |
174 |
|
175 |
if (repositoryComboBox.isPopupVisible()) { |
176 |
LOG.finest(" - the popup is visible - deferred"); //NOI18N |
177 |
repositoryComboBox.addPopupMenuListener(new PopupMenuListener() { |
178 |
public void popupMenuWillBecomeVisible(PopupMenuEvent e) { } |
179 |
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { |
180 |
LOG.finer("popupMenuWillBecomeInvisible()"); //NOI18N |
181 |
repositoryComboBox.removePopupMenuListener(this); |
182 |
} |
183 |
public void popupMenuCanceled(PopupMenuEvent e) { |
184 |
LOG.finer("popupMenuCanceled()"); //NOI18N |
185 |
repositoryComboBox.removePopupMenuListener(this); |
186 |
LOG.finest(" - processing deferred selection"); //NOI18N |
187 |
preselectRepositoryUnconditionally(repoToPreselect); |
188 |
} |
189 |
}); |
124 |
} else { |
190 |
} else { |
125 |
if(repositoryComboBox.getItemCount() > 0) { |
191 |
preselectRepositoryUnconditionally(repoToPreselect); |
126 |
Repository repo = (Repository) repositoryComboBox.getItemAt(0); |
|
|
127 |
repositoryComboBox.setSelectedItem(repo); |
128 |
qs.setRepository(repo); |
129 |
} |
130 |
} |
192 |
} |
131 |
enableFields(); |
193 |
} |
132 |
|
194 |
|
|
|
195 |
private void preselectRepositoryUnconditionally(Repository repoToPreselect) { |
196 |
assert repositoryComboBox.getSelectedItem() == null; |
197 |
|
198 |
if (LOG.isLoggable(FINER)) { |
199 |
LOG.finer("preselectRepositoryUnconditionally(" + repoToPreselect.getDisplayName() + ')'); //NOI18N |
200 |
} |
201 |
|
202 |
repositoryComboBox.setSelectedItem(repoToPreselect); |
133 |
} |
203 |
} |
134 |
|
204 |
|
135 |
Issue getIssue() { |
205 |
Issue getIssue() { |