/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jface.viewers;

import org.eclipse.jface.util.Assert;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;

/**
 * A cell editor that manages a checkbox.
 * The cell editor's value is a boolean.
 * <p>
 * This class may be instantiated; it is not intended to be subclassed.
 * </p>
 * <p>
 * Note that this implementation simply fakes it and does does not create
 * any new controls. The mere activation of this editor means that the value
 * of the check box is being toggled by the end users; the listener method
 * <code>applyEditorValue</code> is immediately called to signal the change.
 * </p>
 */
public class CheckboxCellEditor extends CellEditor {

    /**
     * The checkbox value.
     */
    /* package */
    boolean value = false;

    /**
     * Default CheckboxCellEditor style
     */
    private static final int defaultStyle = SWT.NONE;

    /**
     * Creates a new checkbox cell editor with no control
     * @since 2.1
     */
    public CheckboxCellEditor() {
        setStyle(defaultStyle);
    }

    /**
     * Creates a new checkbox cell editor parented under the given control.
     * The cell editor value is a boolean value, which is initially <code>false</code>. 
     * Initially, the cell editor has no cell validator.
     *
     * @param parent the parent control
     */
    public CheckboxCellEditor(Composite parent) {
        this(parent, defaultStyle);
    }

    /**
     * Creates a new checkbox cell editor parented under the given control.
     * The cell editor value is a boolean value, which is initially <code>false</code>. 
     * Initially, the cell editor has no cell validator.
     *
     * @param parent the parent control
     * @param style the style bits
     * @since 2.1
     */
    public CheckboxCellEditor(Composite parent, int style) {
        super(parent, style);
    }

    /**
     * The <code>CheckboxCellEditor</code> implementation of
     * this <code>CellEditor</code> framework method simulates
     * the toggling of the checkbox control and notifies
     * listeners with <code>ICellEditorListener.applyEditorValue</code>.
     */
    public void activate() {
        value = !value;
        fireApplyEditorValue();
    }

    /**
     * The <code>CheckboxCellEditor</code> implementation of
     * this <code>CellEditor</code> framework method does
     * nothing and returns <code>null</code>.
     */
    protected Control createControl(Composite parent) {
        return null;
    }

    /**
     * The <code>CheckboxCellEditor</code> implementation of
     * this <code>CellEditor</code> framework method returns
     * the checkbox setting wrapped as a <code>Boolean</code>.
     *
     * @return the Boolean checkbox value
     */
    protected Object doGetValue() {
        return new Boolean(value);
    }

    /* (non-Javadoc)
     * Method declared on CellEditor.
     */
    protected void doSetFocus() {
        // Ignore
    }

    /**
     * The <code>CheckboxCellEditor</code> implementation of
     * this <code>CellEditor</code> framework method accepts
     * a value wrapped as a <code>Boolean</code>.
     *
     * @param value a Boolean value
     */
    protected void doSetValue(Object value) {
        Assert.isTrue(value instanceof Boolean);
        this.value = ((Boolean) value).booleanValue();
    }
}