eclipse 4外掛rcp支援Css切換
阿新 • • 發佈:2019-02-14
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()); } }
Plugin.xml中設定的commandimport 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; } }
<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