package org.fipro.eclipse.migration.e4.ui.handler; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.jface.preference.PreferenceDialog; import org.eclipse.jface.preference.PreferenceManager; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.fipro.eclipse.migration.e4.service.preferences.ContributedPreferenceNode; import org.fipro.eclipse.migration.e4.service.preferences.PrefMgr; public class PreferencesHandler { @Execute public void execute(Shell shell, @PrefMgr PreferenceManager manager) { PreferenceDialog dialog = new PreferenceDialog(shell, manager) { @Override protected TreeViewer createTreeViewer(Composite parent) { TreeViewer viewer = super.createTreeViewer(parent); viewer.setComparator(new ViewerComparator() { @Override public int category(Object element) { // this ensures that the General preferences page is always on top // while the other pages are ordered alphabetical if (element instanceof ContributedPreferenceNode && ("general".equals(((ContributedPreferenceNode) element).getId()))) { return -1; } return 0; } }); return viewer; } }; dialog.open(); } }