В Eclipse IDE мне очень неудобно переходить в подменю «
Окно: открыть перспективу» или «
Окно: показать вид» , а затем выбирать то, что мне нужно, в отображаемом диалоговом окне. Я был достаточно обескуражен тем, что написал простой плагин Eclipse под названием —
Перспективы и панель инструментов видов . Основная идея заключается в том, что он добавляет два выпадающих меню на панель инструментов. Используя выпадающий список, вы можете напрямую выбрать перспективу или вид, который хотите показать. В этой статье я покажу, как реализовать подключаемый модуль панели «
Перспективы и представления» .
Панель перспектив и видов
[Img_assist | NID = 4962 | название = | убывание = | ссылка = нет | ALIGN = не определено | ширина = 601 | Высота = 322]
Реализация действий
Точка расширения
Следующая точка расширения объявляет действия для отображения кнопок панели инструментов «Перспективы и виды».
Видно = «истина»
( ) атрибут элемента acitionSet делает действие всегда видно. Из источника пользователь может скрыть свои действия, используя
Окно: Перспектива настройки . Также обратите внимание, что действия отображаются в обратном порядке в файле plugin.xml.
<extension
point="org.eclipse.ui.actionSets">
<actionSet
label="Perspectives and Views Toolbar"
1 visible="true"
id="PerspectivesViewsToolbar.actionSet">
<action
class="perspectivesviewstoolbar.actions.ShowViewsPulldownMenuAction"
icon="icons/views.gif"
id="PerspectivesViewsToolbar.ViewsPulldownAction"
label="Show Views"
style="pulldown"
toolbarPath="PerspectivesViewsToolbar/additions"
tooltip="Show Views">
</action>
<action
class="perspectivesviewstoolbar.actions.ShowPerspectivesPulldownMenuAction"
icon="icons/perspectives.gif"
id="PerspectivesViewsToolbar.PerspectivesPulldownAction"
label="Show Perspectives"
style="pulldown"
toolbarPath="PerspectivesViewsToolbar/additions"
tooltip="Show Perspectives">
</action>
</actionSet>
</extension>
ShowPerspectivesPulldownMenu Action
Действие реализует
интерфейс IWorkbenchWindowPulldownDelegate
(1), что делает его выпадающим меню. Каждый раз, когда вызывается действие, вызывается метод
getMenu ()
(2) . Когда метод
getMenu () вызывается в первый раз, создается раскрывающееся меню, которое заполняется элементами меню, представляющими все перспективы, зарегистрированные в
Eclipse 3 .
package perspectivesviewstoolbar.actions;
import java.util.Arrays;
import java.util.Comparator;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IPerspectiveRegistry;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowPulldownDelegate;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.WorkbenchException;
/**
* This action shows the alphabetically sorted pull-down menu of all registered
* perspectives. Selecting the menu item shows and activates the perspective.
* The menu item for the currently active perspective is shown checked and
IWorkbenchWindowPulldownDelegate * disabled.
*
* @author Sandip V. Chitale
*
*/
public class ShowPerspectivesPulldownMenuAction implements
1 IWorkbenchWindowPulldownDelegate {
private Menu showPerspectivesPulldownMenu;
2 public Menu getMenu(Control parent) {
if (showPerspectivesPulldownMenu == null) {
// Build the menu
showPerspectivesPulldownMenu = createPerspectiveMenu(parent,
showPerspectivesPulldownMenu);
}
// Determine active perspective id
IWorkbench workbench = PlatformUI.getWorkbench();
IPerspectiveDescriptor perspective = workbench
.getActiveWorkbenchWindow().getActivePage().getPerspective();
String id = null;
if (perspective != null) {
id = perspective.getId();
}
MenuItem[] items = showPerspectivesPulldownMenu.getItems();
for (MenuItem item : items) {
if (id == null) {
// No perspective is active
item.setEnabled(true);
} else {
// Check and disable the menuItem for the active perspective
boolean equals = item.getData().equals(id);
item.setEnabled(!equals);
}
}
return showPerspectivesPulldownMenu;
}
private static Menu createPerspectiveMenu(Control parent, Menu menu) {
final IWorkbench workbench = PlatformUI.getWorkbench();
if (menu == null) {
menu = new Menu(parent);
3 IPerspectiveRegistry perspectiveRegistry = PlatformUI
.getWorkbench().getPerspectiveRegistry();
// Get all perspectives
IPerspectiveDescriptor[] perspectiveDescriptors = perspectiveRegistry
.getPerspectives();
// Sort alphabetically by label
Arrays.sort(perspectiveDescriptors,
new Comparator<IPerspectiveDescriptor>() {
public int compare(IPerspectiveDescriptor pd1,
IPerspectiveDescriptor pd2) {
return pd1.getLabel().compareTo(pd2.getLabel());
}
});
// Configure the menu items for each Perspective
for (IPerspectiveDescriptor perspectiveDescriptor : perspectiveDescriptors) {
final MenuItem menuItem = new MenuItem(menu, SWT.PUSH);
menuItem.setText(perspectiveDescriptor.getLabel());
menuItem.setImage(perspectiveDescriptor.getImageDescriptor()
.createImage());
menuItem.setData(perspectiveDescriptor.getId());
// Handle selection
menuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
try {
IPerspectiveDescriptor perspectiveDescriptorWithId = workbench
.getPerspectiveRegistry()
.findPerspectiveWithId(
(String) e.widget.getData());
if (perspectiveDescriptorWithId != null) {
workbench.showPerspective(
perspectiveDescriptorWithId.getId(),
workbench.getActiveWorkbenchWindow());
} else {
// may be delete this menuItem ?
}
} catch (WorkbenchException we) {
}
}
});
}
} else {
// Delete children
}
return menu;
}
public void dispose() {
if (showPerspectivesPulldownMenu != null) {
showPerspectivesPulldownMenu.dispose();
}
}
public void init(IWorkbenchWindow window) {
}
public void run(IAction action) {
}
public void selectionChanged(IAction action, ISelection selection) {
}
}
ShowViewsPulldownMenu Action
Действие реализует
интерфейс IWorkbenchWindowPulldownDelegate
(1), что делает его выпадающим меню. Каждый раз, когда вызывается действие, вызывается метод
getMenu ()
(2) . Когда метод
getMenu () вызывается в первый раз, создается раскрывающееся меню, которое заполняется элементами меню, представляющими все представления, зарегистрированные
3 в Eclipse.
package perspectivesviewstoolbar.actions;
import java.util.Arrays;
import java.util.Comparator;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowPulldownDelegate;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.views.IViewDescriptor;
import org.eclipse.ui.views.IViewRegistry;
/**
* This action shows the alphabetically sorted pull-down menu of all registered
* views. Selecting the menu item shows and activates the view. The menu item
* for the currently active view is shown checked and disabled.
*
* @author Sandip V. Chitale
*
*/
public class ShowViewsPulldownMenuAction implements
1 IWorkbenchWindowPulldownDelegate {
private Menu showViewsPulldownMenu;
2 public Menu getMenu(Control parent) {
if (showViewsPulldownMenu == null) {
// Build the menu
showViewsPulldownMenu = createViewsMenu(parent,
showViewsPulldownMenu);
}
// Determine the active view and use it to enable and check
// the menu items
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchPartReference activePartReference = workbench
.getActiveWorkbenchWindow().getActivePage()
.getActivePartReference();
String id = null;
if (activePartReference instanceof IViewReference) {
id = activePartReference.getId();
}
MenuItem[] items = showViewsPulldownMenu.getItems();
for (MenuItem item : items) {
if (id == null) {
// No view is active
item.setEnabled(true);
} else {
// Check and disable the menuItem for the active view
boolean equals = id.equals(item.getData());
item.setEnabled(!equals);
}
}
return showViewsPulldownMenu;
}
private static Menu createViewsMenu(Control parent, Menu menu) {
if (menu == null) {
menu = new Menu(parent);
3 IViewRegistry viewsRegistry = PlatformUI.getWorkbench()
.getViewRegistry();
// Get all views
IViewDescriptor[] viewDescriptors = viewsRegistry.getViews();
// Sort alphabetically by label
Arrays.sort(viewDescriptors, new Comparator<IViewDescriptor>() {
public int compare(IViewDescriptor vd1, IViewDescriptor vd2) {
return vd1.getLabel().compareTo(vd2.getLabel());
}
});
// Configure the menu items for each View
for (IViewDescriptor viewDescriptor : viewDescriptors) {
MenuItem menuItem = new MenuItem(menu, SWT.PUSH);
menuItem.setText(viewDescriptor.getLabel());
menuItem.setImage(viewDescriptor.getImageDescriptor()
.createImage());
menuItem.setData(viewDescriptor.getId());
// Handle selection
menuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IWorkbench workbench = PlatformUI.getWorkbench();
try {
IViewDescriptor viewWithId = workbench
.getViewRegistry().find(
(String) e.widget.getData());
if (viewWithId != null) {
IWorkbenchPage activePage = workbench
.getActiveWorkbenchWindow()
.getActivePage();
IViewPart view = activePage.showView(viewWithId
.getId(), null,
IWorkbenchPage.VIEW_CREATE);
activePage.activate(view);
} else {
// may be delete this menuItem ?
}
} catch (PartInitException pie) {
}
}
});
}
} else {
// Delete children
}
return menu;
}
public void dispose() {
if (showViewsPulldownMenu != null) {
showViewsPulldownMenu.dispose();
}
}
public void init(IWorkbenchWindow window) {
}
public void run(IAction action) {
}
public void selectionChanged(IAction action, ISelection selection) {
}
}
MANIFEST.MF
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Perspectives and Views Toolbar Plug-in
Bundle-SymbolicName: PerspectivesViewsToolbar;singleton:=true
Bundle-Version: 1.0.1
Bundle-Activator: perspectivesviewstoolbar.Activator
Bundle-Vendor: Sandip V. Chitale
Require-Bundle: org.eclipse.ui,org.eclipse.core.runtime
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Установка
В разделе ресурсов есть ссылка на jar плагина, который можно поместить в каталог плагинов вашей инсталляции Eclipse. После установки вы сможете использовать кнопки панели инструментов «Перспективы и виды».
Исходный код
Исходный код находится в jar-файле плагина. Фактически вы можете импортировать исходный проект плагина в PDE и взломать его дальше. Исходный код также доступен
здесь .
Вывод
В этом уроке мы создали простой, но полезный плагин Eclipse под названием —
Перспективы и панели инструментов видов . Он использует точки расширения actionSet для добавления полезных функций в Eclipse. Это также, как сделать действия постоянно видимыми.
Java и все товарные знаки и логотипы на основе Java являются товарными знаками или зарегистрированными товарными знаками Sun Microsystems, Inc. в США или других странах.
Ресурсы
Примечания к Eclipse Plug-в архитектуре
PDE DoES плагинов
Содействие действия к средствам Eclipse
Скачать
Перспективы и просмотра панели инструментов
Плагин
Sources