/*******************************************************************************
* Copyright (c) 2008, 2009 Wind River Systems 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:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.dsf.debug.ui.viewmodel.numberformat;
import java.util.Map;
import org.eclipse.cdt.dsf.debug.ui.viewmodel.IDebugVMConstants;
import org.eclipse.cdt.dsf.ui.viewmodel.properties.LabelText;
import org.eclipse.core.runtime.IStatus;
import com.ibm.icu.text.MessageFormat;
/**
* Label attribute that fills in the formatted value text using the active
* number format for the view.
*
* @since 2.0
*/
public class FormattedValueLabelText extends LabelText {
private final String fPropertyPrefix;
private final String PROP_ACTIVE_FORMAT;
private final String PROP_ACTIVE_FORMAT_VALUE;
public FormattedValueLabelText() {
this(MessagesForNumberFormat.FormattedValueLabelText__text_format, new String[0], ""); //$NON-NLS-1$
}
public FormattedValueLabelText(String popertyPrefix) {
this(MessagesForNumberFormat.FormattedValueLabelText__text_format, new String[0], popertyPrefix);
}
public FormattedValueLabelText(String formatPattern, String[] propertyNames) {
this(formatPattern, propertyNames, ""); //$NON-NLS-1$
}
public FormattedValueLabelText(String formatPattern, String[] propertyNames, String propertyPrefix) {
super(formatPattern, addActiveFormatPropertyNames(propertyNames, propertyPrefix));
fPropertyPrefix = propertyPrefix;
PROP_ACTIVE_FORMAT = (fPropertyPrefix + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT).intern();
PROP_ACTIVE_FORMAT_VALUE = (fPropertyPrefix + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE).intern();
}
private static String[] addActiveFormatPropertyNames(String[] propertyNames, String prefix) {
String[] newPropertyNames = new String[propertyNames.length + 4];
System.arraycopy(propertyNames, 0, newPropertyNames, 0, propertyNames.length);
newPropertyNames[propertyNames.length + 0] = (prefix + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE).intern();
newPropertyNames[propertyNames.length + 1] = (prefix + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT).intern();
newPropertyNames[propertyNames.length + 2] = (prefix + IDebugVMConstants.PROP_FORMATTED_VALUE_AVAILABLE_FORMATS).intern();
newPropertyNames[propertyNames.length + 3] = IDebugVMConstants.PROP_FORMATTED_VALUE_FORMAT_PREFERENCE;
return newPropertyNames;
}
@Override
protected Object getPropertyValue(String propertyName, IStatus status, Map<String, Object> properties) {
// If the format is not the same as the preferred format, include it in the value string.
if ( PROP_ACTIVE_FORMAT_VALUE.equals(propertyName) ) {
Object activeFormat = properties.get(PROP_ACTIVE_FORMAT);
Object preferredFormat = properties.get(IDebugVMConstants.PROP_FORMATTED_VALUE_FORMAT_PREFERENCE);
Object value = properties.get(PROP_ACTIVE_FORMAT_VALUE);
if (value != null && activeFormat != null && !activeFormat.equals(preferredFormat)) {
return MessageFormat.format(
MessagesForNumberFormat.FormattedValueLabelText__Value__text_format,
new Object[] {
value,
FormattedValueVMUtil.getFormatLabel((String)activeFormat) });
}
}
return properties.get(propertyName);
}
@Override
public boolean isEnabled(IStatus status, Map<String, Object> properties) {
for (String property : getPropertyNames()) {
if ( PROP_ACTIVE_FORMAT.equals(property) ||
IDebugVMConstants.PROP_FORMATTED_VALUE_FORMAT_PREFERENCE.equals(property) )
{
continue;
}
if (properties.get(property) == null) {
return false;
}
}
return true;
}
}