/******************************************************************************* * 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"; } } }