org.thanlwinsoft.doccharconvert.eclipse.editors.MappingTableLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.thanlwinsoft.doccharconvert.eclipse.editors.MappingTableLabelProvider.java

Source

/*
Copyright (C) 2007 Keith Stribley http://www.thanlwinsoft.org/
    
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
    
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.
    
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
------------------------------------------------------------------------------*/

package org.thanlwinsoft.doccharconvert.eclipse.editors;

import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableColorProvider;
import org.eclipse.jface.viewers.ITableFontProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.viewers.ViewerColumn;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.thanlwinsoft.doccharconvert.MessageUtil;
import org.thanlwinsoft.doccharconvert.converter.syllable.MappingStatus;
import org.thanlwinsoft.schemas.syllableParser.Map;
import org.thanlwinsoft.schemas.syllableParser.MappingTable;
import org.thanlwinsoft.schemas.syllableParser.SyllableConverter;

/**
 * @author keith
 * 
 */
public class MappingTableLabelProvider extends CellLabelProvider
        implements ITableLabelProvider, ITableFontProvider, ITableColorProvider {
    private MappingTable mappingTable;
    private SyllableConverterEditor mParentEditor;
    private static final int COL_OFFSET = 1;
    private static final int STATUS_COLOR = 255;
    private static final int NO_STATUS_COLOR = 172;
    private static Color mForwardsColor = null;
    private static Color mBothColor = null;
    private static Color mBackwardsColor = null;

    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.CellLabelProvider#dispose(org.eclipse.jface.viewers.ColumnViewer, org.eclipse.jface.viewers.ViewerColumn)
     */
    @Override
    public void dispose(ColumnViewer viewer, ViewerColumn column) {
        if (mForwardsColor != null && !mForwardsColor.isDisposed())
            mForwardsColor.dispose();
        if (mBackwardsColor != null && !mBackwardsColor.isDisposed())
            mBackwardsColor.dispose();
        if (mBothColor != null && !mBothColor.isDisposed())
            mBothColor.dispose();

        super.dispose(viewer, column);
    }

    /**
     * 
     * @param mappingTable
     * @param parent
     */
    public MappingTableLabelProvider(MappingTable mappingTable, SyllableConverterEditor parent) {
        this.mappingTable = mappingTable;
        mParentEditor = parent;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang
     * .Object, int)
     */
    public Image getColumnImage(Object element, int columnIndex) {
        // TODO Auto-generated method stub
        return null;
    }

    protected int findMapNumber(Object element) {
        if (element instanceof Map) {
            Map m = (Map) element;
            for (int i = 0; i < mappingTable.getMaps().sizeOfMArray(); i++) {
                if (mappingTable.getMaps().getMArray(i) == m) {
                    return i;
                }
            }
        }
        return -1;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.CellLabelProvider#getToolTipText(java.lang.Object)
     */
    @Override
    public String getToolTipText(Object element) {
        int row = findMapNumber(element);
        if (mParentEditor.getConverter() != null) {
            int status = mParentEditor.getConverter().getMapStatus(mappingTable.getId(), row);
            if (status > 0) {
                String msgPrefix = "ambiguous";
                if (mappingTable.isSetFirstEntryWins() && mappingTable.getFirstEntryWins()) {
                    msgPrefix = "unused";
                }
                if (MappingStatus.AMBIGUOUS_FORWARDS.isSet(status)) {
                    if (MappingStatus.AMBIGUOUS_BACKWARDS.isSet(status)) {
                        return MessageUtil.getString(msgPrefix + "Both");
                    } else {
                        return MessageUtil.getString(msgPrefix + "Forwards");
                    }
                } else if (MappingStatus.AMBIGUOUS_BACKWARDS.isSet(status)) {
                    return MessageUtil.getString(msgPrefix + "Backwards");
                }
            }
        }
        return MessageUtil.getString("MappingTableToolTip");
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang
     * .Object, int)
     */
    public String getColumnText(Object element, int columnIndex) {
        if (element instanceof Map) {
            Map m = (Map) element;
            if (columnIndex < COL_OFFSET) {
                int line = findMapNumber(element) + 1;
                if (line > 0)
                    return Integer.toString(line);
                return "";
            }
            String ref = mappingTable.getColumns().getComponentArray(columnIndex - COL_OFFSET).getR();
            return SyllableConverterUtils.getCText(SyllableConverterUtils.getCFromMap(m, ref));
        }
        return null;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
     */
    @Override
    public Font getFont(Object element, int columnIndex) {
        if (columnIndex < COL_OFFSET) {
            return JFaceResources.getFont(JFaceResources.TEXT_FONT);
        }
        String ref = mappingTable.getColumns().getComponentArray(columnIndex - COL_OFFSET).getR();
        SyllableConverter sc = mParentEditor.getDocument().getSyllableConverter();
        int side = SyllableConverterUtils.getSide(sc, ref);
        return mParentEditor.getFont(side);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.
     * jface.viewers.ILabelProviderListener)
     */
    @Override
    public void addListener(ILabelProviderListener listener) {
        // TODO Auto-generated method stub

    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
     */
    @Override
    public void dispose() {
        // TODO Auto-generated method stub

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang
     * .Object, java.lang.String)
     */
    @Override
    public boolean isLabelProperty(Object element, String property) {
        // TODO Auto-generated method stub
        return false;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse
     * .jface.viewers.ILabelProviderListener)
     */
    @Override
    public void removeListener(ILabelProviderListener listener) {
        // TODO Auto-generated method stub

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.viewers.CellLabelProvider#update(org.eclipse.jface.
     * viewers.ViewerCell)
     */
    @Override
    public void update(ViewerCell cell) {
        cell.setText(getColumnText(cell.getElement(), cell.getColumnIndex()));
        if (cell.getColumnIndex() >= COL_OFFSET)
            cell.setFont(getFont(cell.getElement(), cell.getColumnIndex()));
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.viewers.ITableColorProvider#getBackground(java.lang
     * .Object, int)
     */
    @Override
    public Color getBackground(Object element, int columnIndex) {
        // if (columnIndex == 0)
        {
            int row = findMapNumber(element);
            if (mParentEditor.getConverter() != null) {
                int status = mParentEditor.getConverter().getMapStatus(mappingTable.getId(), row);
                if (status > 0) {
                    int red = MappingStatus.AMBIGUOUS_FORWARDS.isSet(status) ? STATUS_COLOR : NO_STATUS_COLOR;
                    int blue = MappingStatus.AMBIGUOUS_BACKWARDS.isSet(status) ? STATUS_COLOR : NO_STATUS_COLOR;

                    Color color = null;
                    if (status == (MappingStatus.AMBIGUOUS_FORWARDS.bit()
                            & MappingStatus.AMBIGUOUS_BACKWARDS.bit())) {
                        if (mBothColor == null) {
                            mBothColor = new Color(mParentEditor.getSite().getShell().getDisplay(), red,
                                    NO_STATUS_COLOR, blue);
                        }
                        color = mBothColor;
                    } else if (status == MappingStatus.AMBIGUOUS_FORWARDS.bit()) {
                        if (mForwardsColor == null) {
                            mForwardsColor = new Color(mParentEditor.getSite().getShell().getDisplay(), red,
                                    NO_STATUS_COLOR, blue);
                        }
                        color = mForwardsColor;
                    } else if (status == MappingStatus.AMBIGUOUS_BACKWARDS.bit()) {
                        if (mBackwardsColor == null) {
                            mBackwardsColor = new Color(mParentEditor.getSite().getShell().getDisplay(), red,
                                    NO_STATUS_COLOR, blue);
                        }
                        color = mBackwardsColor;
                    }
                    return color;
                }
            }
        }
        return null;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.viewers.ITableColorProvider#getForeground(java.lang
     * .Object, int)
     */
    @Override
    public Color getForeground(Object element, int columnIndex) {
        return null;
    }

}