blob: 8f9021e4914a323ea7ed4aa5673fbcd14855db56 [file] [log] [blame]
/*******************************************************************************
* 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();
}
}