intial source from ttp://www.sf.net/projects/wdte
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.css.ui / src / net / sourceforge / phpeclipse / css / ui / internal / properties / CssRulePropertySource.java
diff --git a/archive/net.sourceforge.phpeclipse.css.ui/src/net/sourceforge/phpeclipse/css/ui/internal/properties/CssRulePropertySource.java b/archive/net.sourceforge.phpeclipse.css.ui/src/net/sourceforge/phpeclipse/css/ui/internal/properties/CssRulePropertySource.java
new file mode 100644 (file)
index 0000000..873aa8e
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2003-2004 Christopher Lenz and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *        Christopher Lenz - initial API and implementation
+ * 
+ * $Id: CssRulePropertySource.java,v 1.1 2004-09-02 18:11:49 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.css.ui.internal.properties;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sourceforge.phpeclipse.core.model.ISourceReference;
+import net.sourceforge.phpeclipse.css.core.CssCore;
+import net.sourceforge.phpeclipse.css.core.model.IDeclaration;
+import net.sourceforge.phpeclipse.css.core.model.IPropertyInfo;
+import net.sourceforge.phpeclipse.css.core.model.IRule;
+import net.sourceforge.phpeclipse.css.core.profiles.IProfile;
+import net.sourceforge.phpeclipse.css.core.profiles.IProfileManager;
+import net.sourceforge.phpeclipse.css.ui.CssUI;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+
+/**
+ * 
+ */
+public class CssRulePropertySource implements IPropertySource {
+
+       // Inner Classes -----------------------------------------------------------
+
+       /**
+        * Extended label provider that decorates the property values with specific
+        * icons when a priority is set.
+        */
+       private static class DeclarationLabelProvider extends LabelProvider {
+
+               /**
+                * The CSS declaration for which a label should be provided.
+                */
+               private IDeclaration declaration;
+
+               /**
+                * Constructor.
+                * 
+                * @param declaration the declaration for which to provide a label
+                */
+               public DeclarationLabelProvider(IDeclaration declaration) {
+                       this.declaration = declaration;
+               }
+
+               /*
+                * @see org.eclipse.jface.viewers.ILabelProvider#getImage(Object)
+                */
+               public Image getImage(Object element) {
+                       if (this.declaration.getPriority() != null) {
+                               CssUI plugin = CssUI.getDefault();
+                               return plugin.getImageRegistry().get(
+                                       CssUI.ICON_IMPORTANT);
+                       }
+                       return null;
+               }
+
+               /*
+                * @see org.eclipse.jface.viewers.ILabelProvider#getText(Object)
+                */
+               public String getText(Object element) {
+                       return this.declaration.getValue().getSource();
+               }
+
+       }
+
+       // Instance Variables ------------------------------------------------------
+
+       /**
+        * The CSS rule for which properties should be provided.
+        */
+       private IRule rule;
+
+       /**
+        * Cached list of property descriptors (<code>IPropertyDescriptor</code>).
+        */
+       private List descriptors;
+
+       // Constructors ------------------------------------------------------------
+
+       /**
+        * Constructor.
+        * 
+        * @param styleRule the style rule for which to provide properties
+        */
+       public CssRulePropertySource(IRule styleRule) {
+               this.rule = styleRule;
+       }
+
+       // IPropertySource Implementation ------------------------------------------
+
+       /**
+        * @see IPropertySource#getEditableValue()
+        */
+       public Object getEditableValue() {
+               return null;
+       }
+
+       /**
+        * @see IPropertySource#getPropertyDescriptors()
+        */
+       public IPropertyDescriptor[] getPropertyDescriptors() {
+               if (this.descriptors == null) {
+                       IProfileManager mgr = CssCore.getDefault().getProfileManager();
+                       IProfile profile = mgr.getProfile(null);
+                       this.descriptors = new ArrayList();
+                       for (int i = 0; i < this.rule.getDeclarations().length; i++) {
+                               IDeclaration declaration = this.rule.getDeclarations()[i];
+                               String property = declaration.getProperty().getSource();
+                               PropertyDescriptor descriptor = new PropertyDescriptor(
+                                       new Integer(i), property);
+                               descriptor.setLabelProvider(
+                                       new DeclarationLabelProvider(declaration));
+                               IPropertyInfo info = profile.getPropertyInfo(property);
+                               if (info != null) {
+                                       descriptor.setCategory(info.getCategory());
+                               }
+                               this.descriptors.add(descriptor);
+                       }
+               }
+               return (IPropertyDescriptor[]) this.descriptors.toArray(
+                       new IPropertyDescriptor[this.descriptors.size()]);
+       }
+
+       /**
+        * @see IPropertySource#getPropertyValue(Object)
+        */
+       public Object getPropertyValue(Object id) {
+               int i = ((Integer) id).intValue();
+               ISourceReference propertyValue =
+                       this.rule.getDeclarations()[i].getValue();
+               return propertyValue.getSource();
+       }
+
+       /**
+        * @see IPropertySource#isPropertySet(Object)
+        */
+       public boolean isPropertySet(Object id) {
+               // read-only property
+               return false;
+       }
+
+       /**
+        * @see IPropertySource#resetPropertyValue(Object)
+        */
+       public void resetPropertyValue(Object id) {
+               // read-only property
+       }
+
+       /**
+        * @see IPropertySource#setPropertyValue(Object, Object)
+        */
+       public void setPropertyValue(Object id, Object value) {
+               // read-only property
+       }
+
+}