Home | History | Annotate | Download | only in editor
      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.editor;
     12 
     13 import com.google.common.base.Objects;
     14 
     15 import org.eclipse.wb.core.controls.CCombo3;
     16 import org.eclipse.wb.internal.core.model.property.Property;
     17 
     18 import java.beans.PropertyDescriptor;
     19 
     20 /**
     21  * {@link PropertyEditor} for "enumerationValues" attribute of {@link PropertyDescriptor}.
     22  * <p>
     23  * See http://javadude.com/articles/javabeanattributes.html for attributes.
     24  *
     25  * @author scheglov_ke
     26  * @coverage core.model.property.editor
     27  */
     28 public class EnumerationValuesPropertyEditor extends AbstractComboPropertyEditor
     29     implements
     30       IValueSourcePropertyEditor {
     31   private final String[] m_names;
     32   private final Object[] m_values;
     33   private final String[] m_sources;
     34 
     35   ////////////////////////////////////////////////////////////////////////////
     36   //
     37   // Constructor
     38   //
     39   ////////////////////////////////////////////////////////////////////////////
     40   public EnumerationValuesPropertyEditor(Object attributeValue) {
     41     Object[] enumElements = (Object[]) attributeValue;
     42     int items = enumElements.length / 3;
     43     m_names = new String[items];
     44     m_values = new Object[items];
     45     m_sources = new String[items];
     46     for (int i = 0; i < items; i++) {
     47       m_names[i] = (String) enumElements[3 * i + 0];
     48       m_values[i] = enumElements[3 * i + 1];
     49       m_sources[i] = (String) enumElements[3 * i + 2];
     50     }
     51   }
     52 
     53   ////////////////////////////////////////////////////////////////////////////
     54   //
     55   // TextDisplayPropertyEditor
     56   //
     57   ////////////////////////////////////////////////////////////////////////////
     58   @Override
     59   public String getText(Property property) throws Exception {
     60     Object value = property.getValue();
     61     // return name for value
     62     if (value != Property.UNKNOWN_VALUE) {
     63       for (int i = 0; i < m_values.length; i++) {
     64         if (Objects.equal(m_values[i], value)) {
     65           return m_names[i];
     66         }
     67       }
     68     }
     69     // unknown value
     70     return null;
     71   }
     72 
     73   ////////////////////////////////////////////////////////////////////////////
     74   //
     75   // IValueSourcePropertyEditor
     76   //
     77   ////////////////////////////////////////////////////////////////////////////
     78   @Override
     79 public String getValueSource(Object value) throws Exception {
     80     if (value != Property.UNKNOWN_VALUE) {
     81       for (int i = 0; i < m_values.length; i++) {
     82         if (Objects.equal(m_values[i], value)) {
     83           return m_sources[i];
     84         }
     85       }
     86     }
     87     // unknown value
     88     return null;
     89   }
     90 
     91   ////////////////////////////////////////////////////////////////////////////
     92   //
     93   // IClipboardSourceProvider
     94   //
     95   ////////////////////////////////////////////////////////////////////////////
     96 //  public String getClipboardSource(GenericProperty property) throws Exception {
     97 //    Object value = property.getValue();
     98 //    return getValueSource(value);
     99 //  }
    100 
    101   ////////////////////////////////////////////////////////////////////////////
    102   //
    103   // Combo
    104   //
    105   ////////////////////////////////////////////////////////////////////////////
    106   @Override
    107   protected void addItems(Property property, CCombo3 combo) throws Exception {
    108     for (String title : m_names) {
    109       combo.add(title);
    110     }
    111   }
    112 
    113   @Override
    114   protected void selectItem(Property property, CCombo3 combo) throws Exception {
    115     combo.setText(getText(property));
    116   }
    117 
    118   @Override
    119   protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
    120     Object value = m_values[index];
    121 //    if (property instanceof GenericProperty) {
    122 //      GenericProperty genericProperty = (GenericProperty) property;
    123 //      String source = getValueSource(value);
    124 //      genericProperty.setExpression(source, value);
    125 //    } else {
    126       property.setValue(value);
    127 //    }
    128   }
    129 }
    130