首先,在ApplicationWorkbenchWindowAdvisor类的preWindowOpen()方法中注册我们自己定制的PresentationFactory。
configurer.setPresentationFactory(new UnCloseableEditorPresentationFactory());
UnCloseableEditorPresentationFactory类继承WorkbenchPresentationFactory类,为了不影响别的GUI功能,我们只需要重写public StackPresentation createEditorPresentation(Composite parent, IStackPresentationSite site)方法中的关于设置TableFolder的部分,具体如下:
package AdminLoader;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchPreferenceConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.Workbench;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.presentations.defaultpresentation.DefaultMultiTabListener;
import org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder;
import org.eclipse.ui.internal.presentations.defaultpresentation.DefaultThemeListener;
import org.eclipse.ui.internal.presentations.defaultpresentation.EmptyTabFolder;
import org.eclipse.ui.internal.presentations.util.PresentablePartFolder;
import org.eclipse.ui.internal.presentations.util.StandardEditorSystemMenu;
import org.eclipse.ui.internal.presentations.util.StandardViewSystemMenu;
import org.eclipse.ui.internal.presentations.util.TabbedStackPresentation;
import org.eclipse.ui.presentations.IStackPresentationSite;
import org.eclipse.ui.presentations.StackPresentation;
import org.eclipse.ui.presentations.WorkbenchPresentationFactory;
public class UnCloseableEditorPresentationFactory extends
WorkbenchPresentationFactory {
// don't reset these dynamically, so just keep the information static.
// see bug:
// 75422 [Presentations] Switching presentation to R21 switches immediately,
// but only partially
private static int editorTabPosition = WorkbenchPlugin.getDefault()
.getPreferenceStore()
.getInt(IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION);
private static int viewTabPosition = WorkbenchPlugin.getDefault()
.getPreferenceStore()
.getInt(IWorkbenchPreferenceConstants.VIEW_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));
DefaultTabFolder folder = new UnCloseableEditorFolder(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 StandardEditorSystemMenu(site));
DefaultThemeListener themeListener = new DefaultThemeListener(folder,
result.getTheme());
result.getTheme().addListener(themeListener);
// RAP [bm]:
if (!Workbench.getInstance().isClosing()) {
final DefaultMultiTabListener defaultMultiTabListener = new DefaultMultiTabListener(
result.getApiPreferences(),
IWorkbenchPreferenceConstants.SHOW_MULTIPLE_EDITOR_TABS,
folder);
result.getControl().addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent event) {
defaultMultiTabListener
.attach(null,
IWorkbenchPreferenceConstants.SHOW_MULTIPLE_EDITOR_TABS,
true);
}
});
}
// RAPEND: [bm]
// RAP [bm]: tab style cannot change
// new DefaultSimpleTabListener(result.getApiPreferences(),
// IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,
// folder);
// TODO: needs SessionStoreListener too when activated
// RAPEND: [bm]
return result;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.presentations.AbstractPresentationFactory#
* createViewPresentation(org.eclipse.swt.widgets.Composite,
* org.eclipse.ui.presentations.IStackPresentationSite)
*/
public StackPresentation createViewPresentation(Composite parent,
IStackPresentationSite site) {
DefaultTabFolder folder = new DefaultTabFolder(parent, viewTabPosition
| SWT.BORDER,
site.supportsState(IStackPresentationSite.STATE_MINIMIZED),
site.supportsState(IStackPresentationSite.STATE_MAXIMIZED));
final IPreferenceStore store = PlatformUI.getPreferenceStore();
final int minimumCharacters = store
.getInt(IWorkbenchPreferenceConstants.VIEW_MINIMUM_CHARACTERS);
if (minimumCharacters >= 0) {
folder.setMinimumCharacters(minimumCharacters);
}
PresentablePartFolder partFolder = new PresentablePartFolder(folder);
folder.setUnselectedCloseVisible(false);
folder.setUnselectedImageVisible(true);
TabbedStackPresentation result = new TabbedStackPresentation(site,
partFolder, new StandardViewSystemMenu(site));
DefaultThemeListener themeListener = new DefaultThemeListener(folder,
result.getTheme());
result.getTheme().addListener(themeListener);
// RAP [bm]: not needed as tab style does not change
// new DefaultSimpleTabListener(result.getApiPreferences(),
// IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,
// folder);
// RAPEND: [bm]
return result;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.presentations.AbstractPresentationFactory#
* createStandaloneViewPresentation(org.eclipse.swt.widgets.Composite,
* org.eclipse.ui.presentations.IStackPresentationSite, boolean)
*/
public StackPresentation createStandaloneViewPresentation(Composite parent,
IStackPresentationSite site, boolean showTitle) {
if (showTitle) {
return createViewPresentation(parent, site);
}
EmptyTabFolder folder = new EmptyTabFolder(parent, true);
TabbedStackPresentation presentation = new TabbedStackPresentation(
site, folder, new StandardViewSystemMenu(site));
return presentation;
}
}
最后就是定义我们自己的UnCloseableEditorFolder了
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder;
import org.eclipse.ui.internal.presentations.util.AbstractTabItem;
public class UnCloseableEditorFolder extends DefaultTabFolder {
public UnCloseableEditorFolder(Composite parent,
int flags,boolean allowMin, boolean allowMax)
{ super(parent, flags, allowMin, allowMax); }
@SuppressWarnings("restriction")
public AbstractTabItem add(int index, int flags)
{ return super.add(index, flags ^ SWT.CLOSE); }
}
Eclipse RCP编辑器关闭按钮的屏蔽方法
最新推荐文章于 2015-08-17 17:51:49 发布
本文介绍了一种方法,用于在Eclipse环境中禁用编辑器的关闭功能,通过自定义UnCloseableEditorPresentationFactory类实现。该方法涉及重写创建编辑器呈现的方法,并定义UnCloseableEditorFolder来阻止编辑器被关闭。
摘要由CSDN通过智能技术生成