1. 程式人生 > >eclipse 4外掛rcp支援Css切換

eclipse 4外掛rcp支援Css切換

eclipe 4以上的外掛就支援CSS主題切換的功能

plugin.xml 中擴充套件點org.eclipse.core.runtime.products、org.eclipse.e4.ui.css.swt.theme

<extension
         id="product"
         point="org.eclipse.core.runtime.products">
      <product
            application="org.eclipse.e4.ui.examples.css.rcp.application"
            name="CSS Mail Example">
         <property
               name="aboutText"
               value="CSS RCP Mail template">
         </property>
         <property
               name="windowImages"
               value="icons/sample2.gif">
         </property>
         <property
               name="aboutImage"
               value="icons/alt_about.gif">
         </property>
         <property
               name="appName"
               value="CSS Mail Example">
         </property>
         <!--一開始指定css-->
         <span style="color:#ff0000;"><strong><!--<property
            name="applicationCSS"
            value="platform:/plugin/org.eclipse.e4.ui.examples.css.rcp/css/colorful.css">
      	</property>--></strong></span>
      </product>
   </extension>
   <extension
         point="org.eclipse.e4.ui.css.swt.theme">
      <!--basestylesheeturi 指明繫結的css的位置-->
      <theme
            basestylesheeturi="<strong><span style="color:#ff0000;">css/default.css</span></strong>"
            id="org.eclipse.e4.ui.examples.css.rcp"
            label="RCP example theme">
      </theme>
      <theme
            basestylesheeturi="<span style="color:#ff0000;"><strong>css/colorful.css</strong></span>"
            id="org.eclipse.e4.ui.examples.css.colorful"
            label="Colorful Example">
      </theme>
   </extension>

ThemeHelperl類用於生成主題引擎(用於不同css之間切換)

import org.eclipse.core.runtime.Platform;
import org.eclipse.e4.ui.css.swt.theme.IThemeEngine;
import org.eclipse.e4.ui.css.swt.theme.IThemeManager;
import org.eclipse.e4.ui.examples.css.rcp.Activator;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
/**
 * 提供獲得主題引擎
 * @author Administrator
 *
 */
@SuppressWarnings("restriction")
public class ThemeHelper {
	private static IThemeEngine engine = null;
	private static Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
	public static IThemeEngine getEngine() {
		if (engine == null) {
			engine = getThemeEngine();
		}
		return engine;
	}
	private static IThemeEngine getThemeEngine() {
		BundleContext context = bundle.getBundleContext();
		ServiceReference ref = context.getServiceReference(IThemeManager.class.getName());
		IThemeManager manager = (IThemeManager) context.getService(ref);
		return manager.getEngineForDisplay(PlatformUI.getWorkbench()
				.getActiveWorkbenchWindow() == null ? Display.getCurrent()
				: PlatformUI.getWorkbench().getActiveWorkbenchWindow()
						.getShell().getDisplay());
	}
}
用於切換主題的操作
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.e4.ui.examples.css.rcp.theme.ThemeHelper;

/**
 * 切換主題的實現類
 * @author Administrator
 *
 */
public class SwitchTheme extends AbstractHandler {
	private boolean reset = false;
	private final static String USER_CSS_DEFAULT = "org.eclipse.e4.ui.examples.css.rcp";//plugin.xml中的主題ID
	private final static String USER_CSS_COLORFUL = "org.eclipse.e4.ui.examples.css.colorful";
	public Object execute(ExecutionEvent event) throws ExecutionException {
		String themeId = "";
		if (reset) { // toggle functionality of the menu item
			themeId = USER_CSS_DEFAULT;
		} else {
			themeId = USER_CSS_COLORFUL;
		}
		reset = !reset;
		ThemeHelper.getEngine().setTheme(themeId, true);
		return null;
	}

}
Plugin.xml中設定的command
<extension
         point="org.eclipse.ui.commands"><!--使用者新增選單項到相應的位置-->
     
      <command
            defaultHandler="org.eclipse.e4.ui.examples.css.rcp.handler.SwitchTheme"
            id="org.eclipse.e4.ui.examples.css.rcp.switchtheme"
            name="Switch Theme"><!--切換主題的操作-->
      </command>
   </extension><extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="false"
            locationURI="menu:org.eclipse.ui.main.menu">
         <menu
               label="Styling">
            <command
                  commandId="org.eclipse.e4.ui.examples.css.rcp.switchtheme"
                  label="Switch Styling"
                  style="push">
            </command>
         </menu>
      </menuContribution>
   </extension>
把command繫結到選單欄中
<extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="false"
            locationURI="menu:org.eclipse.ui.main.menu">
         <menu
               label="Styling">
            <command
                  commandId="org.eclipse.e4.ui.examples.css.rcp.switchtheme"
                  label="Switch Styling"
                  style="push">
            </command>
         </menu>
      </menuContribution>
   </extension>
ApplicationWorkbenchAdvisor  中可以用程式碼一開始指定某個主題
public void initialize(IWorkbenchConfigurer configurer) {
		super.initialize(configurer);
		
		/**設定系統的預設主題風格*/
		Bundle b = FrameworkUtil.getBundle(getClass());
		BundleContext context = b.getBundleContext();
		ServiceReference serviceRef = context
				.getServiceReference(IThemeManager.class.getName());
		IThemeManager themeManager = (IThemeManager) context
				.getService(serviceRef);
		final IThemeEngine engine = themeManager.getEngineForDisplay(Display
				.getCurrent());
		engine.setTheme("org.eclipse.e4.ui.examples.css.rcp", true);
		if (serviceRef != null) {
			serviceRef = null;
		}
		if (themeManager != null) {
			themeManager = null;
		}
	}
css 樣式colorful.css
CTabItem, Label, Tree, Text {
	font-family: "Arial";
}
	
Shell {
	font-size: 12;
}
CTabItem, ToolBar, Button, CBanner, CoolBar {
	font-size: 9;
	background-color: green;
}
CTabFolder, CTabItem {
    background-color: red;
}
CTabItem:selected {
    background-color: blue;
}
Text {
	font-size: 11;
	color: #666666;
	background-color: red;
}
#navigation {
	font-size: 8;
	color: orange;
	background-color: blue;
}
.messageBanner {
    background-color: yellow;
}
.messageBanner Composite, Label, Link {
    background-color: pink;
}
.messageSender {
	color: #3e9cfa;
	font-size: 11;
}
.messageDate {
	color: #808080;
	font-size: 9;
}
.messageSubjectUnRead {
    font-size: 14;
	font-style: italic;
    font-weight: bold;
	color: red;
}
.messageSubjectRead {
    font-size: 12;
	font-style: normal;
    font-weight: normal;
	color: green;
}

工程下載:http://download.csdn.net/detail/luoww1/7425369