48
Eclipse RCP Felype Santiago

Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Embed Size (px)

Citation preview

Page 1: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Eclipse RCP

Felype Santiago

Page 2: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Rich Client

• Um RCP é um software que consiste dos seguintes componentes:– Core, gerenciador do ciclo de vida;– Um framework padrão para construção;– Um toolkit de desenvolvimento portável;– Manipulação de arquivos, gerenciamento e edição de

texto;– Workbench (views, editores, perspectivas, wizards);– Gerenciador de atualizações

Page 3: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Eclipse Rich Client Plataform

• Components• Middleware and infrastructure• Native user experience• Portability• Intelligent install and update• Disconnected operation• Development tooling support• Component librarires

Page 4: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Uses of Eclipse RCP

IBM Lotus Workspace

Maestro

Page 5: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Uses of Eclipse RCP

TAFPlus2

TaRGeT

Page 6: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Perspectivas, Views e Editores

• O usuário pode organizar o conteúdo das perspectivas das seguintes formas:– Pilha de editores com outros editores;– Pilha de views com outras views;– Desencaixar views da janela principal do

Workbench;– Redimensionar views e editores e

minimizar/maximizar pilhas de views e editores

Page 7: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Application• Java Application -> main()• Eclipse Application -> Application

public class Application implements IPlatformRunnable {public Object run(Object args) throws Exception {

Display display = PlatformUI.createDisplay();...int returnCode =

PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());}

} Cria um display e inicia um Workbench Eclipse, que ficará em loop manuseando eventos. O loop só é encerrado quando a última janela é fechada.

Precisa implementar

Page 8: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Workbench Advisor

• Diz ao Workbench como se comportar– O que desenhar– Como desenhar

public String getInitialWindowPerspectiveId() {return PERSPECTIVE_ID;

}

Informa a perspectiva inicial que será mostrada

Page 9: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Perspective

A classe precisa implementar IPerspectiveFactory

Page 10: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

WorkbenchWindowAdvisor

• Toda janela da aplicação tem um advisor que é consultado durante vários pontos do ciclo de vida dela;

public void preWindowOpen() {IWorkbenchWindowConfigurer configurer = getWindowConfigurer();configurer.setInitialSize(new Point(250, 300));configurer.setShowCoolBar(false);configurer.setShowStatusLine(false);configurer.setTitle("Hyperbola");

}

Page 11: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

ActionBarAdvisor• Cria e posiciona ações no MenuBar da janela;• É instanciado no WorkbenchWindowAdvisor;

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {...

protected void makeActions(IWorkbenchWindow window) { } protected void fillMenuBar(IMenuManager menuBar) { }

...}

Page 12: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Criando uma aplicação

Page 13: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Hello RCP

Page 14: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Hello RCP

Page 15: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Save and Restorepublic class ApplicationWorkbenchAdvisor extends

WorkbenchAdvisor {...@Overridepublic void initialize(IWorkbenchConfigurer configurer) {

configurer.setSaveAndRestore(true);}...

}

O método inicialize marca o início de ciclo de vida do advisor.

Page 16: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando uma View

Page 17: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando uma View

Page 18: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando uma View

Page 19: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando uma View

public class ContactsView extends ViewPart { public static final String ID = "org.eclipsercp.hyperbola.views.contacts";}

Page 20: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando uma Viewpublic class Perspective implements IPerspectiveFactory {

...public void createInitialLayout(IPageLayout layout){

layout.setEditorAreaVisible(false);layout.addView(ContactsView.ID,

IPageLayout.LEFT, 1.0f, layout.getEditorArea());

}...

}

Page 21: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

View adicionada! :D

Page 22: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Mas e se...

Nada acontecer?

Page 23: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Save and Restore, lembra?

Page 24: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Somente uma view...

Page 25: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Pra que tab?

public class Perspective implements IPerspectiveFactory { ... public void createInitialLayout(IPageLayout layout) { layout.setEditorAreaVisible(false); layout.addStandaloneView(ContactsView.ID, false, IPageLayout.LEFT, 1.0f, layout.getEditorArea()); } ...}

Page 26: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando Menus e ToolBarpublic void

ApplicationWorkbenchWindowAdvisor.preWindowOpen() {

...configurer.setShowMenuBar(true);configurer.setShowCoolBar(true);...

}

Page 27: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Criando açõesprotected void

ApplicationActionBarAdvisor.makeActions(IWorkbenchWindow window) {

exitAction = ActionFactory.QUIT.create(window);register(exitAction);aboutAction = ActionFactory.ABOUT.create(window);register(aboutAction);

}

Na seqüência de chamada do ActionBarAdvisor, o makeActions() é chamado antes do fillMenuBar(), o que permite que uma mesma

ação seja colocada em vários locais diferentes.

Page 28: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Populando o MenuBarprotected void

ApplicationActionBarAdvisor.fillMenuBar(IMenuManager menuBar)

{MenuManager hyperbolaMenu = new MenuManager("&Hyperbola", "hyperbola");hyperbolaMenu.add(exitAction);MenuManager helpMenu = new MenuManager("&Help",

"help");helpMenu.add(aboutAction);menuBar.add(hyperbolaMenu);menuBar.add(helpMenu);

}

Page 29: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Resultado

Page 30: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando actions à ToolBarpublic class AddContactAction extends Action implements

