| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
| <HTML><HEAD> |
| <META http-equiv=Content-Type content="text/html; charset=windows-1252"> |
| <META content="Microsoft FrontPage 6.0" name=GENERATOR></HEAD> |
| <BODY> |
| <H1>Universal Welcome</H1> |
| <H2>Background</H2> |
| <P>This document represents a description of a new welcome |
| implementation that will be used by Eclipse products that want to promote contributions |
| into the Welcome pages. The implementation will be provided by Eclipse platform |
| and available for use and configuration.</P> |
| <H2>The Problem</H2> |
| <P>The Welcome framework in Eclipse provides for defining welcome pages with |
| unique contribution points or 'anchors'. Other components can provide extensions |
| that add content into these anchors. Although this mechanism worked well for |
| closed solutions, it is increasingly hard to maintain for large products. Due to |
| the 'bottom-up' nature of contributions from clients into the welcome pages, it |
| is hard to control the final result and resolve conflicting contributions.</P> |
| <P>Take a provider of a reusable Eclipse feature as an example. He/she has |
| created a useful feature consisting of a number of plug-ins. The feature can |
| take part in several products, each one having its own Welcome implementation. |
| There are several problems that the feature provider will face when creating |
| Welcome contribution:</P> |
| <UL> |
| <LI>Since it must contribute into a number of different products, the feature |
| must know about the page identifiers for each of the products upfront. |
| <LI>It is entirely possible that one of the products will have a Welcome |
| implementation that is completely different from what the feature provider |
| expects; the contribution will not show up in these products |
| <LI>Even if the products share a common Welcome implementation, the importance |
| of the feature (and hence its relative position on the page) is not going to |
| be the same. The feature can be one of the most important components in the |
| product, or may be ranked as 'See Also'. Nevertheless, the feature provider is |
| asked to fully spell out the location on the target page in advance. </LI></UL> |
| <P>It is clearly obvious that the Welcome contribution of a reusable feature |
| would be much easier to develop with the following conditions in place:</P> |
| <UL> |
| <LI>Common Welcome implementation that can be counted on (as a form of an API) |
| <LI>Delayed target page resolution (so that the decision of the final position |
| of the contribution is left to the product assemblers)</LI></UL> |
| <H2>The Solution</H2> |
| <P>Based on the conclusions made in the previous section, the User Assistance |
| team now provides a recommended Welcome implementation that will be used by all products that want |
| to support better Welcome control. Eclipse Platform and SDK products will switch |
| to this implementation and others will be encouraged to follow suit.</P> |
| <P>The universal Welcome solution is based on our experience with Welcome |
| implementations and the need to have an implementation in place that |
| contributors can count on. The implementation is built using the current Welcome |
| framework which has been minimally enhanced to better support it. For this |
| reason, all existing Welcome implementation will continue to work and clients |
| will be able to switch to the new model according to their schedules. Of course, as |
| long as they don't switch, they will not reap the benefits of the new |
| implementation such as intelligent content merging, new visual solution etc.</P> |
| <h3>Design Principles</h3> |
| <P>While designing the universal welcome implementation, we started from the |
| following principles:</P> |
| <ol> |
| <li>Products should be able to point at this implementation without |
| the need to implement Welcome from scratch</li> |
| <li>Each product should be able to configure Welcome to a |
| certain degree (title, branding image, presentation theme)</li> |
| <li>A number of root pages that cover most of the products' needs will be |
| provided. However, the list of pages to show will be |
| configurable.</li> |
| <li>Visual design of the universal Welcome should be |
| sufficiently product-agnostic to better suit the increasingly componentized |
| world. It should work well with both monolithic products and 'best of bread' |
| Eclipse products composed of components created by different companies.</li> |
| <li>End-users should also be able to configure universal Welcome in a user-friendly |
| way.</li> |
| </ol> |
| <H3>Hooking to the universal Welcome</H3> |
| <p>In order to hook to the universal Welcome, developers should have a |
| product-based Eclipse application. This requires the use of the <b> |
| org.eclipse.runtime.products</b> extension point (the assumption is that the |
| product has already been defined):</p> |
| <blockquote> |
| <pre><extension |
| id="foo" |
| point="org.eclipse.core.runtime.products"> |
| <product |
| application="org.eclipse.ui.ide.workbench" |
| description="Product Foo to use for testing the universal intro" |
| name="Product Foo"> |
| </product> |
| </extension></pre> |
| </blockquote> |
| <p>For this example, assume that the extension is define in plugin.xml file |
| sitting in the bundle with the bundle id of <b>com.example.intro</b>. A |
| long-existing feature of the Eclipse intro support is the ability to hook |
| products and intros using the product-intro binding:</p> |
| <blockquote> |
| <pre><extension |
| point="org.eclipse.ui.intro"> |
| <introProductBinding |
| introId="org.eclipse.ui.intro.universal" |
| productId="com.example.intro.foo"/> |
| </extension></pre> |
| </blockquote> |
| <p>The extension above binds the universal intro implementation (<b>org.eclipse.ui.intro.universal</b>) |
| and our product id.</p> |
| <p>Universal intro customization is split between product branding properties and |
| preferences. Product branding properties are set by the product and cannot be |
| modified. They include product title, branding image and branding image text:</p> |
| <pre> <product |
| application="org.eclipse.ui.ide.workbench" |
| description="Product Foo to use for testing the universal intro" |
| name="Product Foo"> |
| <property |
| name="introTitle" |
| value="Welcome to Product Bar"/> |
| <property |
| name="introBrandingImage" |
| value="product:eclipse.png"/> |
| <property |
| name="introBrandingImageText" |
| value="XYZ Company"/> |
| </product></pre> |
| <p>Product properties whose values represent a file name relative to the product |
| bundle must be qualified with the 'product:' prefix. The following properties are |
| supported:</p> |
| <ul> |
| <li><b>introTitle</b> - the value of the property will be used at the top of |
| the root page (assuming that the current presentation theme elected to show |
| the root page title)</li> |
| <li><b>introBrandingImage</b> - the value of the property represents the |
| file name of the image to be used as the root page brand mark. The image |
| should ideally be PNG with alpha blending but other formats are also valid. |
| Image file names relative to the product bundle must have a 'product:' |
| prefix.</li> |
| <li><b>introBrandingImageText</b> - an alternative text to be used for the |
| branding image.</li> |
| <li><b>introDescription-<pageId></b> - an option description text that |
| appears below the title on each of the sections, where pageId is one of the |
| values listed further below (e.g. introDescription-overview, |
| introDescription-samples etc.). This value should be translated in |
| plugin.properties file.</li> |
| </ul> |
| <p>Second half of universal intro variables are accessible as preferences. The |
| split is due to the fact that these variables can be configured by users and are |
| exposed in the new Welcome preference page. The initial values for these preferences |
| should be placed in the 'plugin_customization.ini' file that is referenced from |
| the product extension. These preferences are:</p> |
| <ul> |
| <li><b>org.eclipse.ui.intro.universal/INTRO_ROOT_PAGES</b> - a comma-separated list of |
| root page identifiers that should be visible in the home page. Valid values |
| are:<ul> |
| <li><b>overview</b></li> |
| <li><b>firststeps</b></li> |
| <li><b>tutorials</b></li> |
| <li><b>samples</b></li> |
| <li><b>whatsnew</b></li> |
| <li><b>migrate</b></li> |
| <li><b>webresources</b></li> |
| </ul> |
| </li> |
| <li><b>org.eclipse.ui.intro.universal/INTRO_DATA</b> - a file name pointing at |
| the XML file with the page layout settings (see more about this below). The |
| file name relative to the product bundle must have 'product:' prefix.</li> |
| <li><b>org.eclipse.ui.intro/INTRO_THEME</b> - a unique identifier of the |
| presentation theme to be used for this product (read more about theme |
| support in the <a href="#enhancements">section about Welcome framework |
| enhancements</a> below). <b>Note that this preference comes from 'org.eclipse.ui.intro |
| plug-in'</b> because active theme selection is performed at the framework |
| level.</li> |
| </ul> |
| <H3>Adding Welcome Customization preference page</H3> |
| <p>The combination of product properties and default preference values can fully |
| configure the Universal Welcome if no further customization is desired. For |
| products that want to allow users to customize Welcome, a preference page is |
| available. The following code should be added to the product's plugin.xml:</p> |
| <pre> <extension |
| point="org.eclipse.ui.preferencePages"> |
| <page |
| category="org.eclipse.ui.preferencePages.Workbench" |
| class="org.eclipse.ui.intro.universal.ExtensionFactory:welcomeCustomization" |
| id="com.example.intro.introCustomization" |
| name="%introCustomizationPreference.name"> |
| <keywordReference id="org.eclipse.ui.ide.appearance"/> |
| </page> |
| </extension></pre> |
| <p>This code will add the Welcome customization preference page:</p> |
| <p align="center"> |
| <img border="0" src="home-page-prefs.png"></p> |
| <p align="left">The page allows users to select the presentation theme. The original choice is provided by the |
| theme preference in the plugin_customization.ini file. In addition, users can choose from the list of available root pages. |
| Checking the root page causes the related tab to appear at the top of the |
| dialog.</p> |
| <p align="left">When saved, this preference page will prefix the variables with |
| the product id so that it does not interfere with the settings made for other |
| products in the same workbench. Alternatively, selecting the checkbox above will |
| not prefix the variables, making the stored settings visible to all the |
| products.</p> |
| <H3>Extending the Universal Welcome</H3> |
| <p>When launching the universal Welcome configured as shown above, you will notice |
| that all of the second level page that branch off the root page have an empty |
| content area. This is because shared Welcome does not have content of its own. |
| These areas are populated using intro config extensions.</p> |
| <p>The traditional way of contributing config extensions is to specify a full |
| path of the anchor element in the target page. This method is still supported |
| but it has proven to be somewhat fragile. As mentioned before, specifying an |
| exact place where the extension will end up in the target is premature for |
| extension authors. They may not know all the products in which their extension |
| will end up, and therefore don't know where they should appear according to each |
| product's focus. In the universal Welcome, this decision is left to product |
| authors. Extension authors now have the option of specifying an incomplete |
| target path, allowing the product author to fill in the blanks.</p> |
| <p>Config extensions that want to use late target path resolution need to |
| fulfill three conditions:</p> |
| <ol> |
| <li>Config extension needs to specify a unique identifier using the 'id' |
| attribute. Extensions without the id will be ignored. This is important |
| because id will be used to refer to the extension by the product author.</li> |
| <li>Config extension needs to specify a user-friendly name using the 'name' |
| attribute. This is important if the customization preference page will be |
| used because extensions will show up in the UI.</li> |
| <li>The target path should have the following form: "page_id/@" where 'page_id' |
| is the identifier of the target page. When '/@' is detected in the target |
| path, an attempt will be made to dynamically resolve the path into the |
| expected full form.</li> |
| </ol> |
| <P>The ability to resolve extension target paths is a new intro support feature |
| in Eclipse 3.2 added to make universal Welcome more powerful. The feature itself is |
| generic in that it can be used in other Welcome implementations, not just the |
| universal one. In Eclipse 3.2, CustomizableIntroPart can accept an optional intro customizer class that can affect its behavior in several ways. One of the roles |
| of the customizer is to perform late target path resolution. Of course, as far |
| as product authors are concerned, this is all just implementation detail because |
| in universal Welcome implementation, late target path resolution is performed using |
| the data file mentioned earlier. This file is stored using the org.eclipse.ui.intro/INTRO_DATA preference.</P> |
| <P>The 'INTRO_DATA' file uses XML format and allows product authors to control |
| the content of the main Welcome pages. Welcome contribution authors are required |
| to specify only the page Id in their target paths. The rest is defined in this |
| file. The file contains a sequence of 'page' elements, each containing a number |
| of 'group' elements. Group elements specify page-relative path and have |
| contributions for children. Contribution elements are used to specify two |
| aspects: </P> |
| <BLOCKQUOTE><PRE><extensions> |
| <page id="overview"> |
| <group path="page-content/top-left"> |
| <extension id="foo1" importance="high"/> |
| <extension id="bar" importance="high"/> |
| <extension id="foo2" importance="medium"/> |
| </group> |
| <group path="page-content/top-right"> |
| <extension id="foo3" importance="low"/> |
| <extension id="foo4" importance="low"/> |
| <extension id="foo5" importance="callout"/> |
| </group> |
| <hidden> |
| <extension id="foo6"/> |
| <extension id="foo7"/> |
| </hidden> |
| </page> |
| <page id="whatsnew"> |
| ... |
| </page> |
| </extensions></PRE></BLOCKQUOTE> |
| <p>In the example above, contributions 'foo1', 'bar' and foo2' will be in the |
| left, and 'foo3', 'foo4' and 'foo5' in the right column on the page. The |
| relative order of contributions is also extracted from this file. In addition, |
| contributions are classified based on the <code>importance</code> attribute that |
| can have four valid values: <b>high</b>, <b>medium</b>, <b>low</b> and <b> |
| callout</b>, with <b>low</b> as the default. Each value has matching |
| presentation that makes it stand out on the page. First three are simply |
| different levels of importance according to the product author (note that the |
| same contribution may receive a different importance classification in two |
| separate products). The last one (<b>callout</b>) is used to single out |
| contributions that are of a completely different nature (for example, a |
| contribution that offers links to videos or animation).</p> |
| <p>Contributions that are not listed are appended after the listed contributions |
| and assigned a low importance value. This is important for contributions added |
| after the product has shipped - they still need to show up.</p> |
| <p>Contributions not relevant to the project can be hidden by explicitly listing |
| them as children of the 'hidden' element.</p> |
| <h3>Contributing into extensions</h3> |
| <p>An extension contributed into one of the root pages can itself contain |
| anchors, providing for others to add content. This causes a problem because the |
| final resolved path of the content in the extension is not known in advance. For |
| this reason, target paths for content in extensions that use late path |
| resolution must itself be resolved:</p> |
| <blockquote> |
| <pre><?xml version="1.0" encoding="utf-8" ?> |
| <introContent> |
| <extensionContent id="extra" name="Extra" alt-style="css/swt.properties" style="css/overview.css" path="overview/@"> |
| <group id="extra-group" style-id="content-group"> |
| <link label="Extra Overview link" url="<a href="http://org.eclipse.ui.intro/showPage?id=extraOverview">http://org.eclipse.ui.intro/showPage?id=extraOverview</a>" |
| id="extra-overview"> |
| <text>Showing the third-level extra page for overview</text> |
| </link> |
| <anchor id="additions"/> |
| </group> |
| </extensionContent> |
| </introContent></pre> |
| </blockquote> |
| <p>In order to contribute into the anchor 'additions' in the extension above, we |
| should use the following path: "overview/@extra/extra-group/additions". The |
| segment '@extra' will be replaced with the resolved path of the extension with |
| the id 'extra' in the 'overview' page. For example, if the extension is placed |
| in the upper left segment of the page, the resolved path will be: |
| "overview/page-content/upper-left/extra-group/additions".</p> |
| <h3>Seeding the introData file</h3> |
| <p>In addition to providing intro customization to the end users for the first |
| time, Welcome preference page will allow product authors to create the |
| introData.xml file to be used for the first startup. The procedure is simple:</p> |
| <ol> |
| <li>Launch the product for the first time</li> |
| <li>Open the Welcome preference page (a quick way to do this is from the |
| local tool bar of the Welcome view where a new tool bar button opens the |
| Preferences into the right page)</li> |
| <li>For each page, manipulate the available extensions by moving them |
| between the four page quadrants (upper-left, upper-right, lower-left, |
| lower-right) and the Available list, or moving extensions up or down within |
| the same list (relative order). Use drag and drop to get the desired |
| results.</li> |
| <li>If needed, add the separator between the extension within the quadrant.</li> |
| <li>All extensions have the default importance setting of 'Low'. To change |
| it, click on the extension image to get the drop-down list to open and pick |
| a different setting from the list (e.g. High, Medium or Callout).</li> |
| <li>Press OK to see the preferences applied to Welcome.</li> |
| <li>If satisfied, open the preference page again and press 'Save As...' |
| button.</li> |
| <li>Store the file as 'introData.xml' in the product plug-in.</li> |
| <li>Set <b>org.eclipse.ui.intro.universal/INTRO_DATA</b> preference to the value 'product:introData.xml'.</li> |
| <li>Start the product on a fresh workspace to test if the data from the file |
| has been picked up.</li> |
| </ol> |
| <H3 align="center"> |
| <img border="0" src="page-prefs.png" width="707" height="545"></H3> |
| <p>List 'Available Extensions' holds all the extensions that are currently |
| hidden. They can be moved to one of the four quadrants of each page.</p> |
| <H3>Handling multiple products</H3> |
| <p>The intent of the shared Welcome implementation is that all products that |
| want intelligent content merging should point at it instead of creating their own |
| Welcome. This |
| implies that it is possible to end up in a situation where multiple products all |
| pointing at the same shared Welcome coexist in the Eclipse workbench. Intro is |
| handling this situation as follows:</p> |
| <ul> |
| <li>Individual introData files associated with products in the workbench |
| will all be honored.</li> |
| <li>Content from multiple products will be merged in the main Welcome pages. |
| When computing the location and importance of each extension, active product |
| data will be consulted first. Only when no information is found will other |
| product data be used. This implies that if the same extension XYZ is marked |
| as 'low importance' in the active product and 'high importance' in an |
| inactive product, the active product's setting will be used ('low'). On the |
| other hand, if XYZ is missing in the active product's data, but is marked as |
| 'high importance' in an inactive product's data, 'high' setting will be |
| used.</li> |
| <li>All the single-setting properties |
| (background, title, branding image) will be taken from the active product |
| only.</li> |
| <li>Root pages to show (specified using the <b>org.eclipse.ui.intro/INTRO_ROOT_PAGES</b> |
| preference) will be computed as a union of root pages in all the products. An |
| attempt will be made to respect the order of root pages specified by the |
| active product. Pages missing in the active product's list but existing in |
| other products in the same workbench will be added at the most logical |
| place.</li> |
| </ul> |
| <p><font color="#800000">[Note: the above currently does not work - only active |
| product intro data is consulted]</font></p> |
| <H3>Following links from the main Welcome pages</H3> |
| <p>Most of the extensions coming into the main Welcome pages offer links to open |
| further pages contributed by the extensions themselves. It is recommended to |
| create these pages in such a way as to continue with the shared Welcome visual |
| design. The main requirement is to show the appropriate navigator at the top of |
| the page.</p> |
| <p>It is fairly easy to do that using the 'include' element. The idea is to |
| include the navigation content at the beginning of contributed page. Unlike the |
| current Welcome implementation, shared Welcome main pages have navigation |
| section that is different for each page. For this reason, pages that branch off |
| these pages should include the navigation from the parent page. For example:</p> |
| <blockquote> |
| <pre><?xml version="1.0" encoding="utf-8" ?> |
| <introContent> |
| <extensionContent id="extra" name="Extra" alt-style="css/swt.properties" style="css/overview.css" path="overview/@"> |
| <link label="Extra Overview link" url="<a href="http://org.eclipse.ui.intro/showPage?id=extraOverview">http://org.eclipse.ui.intro/showPage?id=extraOverview</a>" |
| id="extra-overview"> |
| <text>Showing the third-level extra page for overview</text> |
| </link> |
| </extensionContent> |
| <page id="extraOverview" <b>style="$theme$/html/overview.css"</b> style-id="page"> |
| <b><title style-id="intro-header">$introTitle$</title></b> |
| <b><group id="extra-group1" filteredFrom="swt"/></b> |
| <b><include path="overview/navigation-links"/></b> |
| <group id="page-content"> |
| <group id="content-header" label="EXTRA OVERVIEW" filteredFrom="swt"> |
| </group> |
| <text style-id="page-title" id="page-title" filteredFrom="html">EXTRA OVERVIEW</text> |
| <text style-id="page-description" id="page-description">Extra overview page description.</text> |
| <!-- Add content here --> |
| </group> |
| </page> |
| </introContent></pre> |
| </blockquote> |
| <p>The extension above contributed into the overview page contributes a link |
| that shows another page whose definition is part of the extension. Note how we |
| define the title element using substitution variable (the variable will be |
| resolved based on the product property). We also include the group 'navigation-links' that belongs to the 'overview' page at the |
| beginning of the page content definition. We also add the 'extra-group1' div |
| because it is can be used by some themes for adding additional page decoration |
| (indeed, it is used in 'Purple Mesh' theme for that exact purpose).</p> |
| <h2><a name="enhancements"></a>Enhancements of the Welcome framework in 3.2</h2> |
| <p>In order to make universal welcome possible, we made a number of enhancements |
| in the |
| Welcome framework. These enhancements are of general nature and are are |
| applicable to other Welcome implementations:</p> |
| <ul> |
| <li><b>configurer</b> attribute added to config element in |
| 'org.eclipse.ui.intro.config' extension point. The variable allows for |
| plugging in an optional configurer that extends <b> |
| org.eclipse.ui.intro.config.IntroCofigurer</b> abstract class. This supports |
| provides for computed group content, substitution variables, target path |
| resolution etc.</li> |
| <li><b>computed</b> attribute added to the <code>group</code> element in |
| the intro content schema. This attribute indicates that the children of the |
| group will be dynamically computed by the intro configurer.</li> |
| <li><b>computed</b> attribute added to the <code>launchBar</code> element in |
| the <b>org.eclipse.ui.intro.config </b>extension point. When true, the |
| shortcuts will be computed by the intro configurer.</li> |
| <li><b>bgImage</b> attribute added to the <code>group</code> and <code>page</code> |
| elements in the intro content schema. It provides for setting the background |
| image on these elements.</li> |
| <li><b>id</b> and <b>name</b> attributes added to the extensionContent |
| element in the intro content schema (see above for explanation).</li> |
| <li><b>expandable</b> boolean attribute added to the <code>group</code> |
| element. If <code>true</code>, the group will have the ability to expand and |
| collapse its children by selecting the title and/or the toggle button.</li> |
| <li>new element <b>hr</b> to be used for horizontal separators in the |
| content. Separator style is controlled by the active theme.</li> |
| </ul> |
| <h4>Welcome Themes</h4> |
| <p>New in 3.2 is support for Welcome themes. Themes can be plugged is using the |
| new element that is part of org.eclipse.ui.intro.configExtension extension |
| point. Plug-in org.eclipse.ui.intro.universal plugs in two themes:</p> |
| <pre> <extension |
| point="org.eclipse.ui.intro.configExtension"> |
| <theme |
| default="true" |
| id="org.eclipse.ui.intro.universal.circles" |
| name="%theme.name.circles" |
| path="$nl$/themes/circles" |
| previewImage="themes/circles/preview.png"> |
| <property name="launchbarBackground" |
| value="#a1c2cb"/> |
| <property name="launchbarOverviewIcon" |
| value="$theme$graphics/launchbar/overview16.png"/> |
| <property name="launchbarFirststepsIcon" |
| value="$theme$graphics/launchbar/firststeps16.png"/> |
| <property name="launchbarTutorialsIcon" |
| value="$theme$graphics/launchbar/tutorials16.png"/> |
| <property name="launchbarSamplesIcon" |
| value="$theme$graphics/launchbar/samples16.png"/> |
| <property name="launchbarWhatsnewIcon" |
| value="$theme$graphics/launchbar/whatsnew16.png"/> |
| <property name="launchbarMigrateIcon" |
| value="$theme$graphics/launchbar/migrate16.png"/> |
| <property name="launchbarWebresourcesIcon" |
| value="$theme$graphics/launchbar/webresources16.png"/> |
| </theme> |
| <theme |
| id="org.eclipse.ui.intro.universal.purpleMesh" |
| name="%theme.name.purpleMesh" |
| path="$nl$/themes/purpleMesh" |
| previewImage="themes/purpleMesh/preview.png"> |
| <property name="launchbarBackground" |
| value="#c6c3e8"/> |
| <property name="launchbarOverviewIcon" |
| value="$theme$graphics/launchbar/overview.gif"/> |
| <property name="launchbarFirststepsIcon" |
| value="$theme$graphics/launchbar/firststeps16.png"/> |
| <property name="launchbarTutorialsIcon" |
| value="$theme$graphics/launchbar/tutorials.gif"/> |
| <property name="launchbarSamplesIcon" |
| value="$theme$graphics/launchbar/samples.gif"/> |
| <property name="launchbarWhatsnewIcon" |
| value="$theme$graphics/launchbar/whatsnew.gif"/> |
| <property name="launchbarMigrateIcon" |
| value="$theme$graphics/launchbar/migrate16.png"/> |
| <property name="launchbarWebresourcesIcon" |
| value="$theme$graphics/launchbar/webresources16.png"/> |
| </theme> |
| </extension></pre> |
| <p>Each theme has a unique identifier, translatable name, preview image and a |
| path to the root theme folder. Intro plug-in does not provide any UI for theme |
| manipulation. The only way to select a theme is via the preference |
| org.eclipse.ui.intro/INTRO_THEME in plugin_customization.ini. </p> |
| <p>Theme support by itself does not make intro implementations theme-enabled. It |
| is simply a way of grouping all the presentation files (styles and images) in |
| one place that can be pointed at or switched as one. Concrete intro |
| implementations can choose to expose themes in a more substantial way (and in |
| fact Universal Welcome implementation does exactly that).</p> |
| <p>Theme-enabled intro implementation must make all the references to style and |
| presentation resources using the $theme$ substitution variable. Absolute paths |
| for images, pages, styles etc. will be computed by resolving the substitution |
| variable using the path of the currently active theme.</p> |
| <p> </p> |
| |
| </BODY></HTML> |