package com.mobilesorcery.sdk.profiling.ui.views; import org.eclipse.jface.viewers.StyledCellLabelProvider; import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.jface.viewers.StyledString.Styler; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.TextStyle; import org.eclipse.swt.widgets.Display; import com.mobilesorcery.sdk.core.Util; import com.mobilesorcery.sdk.profiling.CppFiltName; import com.mobilesorcery.sdk.profiling.IInvocation; import com.mobilesorcery.sdk.profiling.IProfilingSession; import com.mobilesorcery.sdk.profiling.ui.ProfilingUiPlugin; import com.mobilesorcery.sdk.ui.UIUtils; public class FunctionNameLabelProvider extends StyledCellLabelProvider { private final Font prefixFont; private final Font lastNameFont; private final Styler prefixStyler; private final Styler lastNameStyle; private final Styler disabledStyle; private IProfilingSession session; public FunctionNameLabelProvider() { prefixFont = UIUtils.modifyFont(null, SWT.ITALIC); lastNameFont = UIUtils.modifyFont(null, SWT.BOLD); Color disabledColor = Display.getCurrent().getSystemColor(SWT.COLOR_GRAY); prefixStyler = UIUtils.createStyler(prefixFont, null); lastNameStyle = UIUtils.createStyler(lastNameFont, null); disabledStyle = UIUtils.createStyler(null, disabledColor); } @Override public void dispose() { UIUtils.dispose(prefixFont, lastNameFont); } @Override public void update(ViewerCell cell) { Object obj = cell.getElement(); IInvocation invocation = (IInvocation) obj; boolean enabled = session.getFilter().accept(invocation); StyledString styledFunctionName = styleFunctionName(enabled, invocation.getProfiledEntity().toString()); cell.setStyleRanges(styledFunctionName.getStyleRanges()); cell.setText(styledFunctionName.getString()); cell.setImage(ProfilingUiPlugin.getDefault().getImageRegistry().get(ProfilingUiPlugin.METHOD_IMG)); } private StyledString styleFunctionName(boolean enabled, String fn) { CppFiltName name = CppFiltName.parse(fn); StyledString result = new StyledString(); result.append(name.getPrefix(), enabled ? prefixStyler : disabledStyle); result.append(name.getNamespace(), enabled ? null : disabledStyle); String shortName = name.getShortName(); if (!Util.isEmpty(name.getNamespace())) { shortName = "::" + shortName; } result.append(shortName, enabled ? lastNameStyle : disabledStyle); result.append(name.getSignature(), disabledStyle); return result; } public void setSession(IProfilingSession session) { this.session = session; } }