org.eclipse.ui.presentationFactories改变Eclipse的外观

本文介绍如何在Eclipse RCP中通过自定义PresentationFactory实现界面风格的改变,包括去除EditorPart的Tab右键菜单中的New Editor选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://blog.youkuaiyun.com/bradwoo8621/article/details/1584018

<extension point="org.eclipse.ui.presentationFactories"> <factory class="presentation.PresentationFactory" id="presentation.PresentationFactory" name="PresentationFactory"/> </extension> <extension id="product" point="org.eclipse.core.runtime.products"> <product application="application" name="Name"> <property name="preferenceCustomization" value="plugin_customization.ini"/> </product> </extension> 看这段配置.
声明了一个自定义的Presentation. 但是要让这个Presentation生效, 必须是要用Product的声明(因为我是做RCP, 所以Plug-In方式不是太关心, 理论上做Plug-In你也不太应该更改这些个内容).
plugin_customization.ini和plugin.xml在同一个目录下. 内容如下
org.eclipse.ui/presentationFactoryId=presentation.PresentationFactory

org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false

org.eclipse.ui/DOCK_PERSPECTIVE_BAR=topRight

第一行是说现在使用的是这个表现了, id和xml中的id一致.
第二行比较简单, 就是说现在tab都是圆边的了.
package presentation;

import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IWorkbenchPreferenceConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.IPreferenceConstants;
import org.eclipse.ui.internal.WorkbenchMessages;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.preferences.IDynamicPropertyMap;
import org.eclipse.ui.internal.presentations.SystemMenuClose;
import org.eclipse.ui.internal.presentations.SystemMenuCloseAll;
import org.eclipse.ui.internal.presentations.SystemMenuCloseOthers;
import org.eclipse.ui.internal.presentations.SystemMenuMaximize;
import org.eclipse.ui.internal.presentations.SystemMenuMinimize;
import org.eclipse.ui.internal.presentations.SystemMenuMove;
import org.eclipse.ui.internal.presentations.SystemMenuRestore;
import org.eclipse.ui.internal.presentations.UpdatingActionContributionItem;
import org.eclipse.ui.internal.presentations.defaultpresentation.DefaultMultiTabListener;
import org.eclipse.ui.internal.presentations.defaultpresentation.DefaultSimpleTabListener;
import org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder;
import org.eclipse.ui.internal.presentations.defaultpresentation.DefaultThemeListener;
import org.eclipse.ui.internal.presentations.util.ISystemMenu;
import org.eclipse.ui.internal.presentations.util.PresentablePartFolder;
import org.eclipse.ui.internal.presentations.util.TabbedStackPresentation;
import org.eclipse.ui.presentations.IPresentablePart;
import org.eclipse.ui.presentations.IStackPresentationSite;
import org.eclipse.ui.presentations.StackPresentation;
import org.eclipse.ui.presentations.WorkbenchPresentationFactory;

/**
*Createat2007-4-24,下午03:59:11<br>
*表现工厂
*
*
@authorBrad.Wu
*
@version1.0
*/

