public class ResultView extends ViewPart { public static final String ID = "fast.resultview"; private TableViewer viewer; private TableSorter tableSorter; private ModelProvider modelProvider; /** Variables utiles pour pouvoir rafraîchir la vue*/ private Query myQuery; private String myDataSource; private String viewName; /** Action pour déclencher le rafraichissement des données de la table*/ private Action setRefreshTableAction; /** Action pour déclencher le rafraichissement automatique de la table*/ private Action setRefreshTableActionOn; /** Action pour arrêter le rafraichissement automatique de la table*/ private Action stopRefreshTableActionOff; public ResultView(){ } /** * Méthode permettant de définir le contenu de la vue */ public void createPartControl(final 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(2, false); parent.setLayout(layout); viewer = createTableViewer(parent); createActions(); createToolbar(); } public TableViewer getViewer() { return viewer; } public void setViewer(TableViewer viewer) { this.viewer = viewer; } /** * Permet de donner un titre à la vue (onglet instancié) * @param title : le nom d'un noeud selectionné dans la vue de navigation */ public void setPartName(String title) { super.setPartName(title); } /** * * @param parent * @return */ private TableViewer createTableViewer(Composite parent){ TableViewer viewer = new TableViewer(parent, SWT.FULL_SELECTION | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); //getSite().setSelectionProvider(viewer); // On active le Sorter tableSorter = new TableSorter(); viewer.setSorter(tableSorter); // Layout the viewer GridData gridData = new GridData(); gridData.verticalAlignment = GridData.FILL; gridData.horizontalSpan = 2; gridData.grabExcessHorizontalSpace = true; gridData.grabExcessVerticalSpace = true; gridData.horizontalAlignment = GridData.FILL; viewer.getControl().setLayoutData(gridData); viewer.getTable().setHeaderVisible(true); viewer.getTable().setLinesVisible(true); return viewer; } /** * Méthode permettant d'éffacer et de créer de nouvelles colonnes pour le tableViewer * @param modelProvider */ public void refreshColumns(TableViewer viewer, final ModelProvider modelProvider) { createColumns(viewer, modelProvider.getHearders()); viewer.setContentProvider(new DataRowContentProvider()); viewer.setLabelProvider(new DataRowLabelProvider()); viewer.setInput(modelProvider.getTblRows()); /** Traitement de l'onglet(instance de vue) actif * - mise à jour des statusline * - gestion du lien ResultView -> FilterView */ IWorkbenchPage activePage = ResultView.this.getViewSite().getWorkbenchWindow().getActivePage(); activePage.addPartListener(new IPartListener2(){ public void partActivated(IWorkbenchPartReference partRef) { IWorkbenchPart part = partRef.getPart(false); if (ResultView.this == part){ // on reset les filters de la vue //ResultView.this.getViewer().resetFilters(); // mise à jour du nombre de lignes renvoyées sur la statusBar de résultats StatusLineContributionItem beginItem = (StatusLineContributionItem)ResultView.this.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.this.getViewSite().getActionBars().getStatusLineManager().find("middleStatusItem"); middleItem.setText("Last Update : "); // mise à jour du "next update" sur la statusBar de résultats StatusLineContributionItem endItem = (StatusLineContributionItem)ResultView.this.getViewSite().getActionBars().getStatusLineManager().find("endStatusItem"); endItem.setText("Next Update : "); /** * 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, viewName); }else // si la query de la vue est différente de la query selectionée //if(filterView.getQuery() != myQuery){ if(filterView.getFromName() != viewName){ filterView.disposeWidgets(); filterView.createWidgets(modelProvider, viewName); } } catch (PartInitException e) { Activator.getLogger().error(e.toString()); } } } public void partBroughtToTop(IWorkbenchPartReference partRef) { } public void partClosed(IWorkbenchPartReference partRef) { } public void partDeactivated(IWorkbenchPartReference partRef) { } public void partHidden(IWorkbenchPartReference partRef) { } public void partInputChanged(IWorkbenchPartReference partRef) { } public void partOpened(IWorkbenchPartReference partRef) { } public void partVisible(IWorkbenchPartReference partRef) { } }); this.setModelProvider(modelProvider); //this.myQuery = modelProvider.getQuery(); this.viewName = this.getPartName(); } /** * permet de dispoer des colonnes d'une table par ordre d'apparition * ********** Ne marche pas car rien n'est "disposé"************* * @param viewer */ public void disposeColumns (TableViewer viewer){ Table table = viewer.getTable(); if (table.getColumnCount() > 0){ for(int i = table.getColumnCount()-1; i <= 0; i--) { table.getColumn(i).dispose(); } } } /** * les colonnes sont crées avec des noms vennant de la base de données * @param viewer */ private void createColumns(final TableViewer viewer, String[] headers) { Table table = viewer.getTable(); // TODO // initialisation des bounds : leur taille devra à terme être gérée dynamiquement int[] bounds = new int [headers.length]; for (int i=0; i 0){ for(int i = table.getColumnCount()-1; i <= 0; i--) { table.getColumn(i).dispose(); } } } }