F:\projects\netbeans\core\options>f:\utils\cvs\cvs.exe -q diff -u ? options-patch.txt Index: src/org/netbeans/modules/options/advanced/Advanced.java =================================================================== RCS file: /shared/data/ccvs/repository/core/options/src/org/netbeans/modules/options/advanced/Advanced.java,v retrieving revision 1.7 diff -u -r1.7 Advanced.java --- src/org/netbeans/modules/options/advanced/Advanced.java 1 Jul 2006 08:51:52 -0000 1.7 +++ src/org/netbeans/modules/options/advanced/Advanced.java 2 Apr 2007 13:21:12 -0000 @@ -63,6 +63,7 @@ } public OptionsPanelController create () { - return new AdvancedPanelController (); + return new AdvancedPanelController(org.openide.filesystems.Repository.getDefault(). + getDefaultFileSystem().findResource("OptionsDialog/Advanced"), AdvancedPanelController.LookAndFeel.Tree); } } Index: src/org/netbeans/modules/options/advanced/AdvancedPanel.java =================================================================== RCS file: /shared/data/ccvs/repository/core/options/src/org/netbeans/modules/options/advanced/AdvancedPanel.java,v retrieving revision 1.14 diff -u -r1.14 AdvancedPanel.java --- src/org/netbeans/modules/options/advanced/AdvancedPanel.java 7 Dec 2006 11:57:54 -0000 1.14 +++ src/org/netbeans/modules/options/advanced/AdvancedPanel.java 2 Apr 2007 13:21:12 -0000 @@ -24,15 +24,14 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Iterator; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JScrollPane; +import javax.swing.*; import org.netbeans.modules.options.ui.TabbedPanel; import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.HelpCtx; import org.openide.util.Lookup; import org.openide.util.NbBundle; +import org.openide.filesystems.FileObject; import org.netbeans.modules.options.*; @@ -45,11 +44,15 @@ TabbedPanel tabbedPanel; - private final Model model = new Model (); + private final Model model; + private AdvancedPanelController.LookAndFeel laf; - AdvancedPanel () {} - + AdvancedPanel(FileObject controllersFolder, AdvancedPanelController.LookAndFeel laf) { + model = new Model(controllersFolder); + this.laf = laf; + } + public void update () { model.update (); } @@ -79,6 +82,7 @@ } void init (Lookup masterLookup) { + // TODO: take laf into account // init components tabbedPanel = new WhiteTabbedPanel (model, TabbedPanel.EXPAND_SOME); // expansionPolicy tabbedPanel.setBorder (null); Index: src/org/netbeans/modules/options/advanced/AdvancedPanelController.java =================================================================== RCS file: /shared/data/ccvs/repository/core/options/src/org/netbeans/modules/options/advanced/AdvancedPanelController.java,v retrieving revision 1.11 diff -u -r1.11 AdvancedPanelController.java --- src/org/netbeans/modules/options/advanced/AdvancedPanelController.java 7 Dec 2006 11:57:54 -0000 1.11 +++ src/org/netbeans/modules/options/advanced/AdvancedPanelController.java 2 Apr 2007 13:21:12 -0000 @@ -24,6 +24,7 @@ import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.HelpCtx; import org.openide.util.Lookup; +import org.openide.filesystems.FileObject; /** @@ -33,6 +34,18 @@ */ public final class AdvancedPanelController extends OptionsPanelController { + public static enum LookAndFeel { Tree, Tabs }; + + private final FileObject controllersFolder; + private final LookAndFeel laf; + + /** + * @param folder where to look for controllers + */ + public AdvancedPanelController(FileObject folder, LookAndFeel laf) { + this.controllersFolder = folder; + this.laf = laf; + } public void update () { getAdvancedPanel ().update (); @@ -79,7 +92,7 @@ private AdvancedPanel getAdvancedPanel () { if (advancedPanel == null) - advancedPanel = new AdvancedPanel (); + advancedPanel = new AdvancedPanel (controllersFolder, laf); return advancedPanel; } } Index: src/org/netbeans/modules/options/advanced/Model.java =================================================================== RCS file: /shared/data/ccvs/repository/core/options/src/org/netbeans/modules/options/advanced/Model.java,v retrieving revision 1.14 diff -u -r1.14 Model.java --- src/org/netbeans/modules/options/advanced/Model.java 19 Dec 2006 14:51:56 -0000 1.14 +++ src/org/netbeans/modules/options/advanced/Model.java 2 Apr 2007 13:21:12 -0000 @@ -52,8 +52,13 @@ private Map categoryToPanel = new HashMap (); private Map categoryToController = new HashMap(); private Lookup masterLookup; + private FileObject controllersFolder; + + public Model(FileObject controllersFolder) { + this.controllersFolder = controllersFolder; + } + - public List getCategories () { init (); List l = new ArrayList(categoryToOption.keySet ()); @@ -153,10 +158,8 @@ private void init () { if (initialized) return; initialized = true; - FileObject fo = Repository.getDefault ().getDefaultFileSystem (). - findResource ("OptionsDialog/Advanced"); - if (fo == null) return; - Lookup lookup = new FolderLookup (DataFolder.findFolder (fo)).getLookup (); + if (controllersFolder == null) return; + Lookup lookup = new FolderLookup (DataFolder.findFolder (controllersFolder)).getLookup (); Iterator it = lookup.lookup (new Lookup.Template (AdvancedOption.class)). allInstances ().iterator (); while (it.hasNext ()) { Index: src/org/netbeans/spi/options/OptionsPanelController.java =================================================================== RCS file: /shared/data/ccvs/repository/core/options/src/org/netbeans/spi/options/OptionsPanelController.java,v retrieving revision 1.3 diff -u -r1.3 OptionsPanelController.java --- src/org/netbeans/spi/options/OptionsPanelController.java 6 Dec 2005 13:42:27 -0000 1.3 +++ src/org/netbeans/spi/options/OptionsPanelController.java 2 Apr 2007 13:21:12 -0000 @@ -4,6 +4,8 @@ import javax.swing.JComponent; import org.openide.util.HelpCtx; import org.openide.util.Lookup; +import org.openide.filesystems.FileObject; +import org.netbeans.modules.options.advanced.AdvancedPanelController; /** * PanelController creates visual representation of one Options Dialog @@ -27,6 +29,18 @@ */ public static final String PROP_HELP_CTX = "helpCtx"; + /** + * Creates a default multi-controller Options Category, just like Miscelaneous section. Supplied folder must + * contain instances of AdvancedOption class. + * + * @param folder filesystem folder where to search for controller instances + * @return OptionsPanelController a controller wrapping all AdvancedOption instances found in the folder + * @see AdvancedOption + */ + public static final OptionsPanelController create(FileObject folder) { + return new AdvancedPanelController(folder, AdvancedPanelController.LookAndFeel.Tabs); + } + /** * Component should load its data here. You should not do any * time-consuming operations inside the constructor, because it