| /******************************************************************************* |
| * Copyright (c) 2011, 2016 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.help.ui.internal.views; |
| |
| import java.util.Observable; |
| import java.util.Observer; |
| |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.help.ui.internal.Messages; |
| import org.eclipse.help.ui.internal.util.EscapeUtils; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.action.IMenuManager; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.ui.IMemento; |
| import org.eclipse.ui.forms.AbstractFormPart; |
| import org.eclipse.ui.forms.events.HyperlinkAdapter; |
| import org.eclipse.ui.forms.events.HyperlinkEvent; |
| import org.eclipse.ui.forms.widgets.FormText; |
| import org.eclipse.ui.forms.widgets.FormToolkit; |
| import org.eclipse.ui.forms.widgets.TableWrapData; |
| import org.eclipse.ui.forms.widgets.TableWrapLayout; |
| |
| public class ScopeSelectPart extends AbstractFormPart implements IHelpPart { |
| |
| |
| public class ScopeObserver implements Observer { |
| |
| @Override |
| public void update(Observable o, Object arg) { |
| String name = ScopeState.getInstance().getScopeSetManager().getActiveSet().getName(); |
| setScopeLink(name); |
| } |
| |
| } |
| |
| private FormText scopeSetLink; |
| private Composite container; |
| private String id; |
| private ScopeObserver scopeObserver; |
| |
| public ScopeSelectPart(Composite parent, FormToolkit toolkit) { |
| container = toolkit.createComposite(parent); |
| TableWrapLayout layout = new TableWrapLayout(); |
| layout.numColumns = 1; |
| container.setLayout(layout); |
| ScopeSetManager scopeSetManager = ScopeState.getInstance().getScopeSetManager(); |
| String name = scopeSetManager.getActiveSet().getName(); |
| scopeSetLink = toolkit.createFormText(container, false); |
| setScopeLink(name); |
| scopeSetLink.addHyperlinkListener(new HyperlinkAdapter() { |
| |
| @Override |
| public void linkActivated(HyperlinkEvent e) { |
| doChangeScopeSet(); |
| } |
| }); |
| toolkit.adapt(scopeSetLink, true, true); |
| TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB); |
| td.valign = TableWrapData.MIDDLE; |
| scopeSetLink.setLayoutData(td); |
| scopeObserver = new ScopeObserver(); |
| scopeSetManager.addObserver(scopeObserver); |
| } |
| |
| private void doChangeScopeSet() { |
| ScopeSetManager scopeSetManager = ScopeState.getInstance().getScopeSetManager(); |
| ScopeSetDialog dialog = new ScopeSetDialog(container.getShell(), |
| scopeSetManager, |
| ScopeState.getInstance().getEngineManager(), true); |
| dialog.setInput(scopeSetManager); |
| dialog.create(); |
| dialog.getShell().setText(Messages.ScopeSetDialog_wtitle); |
| if (dialog.open() == ScopeSetDialog.OK) { |
| ScopeSet set = dialog.getActiveSet(); |
| if (set != null) { |
| setActiveScopeSet(set); |
| } |
| scopeSetManager.save(); |
| scopeSetManager.notifyObservers(); |
| } |
| } |
| |
| private void setActiveScopeSet(ScopeSet set) { |
| setScopeLink(set.getName()); |
| ScopeState.getInstance().getScopeSetManager().setActiveSet(set); |
| ScopeState.getInstance().getScopeSetManager().notifyObservers(); |
| } |
| |
| private void setScopeLink(String name) { |
| StringBuffer buff = new StringBuffer(); |
| StringBuffer nameBuff = new StringBuffer(); |
| nameBuff.append("</b> <a href=\"rescope\" "); //$NON-NLS-1$ |
| if (!Platform.getWS().equals(Platform.WS_GTK)) { |
| nameBuff.append(" alt=\""); //$NON-NLS-1$ |
| nameBuff.append(Messages.FederatedSearchPart_changeScopeSet); |
| nameBuff.append("\""); //$NON-NLS-1$ |
| } |
| |
| nameBuff.append(">"); //$NON-NLS-1$ |
| nameBuff.append(EscapeUtils.escapeSpecialChars(name )); |
| nameBuff.append(" </a><b>"); //$NON-NLS-1$ |
| String scopeMessage = NLS.bind(Messages.ScopeSelect_scope, nameBuff.toString()); |
| buff.append("<form><p><b>"); //$NON-NLS-1$ |
| buff.append(scopeMessage); |
| buff.append("</b></p></form>"); //$NON-NLS-1$ |
| scopeSetLink.setText(buff.toString(), true, false); |
| } |
| |
| @Override |
| public void init(ReusableHelpPart parent, String id, IMemento memento) { |
| this.id = id; |
| ScopeState.getInstance().setEngineManager(parent.getEngineManager()); |
| } |
| |
| @Override |
| public void saveState(IMemento memento) { |
| } |
| |
| @Override |
| public Control getControl() { |
| return container; |
| } |
| |
| @Override |
| public String getId() { |
| return id; |
| } |
| |
| @Override |
| public void setVisible(boolean visible) { |
| container.setVisible(visible); |
| } |
| |
| @Override |
| public boolean hasFocusControl(Control control) { |
| return false; |
| } |
| |
| @Override |
| public boolean fillContextMenu(IMenuManager manager) { |
| return false; |
| } |
| |
| @Override |
| public IAction getGlobalAction(String id) { |
| return null; |
| } |
| |
| @Override |
| public void stop() { |
| |
| } |
| |
| @Override |
| public void toggleRoleFilter() { |
| |
| } |
| |
| @Override |
| public void refilter() { |
| |
| } |
| |
| @Override |
| public void dispose() { |
| if (scopeObserver != null) { |
| ScopeState.getInstance().getScopeSetManager().deleteObserver(scopeObserver); |
| } |
| super.dispose(); |
| } |
| |
| } |