Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "E4/CSS/Add Styleable Property"

< E4‎ | CSS
m
Line 21: Line 21:
  
 
- Within the applyCSSProperty method, write the code needed to apply the wanted styles. For example, for the border-visible property (CTabFolder) we write the following:
 
- Within the applyCSSProperty method, write the code needed to apply the wanted styles. For example, for the border-visible property (CTabFolder) we write the following:
       public String retrieveCSSProperty(Control control, String property, String pseudo, CSSEngine engine) throws Exception {
+
       public void applyCSSProperty(Control control, String property, CSSValue value, String pseudo, CSSEngine engine) throws Exception {
 +
            boolean isBorderVisible = (Boolean)engine.convert(value, Boolean.class, null);
 
             if (control instanceof CTabFolder) {
 
             if (control instanceof CTabFolder) {
 
                 CTabFolder folder = (CTabFolder) control;
 
                 CTabFolder folder = (CTabFolder) control;
                 return Boolean.toString( folder.getBorderVisible() );
+
                 folder.setBorderVisible(isBorderVisible);
 
             }
 
             }
 
       }
 
       }
 
  
 
- Within the retrieveCSSProperty method, write the code needed to retrieve the value of the applied property. Again, for border-visible, we write the following:
 
- Within the retrieveCSSProperty method, write the code needed to retrieve the value of the applied property. Again, for border-visible, we write the following:
       public String applyCSSProperty(Control control, String property, CSSValue value, String pseudo, CSSEngine engine) throws Exception {
+
       public String retrieveCSSProperty(Control control, String property, String pseudo, CSSEngine engine) throws Exception {
            boolean isBorderVisible = (Boolean)engine.convert(value, Boolean.class, null);
+
 
             if (control instanceof CTabFolder) {
 
             if (control instanceof CTabFolder) {
 
                 CTabFolder folder = (CTabFolder) control;
 
                 CTabFolder folder = (CTabFolder) control;
                 folder.setBorderVisible(isBorderVisible);
+
                 return Boolean.toString( folder.getBorderVisible() );
 
             }
 
             }
            return null;
 
 
       }
 
       }
 
  
 
- Now, we must go in org.eclipse.e4.ui.css.swt.engine.CSSSWTEngineImpl#initializeCSSPropertyHandlers , and register the name of the property and the above class just created. We must also register the CSSPropertyHandler created in the class:
 
- Now, we must go in org.eclipse.e4.ui.css.swt.engine.CSSSWTEngineImpl#initializeCSSPropertyHandlers , and register the name of the property and the above class just created. We must also register the CSSPropertyHandler created in the class:
 
       super.registerCSSProperty("xxxx", CSSPropertyXXXXSWTHandler.class);
 
       super.registerCSSProperty("xxxx", CSSPropertyXXXXSWTHandler.class);
 
       super.registerCSSPropertyHandler(CSSPropertyXXXXSWTHandler.class, CSSPropertyXXXXSWTHandler.INSTANCE);
 
       super.registerCSSPropertyHandler(CSSPropertyXXXXSWTHandler.class, CSSPropertyXXXXSWTHandler.INSTANCE);

Revision as of 02:18, 16 February 2012

This wiki is a "how-to" that will explain the steps needed to add a styleable CSS property in E4.


- Create a class in org.eclipse.e4.ui.css.swt.properties.custom and name it "CSSPropertyXXXXSWTHandler", where XXXX is the name of the property


- Make this new class extend "AbstractCSSPropertySWTHandler"

    public class CSSPropertyXXXXSWTHandler extends AbstractCSSPropertySWTHandler


- Within the class, create a ICSSPropertyHandler and set it equal to an instance of CSSPropertyXXXXSWTHandler

     public static final ICSSPropertyHandler INSTANCE = new CSSPropertyXXXXSWTHandler();


- Add the following two methods:

     public void applyCSSProperty(Control control, String property, CSSValue value, String pseudo, CSSEngine engine) throws Exception {}
     public String retrieveCSSProperty(Control control, String property, String pseudo, CSSEngine engine) throws Exception {}


- Within the applyCSSProperty method, write the code needed to apply the wanted styles. For example, for the border-visible property (CTabFolder) we write the following:

     public void applyCSSProperty(Control control, String property, CSSValue value, String pseudo, CSSEngine engine) throws Exception {
            boolean isBorderVisible = (Boolean)engine.convert(value, Boolean.class, null);
            if (control instanceof CTabFolder) {
                CTabFolder folder = (CTabFolder) control;
                folder.setBorderVisible(isBorderVisible);
            }
     }

- Within the retrieveCSSProperty method, write the code needed to retrieve the value of the applied property. Again, for border-visible, we write the following:

     public String retrieveCSSProperty(Control control, String property, String pseudo, CSSEngine engine) throws Exception {
            if (control instanceof CTabFolder) {
                CTabFolder folder = (CTabFolder) control;
                return Boolean.toString( folder.getBorderVisible() );
            }
     }

- Now, we must go in org.eclipse.e4.ui.css.swt.engine.CSSSWTEngineImpl#initializeCSSPropertyHandlers , and register the name of the property and the above class just created. We must also register the CSSPropertyHandler created in the class:

     super.registerCSSProperty("xxxx", CSSPropertyXXXXSWTHandler.class);
     super.registerCSSPropertyHandler(CSSPropertyXXXXSWTHandler.class, CSSPropertyXXXXSWTHandler.INSTANCE);

Back to the top