Cодержание
Руководство Eclipse RCP 4 для начинающих - e4 Workbench Application
View more Tutorials:
This document is based on:
-
Eclipse 4.5 (MARS)
-
Eclipse e4 RCP (RCP 4)
Установить Plugin WindowBuilder, это плагин, который позволяет вам делать дизайн интерфейса приложения SWT с помощью перетаскивания, очень удобно. Смотрите инструкцию установки по сслыке:
Вы можете увидеть инструкцию установки по адресу:
- TODO Link!
Для программирования приложения RCP вам нужно создать новый Java Workspace
- File/Switch Workspace/Other..

Введите:
- F:\ECLIPSE_TUTORIAL\RCP

В этой статье я покажу вам, как построить RCP приложение с самого начала (Не следуя готовому шаблону), так что я создам пустое приложение Eclipse RCP.
На Eclipse выберите:
- File/New/Other...


- Нажмите выбрать в регионе (1)
- В регионе(2) выберите "Yes" чтобы Eclipse создал RCP Project (Работающий на Desktop), в противном случае он будет создавать RAP Project (работающий на Web).

Выберите "Eclipse 4 RCP Application"

Введите:
- Java package name: org.o7planning.tutorial.rcp

Проект создан:

Запустите приложение для теста:
Щелкните правой кнопкой мыши на EclipseRCPTutorial.product выберите Run As / Eclipse, Application


Пусток приложениеEclipse 4 RCP создано с помощью Eclipse, посмотрите его структуру. Откройте файл Application.e4xmi:


Измените название приложения на "Eclipse RCP Application E4", как показано ниже.

И повторно запустите приложение:

RCP Framework имете много готовых команд, например 4 команды со следующими ID:
1. org.eclipse.ui.file.exit
- Команда Выход из приложения
- Команда открыть файл.
- Команда save editor
- Команда открыть окно About
Вы можете просмотреть список command разработанные в RCP Framework по ссылке:
Создание новой команды с названием quiteCommand, вызывает команду выхода из приложения построенная наготове в RCP Framework.


Индентично мы создаем 3 другие Command:

Команда вызова editor открытия файла выбрана.
- ID: org.eclipse.ui.file.open
- Name: openCommand
Выполните команду save (сохранить) содержимое на Editor
- ID: org.eclipse.ui.file.save
- Name: saveCommand
AboutCommand:
- ID: org.eclipse.ui.help.aboutAction
- Name: aboutCommand
Handler является классом обработки команд (command) из меню или Toolbar. При нажатии на MenuItem или Toolltem означает выполнить команду, до того, как будет выполнена команда, Handler будет выполнена раньше, вы можете отменить (cancel) выполнение команды в Handler.
Handler это классы, которые при выполнении будут выполнять задания записанные в методе аннотированные с помощью @Execute.
Я создам 4 класса Handler:
Handler это классы, которые при выполнении будут выполнять задания записанные в методе аннотированные с помощью @Execute.
Я создам 4 класса Handler:
AboutHandler.java
package org.o7planning.tutorial.rcp.handler; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Shell; public class AboutHandler { @Execute public void execute(Shell shell) { MessageDialog.openInformation(shell, "About", "Eclipse 4 RCP Application"); } }
OpenHandler.java
package org.o7planning.tutorial.rcp.handler; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; public class OpenHandler { @Execute public void execute(Shell shell){ FileDialog dialog = new FileDialog(shell); dialog.open(); } }
QuitHandler.java
package org.o7planning.tutorial.rcp.handler; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.e4.ui.workbench.IWorkbench; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Shell; public class QuitHandler { @Execute public void execute(IWorkbench workbench, Shell shell){ if (MessageDialog.openConfirm(shell, "Confirmation", "Do you want to exit?")) { workbench.close(); } } }
SaveHandler.java
package org.o7planning.tutorial.rcp.handler; import org.eclipse.e4.core.di.annotations.CanExecute; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.e4.ui.workbench.modeling.EPartService; public class SaveHandler { @CanExecute public boolean canExecute(EPartService partService) { if (partService != null) { return !partService.getDirtyParts().isEmpty(); } return false; } @Execute public void execute(EPartService partService) { partService.saveAll(false); } }
Объявить классы Handler c приложением
Чтобы объявить Handler с Application вы должны объявить ID, Handler class и Command.
Например, пользователь закрывает приложение нажимая на click menuItem Exit, этот menuItem, связанный с quiteCommand, QuiteHandler является классом обрабатывающий для этой команды (как заявлено выше), класс QuiteHandler спросит пользователя действительно ли хочет закрыть приложение, если да, будет выполняться команда quiteCommand.
Например, пользователь закрывает приложение нажимая на click menuItem Exit, этот menuItem, связанный с quiteCommand, QuiteHandler является классом обрабатывающий для этой команды (как заявлено выше), класс QuiteHandler спросит пользователя действительно ли хочет закрыть приложение, если да, будет выполняться команда quiteCommand.


Объявление других Handler индентично.

Создавать главное меню (Main menu) приложения

Введите ID главного меню, обязательно должен быть: menu: org.eclipse.ui.main.menu

Добавьте 3 подменю:
- File, Function, Help


Объявить подменю для меню File.
- Open
- Save
- Exit


Вы можете перезапустить ваше приложение:




Создание Main Toolbar с ID:
- ID: toolbar:org.eclipse.ui.main.toolbar
Добавить 2 Toolitem: open и save


Перезапустите ваше приложение:

SamplePart.java
/******************************************************************************* * Copyright (c) 2010 - 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Lars Vogel <lars.Vogel@gmail.com> - Bug 419770 *******************************************************************************/ package org.o7planning.tutorial.rcp.part; import javax.annotation.PostConstruct; import javax.inject.Inject; import org.eclipse.e4.ui.di.Focus; import org.eclipse.e4.ui.di.Persist; import org.eclipse.e4.ui.model.application.ui.MDirtyable; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; public class SamplePart { private Text txtInput; private TableViewer tableViewer; @Inject private MDirtyable dirty; @PostConstruct public void createComposite(Composite parent) { parent.setLayout(new GridLayout(1, false)); txtInput = new Text(parent, SWT.BORDER); txtInput.setMessage("Enter text to mark part as dirty"); txtInput.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { dirty.setDirty(true); } }); txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); tableViewer = new TableViewer(parent); tableViewer.add("Sample item 1"); tableViewer.add("Sample item 2"); tableViewer.add("Sample item 3"); tableViewer.add("Sample item 4"); tableViewer.add("Sample item 5"); tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); } @Focus public void setFocus() { tableViewer.getTable().setFocus(); } @Persist public void save() { dirty.setDirty(false); } }
Добавить новый PerspectiveStack. Это стек (Stack) содержащий виды (Perspective)

Добавить новые виды (Perspective)





Перезапустите приложение:

Изменения на Рart могут сделать кнопку SAVE светящейся.
