public class NavigationView extends ViewPart { public static final String ID = "fast.navigationview"; protected TreeViewer treeViewer; protected Text text; protected ModuleLabelProvider labelProvider; protected Module root; private Query myQuery; private String myDataSource; private ModelProvider modelProvider; /** Action pour collapse l'arbre*/ private Action collapseItemAction; /** Action pour expand l'arbre*/ private Action expandItemAction; public NavigationView() { } public void createPartControl(Composite parent){ // pour avoir le même style d'onglets que ceux d'eclipse PlatformUI.getPreferenceStore().setValue(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS, false); GridLayout layout = new GridLayout(); layout.numColumns = 1; layout.verticalSpacing = 2; layout.marginWidth = 0; layout.marginHeight = 2; parent.setLayout(layout); GridData layoutData = new GridData(); layoutData.grabExcessHorizontalSpace = true; layoutData.horizontalAlignment = GridData.FILL; treeViewer = new TreeViewer(parent); treeViewer.setContentProvider(new ModuleContentProvider()); labelProvider = new ModuleLabelProvider(); treeViewer.setLabelProvider(labelProvider); treeViewer.setUseHashlookup(true); layoutData = new GridData(); layoutData.grabExcessHorizontalSpace = true; layoutData.grabExcessVerticalSpace = true; layoutData.horizontalAlignment = GridData.FILL; layoutData.verticalAlignment = GridData.FILL; treeViewer.getControl().setLayoutData(layoutData); treeViewer.setInput(ModuleProvider.getInstance().getModules()); // ajout du selectionProvider(treeViewer) au service de selection this.getSite().setSelectionProvider(treeViewer); treeViewer.addSelectionChangedListener(new ISelectionChangedListener(){ public void selectionChanged(SelectionChangedEvent event) { TreeSelection ts = (TreeSelection)event.getSelection(); if (ts == null || ts.isEmpty()) return; String resultName = ""; Object element = ts.getFirstElement(); if (element instanceof Module) { Module modNode = (Module) element; resultName = modNode.getName(); if (treeViewer.getTree().getSelection()[0].getExpanded() == true) treeViewer.getTree().getSelection()[0].setExpanded(false); else treeViewer.getTree().getSelection()[0].setExpanded(true); treeViewer.refresh(); } else { SubModule subModNode = (SubModule) element; resultName = subModNode.getName(); myQuery = new Query(subModNode.getQuery().getName()); myDataSource = subModNode.getDataSource(); modelProvider = new ModelProvider(myQuery, myDataSource); /** * Affichage vue de résultats */ ResultView resultView = null; try { //Activation de la vue de résultats (affichage si elle existe, création si elle n'existe pas ) //ResultView resultView; IWorkbenchPage activePage = getViewSite().getWorkbenchWindow().getActivePage(); resultView = (ResultView) activePage.showView(ResultView.ID, resultName, IWorkbenchPage.VIEW_ACTIVATE); // mise à jour du nombre de lignes renvoyées sur la statusBar de résultats StatusLineContributionItem beginItem = (StatusLineContributionItem)resultView.getViewSite().getActionBars().getStatusLineManager().find("beginStatusItem"); beginItem.setText(modelProvider.getTblRows().size() + " line(s)"); //TODO : progressBar à rajouter à cet endroit // mise à jour du "last update" sur la statusBar de résultats StatusLineContributionItem middleItem = (StatusLineContributionItem)resultView.getViewSite().getActionBars().getStatusLineManager().find("middleStatusItem"); middleItem.setText("Last Update : "); // mise à jour du "next update" sur la statusBar de résultats StatusLineContributionItem endItem = (StatusLineContributionItem)resultView.getViewSite().getActionBars().getStatusLineManager().find("endStatusItem"); endItem.setText("Next Update : "); } catch (PartInitException e) { Activator.getLogger().error(e.toString()); } // TODO : rafraichir proprement la vue // si la vue ne contient pas deja des données, on lui attribue un nom, et on initialise sa tableViewer if (resultView.getViewer().getInput() == null){ resultView.setPartName(resultName); /** on sette la query et le dataSource de la ResultView * cela servira notemment pour les refresh éffectués dans cette vue */ resultView.setQuery(myQuery); resultView.setDataSource(myDataSource); //resultView.disposeColumns(resultView.getViewer()); resultView.refreshColumns(resultView.getViewer(), modelProvider); } /** * Activation ou Affichage de la vue des filtres **/ // TODO : rafraichir proprement la vue à terme try { FilterView filterView; IWorkbenchPage activePage = getViewSite().getWorkbenchWindow().getActivePage(); filterView = (FilterView)activePage.showView(FilterView.ID); // si la vue ne dispose pas de query //if(filterView.getQuery() == null){ if(filterView.getFromName() == null){ filterView.createWidgets(modelProvider, resultName); }else // si la query de la vue est différente de la query selectionée if(filterView.getFromName() != resultName){ filterView.disposeWidgets(); filterView.createWidgets(modelProvider, resultName); } } catch (PartInitException e) { Activator.getLogger().error(e.toString()); } } // mise à jour de la statusBar de la vue de navigation getViewSite().getActionBars().getStatusLineManager().setMessage("Selected : " + resultName); } }); createActions(); createToolbar(); } /** * Création des actions de la bare d'outils */ public void createActions (){ Activator.getDefault(); ImageDescriptor plus = Activator.getImageDescriptor("/icons/plus.gif"); ImageDescriptor minus = Activator.getImageDescriptor("/icons/minus.gif"); collapseItemAction = new Action ("Collapse", Action.AS_PUSH_BUTTON){ public void run(){ treeViewer.expandAll(); treeViewer.refresh(); } }; collapseItemAction.setToolTipText("Collapse all the tree"); collapseItemAction.setImageDescriptor(minus); expandItemAction = new Action("Expand", Action.AS_PUSH_BUTTON) { public void run(){ treeViewer.collapseAll(); treeViewer.refresh(); } }; expandItemAction.setToolTipText("Expand all the tree"); expandItemAction.setImageDescriptor(plus); } /** * Création de la barre d'outils de la fenêtre de navigation */ private void createToolbar() { IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager(); toolbarManager.add(collapseItemAction); toolbarManager.add(expandItemAction); } public void setFocus() { treeViewer.getControl().setFocus(); } }