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

原文地址:http://blog.csdn.net/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;

/**
 * Create at 2007-4-24,下午03:59:11<br>
 * 表现工厂
 * 
 * 
@author Brad.Wu
 * 
@version 1.0
 
*/

public   class  PresentationFactory  extends  WorkbenchPresentationFactory  {
    
private static int editorTabPosition = WorkbenchPlugin.getDefault().getPreferenceStore().getInt(
            IPreferenceConstants.EDITOR_TAB_POSITION);

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

    
public StackPresentation createEditorPresentation(Composite parent, IStackPresentationSite site) {
        DefaultTabFolder folder 
= new DefaultTabFolder(parent, editorTabPosition | SWT.BORDER, site
                .supportsState(IStackPresentationSite.STATE_MINIMIZED), site.supportsState(IStackPresentationSite.STATE_MAXIMIZED));

        
/*
         * Set the minimum characters to display, if the preference is something other than the default. This is mainly
         * intended for RCP applications or for expert users (i.e., via the plug-in customization file).
         * 
         * Bug 32789.
         
*/

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

        }


        PresentablePartFolder partFolder 
= new PresentablePartFolder(folder);

        TabbedStackPresentation result 
= new TabbedStackPresentation(site, partFolder, new EditorSystemMenu(site));

        DefaultThemeListener themeListener 
= new DefaultThemeListener(folder, result.getTheme());
        result.getTheme().addListener(themeListener);

        IDynamicPropertyMap workbenchPreferences 
= result.getPluginPreferences(WorkbenchPlugin.getDefault());

        
new DefaultMultiTabListener(workbenchPreferences, IPreferenceConstants.SHOW_MULTIPLE_EDITOR_TABS, folder);

        
new DefaultSimpleTabListener(result.getApiPreferences(), IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS, folder);

        
return result;
    }


    
class EditorSystemMenu implements ISystemMenu {
        
private MenuManager menuManager = new MenuManager();

        
private SystemMenuRestore restore;

        
private SystemMenuMove move;

        
private SystemMenuMinimize minimize;

        
private SystemMenuMaximize maximize;

        
private SystemMenuClose close;

        
private SystemMenuCloseOthers closeOthers;

        
private SystemMenuCloseAll closeAll;

        
/**
         * Create the standard view menu
         * 
         * 
@param site
         *            the site to associate the view with
         
*/

        
public EditorSystemMenu(IStackPresentationSite site) {
            restore 
= new SystemMenuRestore(site);
            move 
= new SystemMenuMove(site, WorkbenchMessages.EditorPane_moveEditor, false);
            minimize 
= new SystemMenuMinimize(site);
            maximize 
= new SystemMenuMaximize(site);
            close 
= new SystemMenuClose(site);
            closeOthers 
= new SystemMenuCloseOthers(site);
            closeAll 
= new SystemMenuCloseAll(site);

            
// Initialize system menu
                menuManager.add(new GroupMarker("misc")); //$NON-NLS-1$
                menuManager.add(new GroupMarker("restore")); //$NON-NLS-1$
                menuManager.add(new UpdatingActionContributionItem(restore));

                menuManager.add(move);
                menuManager.add(
new GroupMarker("size")); //$NON-NLS-1$
                menuManager.add(new GroupMarker("state")); //$NON-NLS-1$
                menuManager.add(new UpdatingActionContributionItem(minimize));

                menuManager.add(
new UpdatingActionContributionItem(maximize));
                menuManager.add(
new Separator("close")); //$NON-NLS-1$
                menuManager.add(close);
                menuManager.add(closeOthers);
                menuManager.add(closeAll);

                site.addSystemActions(menuManager);
            }
 // End of system menu initialization

        }


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

        
public void show(Control parent, Point displayCoordinates, IPresentablePart currentSelection) {
            restore.update();
            move.setTarget(currentSelection);
            move.update();
            minimize.update();
            maximize.update();
            close.setTarget(currentSelection);
            closeOthers.setTarget(currentSelection);
            closeAll.update();

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


        
/**
         * Dispose resources associated with this menu
         
*/

        
public void dispose() {
            menuManager.dispose();
            menuManager.removeAll();
        }

    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值