ISelectionListener, ActionFactory.IWorkbenchAction {...public void run() {AddContactDialog d = new AddContactDialog(window.getShell());int code = d.open();if (code == Window.OK) {Object item = selection.getFirstElement();ContactsGroup group = (ContactsGroup) item;ContactsEntry entry = new ContactsEntry(group, d.getUserId(), d.getNickname(), d.getServer());group.addEntry(entry);}}...

}

Page 31: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando actions à ToolBarprotected void makeActions(IWorkbenchWindow window){

...addContactAction = new AddContactAction(window);register(addContactAction);...

}

Page 32: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando actions à ToolBarprotected void fillCoolBar(ICoolBarManager coolBar) {

IToolBarManager toolbar = new ToolBarManager(coolBar.getStyle());

coolBar.add(toolbar);toolbar.add(addContactAction);

}

Page 33: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Reusando um actionprotected void fillMenuBar(IMenuManager menuBar) {

...hyperbolaMenu.add(addContactAction);...

}

Uma mesma ação pode ser colocada em vários locais diferentes.

Page 34: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando barra de status

public void preWindowOpen() {...configurer.setShowStatusLine(true);...

}

Page 35: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando barra de statuspublic void postWindowOpen() {...

statusImage = AbstractUIPlugin.imageDescriptorFromPlugin(

"org.eclipsercp.hyperbola", IImageKeys.ONLINE).createImage();IStatusLineManager statusline = getWindowConfigurer().getActionBarConfigurer().

getStatusLineManager();statusline.setMessage(statusImage, "Online");

}public void dispose() {statusImage.dispose();}

Page 36: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Barra de status• IStatusLineManagers: Manager específico para

barra de status– setMessage(Image, String);– setErrorMessage(Image, String);– getProgressMonitor;

• Esses métodos só podem ser chamados após a criação dos controles da barra de status. Uma vez que ActionBarAdvisor.fillStatusLine() é chamado antes da criação da barra de status, esses métodos não podem ser usados nele;

• Um bom local para efetuar essas chamadas é WorkbenchWindowAdvisor.postWindowOpen()

Page 37: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Integração com a bandeja do sistema (system tray)

public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {...private TrayItem initTaskItem(IWorkbenchWindow window) {final Tray tray = window.getShell().getDisplay().getSystemTray();if (tray == null)return null;trayItem = new TrayItem(tray, SWT.NONE);trayImage = AbstractUIPlugin.imageDescriptorFromPlugin(

"org.eclipsercp.hyperbola", IImageKeys.ONLINE).createImage();trayItem.setImage(trayImage);trayItem.setToolTipText("Hyperbola");return trayItem;}...

}

O SO não dá suporte a system tray.

Page 38: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando funcionalidade ao tray item

public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {...public void postWindowOpen() {

…final IWorkbenchWindow window =

getWindowConfigurer().getWindow();trayItem = initTaskItem(window);if (trayItem != null) {

hookPopupMenu(window);hookMinimize(window);

}}

Adiciona listener ao popup.

Adiciona ação para minimizar.

Page 39: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando listener ao popup do menu

private void hookPopupMenu(final IWorkbenchWindow window) {// Add listener for menu pop-uptrayItem.addListener(SWT.MenuDetect, new Listener() {

public void handleEvent(Event event) {MenuManager trayMenu = new MenuManager();Menu menu =

trayMenu.createContextMenu(window.getShell());

actionBarAdvisor.fillTrayItem(trayMenu);menu.setVisible(true);

}});

}protected void ApplicationActionBarAdvisor.fillTrayItem(IMenuManager trayItem) {trayItem.add(aboutAction);trayItem.add(exitAction);}

Page 40: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Ação para maximizarprivate void hookMinimize(final IWorkbenchWindow window) {

window.getShell().addShellListener(new ShellAdapter() {public void shellIconified(ShellEvent e) {

window.getShell().setVisible(false);}

});trayItem.addListener(SWT.DefaultSelection, new Listener() {

public void handleEvent(Event event) {Shell shell = window.getShell();if (!shell.isVisible()) {

shell.setVisible(true);window.getShell().setMinimized(false);

}}

});}

Page 41: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Views e Editores

• Editores focam na função principal da aplicação;• Views provêem suporte a uma dada tarefa;• Editores são compartilhados por múltiplas

perspectivas em uma mesma janela;• Editores e views não podem ser misturados em

uma mesma pilha;• Views podem ser extraídas da janela do

Workbench;• Views podem ser mostradas sem título;

Page 42: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando um Editor

Page 43: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Adicionando um Editor

public class ChatEditor extends EditorPart {public static String ID =

"org.eclipsercp.hyperbola.editors.chat";}

Page 44: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Criando o produto

• Configurações do produto;• Splash screen;• Informações no About Dialog;• etc

Page 45: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Configuração do produtoFile -> New -> Other...

Page 46: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Configuração do produto

Especifica a aplicação e o nome que será mostrado na barra de título dela.

Page 47: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Program Launcher

Page 48: Eclipse RCP Felype Santiago. Rich Client Um RCP é um software que consiste dos seguintes componentes: –Core, gerenciador do ciclo de vida; –Um framework

Referências

• "Eclipse Rich Client Platform - Designing, Coding and Packaging Java Applications" by Jeff McAffer and Jean-Michel Lemieux.

• http://en.wikipedia.org/wiki/Rich_Client_Platform

• http://wiki.eclipse.org/images/d/d9/EclipseCon_RCP_Tutorial_2006.pdf