blob: d196931d71af3b0a63216488d47b91a8f7e44fdb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 Remy Chi Jian Suen and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Remy Chi Jian Suen <remy.suen@gmail.com> - initial API and implementation
* IBM - ongoing development
******************************************************************************/
package org.eclipse.jface.tests.fieldassist;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.IContentProposalProvider;
import org.eclipse.jface.fieldassist.IControlContentAdapter;
import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Shell;
public abstract class AbstractFieldAssistWindow extends Window {
private Control fieldAssistControl;
private IContentProposalProvider proposalProvider;
private KeyStroke keyStroke = null;
private char[] autoActivationCharacters = null;
private int filterStyle = ContentProposalAdapter.FILTER_NONE;
private boolean propagateKeys = true;
private int acceptance = ContentProposalAdapter.PROPOSAL_INSERT;
private int autoActivationDelay = 0;
private ContentProposalAdapter adapter;
public AbstractFieldAssistWindow() {
super((Shell) null);
}
public Display getDisplay() {
return getShell().getDisplay();
}
@Override
protected Control createContents(Composite parent) {
Composite content = (Composite) super.createContents(parent);
content.setLayout(new FillLayout());
fieldAssistControl = createFieldAssistControl(parent);
Assert.isNotNull(fieldAssistControl);
adapter = createContentProposalAdapter(fieldAssistControl);
adapter.setAutoActivationDelay(autoActivationDelay);
adapter.setFilterStyle(filterStyle);
adapter.setPropagateKeys(propagateKeys);
adapter.setProposalAcceptanceStyle(acceptance);
createExtraControls(parent);
return content;
}
/**
* @param parent the SWT composite
*/
protected void createExtraControls(Composite parent) {
// default is to do nothing
}
@Override
protected Layout getLayout() {
return new FillLayout();
}
/**
* Create and return the content proposal adapter that will be used by this
* field assist window.
*
* @param control the SWT control to provide field assist for
* @return The newly created ContentProposalAdapter.
*/
protected ContentProposalAdapter createContentProposalAdapter(Control control) {
return new ContentProposalAdapter(control, getControlContentAdapter(), getContentProposalProvider(),
getKeyStroke(), getAutoActivationCharacters());
}
protected abstract IControlContentAdapter getControlContentAdapter();
public Control getFieldAssistControl() {
return fieldAssistControl;
}
protected abstract Control createFieldAssistControl(Composite parent);
public void setAutoActivationDelay(int autoActivationDelay) {
this.autoActivationDelay = autoActivationDelay;
}
public final int getAutoActivationDelay() {
return autoActivationDelay;
}
protected boolean shouldFilterProposals() {
return true;
}
protected String[] getProposals() {
return new String[] { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
}
protected char[] getAutoActivationCharacters() {
return autoActivationCharacters;
}
public void setAutoActivationCharacters(char[] autoActivationCharacters) {
this.autoActivationCharacters = autoActivationCharacters;
}
protected IContentProposalProvider createContentProposalProvider() {
SimpleContentProposalProvider proposalProvider = new SimpleContentProposalProvider(getProposals());
proposalProvider.setFiltering(shouldFilterProposals());
return proposalProvider;
}
protected IContentProposalProvider getContentProposalProvider() {
if (proposalProvider == null) {
proposalProvider = createContentProposalProvider();
}
return proposalProvider;
}
protected ContentProposalAdapter getContentProposalAdapter() {
return adapter;
}
public void setContentProposalProvider(IContentProposalProvider proposalProvider) {
this.proposalProvider = proposalProvider;
}
public void setFilterStyle(int filterStyle) {
this.filterStyle = filterStyle;
}
public void setPropagateKeys(boolean propagateKeys) {
this.propagateKeys = propagateKeys;
}
public void setProposalAcceptanceStyle(int acceptance) {
this.acceptance = acceptance;
}
protected KeyStroke getKeyStroke() {
return keyStroke;
}
public void setKeyStroke(KeyStroke keyStroke) {
this.keyStroke = keyStroke;
}
}