Eclipse RCP Felype Santiago
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
Eclipse Rich Client Plataform Components Middleware and infrastructure Native user experience Portability Intelligent install and update Disconnected operation Development tooling support Component librarires
Uses of Eclipse RCP IBM Lotus Workspace Maestro
Uses of Eclipse RCP TAFPlus2 TaRGeT
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
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
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
Perspective A classe precisa implementar IPerspectiveFactory
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"); }
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) { }... }
Criando uma aplicação
Hello RCP
Save and Restore public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor public void initialize(IWorkbenchConfigurer configurer) { configurer.setSaveAndRestore(true); }... } O método inicialize marca o início de ciclo de vida do advisor.
Adicionando uma View
public class ContactsView extends ViewPart { public static final String ID = "org.eclipsercp.hyperbola.views.contacts"; }
Adicionando uma View public class Perspective implements IPerspectiveFactory {... public void createInitialLayout(IPageLayout layout) { layout.setEditorAreaVisible(false); layout.addView(ContactsView.ID, IPageLayout.LEFT, 1.0f, layout.getEditorArea()); }... }
View adicionada! :D
Mas e se... Nada acontecer?
Save and Restore, lembra?
Somente uma view...
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()); }... }
Adicionando Menus e ToolBar public void ApplicationWorkbenchWindowAdvisor.preWindowOpen() {... configurer.setShowMenuBar(true); configurer.setShowCoolBar(true);... }
Criando ações protected 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.
Populando o MenuBar protected 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); }
Resultado
Adicionando actions à ToolBar public 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); }... }
Adicionando actions à ToolBar protected void makeActions(IWorkbenchWindow window) {... addContactAction = new AddContactAction(window); register(addContactAction);... }
Adicionando actions à ToolBar protected void fillCoolBar(ICoolBarManager coolBar) { IToolBarManager toolbar = new ToolBarManager(coolBar.getStyle()); coolBar.add(toolbar); toolbar.add(addContactAction); }
Reusando um action protected void fillMenuBar(IMenuManager menuBar) {... hyperbolaMenu.add(addContactAction);... } Uma mesma ação pode ser colocada em vários locais diferentes.
Adicionando barra de status public void preWindowOpen() {... configurer.setShowStatusLine(true);... }
Adicionando barra de status public 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();}
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()
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.
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.
Adicionando listener ao popup do menu private void hookPopupMenu(final IWorkbenchWindow window) { // Add listener for menu pop-up trayItem.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);}
Ação para maximizar private 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); } }); }
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;
Adicionando um Editor
public class ChatEditor extends EditorPart { public static String ID = "org.eclipsercp.hyperbola.editors.chat"; }
Criando o produto Configurações do produto; Splash screen; Informações no About Dialog; etc
Configuração do produto File -> New -> Other...
Configuração do produto Especifica a aplicação e o nome que será mostrado na barra de título dela.
Program Launcher
Referências "Eclipse Rich Client Platform - Designing, Coding and Packaging Java Applications" by Jeff McAffer and Jean-Michel Lemieux."Eclipse Rich Client Platform - Designing, Coding and Packaging Java Applications" atformhttp://en.wikipedia.org/wiki/Rich_Client_Pl atform Con_RCP_Tutorial_2006.pdfhttp://wiki.eclipse.org/images/d/d9/Eclipse Con_RCP_Tutorial_2006.pdf