com.arm.cmsis.pack.tree.AdvisedEditingSupport.java Source code

Java tutorial

Introduction

Here is the source code for com.arm.cmsis.pack.tree.AdvisedEditingSupport.java

Source

/*******************************************************************************
* Copyright (c) 2014 ARM Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package com.arm.cmsis.pack.tree;

import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CellEditor.LayoutData;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Control;

import com.bora.logger.file.Log;

/**
 * This class implements editing possibilities for table cell, e.g. check box, combo box, etc.
 * In case of combo a combo box cell Editor is return, in case of check box, a check box control is returned.
 */
public class AdvisedEditingSupport extends EditingSupport {

    TextCellEditor textCellEditor = null;
    CheckboxCellEditor checkboxCellEditor = null;
    int columnIndex;
    IColumnAdvisor columnAdvisor = null;

    public AdvisedEditingSupport(TreeViewer treeViewer, IColumnAdvisor columnAdvisor, int columnIndex) {

        super(treeViewer);
        this.columnIndex = columnIndex;
        this.columnAdvisor = columnAdvisor;

        Log.writeCurrentConstructor(
                "AdvisedEditingSupport(TreeViewer treeViewer, IColumnAdvisor columnAdvisor, int columnIndex)");
    }

    @Override
    protected CellEditor getCellEditor(final Object element) {

        //Log.writeCurrentMethod(element);

        final TreeViewer treeViewer = (TreeViewer) getViewer();

        switch (columnAdvisor.getCellControlType(element, columnIndex)) {
        case CHECK:
            return new CheckboxCellEditor(treeViewer.getTree());
        case COMBO:
            final ComboBoxCellEditor cellEditor = new ComboBoxCellEditor(treeViewer.getTree(),
                    columnAdvisor.getStringArray(element, columnIndex), SWT.READ_ONLY) {

                @Override
                public LayoutData getLayoutData() {
                    LayoutData ld = super.getLayoutData();
                    ld.minimumWidth = 20;
                    return ld;
                }
            };
            Control control = cellEditor.getControl();
            final CCombo combo = (CCombo) control;

            LayoutData ld = cellEditor.getLayoutData();
            ld.grabHorizontal = true;
            ld.horizontalAlignment = SWT.RIGHT;
            ld.verticalAlignment = SWT.CENTER;
            combo.setLayoutData(ld);

            combo.addSelectionListener(new SelectionListener() {
                public void widgetDefaultSelected(SelectionEvent e) {
                }

                public void widgetSelected(SelectionEvent e) {
                    Integer newVal = new Integer(combo.getSelectionIndex());
                    setValue(element, newVal);
                }
            });

            return cellEditor;
        default:
            break;
        }

        return null;
    }

    @Override
    protected Object getValue(Object element) {

        //Log.writeCurrentMethod(element);

        switch (columnAdvisor.getCellControlType(element, columnIndex)) {
        case CHECK:
            return new Boolean(columnAdvisor.getCheck(element, columnIndex));
        case COMBO:
            return columnAdvisor.getCurrentSelectedIndex(element, columnIndex);
        default:
            break;
        }

        return null;
    }

    @Override
    protected void setValue(Object element, Object value) {

        //Log.writeCurrentMethod(element, value);

        switch (columnAdvisor.getCellControlType(element, columnIndex)) {
        case CHECK:
            if (value instanceof Boolean) {
                boolean newVal = ((Boolean) value == true);
                boolean oldVal = columnAdvisor.getCheck(element, columnIndex);
                if (oldVal != newVal) {
                    columnAdvisor.propertyChange(new PropertyChangeEvent(element, "CheckBox", oldVal, newVal),
                            columnIndex);
                }
            }
            break;
        case COMBO:
            if (value instanceof Integer) {
                int oldVal = columnAdvisor.getCurrentSelectedIndex(element, columnIndex);
                int newVal = ((Integer) value).intValue();
                if (newVal != oldVal) {
                    columnAdvisor.propertyChange(
                            new PropertyChangeEvent(element, "ComboSelectionChanged", oldVal, newVal), columnIndex);
                }
            }
            break;
        default:
            break;
        }
    }

    @Override
    protected boolean canEdit(Object element) {

        //Log.writeCurrentMethod(element);

        boolean editable = columnAdvisor.canEdit(element, columnIndex);
        if (!editable) {
            // send propertyChange
            // property   "click"
            // oldVal   columnIndex
            // newVal   columnIndex
            columnAdvisor.propertyChange(new PropertyChangeEvent(element, "click", new Object(), new Object()),
                    columnIndex);
        }
        return editable;
    }
}