/******************************************************************************* * Copyright (c) 2011 Subgraph. * 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: * Subgraph - initial API and implementation ******************************************************************************/ package com.subgraph.vega.ui.scanner.modules; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ICheckStateProvider; import com.subgraph.vega.api.scanner.modules.IEnableableModule; public class ModuleRegistryCheckStateProvider implements ICheckStateProvider, ICheckStateListener { private final CheckboxTreeViewer viewer; private ModuleTreeData treeData; public ModuleRegistryCheckStateProvider(CheckboxTreeViewer viewer) { this.viewer = viewer; } @Override public boolean isChecked(Object element) { if(element instanceof IEnableableModule) { final IEnableableModule m = (IEnableableModule) element; return m.isEnabled(); } else if((element instanceof String) && (treeData != null)) { final String category = (String) element; return treeData.someEnabledInCategory(category); } return false; } @Override public boolean isGrayed(Object element) { if(!(element instanceof String)) return false; if(treeData == null) return false; final String category = (String) element; return (treeData.someEnabledInCategory(category) && !treeData.allEnabledInCategory(category)); } private void setEnableStateForCategory(String category, boolean state) { if(treeData == null) return; else treeData.setEnableStateForCategory(category, state); } void setTreeData(ModuleTreeData treeData) { this.treeData = treeData; } @Override public void checkStateChanged(CheckStateChangedEvent event) { if(event.getElement() instanceof IEnableableModule) { final IEnableableModule m = (IEnableableModule) event.getElement(); m.setEnabled(event.getChecked()); viewer.refresh(); } else if(event.getElement() instanceof String) { final String category = (String) event.getElement(); setEnableStateForCategory(category, event.getChecked()); viewer.setSubtreeChecked(event.getElement(), event.getChecked()); viewer.refresh(); } } }