Lines 42-123
Link Here
|
42 |
* made subject to such option by the copyright holder. |
42 |
* made subject to such option by the copyright holder. |
43 |
*/ |
43 |
*/ |
44 |
|
44 |
|
45 |
package org.netbeans.modules.versioning.ui.options; |
45 |
package org.netbeans.modules.versioning.util.options; |
46 |
|
46 |
|
47 |
import java.awt.Component; |
|
|
48 |
import java.awt.event.ActionEvent; |
47 |
import java.awt.event.ActionEvent; |
49 |
import java.awt.event.ActionListener; |
48 |
import java.awt.event.ActionListener; |
50 |
import java.io.File; |
49 |
import java.io.File; |
51 |
import java.util.Arrays; |
|
|
52 |
import java.util.Collection; |
53 |
import java.util.Collections; |
54 |
import java.util.LinkedList; |
55 |
import java.util.List; |
56 |
import javax.swing.DefaultComboBoxModel; |
57 |
import javax.swing.DefaultListCellRenderer; |
58 |
import javax.swing.DefaultListModel; |
50 |
import javax.swing.DefaultListModel; |
59 |
import javax.swing.JList; |
51 |
import org.netbeans.modules.versioning.util.DisconnectedRepositoriesManager; |
60 |
import org.netbeans.api.options.OptionsDisplayer; |
|
|
61 |
import org.netbeans.modules.versioning.core.util.VCSSystemProvider.VersioningSystem; |
62 |
import org.netbeans.modules.versioning.core.api.VCSFileProxy; |
63 |
import org.netbeans.modules.versioning.core.util.Utils; |
64 |
import org.netbeans.spi.options.OptionsPanelController; |
65 |
import org.openide.filesystems.FileChooserBuilder; |
52 |
import org.openide.filesystems.FileChooserBuilder; |
66 |
import org.openide.util.Lookup; |
|
|
67 |
import org.openide.util.NbBundle; |
53 |
import org.openide.util.NbBundle; |
68 |
import org.openide.util.RequestProcessor; |
|
|
69 |
|
54 |
|
70 |
@OptionsPanelController.Keywords(keywords={"#GeneralOptionsPanel.kw1", "#GeneralOptionsPanel.kw3", "#GeneralOptionsPanel.kw3"}, location=OptionsDisplayer.ADVANCED, tabTitle="#CTL_OptionsPanel.tabName") |
55 |
public final class DisconnectedRepositoriesPanel extends javax.swing.JPanel implements ActionListener { |
71 |
@NbBundle.Messages({ |
56 |
private final String key; |
72 |
"CTL_OptionsPanel.tabName=Versioning", |
|
|
73 |
"GeneralOptionsPanel.kw1=general", |
74 |
"GeneralOptionsPanel.kw2=versioning", |
75 |
"GeneralOptionsPanel.kw3=disconnected repositories" |
76 |
}) |
77 |
final class GeneralOptionsPanel extends javax.swing.JPanel implements ActionListener { |
78 |
|
57 |
|
79 |
private final GeneralOptionsPanelController controller; |
58 |
public DisconnectedRepositoriesPanel (String versioningSystemKey) { |
80 |
private String[] keywords; |
59 |
this.key = versioningSystemKey; |
81 |
|
|
|
82 |
GeneralOptionsPanel (GeneralOptionsPanelController controller) { |
83 |
this.controller = controller; |
84 |
initComponents(); |
60 |
initComponents(); |
85 |
cmbVersioningSystems.setRenderer(new Renderer()); |
|
|
86 |
cmbVersioningSystems.addActionListener(this); |
87 |
btnRemove.addActionListener(this); |
61 |
btnRemove.addActionListener(this); |
88 |
btnAdd.addActionListener(this); |
62 |
btnAdd.addActionListener(this); |
89 |
} |
63 |
fillDisconnectedFolders (); |
90 |
|
|
|
91 |
@Override |
92 |
public void addNotify() { |
93 |
super.addNotify(); |
94 |
} |
95 |
|
96 |
@Override |
97 |
public void removeNotify() { |
98 |
super.removeNotify(); |
99 |
} |
100 |
|
101 |
Collection<String> getKeywords () { |
102 |
if (keywords == null) { |
103 |
keywords = new String[] { |
104 |
Bundle.GeneralOptionsPanel_kw1().toUpperCase(), |
105 |
Bundle.GeneralOptionsPanel_kw2().toUpperCase(), |
106 |
Bundle.GeneralOptionsPanel_kw3().toUpperCase() |
107 |
}; |
108 |
} |
109 |
return Collections.unmodifiableList(Arrays.asList(keywords)); |
110 |
} |
64 |
} |
111 |
|
65 |
|
112 |
private void fillDisconnectedFolders () { |
66 |
private void fillDisconnectedFolders () { |
113 |
if (cmbVersioningSystems.getSelectedItem() instanceof VersioningSystem) { |
67 |
String[] disconnected = DisconnectedRepositoriesManager.getInstance().getDisconnectedRoots(key); |
114 |
String[] disconnected = Utils.getDisconnectedRoots(((VersioningSystem) cmbVersioningSystems.getSelectedItem())); |
68 |
DefaultListModel model = new DefaultListModel(); |
115 |
DefaultListModel model = new DefaultListModel(); |
69 |
for (String f : disconnected) { |
116 |
for (String f : disconnected) { |
70 |
model.addElement(f); |
117 |
model.addElement(f); |
|
|
118 |
} |
119 |
lstDisconnectedFolders.setModel(model); |
120 |
} |
71 |
} |
|
|
72 |
lstDisconnectedFolders.setModel(model); |
121 |
} |
73 |
} |
122 |
|
74 |
|
123 |
/** This method is called from within the constructor to |
75 |
/** This method is called from within the constructor to |
Lines 128-158
Link Here
|
128 |
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents |
80 |
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents |
129 |
private void initComponents() { |
81 |
private void initComponents() { |
130 |
|
82 |
|
131 |
jLabel1 = new javax.swing.JLabel(); |
|
|
132 |
cmbVersioningSystems = new javax.swing.JComboBox(); |
133 |
jLabel2 = new javax.swing.JLabel(); |
83 |
jLabel2 = new javax.swing.JLabel(); |
134 |
jScrollPane1 = new javax.swing.JScrollPane(); |
84 |
jScrollPane1 = new javax.swing.JScrollPane(); |
135 |
lstDisconnectedFolders = new javax.swing.JList(); |
85 |
lstDisconnectedFolders = new javax.swing.JList(); |
136 |
btnRemove = new javax.swing.JButton(); |
86 |
btnRemove = new javax.swing.JButton(); |
137 |
btnAdd = new javax.swing.JButton(); |
87 |
btnAdd = new javax.swing.JButton(); |
138 |
jLabel3 = new javax.swing.JLabel(); |
|
|
139 |
jSeparator1 = new javax.swing.JSeparator(); |
140 |
|
141 |
jLabel1.setLabelFor(cmbVersioningSystems); |
142 |
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(GeneralOptionsPanel.class, "GeneralOptionsPanel.jLabel1.text")); // NOI18N |
143 |
|
88 |
|
144 |
jLabel2.setLabelFor(lstDisconnectedFolders); |
89 |
jLabel2.setLabelFor(lstDisconnectedFolders); |
145 |
org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(GeneralOptionsPanel.class, "GeneralOptionsPanel.jLabel2.text")); // NOI18N |
90 |
org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(DisconnectedRepositoriesPanel.class, "DisconnectedRepositoriesPanel.jLabel2.text")); // NOI18N |
146 |
|
91 |
|
147 |
jScrollPane1.setViewportView(lstDisconnectedFolders); |
92 |
jScrollPane1.setViewportView(lstDisconnectedFolders); |
148 |
|
93 |
|
149 |
org.openide.awt.Mnemonics.setLocalizedText(btnRemove, org.openide.util.NbBundle.getMessage(GeneralOptionsPanel.class, "GeneralOptionsPanel.btnRemove.text")); // NOI18N |
94 |
org.openide.awt.Mnemonics.setLocalizedText(btnRemove, org.openide.util.NbBundle.getMessage(DisconnectedRepositoriesPanel.class, "DisconnectedRepositoriesPanel.btnRemove.text")); // NOI18N |
150 |
btnRemove.setToolTipText(org.openide.util.NbBundle.getMessage(GeneralOptionsPanel.class, "GeneralOptionsPanel.btnRemove.TTtext")); // NOI18N |
95 |
btnRemove.setToolTipText(org.openide.util.NbBundle.getMessage(DisconnectedRepositoriesPanel.class, "DisconnectedRepositoriesPanel.btnRemove.TTtext")); // NOI18N |
151 |
|
96 |
|
152 |
org.openide.awt.Mnemonics.setLocalizedText(btnAdd, org.openide.util.NbBundle.getMessage(GeneralOptionsPanel.class, "GeneralOptionsPanel.btnAdd.text")); // NOI18N |
97 |
org.openide.awt.Mnemonics.setLocalizedText(btnAdd, org.openide.util.NbBundle.getMessage(DisconnectedRepositoriesPanel.class, "DisconnectedRepositoriesPanel.btnAdd.text")); // NOI18N |
153 |
btnAdd.setToolTipText(org.openide.util.NbBundle.getMessage(GeneralOptionsPanel.class, "GeneralOptionsPanel.btnAdd.toolTipText")); // NOI18N |
98 |
btnAdd.setToolTipText(org.openide.util.NbBundle.getMessage(DisconnectedRepositoriesPanel.class, "DisconnectedRepositoriesPanel.btnAdd.toolTipText")); // NOI18N |
154 |
|
|
|
155 |
org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(GeneralOptionsPanel.class, "LBL_OptionsPanel.disconnectedFolders.title")); // NOI18N |
156 |
|
99 |
|
157 |
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); |
100 |
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); |
158 |
this.setLayout(layout); |
101 |
this.setLayout(layout); |
Lines 161-197
Link Here
|
161 |
.addGroup(layout.createSequentialGroup() |
104 |
.addGroup(layout.createSequentialGroup() |
162 |
.addContainerGap() |
105 |
.addContainerGap() |
163 |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
106 |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
|
|
107 |
.addComponent(jLabel2) |
164 |
.addGroup(layout.createSequentialGroup() |
108 |
.addGroup(layout.createSequentialGroup() |
165 |
.addGap(12, 12, 12) |
109 |
.addComponent(btnRemove) |
166 |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
|
|
167 |
.addComponent(jLabel2) |
168 |
.addGroup(layout.createSequentialGroup() |
169 |
.addComponent(jLabel1) |
170 |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
171 |
.addComponent(cmbVersioningSystems, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) |
172 |
.addGroup(layout.createSequentialGroup() |
173 |
.addComponent(btnRemove) |
174 |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
175 |
.addComponent(btnAdd)) |
176 |
.addComponent(jScrollPane1))) |
177 |
.addGroup(layout.createSequentialGroup() |
178 |
.addComponent(jLabel3) |
179 |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
110 |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
180 |
.addComponent(jSeparator1))) |
111 |
.addComponent(btnAdd)) |
|
|
112 |
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 533, Short.MAX_VALUE)) |
181 |
.addContainerGap()) |
113 |
.addContainerGap()) |
182 |
); |
114 |
); |
183 |
layout.setVerticalGroup( |
115 |
layout.setVerticalGroup( |
184 |
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
116 |
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
185 |
.addGroup(layout.createSequentialGroup() |
117 |
.addGroup(layout.createSequentialGroup() |
186 |
.addContainerGap() |
118 |
.addContainerGap() |
187 |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) |
|
|
188 |
.addComponent(jLabel3) |
189 |
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 4, javax.swing.GroupLayout.PREFERRED_SIZE)) |
190 |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
191 |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
192 |
.addComponent(jLabel1) |
193 |
.addComponent(cmbVersioningSystems, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) |
194 |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) |
195 |
.addComponent(jLabel2) |
119 |
.addComponent(jLabel2) |
196 |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
120 |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
197 |
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) |
121 |
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) |
Lines 202-282
Link Here
|
202 |
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) |
126 |
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) |
203 |
); |
127 |
); |
204 |
}// </editor-fold>//GEN-END:initComponents |
128 |
}// </editor-fold>//GEN-END:initComponents |
205 |
|
|
|
206 |
void load () { |
207 |
fillVersioningSystems(); |
208 |
} |
209 |
|
210 |
void store() { |
211 |
|
212 |
} |
213 |
|
214 |
boolean valid() { |
215 |
return true; |
216 |
} |
217 |
|
129 |
|
218 |
// Variables declaration - do not modify//GEN-BEGIN:variables |
130 |
// Variables declaration - do not modify//GEN-BEGIN:variables |
219 |
private javax.swing.JButton btnAdd; |
131 |
private javax.swing.JButton btnAdd; |
220 |
private javax.swing.JButton btnRemove; |
132 |
private javax.swing.JButton btnRemove; |
221 |
private javax.swing.JComboBox cmbVersioningSystems; |
|
|
222 |
private javax.swing.JLabel jLabel1; |
223 |
private javax.swing.JLabel jLabel2; |
133 |
private javax.swing.JLabel jLabel2; |
224 |
private javax.swing.JLabel jLabel3; |
|
|
225 |
private javax.swing.JScrollPane jScrollPane1; |
134 |
private javax.swing.JScrollPane jScrollPane1; |
226 |
private javax.swing.JSeparator jSeparator1; |
|
|
227 |
private javax.swing.JList lstDisconnectedFolders; |
135 |
private javax.swing.JList lstDisconnectedFolders; |
228 |
// End of variables declaration//GEN-END:variables |
136 |
// End of variables declaration//GEN-END:variables |
229 |
|
137 |
|
230 |
private void fillVersioningSystems () { |
|
|
231 |
List<VersioningSystem> systems = new LinkedList<VersioningSystem>(); |
232 |
for (VersioningSystem system : Lookup.getDefault().lookupAll(VersioningSystem.class)) { |
233 |
systems.add(system); |
234 |
} |
235 |
cmbVersioningSystems.setModel(new DefaultComboBoxModel(systems.toArray(new VersioningSystem[systems.size()]))); |
236 |
} |
237 |
|
238 |
@Override |
138 |
@Override |
|
|
139 |
@NbBundle.Messages("LBL_DisconnectingFolder.title=Disconnecting Folder") |
239 |
public void actionPerformed (ActionEvent e) { |
140 |
public void actionPerformed (ActionEvent e) { |
240 |
if (e.getSource() == cmbVersioningSystems) { |
141 |
if (e.getSource() == btnRemove) { |
|
|
142 |
String f = (String) lstDisconnectedFolders.getSelectedValue(); |
143 |
DisconnectedRepositoriesManager.getInstance().connectRepository(key, f); |
241 |
fillDisconnectedFolders(); |
144 |
fillDisconnectedFolders(); |
242 |
} else if (e.getSource() == btnRemove) { |
145 |
} else if (e.getSource() == btnAdd) { |
243 |
if (cmbVersioningSystems.getSelectedItem() instanceof VersioningSystem && lstDisconnectedFolders.getSelectedValue() != null) { |
146 |
File f = new FileChooserBuilder("VersioningOptions.disconnected").setTitle(Bundle.LBL_DisconnectingFolder_title()) //NOI18N |
244 |
String f = (String) lstDisconnectedFolders.getSelectedValue(); |
147 |
.setDirectoriesOnly(true).setFileHiding(true).showOpenDialog(); |
245 |
Utils.connectRepository((VersioningSystem) cmbVersioningSystems.getSelectedItem(), f); |
148 |
if (f != null) { |
|
|
149 |
DisconnectedRepositoriesManager.getInstance().disconnectRepository(key, f.getAbsolutePath()); |
246 |
fillDisconnectedFolders(); |
150 |
fillDisconnectedFolders(); |
247 |
refreshSystems(); |
|
|
248 |
} |
249 |
} else if (e.getSource() == btnAdd) { |
250 |
if (cmbVersioningSystems.getSelectedItem() instanceof VersioningSystem) { |
251 |
VersioningSystem vcs = (VersioningSystem) cmbVersioningSystems.getSelectedItem(); |
252 |
File f = new FileChooserBuilder("VersioningOptions.disconnected").setTitle(NbBundle.getMessage(GeneralOptionsPanel.class, "LBL_DisconnectingFolder.title")) //NOI18N |
253 |
.setDirectoriesOnly(true).setFileHiding(true).showOpenDialog(); |
254 |
if (f != null && (vcs.getTopmostManagedAncestor(VCSFileProxy.createFileProxy(f)) != null)) { |
255 |
Utils.disconnectRepository(vcs, f.getAbsolutePath()); |
256 |
fillDisconnectedFolders(); |
257 |
refreshSystems(); |
258 |
} |
259 |
} |
151 |
} |
260 |
} |
152 |
} |
261 |
} |
153 |
} |
262 |
|
|
|
263 |
private void refreshSystems () { |
264 |
RequestProcessor.getDefault().post(new Runnable() { |
265 |
@Override |
266 |
public void run () { |
267 |
Utils.versionedRootsChanged(); |
268 |
} |
269 |
}).schedule(100); |
270 |
} |
271 |
|
272 |
private static class Renderer extends DefaultListCellRenderer { |
273 |
|
274 |
@Override |
275 |
public Component getListCellRendererComponent (JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
276 |
if (value instanceof VersioningSystem) { |
277 |
value = ((VersioningSystem) value).getDisplayName(); |
278 |
} |
279 |
return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
280 |
} |
281 |
} |
282 |
} |
154 |
} |