/* * Carrot2 project. * * Copyright (C) 2002-2016, Dawid Weiss, Stanisław Osiński. * All rights reserved. * * Refer to the full license file "carrot2.LICENSE" * in the root folder of the repository checkout or at: * http://www.carrot2.org/carrot2.LICENSE */ package org.carrot2.workbench.core.ui; import org.carrot2.core.ProcessingResult; import org.carrot2.workbench.core.helpers.ActionDelegateProxy; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IActionBars; import org.eclipse.ui.part.Page; /** * A single page internally bound to a concrete editor. */ final class ClusterTreeViewPage extends Page { private final SearchEditor editor; /* * Sync with search result updated event. */ private final SearchResultListenerAdapter editorSyncListener = new SearchResultListenerAdapter() { public void processingResultUpdated(ProcessingResult result) { showProcessingResult(); } }; /* * */ private ClusterTree clusterTree; /* * */ public ClusterTreeViewPage(SearchEditor editor) { this.editor = editor; } /* * */ @Override public void createControl(Composite parent) { clusterTree = new ClusterTree(parent, SWT.NONE); // Create toolbar. final IActionBars bars = getSite().getActionBars(); final IToolBarManager toolBarManager = bars.getToolBarManager(); toolBarManager.add(new ActionDelegateProxy( new ClusterTreeExpanderAction( ClusterTreeExpanderAction.CollapseAction.EXPAND, clusterTree, editor.getSearchResult()), IAction.AS_PUSH_BUTTON)); toolBarManager.add(new ActionDelegateProxy( new ClusterTreeExpanderAction( ClusterTreeExpanderAction.CollapseAction.COLLAPSE, clusterTree, editor.getSearchResult()), IAction.AS_PUSH_BUTTON)); bars.updateActionBars(); // Register listeners registerListeners(); // Display the current content. showProcessingResult(); // Link bidirectional selection synchronization. final SearchEditorSelectionProvider selectionProvider = (SearchEditorSelectionProvider) editor.getSite().getSelectionProvider(); new ClusterTreeSelectionAdapter( selectionProvider, clusterTree); clusterTree.setSelection(selectionProvider.getSelection()); } /* * */ @Override public Control getControl() { return clusterTree; } /* * */ @Override public void setFocus() { clusterTree.setFocus(); } /* * */ @Override public void dispose() { unregisterListeners(); clusterTree.dispose(); super.dispose(); } /** * Display current processing result associated with our editor. */ private void showProcessingResult() { final ProcessingResult current = this.editor.getSearchResult() .getProcessingResult(); if (current != null) { clusterTree.show(current); } else { clusterTree.clear(); } } /* * */ private void registerListeners() { /* Update after each change of {@link ProcessingResult} */ editor.getSearchResult().addListener(editorSyncListener); } /* * */ private void unregisterListeners() { editor.getSearchResult().removeListener(editorSyncListener); } }