Lines 49-54
Link Here
|
49 |
import java.awt.event.ActionListener; |
49 |
import java.awt.event.ActionListener; |
50 |
import java.beans.PropertyChangeEvent; |
50 |
import java.beans.PropertyChangeEvent; |
51 |
import java.beans.PropertyChangeListener; |
51 |
import java.beans.PropertyChangeListener; |
|
|
52 |
import java.util.ArrayList; |
52 |
import java.util.Arrays; |
53 |
import java.util.Arrays; |
53 |
import java.util.List; |
54 |
import java.util.List; |
54 |
import javax.swing.DefaultComboBoxModel; |
55 |
import javax.swing.DefaultComboBoxModel; |
Lines 57-62
Link Here
|
57 |
import org.netbeans.api.annotations.common.NonNull; |
58 |
import org.netbeans.api.annotations.common.NonNull; |
58 |
import org.netbeans.api.project.Project; |
59 |
import org.netbeans.api.project.Project; |
59 |
import static org.netbeans.modules.project.ui.Bundle.*; |
60 |
import static org.netbeans.modules.project.ui.Bundle.*; |
|
|
61 |
import org.netbeans.modules.project.ui.spi.TemplateCategorySorter; |
60 |
import org.openide.filesystems.FileObject; |
62 |
import org.openide.filesystems.FileObject; |
61 |
import org.openide.filesystems.FileUtil; |
63 |
import org.openide.filesystems.FileUtil; |
62 |
import org.openide.loaders.DataFolder; |
64 |
import org.openide.loaders.DataFolder; |
Lines 281-289
Link Here
|
281 |
private final class TemplateChildren extends ChildFactory.Detachable<TemplateKey> implements ActionListener { |
283 |
private final class TemplateChildren extends ChildFactory.Detachable<TemplateKey> implements ActionListener { |
282 |
|
284 |
|
283 |
private final DataFolder folder; |
285 |
private final DataFolder folder; |
|
|
286 |
private final boolean isRoot; |
284 |
|
287 |
|
285 |
TemplateChildren(DataFolder folder) { |
288 |
TemplateChildren(DataFolder folder, boolean root) { |
286 |
this.folder = folder; |
289 |
this.folder = folder; |
|
|
290 |
isRoot = root; |
287 |
} |
291 |
} |
288 |
|
292 |
|
289 |
@Override protected void addNotify() { |
293 |
@Override protected void addNotify() { |
Lines 295-302
Link Here
|
295 |
} |
299 |
} |
296 |
|
300 |
|
297 |
@Override protected boolean createKeys(List<TemplateKey> keys) { |
301 |
@Override protected boolean createKeys(List<TemplateKey> keys) { |
298 |
for (DataObject d : folder.getChildren()) { |
302 |
DataObject[] children = folder.getChildren(); |
|
|
303 |
if (isRoot) { |
304 |
Project p = getProject(); |
305 |
TemplateCategorySorter tcs = p != null ? p.getLookup().lookup(TemplateCategorySorter.class) : null; |
306 |
if (tcs != null) { |
307 |
List<DataObject> dobjs = new ArrayList<DataObject>(); |
308 |
for (DataObject d : children) { |
299 |
if (isFolderOfTemplates(d)) { |
309 |
if (isFolderOfTemplates(d)) { |
|
|
310 |
dobjs.add(d); |
311 |
} |
312 |
} |
313 |
List<DataObject> sorted = tcs.sort(dobjs); |
314 |
assert sorted.size() == dobjs.size(); |
315 |
children = sorted.toArray(new DataObject[children.length]); |
316 |
} |
317 |
} |
318 |
|
319 |
for (DataObject d : children) { |
320 |
if (isFolderOfTemplates(d)) { |
300 |
boolean leaf = true; |
321 |
boolean leaf = true; |
301 |
for (DataObject child : ((DataFolder) d).getChildren()) { |
322 |
for (DataObject child : ((DataFolder) d).getChildren()) { |
302 |
if (isFolderOfTemplates(child)) { |
323 |
if (isFolderOfTemplates(child)) { |
Lines 311-317
Link Here
|
311 |
} |
332 |
} |
312 |
|
333 |
|
313 |
@Override protected Node createNodeForKey(TemplateKey k) { |
334 |
@Override protected Node createNodeForKey(TemplateKey k) { |
314 |
return new FilterNode(k.d.getNodeDelegate(), k.leaf ? Children.LEAF : Children.create(new TemplateChildren((DataFolder) k.d), true)); |
335 |
return new FilterNode(k.d.getNodeDelegate(), k.leaf ? Children.LEAF : Children.create(new TemplateChildren((DataFolder) k.d, false), true)); |
315 |
} |
336 |
} |
316 |
|
337 |
|
317 |
@Override public void actionPerformed (ActionEvent event) { |
338 |
@Override public void actionPerformed (ActionEvent event) { |
Lines 369-375
Link Here
|
369 |
final class FileChooserBuilder implements TemplatesPanelGUI.Builder { |
390 |
final class FileChooserBuilder implements TemplatesPanelGUI.Builder { |
370 |
|
391 |
|
371 |
@Override public Children createCategoriesChildren(DataFolder folder) { |
392 |
@Override public Children createCategoriesChildren(DataFolder folder) { |
372 |
return Children.create(new TemplateChildren(folder), true); |
393 |
return Children.create(new TemplateChildren(folder, true), true); |
373 |
} |
394 |
} |
374 |
|
395 |
|
375 |
@Override public Children createTemplatesChildren(DataFolder folder) { |
396 |
@Override public Children createTemplatesChildren(DataFolder folder) { |