/*******************************************************************************
* Copyright (c) 2009 xored software, Inc.
*
* 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:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.tcl.activestatedebugger.preferences;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.dltk.core.environment.IEnvironment;
import org.eclipse.dltk.ui.environment.EnvironmentPathBlock;
import org.eclipse.dltk.ui.util.PixelConverter;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TableViewerEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
public class TclLoggingPathBlock extends EnvironmentPathBlock {
private Map<String, Boolean> enableLogging = new HashMap<String, Boolean>();
public void setEnableLogging(Map<String, Boolean> values) {
this.enableLogging.clear();
this.enableLogging.putAll(values);
getViewer().refresh();
}
public Map<String, Boolean> getEnableLogging() {
return Collections.unmodifiableMap(enableLogging);
}
private class TclLoggingPathLabelProvider extends PathLabelProvider {
public TclLoggingPathLabelProvider() {
super(2);
}
@Override
public String getColumnText(Object element, int columnIndex) {
if (columnIndex == 1) {
final Boolean value = enableLogging
.get(((IEnvironment) element).getId());
return value == null || value.booleanValue() ? PreferenceMessages.TclLoggingPathBlock_Yes
: PreferenceMessages.TclLoggingPathBlock_No;
} else {
return super.getColumnText(element, columnIndex);
}
}
}
private class EnableEditingSupport extends EditingSupport {
private final ComboBoxCellEditor editor;
/**
* @param viewer
*/
private EnableEditingSupport(ColumnViewer viewer) {
super(viewer);
editor = new ComboBoxCellEditor((Composite) viewer.getControl(),
new String[] { PreferenceMessages.TclLoggingPathBlock_No,
PreferenceMessages.TclLoggingPathBlock_Yes },
SWT.READ_ONLY);
}
@Override
protected boolean canEdit(Object element) {
return true;
}
@Override
protected CellEditor getCellEditor(Object element) {
return editor;
}
@Override
protected Object getValue(Object element) {
final Boolean value = enableLogging.get(((IEnvironment) element)
.getId());
return value == null || value.booleanValue() ? 1 : 0;
}
@Override
protected void setValue(Object element, Object value) {
enableLogging.put(((IEnvironment) element).getId(), Boolean
.valueOf(((Integer) value).intValue() != 0));
getViewer().refresh();
fireValueChanged();
}
}
/*
* @see EnvironmentPathBlock#createPathLabelProvider()
*/
@Override
protected PathLabelProvider createPathLabelProvider() {
return new TclLoggingPathLabelProvider();
}
@Override
protected void initColumns(TableViewer viewer, PixelConverter conv) {
TableViewerEditor.create(viewer,
new ColumnViewerEditorActivationStrategy(viewer),
ColumnViewerEditor.KEEP_EDITOR_ON_DOUBLE_CLICK);
initEnvironmentColumn(viewer, conv);
initEnableLoggingColumn(viewer, conv);
initPathColumn(viewer, conv);
}
protected void initEnableLoggingColumn(final TableViewer viewer,
PixelConverter conv) {
TableViewerColumn enableColumn = new TableViewerColumn(viewer, SWT.NULL);
enableColumn.getColumn().setText(
PreferenceMessages.TclLoggingPathBlock_enable);
enableColumn.getColumn().setWidth(conv.convertWidthInCharsToPixels(12));
enableColumn.setEditingSupport(new EnableEditingSupport(viewer));
}
}