/*******************************************************************************
* Copyright (c) 2008, 2011 Thomas Holland (thomas@innot.de) and others.
* 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:
* Thomas Holland - initial API and implementation
*******************************************************************************/
package de.innot.avreclipse.ui.views.targets;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import de.innot.avreclipse.core.targets.ITargetConfiguration;
import de.innot.avreclipse.core.util.AVRMCUidConverter;
/**
* Label provider for the Target Configurations Viewer.
*
* @author Thomas Holland
* @since
*
*/
public class TCViewerLabelProvider extends LabelProvider implements ITableLabelProvider {
private enum Column {
IMAGE("") {
@Override
protected Image getColumnImage(ITargetConfiguration tc) {
return PlatformUI.getWorkbench().getSharedImages().getImage(
ISharedImages.IMG_OBJ_ELEMENT);
}
@Override
protected ColumnWeightData getLayoutData() {
return new ColumnWeightData(5, 0);
}
},
NAME("Name") {
@Override
protected String getColumnText(ITargetConfiguration tc) {
return tc.getName();
}
@Override
protected ColumnWeightData getLayoutData() {
return new ColumnWeightData(15, 100);
}
},
MCU("MCU") {
@Override
protected String getColumnText(ITargetConfiguration tc) {
String mcuname = AVRMCUidConverter.id2name(tc.getMCU());
String mcuclck = convertFCPU(tc.getFCPU());
return mcuname + " @ " + mcuclck;
}
@Override
protected ColumnWeightData getLayoutData() {
return new ColumnWeightData(10, 150);
}
},
TYPE("Type") {
@Override
protected String getColumnText(ITargetConfiguration tc) {
// TODO Auto-generated method stub
return "TODO Type";
}
@Override
protected ColumnWeightData getLayoutData() {
return new ColumnWeightData(50, 200);
}
};
private String fLabel;
private Column(String label) {
fLabel = label;
}
protected String getColumnText(ITargetConfiguration tc) {
return null;
}
protected Image getColumnImage(ITargetConfiguration tc) {
return null;
}
protected abstract ColumnWeightData getLayoutData();
/*
* (non-Javadoc)
* @see java.lang.Enum#toString()
*/
@Override
public String toString() {
return fLabel;
}
}
/** List of all columns. Used to map an index to the corresponding column */
private List<Column> fColumns;
/**
* Construct a new TCViewerLabelProvider.
*/
public TCViewerLabelProvider() {
// Initialize the array of columns.
fColumns = new ArrayList<Column>();
for (Column col : Column.values()) {
fColumns.add(col);
}
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
*/
public String getColumnText(Object obj, int index) {
if (obj instanceof ITargetConfiguration) {
ITargetConfiguration tc = (ITargetConfiguration) obj;
return fColumns.get(index).getColumnText(tc);
}
return "N/A";
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
*/
public Image getColumnImage(Object obj, int index) {
if (obj instanceof ITargetConfiguration) {
ITargetConfiguration tc = (ITargetConfiguration) obj;
return fColumns.get(index).getColumnImage(tc);
}
return null;
}
public void initColumns(TableViewer tableviewer, TableColumnLayout layout) {
// Create the columns
for (Column col : Column.values()) {
TableColumn tableColumn = new TableColumn(tableviewer.getTable(), SWT.NONE);
tableColumn.setText(col.toString());
tableColumn.setWidth(100);
layout.setColumnData(tableColumn, col.getLayoutData());
}
}
protected static String convertFCPU(int fcpu) {
if (fcpu >= 1000000) {
// convert to MHz
double mhz = ((double) fcpu) / 1000000;
return Double.toString(mhz) + " MHz";
} else if (fcpu >= 1000) {
// convert to KHz
double khz = ((double) fcpu) / 1000;
return Double.toString(khz) + " KHz";
} else {
// Unlikely but just in case
return Integer.toString(fcpu) + " Hz";
}
}
}