package org.projectusus.ui.preferences; import static org.eclipse.jface.viewers.CheckboxTableViewer.newCheckList; import java.util.HashSet; import java.util.Set; import java.util.SortedSet; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.projectusus.core.UsusCorePlugin; import org.projectusus.core.statistics.CockpitExtensionPref; import org.projectusus.core.statistics.RegisteredCockpitExtensionsCollector; import org.projectusus.core.statistics.UsusModelProvider; public class UsusPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private SortedSet<CockpitExtensionPref> extensionsStates; private CheckboxTableViewer viewer; public UsusPreferencePage() { super(); setDescription( "Enable/disable the registered Usus Metric Statistics:" ); //$NON-NLS-1$ } public void init( @SuppressWarnings( "unused" ) IWorkbench workbench ) { extensionsStates = RegisteredCockpitExtensionsCollector.getExtensionsStates(); } @Override protected Control createContents( Composite parent ) { viewer = newCheckList( parent, SWT.BORDER ); viewer.setContentProvider( new UsusPreferencesContentProvider() ); viewer.setLabelProvider( new DelegatingStyledCellLabelProvider( new UsusPreferencesStyledLabelProvider() ) ); viewer.setInput( extensionsStates ); viewer.setCheckedElements( collectCheckedElements() ); viewer.addCheckStateListener( new ICheckStateListener() { public void checkStateChanged( CheckStateChangedEvent event ) { updatePrefsElement( event.getElement(), event.getChecked() ); } } ); return viewer.getControl(); } private CockpitExtensionPref[] collectCheckedElements() { Set<CockpitExtensionPref> checkedElements = new HashSet<CockpitExtensionPref>(); for( CockpitExtensionPref pref : extensionsStates ) { if( pref.isOn() ) { checkedElements.add( pref ); } } return checkedElements.toArray( new CockpitExtensionPref[0] ); } protected void updatePrefsElement( Object element, boolean checked ) { if( element instanceof CockpitExtensionPref ) { ((CockpitExtensionPref)element).setOn( checked ); } } @Override public boolean performOk() { RegisteredCockpitExtensionsCollector.saveExtensionsStates( extensionsStates ); UsusCorePlugin.getDefault().savePreferences(); UsusModelProvider.ususModel().refreshCodeProportions(); return super.performOk(); } @Override protected void performDefaults() { CockpitExtensionPref.restoreDefaults( extensionsStates ); viewer.setCheckedElements( collectCheckedElements() ); super.performDefaults(); } }