Bug 125632 [Commands] request: enhance command to show preferences dialog with parameter identifying which page to show
I'm going to attach a patch that enhances the command org.eclipse.ui.window.preferences as described in the summary. The id of the parameter is "preferencePageId". It is optional. If omitted the pref page just shows as it was the last time. I wanted to have an IParameterValues class for this parameter to enumerate the meaningful values (like the showView and showPerspective commands). This led me into the wierd case of several preference pages with the same name ("Appearance" and "Editor"), so I constructed qualified names like "General > Appearance" and "Java > Appearance". That led me to add a new API method to the jface PreferenceManager class. I hope that's not a controversial change.... Another thing to look at. I removed this line from OpenPreferencesAction to allow my handler to run: setActionDefinitionId("org.eclipse.ui.window.preferences"); //$NON-NLS-1$ If that's not right can you give me more direction on what the right thing to do is?
bundles/org.eclipse.jface/src/org/eclipse/jface/preference/PreferenceManager.java
/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jface.preference;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import org.eclipse.jface.util.Assert;
/**
 * A preference manager maintains a hierarchy of preference nodes and
 * associated preference pages.
 */
public class PreferenceManager {
    /**
     * Pre-order traversal means visit the root first,
     * then the children.
     */
    public static final int PRE_ORDER = 0;
    /**
     * Post-order means visit the children, and then the root.
     */