/******************************************************************************* * Copyright (c) 2011 Google, Inc. * 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: * Google, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.wb.internal.core.model.property; import org.eclipse.wb.internal.core.model.property.editor.TextDisplayPropertyEditor; import org.eclipse.wb.internal.core.model.property.editor.complex.IComplexPropertyEditor; import org.eclipse.wb.internal.core.model.property.editor.presentation.PropertyEditorPresentation; import org.eclipse.wb.internal.core.model.property.table.PropertyTable; import org.eclipse.wb.internal.core.model.property.table.PropertyTooltipProvider; import org.eclipse.wb.internal.core.model.property.table.PropertyTooltipTextProvider; import org.eclipse.swt.graphics.Point; import java.util.List; /** * Implementation of {@link Property} that shows given inner {@link Property}'s using * {@link IComplexPropertyEditor}. * * @author scheglov_ke * @coverage core.model.property */ public class ComplexProperty extends Property { private final String m_title; private String m_text; private String m_tooltip; private boolean m_modified; private Property[] m_properties; //////////////////////////////////////////////////////////////////////////// // // Constructors // //////////////////////////////////////////////////////////////////////////// public ComplexProperty(String title, String text) { this(title, text, new Property[0]); } public ComplexProperty(String title, String text, Property[] properties) { super(new ComplexPropertyEditor()); m_title = title; m_text = text; setText(text); setProperties(properties); } //////////////////////////////////////////////////////////////////////////// // // Access // //////////////////////////////////////////////////////////////////////////// /** * Sets the text. */ public void setText(String text) { m_text = text; } /** * @return the text to display as value. */ public String getText() throws Exception { return m_text; } /** * Sets the tooltip text. */ public void setTooltip(String tooltip) { m_tooltip = tooltip; } /** * Specifies the {@link PropertyEditorPresentation}, for example to displaying "..." button. */ public void setEditorPresentation(PropertyEditorPresentation presentation) { ((ComplexPropertyEditor) getEditor()).m_presentation = presentation; } /** * @return the sub-properties. */ public Property[] getProperties() { return m_properties; } /** * Sets the sub-properties. */ public void setProperties(Property[] properties) { m_properties = properties; } /** * Sets the sub-properties. */ public void setProperties(List properties) { Property[] propertiesArray = properties.toArray(new Property[properties.size()]); setProperties(propertiesArray); } /** * Sets the "modified" flag. */ public void setModified(boolean modified) { m_modified = modified; } //////////////////////////////////////////////////////////////////////////// // // Property // //////////////////////////////////////////////////////////////////////////// @Override public String getTitle() { return m_title; } @Override public boolean isModified() throws Exception { return m_modified; } @Override public Object getValue() throws Exception { return null; } @Override public void setValue(Object value) throws Exception { } //////////////////////////////////////////////////////////////////////////// // // Adapter // //////////////////////////////////////////////////////////////////////////// @Override public T getAdapter(Class adapter) { if (adapter == PropertyTooltipProvider.class && m_tooltip != null) { return adapter.cast(new PropertyTooltipTextProvider() { @Override protected String getText(Property property) throws Exception { return m_tooltip; } }); } return super.getAdapter(adapter); } //////////////////////////////////////////////////////////////////////////// // // ComplexPropertyEditor // //////////////////////////////////////////////////////////////////////////// private static final class ComplexPropertyEditor extends TextDisplayPropertyEditor implements IComplexPropertyEditor { private PropertyEditorPresentation m_presentation; //////////////////////////////////////////////////////////////////////////// // // IComplexPropertyEditor // //////////////////////////////////////////////////////////////////////////// public Property[] getProperties(Property property) throws Exception { return ((ComplexProperty) property).getProperties(); } //////////////////////////////////////////////////////////////////////////// // // TextDisplayPropertyEditor // //////////////////////////////////////////////////////////////////////////// @Override protected String getText(Property property) throws Exception { return ((ComplexProperty) property).getText(); } //////////////////////////////////////////////////////////////////////////// // // PropertyEditor // //////////////////////////////////////////////////////////////////////////// @Override public boolean activate(PropertyTable propertyTable, Property property, Point location) throws Exception { return false; } //////////////////////////////////////////////////////////////////////////// // // Presentation // //////////////////////////////////////////////////////////////////////////// @Override public PropertyEditorPresentation getPresentation() { return m_presentation; } } }