Home | History | Annotate | Download | only in property
      1 /*******************************************************************************
      2  * Copyright (c) 2011 Google, Inc.
      3  * All rights reserved. This program and the accompanying materials
      4  * are made available under the terms of the Eclipse Public License v1.0
      5  * which accompanies this distribution, and is available at
      6  * http://www.eclipse.org/legal/epl-v10.html
      7  *
      8  * Contributors:
      9  *    Google, Inc. - initial API and implementation
     10  *******************************************************************************/
     11 package org.eclipse.wb.internal.core.model.property;
     12 
     13 import org.eclipse.wb.internal.core.model.property.editor.TextDisplayPropertyEditor;
     14 import org.eclipse.wb.internal.core.model.property.editor.complex.IComplexPropertyEditor;
     15 import org.eclipse.wb.internal.core.model.property.editor.presentation.PropertyEditorPresentation;
     16 import org.eclipse.wb.internal.core.model.property.table.PropertyTable;
     17 import org.eclipse.wb.internal.core.model.property.table.PropertyTooltipProvider;
     18 import org.eclipse.wb.internal.core.model.property.table.PropertyTooltipTextProvider;
     19 
     20 import org.eclipse.swt.graphics.Point;
     21 
     22 import java.util.List;
     23 
     24 /**
     25  * Implementation of {@link Property} that shows given inner {@link Property}'s using
     26  * {@link IComplexPropertyEditor}.
     27  *
     28  * @author scheglov_ke
     29  * @coverage core.model.property
     30  */
     31 public class ComplexProperty extends Property {
     32   private final String m_title;
     33   private String m_text;
     34   private String m_tooltip;
     35   private boolean m_modified;
     36   private Property[] m_properties;
     37 
     38   ////////////////////////////////////////////////////////////////////////////
     39   //
     40   // Constructors
     41   //
     42   ////////////////////////////////////////////////////////////////////////////
     43   public ComplexProperty(String title, String text) {
     44     this(title, text, new Property[0]);
     45   }
     46 
     47   public ComplexProperty(String title, String text, Property[] properties) {
     48     super(new ComplexPropertyEditor());
     49     m_title = title;
     50     m_text = text;
     51     setText(text);
     52     setProperties(properties);
     53   }
     54 
     55   ////////////////////////////////////////////////////////////////////////////
     56   //
     57   // Access
     58   //
     59   ////////////////////////////////////////////////////////////////////////////
     60   /**
     61    * Sets the text.
     62    */
     63   public void setText(String text) {
     64     m_text = text;
     65   }
     66 
     67   /**
     68    * @return the text to display as value.
     69    */
     70   public String getText() throws Exception {
     71     return m_text;
     72   }
     73 
     74   /**
     75    * Sets the tooltip text.
     76    */
     77   public void setTooltip(String tooltip) {
     78     m_tooltip = tooltip;
     79   }
     80 
     81   /**
     82    * Specifies the {@link PropertyEditorPresentation}, for example to displaying "..." button.
     83    */
     84   public void setEditorPresentation(PropertyEditorPresentation presentation) {
     85     ((ComplexPropertyEditor) getEditor()).m_presentation = presentation;
     86   }
     87 
     88   /**
     89    * @return the sub-properties.
     90    */
     91   public Property[] getProperties() {
     92     return m_properties;
     93   }
     94 
     95   /**
     96    * Sets the sub-properties.
     97    */
     98   public void setProperties(Property[] properties) {
     99     m_properties = properties;
    100   }
    101 
    102   /**
    103    * Sets the sub-properties.
    104    */
    105   public void setProperties(List<Property> properties) {
    106     Property[] propertiesArray = properties.toArray(new Property[properties.size()]);
    107     setProperties(propertiesArray);
    108   }
    109 
    110   /**
    111    * Sets the "modified" flag.
    112    */
    113   public void setModified(boolean modified) {
    114     m_modified = modified;
    115   }
    116 
    117   ////////////////////////////////////////////////////////////////////////////
    118   //
    119   // Property
    120   //
    121   ////////////////////////////////////////////////////////////////////////////
    122   @Override
    123   public String getTitle() {
    124     return m_title;
    125   }
    126 
    127   @Override
    128   public boolean isModified() throws Exception {
    129     return m_modified;
    130   }
    131 
    132   @Override
    133   public Object getValue() throws Exception {
    134     return null;
    135   }
    136 
    137   @Override
    138   public void setValue(Object value) throws Exception {
    139   }
    140 
    141   ////////////////////////////////////////////////////////////////////////////
    142   //
    143   // Adapter
    144   //
    145   ////////////////////////////////////////////////////////////////////////////
    146   @Override
    147   public <T> T getAdapter(Class<T> adapter) {
    148     if (adapter == PropertyTooltipProvider.class && m_tooltip != null) {
    149       return adapter.cast(new PropertyTooltipTextProvider() {
    150         @Override
    151         protected String getText(Property property) throws Exception {
    152           return m_tooltip;
    153         }
    154       });
    155     }
    156     return super.getAdapter(adapter);
    157   }
    158 
    159   ////////////////////////////////////////////////////////////////////////////
    160   //
    161   // ComplexPropertyEditor
    162   //
    163   ////////////////////////////////////////////////////////////////////////////
    164   private static final class ComplexPropertyEditor extends TextDisplayPropertyEditor
    165       implements
    166         IComplexPropertyEditor {
    167     private PropertyEditorPresentation m_presentation;
    168 
    169     ////////////////////////////////////////////////////////////////////////////
    170     //
    171     // IComplexPropertyEditor
    172     //
    173     ////////////////////////////////////////////////////////////////////////////
    174     public Property[] getProperties(Property property) throws Exception {
    175       return ((ComplexProperty) property).getProperties();
    176     }
    177 
    178     ////////////////////////////////////////////////////////////////////////////
    179     //
    180     // TextDisplayPropertyEditor
    181     //
    182     ////////////////////////////////////////////////////////////////////////////
    183     @Override
    184     protected String getText(Property property) throws Exception {
    185       return ((ComplexProperty) property).getText();
    186     }
    187 
    188     ////////////////////////////////////////////////////////////////////////////
    189     //
    190     // PropertyEditor
    191     //
    192     ////////////////////////////////////////////////////////////////////////////
    193     @Override
    194     public boolean activate(PropertyTable propertyTable, Property property, Point location)
    195         throws Exception {
    196       return false;
    197     }
    198 
    199     ////////////////////////////////////////////////////////////////////////////
    200     //
    201     // Presentation
    202     //
    203     ////////////////////////////////////////////////////////////////////////////
    204     @Override
    205     public PropertyEditorPresentation getPresentation() {
    206       return m_presentation;
    207     }
    208   }
    209 }
    210