|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.project.ui; import java.awt.*; import java.util.ArrayList; import java.util.Iterator; import java.lang.reflect.InvocationTargetException; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.*; import org.openide.ErrorManager; import org.openide.WizardDescriptor; import org.openide.filesystems.FileObject; import org.openide.loaders.DataFolder; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; import org.openide.loaders.TemplateWizard; import org.openide.nodes.Children; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; import org.openide.util.*; /** * * @author tom */ public class TemplatesPanel implements WizardDescriptor.Panel { private ArrayList listeners; private TemplatesPanelGUI panel; private WarmupJob warmUp; private boolean warmUpActive; private boolean needsReselect = false; // WelcomeScreen hack, XXX Delete after WS is redesigned /** Creates a new instance of TemplatesPanel */ public TemplatesPanel() { } public void readSettings (Object settings) { TemplateWizard wd = (TemplateWizard) settings; wd.putProperty ("WizardPanel_contentSelectedIndex", new Integer (0)); // NOI18N wd.putProperty ("WizardPanel_contentData", new String[] { // NOI18N NbBundle.getBundle (TemplatesPanel.class).getString ("LBL_TemplatesPanel_Name"), // NOI18N NbBundle.getBundle (TemplatesPanel.class).getString ("LBL_TemplatesPanel_Dots")}); // NOI18N FileObject templatesFolder = (FileObject) wd.getProperty (TemplatesPanelGUI.TEMPLATES_FOLDER); // WelcomeScreen hack, XXX Delete after WS is redesigned String preselectedCategory = (String)wd.getProperty( "PRESELECT_CATEGORY" ); if ( templatesFolder != null && templatesFolder.isFolder() && ( wd.getTemplate() == null || preselectedCategory != null || needsReselect ) ) { String selectedCategory = OpenProjectListSettings.getInstance().getLastSelectedProjectCategory (); String selectedTemplate = OpenProjectListSettings.getInstance().getLastSelectedProjectType (); TemplatesPanelGUI p = (TemplatesPanelGUI) this.getComponent(); if (isWarmUpActive()) { WarmupJob wup = getWarmUp(); wup.setTemplatesFolder (templatesFolder); wup.setSelectedCategory( preselectedCategory != null ? preselectedCategory : selectedCategory ); wup.setSelectedTemplate( preselectedCategory != null ? null : selectedTemplate); } else { p.setTemplatesFolder(templatesFolder); p.setSelectedCategoryByName (preselectedCategory != null ? preselectedCategory : selectedCategory); p.setSelectedTemplateByName (preselectedCategory != null ? null : selectedTemplate); } } // bugfix #44792: project wizard title always changes ((WizardDescriptor)settings).putProperty ("NewProjectWizard_Title", null); // NOI18N } public void storeSettings (Object settings) { TemplateWizard wd = (TemplateWizard) settings; // WelcomeScreen hack, XXX Delete after WS is redesigned String preselectedCategory = (String)wd.getProperty( "PRESELECT_CATEGORY" ); TemplatesPanelGUI gui = (TemplatesPanelGUI)this.getComponent(); FileObject fo = gui.getSelectedTemplate(); if (fo != null) { try { wd.setTemplate (DataObject.find(fo)); } catch (DataObjectNotFoundException e) { ErrorManager.getDefault().notify(e); } } if ( preselectedCategory == null ) { String path = gui.getSelectedCategoryName(); if (path != null) { OpenProjectListSettings.getInstance().setLastSelectedProjectCategory(path); } path = gui.getSelectedTemplateName(); if (path != null) { OpenProjectListSettings.getInstance().setLastSelectedProjectType (path); } needsReselect = false; } else { needsReselect = true; } } public synchronized void addChangeListener(javax.swing.event.ChangeListener l) { if (this.listeners == null) { this.listeners = new ArrayList (); } this.listeners.add (l); } public synchronized void removeChangeListener(javax.swing.event.ChangeListener l) { if (this.listeners == null) { return; } this.listeners.remove (l); } public boolean isValid() { return ((TemplatesPanelGUI)this.getComponent()).getSelectedTemplate() != null; } public HelpCtx getHelp() { return new HelpCtx( TemplatesPanel.class ); } public synchronized Component getComponent() { if (this.panel == null) { TemplatesPanelGUI.Builder firer = new Builder(); this.panel = new TemplatesPanelGUI (firer); Utilities.attachInitJob (panel, getWarmUp()); this.warmUpActive = true; this.panel.setName (NbBundle.getBundle (TemplatesPanel.class).getString ("LBL_TemplatesPanel_Name")); // NOI18N } return this.panel; } private synchronized WarmupJob getWarmUp () { if (this.warmUp == null) { this.warmUp = new WarmupJob(); } return this.warmUp; } private synchronized boolean isWarmUpActive () { return warmUpActive; } private static class CategoriesChildren extends Children.Keys { private DataFolder root; public CategoriesChildren (DataFolder folder) { this.root = folder; } protected void addNotify () { DataObject[] children = root.getChildren(); setKeys (children); } protected void removeNotify () { this.setKeys (new Object[0]); } protected Node[] createNodes(Object key) { if (key instanceof DataObject) { DataObject dobj = (DataObject) key; if (dobj instanceof DataFolder) { DataFolder folder = (DataFolder) dobj; DataObject[] children = folder.getChildren (); int type = children.length == 0 ? 0 : 1; //Empty folder or File folder for (int i=0; i< children.length; i++) { if (children[i].getPrimaryFile ().isFolder ()) { type = 2; //Folder folder break; } } if (type == 1) { return new Node[] { new FilterNode (dobj.getNodeDelegate(), Children.LEAF) }; } else if (type == 2) { return new Node[] { new FilterNode (dobj.getNodeDelegate(), new CategoriesChildren ((DataFolder)dobj)) }; } } } return new Node[0]; } } private static class TemplateChildren extends Children.Keys { private DataFolder folder; public TemplateChildren (DataFolder folder) { this.folder = folder; } protected void addNotify () { this.setKeys (this.folder.getChildren ()); } protected void removeNotify () { this.setKeys (new Object[0]); } protected Node[] createNodes(Object key) { if (key instanceof DataObject) { DataObject dobj = (DataObject) key; if (dobj.isTemplate()) { return new Node[] { new FilterNode (dobj.getNodeDelegate (), Children.LEAF) }; } } return new Node[0]; } } private class WarmupJob implements AsyncGUIJob { private FileObject templatesFolder; private String category; private String template; public void construct () { panel.warmUp (this.templatesFolder); } public void finished () { Cursor cursor = null; try { cursor = panel.getCursor(); panel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); panel.doFinished (this.templatesFolder, this.category, this.template); } finally { if (cursor != null) { panel.setCursor (cursor); } synchronized(TemplatesPanel.this) { warmUpActive = false; } } } void setTemplatesFolder (FileObject fo) { this.templatesFolder = fo; } void setSelectedCategory (String s) { this.category = s; } void setSelectedTemplate (String s) { this.template = s; } } private class Builder implements TemplatesPanelGUI.Builder { public org.openide.nodes.Children createCategoriesChildren (DataFolder folder) { assert folder != null : "Folder cannot be null."; //NOI18N return new CategoriesChildren (folder); } public org.openide.nodes.Children createTemplatesChildren(DataFolder folder) { return new TemplateChildren (folder); } public char getCategoriesMnemonic() { return NbBundle.getMessage(TemplatesPanel.class,"MNE_Categories").charAt(0); } public String getCategoriesName() { return NbBundle.getMessage(TemplatesPanel.class,"CTL_Categories"); } public char getTemplatesMnemonic() { return NbBundle.getMessage(TemplatesPanel.class,"MNE_Projects").charAt (0); } public String getTemplatesName() { return NbBundle.getMessage(TemplatesPanel.class,"CTL_Projects"); } public void fireChange() { Iterator it = null; synchronized (this) { if (listeners == null) { return; } it = ((ArrayList)listeners.clone()).iterator(); } ChangeEvent event = new ChangeEvent (this); while (it.hasNext ()) { ((ChangeListener)it.next()).stateChanged(event); } } } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.