public class PresentationFactory extends WorkbenchPresentationFactory {
privatestaticinteditorTabPosition=WorkbenchPlugin.getDefault().getPreferenceStore().getInt(
IPreferenceConstants.EDITOR_TAB_POSITION);

/**
*(non-Javadoc)
*
*
@seeorg.eclipse.ui.presentations.AbstractPresentationFactory#createEditorPresentation(org.eclipse.swt.widgets.Composite,
*org.eclipse.ui.presentations.IStackPresentationSite)
*/

publicStackPresentationcreateEditorPresentation(Compositeparent,IStackPresentationSitesite){
DefaultTabFolderfolder
=newDefaultTabFolder(parent,editorTabPosition|SWT.BORDER,site
.supportsState(IStackPresentationSite.STATE_MINIMIZED),site.supportsState(IStackPresentationSite.STATE_MAXIMIZED));

/*
*Settheminimumcharacterstodisplay,ifthepreferenceissomethingotherthanthedefault.Thisismainly
*intendedforRCPapplicationsorforexpertusers(i.e.,viatheplug-incustomizationfile).
*
*Bug32789.
*/

finalIPreferenceStorestore=PlatformUI.getPreferenceStore();
if(store.contains(IWorkbenchPreferenceConstants.EDITOR_MINIMUM_CHARACTERS)){
finalintminimumCharacters=store.getInt(IWorkbenchPreferenceConstants.EDITOR_MINIMUM_CHARACTERS);
if(minimumCharacters>=0){
folder.setMinimumCharacters(minimumCharacters);
}

}


PresentablePartFolderpartFolder
=newPresentablePartFolder(folder);

TabbedStackPresentationresult
=newTabbedStackPresentation(site,partFolder,newEditorSystemMenu(site));

DefaultThemeListenerthemeListener
=newDefaultThemeListener(folder,result.getTheme());
result.getTheme().addListener(themeListener);

IDynamicPropertyMapworkbenchPreferences
=result.getPluginPreferences(WorkbenchPlugin.getDefault());

newDefaultMultiTabListener(workbenchPreferences,IPreferenceConstants.SHOW_MULTIPLE_EDITOR_TABS,folder);

newDefaultSimpleTabListener(result.getApiPreferences(),IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,folder);

returnresult;
}


classEditorSystemMenuimplementsISystemMenu{
privateMenuManagermenuManager=newMenuManager();

privateSystemMenuRestorerestore;

privateSystemMenuMovemove;

privateSystemMenuMinimizeminimize;

privateSystemMenuMaximizemaximize;

privateSystemMenuCloseclose;

privateSystemMenuCloseOtherscloseOthers;

privateSystemMenuCloseAllcloseAll;

/**
*Createthestandardviewmenu
*
*
@paramsite
*thesitetoassociatetheviewwith
*/

publicEditorSystemMenu(IStackPresentationSitesite){
restore
=newSystemMenuRestore(site);
move
=newSystemMenuMove(site,WorkbenchMessages.EditorPane_moveEditor,false);
minimize
=newSystemMenuMinimize(site);
maximize
=newSystemMenuMaximize(site);
close
=newSystemMenuClose(site);
closeOthers
=newSystemMenuCloseOthers(site);
closeAll
=newSystemMenuCloseAll(site);

{//Initializesystemmenu
menuManager.add(newGroupMarker("misc"));//$NON-NLS-1$
menuManager.add(newGroupMarker("restore"));//$NON-NLS-1$
menuManager.add(newUpdatingActionContributionItem(restore));

menuManager.add(move);
menuManager.add(
newGroupMarker("size"));//$NON-NLS-1$
menuManager.add(newGroupMarker("state"));//$NON-NLS-1$
menuManager.add(newUpdatingActionContributionItem(minimize));

menuManager.add(
newUpdatingActionContributionItem(maximize));
menuManager.add(
newSeparator("close"));//$NON-NLS-1$
menuManager.add(close);
menuManager.add(closeOthers);
menuManager.add(closeAll);

site.addSystemActions(menuManager);
}
//Endofsystemmenuinitialization

}


/*
*(non-Javadoc)
*
*@seeorg.eclipse.ui.internal.presentations.util.ISystemMenu#show(org.eclipse.swt.graphics.Point,
*org.eclipse.ui.presentations.IPresentablePart)
*/

publicvoidshow(Controlparent,PointdisplayCoordinates,IPresentablePartcurrentSelection){
restore.update();
move.setTarget(currentSelection);
move.update();
minimize.update();
maximize.update();
close.setTarget(currentSelection);
closeOthers.setTarget(currentSelection);
closeAll.update();

MenuaMenu
=menuManager.createContextMenu(parent);
menuManager.update(
true);
aMenu.setLocation(displayCoordinates.x,displayCoordinates.y);
aMenu.setVisible(
true);
}


/**
*Disposeresourcesassociatedwiththismenu
*/

publicvoiddispose(){
menuManager.dispose();
menuManager.removeAll();
}

}

}

上面是表现的代码, WorkbenchPresentationFactory 其实就是默认的表现. 这个表现更改的东西就是去掉了EditorPart的Tab上右键弹出菜单最后的那个"New Editor"菜单.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值