blob: 10f6a6d788e6630d2babeb9ff1a93c4e4efb43f6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 Alena Laskavaia
* 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:
* Alena Laskavaia - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.codan.internal.ui.preferences;
import org.eclipse.cdt.codan.core.PreferenceConstants;
import org.eclipse.cdt.codan.core.builder.CodanPreferencesLoader;
import org.eclipse.cdt.codan.core.model.CodanProblem;
import org.eclipse.cdt.codan.core.model.CodanSeverity;
import org.eclipse.cdt.codan.core.model.IProblem;
import org.eclipse.cdt.codan.core.model.IProblemCategory;
import org.eclipse.cdt.codan.core.model.IProblemProfile;
import org.eclipse.jface.viewers.BaseLabelProvider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ICheckStateProvider;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
public class ProblemsTreeEditor extends CheckedTreeEditor {
private CodanPreferencesLoader codanPreferencesLoader = new CodanPreferencesLoader();
public ProblemsTreeEditor() {
super();
}
class ProblemsCheckStateProvider implements ICheckStateProvider {
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.viewers.ICheckStateProvider#isChecked(java.lang
* .Object)
*/
public boolean isChecked(Object element) {
if (element instanceof IProblem) {
IProblem p = (IProblem) element;
return p.isEnabled();
}
if (element instanceof IProblemCategory) {
// checked if at least one is checked (buy grayed)
IProblemCategory p = (IProblemCategory) element;
Object[] children = p.getChildren();
for (int i = 0; i < children.length; i++) {
Object object = children[i];
if (isChecked(object)) {
return true;
}
}
}
return false;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.viewers.ICheckStateProvider#isGrayed(java.lang.
* Object)
*/
public boolean isGrayed(Object element) {
if (element instanceof IProblem) {
return false;
}
if (element instanceof IProblemCategory) {
// checked if at least one is checked (buy grayed)
IProblemCategory p = (IProblemCategory) element;
Object[] children = p.getChildren();
boolean all_checked = true;
boolean all_unchecked = true;
for (int i = 0; i < children.length; i++) {
Object object = children[i];
if (isChecked(object)) {
all_unchecked = false;
} else {
all_checked = false;
}
}
if (all_checked || all_unchecked)
return false;
return true;
}
return false;
}
}
class ProblemsContentProvider implements IContentProvider,
ITreeContentProvider {
public void dispose() {
// TODO Auto-generated method stub
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof Object[])
return (Object[]) parentElement;
if (parentElement instanceof IProblemCategory) {
return ((IProblemCategory) parentElement).getChildren();
}
if (parentElement instanceof IProblemProfile) {
return ((IProblemProfile) parentElement).getRoot()
.getChildren();
}
return new Object[0];
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
return getChildren(element).length > 0;
}
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
}
public void checkStateChanged(CheckStateChangedEvent event) {
Object element = event.getElement();
if (element instanceof CodanProblem) {
((CodanProblem) element).setEnabled(event.getChecked());
}
}
class ProblemsLabelProvider extends BaseLabelProvider implements
IBaseLabelProvider, ITableLabelProvider {
public Image getColumnImage(Object element, int columnIndex) {
// TODO Auto-generated method stub
return null;
}
public String getColumnText(Object element, int columnIndex) {
if (element instanceof IProblem) {
IProblem p = (IProblem) element;
if (columnIndex == 0)
return p.getName();
if (columnIndex == 1)
return p.getSeverity().toString();
}
if (element instanceof IProblemCategory) {
IProblemCategory p = (IProblemCategory) element;
if (columnIndex == 0)
return p.getName();
}
return null;
}
}
public ProblemsTreeEditor(Composite parent, IProblemProfile profile) {
super(PreferenceConstants.P_PROBLEMS, "Problems", parent);
setEmptySelectionAllowed(true);
getTreeViewer().getTree().setHeaderVisible(true);
// getTreeViewer().getTree().
getTreeViewer().setContentProvider(new ProblemsContentProvider());
getTreeViewer().setCheckStateProvider(new ProblemsCheckStateProvider());
// column Name
TreeViewerColumn column1 = new TreeViewerColumn(getTreeViewer(),
SWT.NONE);
column1.getColumn().setWidth(300);
column1.getColumn().setText("Name");
column1.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object element) {
if (element instanceof IProblem) {
IProblem p = (IProblem) element;
return p.getName();
}
if (element instanceof IProblemCategory) {
IProblemCategory p = (IProblemCategory) element;
return p.getName();
}
return null;
}
});
// column Severity
TreeViewerColumn column2 = new TreeViewerColumn(getTreeViewer(),
SWT.NONE);
column2.getColumn().setWidth(100);
column2.getColumn().setText("Severity");
column2.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object element) {
if (element instanceof IProblem) {
IProblem p = (IProblem) element;
return p.getSeverity().toString();
}
return null;
}
});
column2.setEditingSupport(new EditingSupport(getTreeViewer()) {
protected boolean canEdit(Object element) {
return element instanceof CodanProblem;
}
protected CellEditor getCellEditor(Object element) {
return new ComboBoxCellEditor(getTreeViewer().getTree(),
CodanSeverity.stringValues());
}
protected Object getValue(Object element) {
return ((CodanProblem) element).getSeverity().intValue();
}
protected void setValue(Object element, Object value) {
int index = ((Integer) value).intValue();
CodanSeverity val = CodanSeverity.values()[index];
((CodanProblem) element).setSeverity(val);
getTreeViewer().update(element, null);
}
});
getTreeViewer().setAutoExpandLevel(2);
codanPreferencesLoader.setInput(profile);
getViewer().setInput(profile);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.cdt.codan.internal.ui.preferences.CheckedTreeEditor#doLoad()
*/
@Override
protected void doLoad() {
if (getTreeControl() != null) {
IProblem[] probs = codanPreferencesLoader.getProblems();
for (int i = 0; i < probs.length; i++) {
String id = probs[i].getId();
String s = getPreferenceStore().getString(id);
codanPreferencesLoader.setProperty(id, s);
}
getViewer().setInput(codanPreferencesLoader.getInput());
}
}
@Override
protected void doLoadDefault() {
if (getTreeControl() != null) {
IProblem[] probs = codanPreferencesLoader.getProblems();
for (int i = 0; i < probs.length; i++) {
String id = probs[i].getId();
String s = getPreferenceStore().getDefaultString(id);
codanPreferencesLoader.setProperty(id, s);
}
getViewer().setInput(codanPreferencesLoader.getInput());
}
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.cdt.codan.internal.ui.preferences.CheckedTreeEditor#doStore()
*/
@Override
protected void doStore() {
codanPreferencesLoader.setInput(getViewer().getInput());
IProblem[] probs = codanPreferencesLoader.getProblems();
for (int i = 0; i < probs.length; i++) {
String id = probs[i].getId();
String s = codanPreferencesLoader.getProperty(id);
getPreferenceStore().setValue(id, s);
}
}
/*
* (non-Javadoc)
*
* @seeorg.eclipse.cdt.codan.internal.ui.preferences.CheckedTreeEditor#
* modelFromString(java.lang.String)
*/
@Override
protected Object modelFromString(String s) {
return codanPreferencesLoader.getInput();
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.cdt.codan.internal.ui.preferences.CheckedTreeEditor#modelToString
* (java.lang.Object)
*/
@Override
protected String modelToString(Object model) {
return "";
}
}