Skip to content

Commit

Permalink
#48 [v2.0] add content assist to tool / presets definition
Browse files Browse the repository at this point in the history
- implemented simple content assist
- disabled variables info and converters group

Signed-off-by: Andre Bossert <[email protected]>
  • Loading branch information
anb0s committed Sep 22, 2016
1 parent cc5601a commit 7298756
Show file tree
Hide file tree
Showing 3 changed files with 205 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,18 @@

package de.anbos.eclipse.easyshell.plugin.preferences;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.bindings.keys.ParseException;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.StatusDialog;
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.MouseEvent;
Expand All @@ -32,6 +41,7 @@
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter;

import de.anbos.eclipse.easyshell.plugin.Activator;
import de.anbos.eclipse.easyshell.plugin.Utils;
Expand All @@ -44,6 +54,13 @@

public class CommandDataDialog extends StatusDialog {

// experimental features
boolean useExtendedContentAssists = true;
boolean showVariablesInfo = false;
boolean showConvertersInfo = false;
// TODO: to be enabled again, see https://github.com/anb0s/EasyShell/issues/61
boolean showHelpButton = false;

private CommandData data;
private Combo resourceTypeCombo;
private Label categoryImage;
Expand Down Expand Up @@ -89,12 +106,15 @@ public Control createDialogArea(Composite parent) {

createCommandGroup(pageComponent);

createVariablesOverview(pageComponent);
if (showVariablesInfo) {
createVariablesOverview(pageComponent);
}

createConvertersOverview(pageComponent);
if (showConvertersInfo) {
createConvertersOverview(pageComponent);
}

// TODO: to be enabled again, see https://github.com/anb0s/EasyShell/issues/61
setHelpAvailable(false);
setHelpAvailable(showHelpButton);

refreshResourceTypeCombo();

Expand All @@ -121,6 +141,7 @@ private void createCommandGroup(Composite pageComponent) {
GridData data1 = new GridData(GridData.FILL_HORIZONTAL);
pageGroup1.setLayoutData(data1);
pageGroup1.setFont(pageComponent.getFont());

// create resource type combo
createResourceTypeCombo(pageGroup1);
// create category combo
Expand All @@ -134,29 +155,51 @@ private void createCommandGroup(Composite pageComponent) {
dirText = createTextField(pageGroup1, null, data.getWorkingDirectory(), false);
// create input valueText field
valueText = createTextField(pageGroup1, Activator.getResourceString("easyshell.command.editor.dialog.label.value"), data.getCommand(), true);

// add content assist to command text editor field
if (useExtendedContentAssists) {
addContentAssistExtended(valueText);
} else {
addContentAssistSimple(valueText);
}
}

private void createConvertersOverview(Composite pageComponent) {
// define group3
Group pageGroup3 = new Group(pageComponent, SWT.SHADOW_ETCHED_IN);
pageGroup3.setText(Activator.getResourceString("easyshell.command.editor.dialog.title.group3"));
pageGroup3.setToolTipText(Activator.getResourceString("easyshell.command.editor.dialog.tooltip.group3"));
GridLayout layout3 = new GridLayout();
layout3.numColumns = 2;
layout3.makeColumnsEqualWidth = false;
layout3.marginWidth = 5;
layout3.marginHeight = 4;
pageGroup3.setLayout(layout3);
GridData data3 = new GridData(GridData.FILL_HORIZONTAL);
pageGroup3.setLayoutData(data3);
pageGroup3.setFont(pageComponent.getFont());
// create converters labels
for(int i=Converter.getFirstIndex();i<Converter.values().length;i++) {
Converter conv = Converter.values()[i];
if (conv.isVisible()) {
createVariableLabel(pageGroup3, conv.getName(), ": " + conv.getDescription());
}
private void addContentAssistSimple(Text textControl) {
char[] autoActivationCharacters = new char[] { '$', '{' };
KeyStroke keyStroke = null;
try {
keyStroke = KeyStroke.getInstance("Ctrl+Space");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// assume that myTextControl has already been created in some way
List<Variable> variables = Variable.getVisibleVariables();
String[] proposals = new String [variables.size()];
for(int i=0;i<variables.size();i++) {
proposals[i] = variables.get(i).getFullVariableName();
}
ContentProposalAdapter adapter = new ContentProposalAdapter(
textControl , new TextContentAdapter(),
new SimpleContentProposalProvider(proposals),
keyStroke, autoActivationCharacters);
adapter.setPropagateKeys(false);
adapter.setFilterStyle(ContentProposalAdapter.FILTER_NONE);
//adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
}

private void addContentAssistExtended(Text textControl) {
char[] autoActivationCharacters = new char[] { '$', '{' };
Map<String, String> proposals = new LinkedHashMap<String, String>();
// add own variables
proposals.putAll(Variable.getVariableInfoMap());
// add eclipse variables
proposals.putAll(Variable.getEclipseVariableInfoMap());
ContentAssistCommandAdapter adapter = new ContentAssistCommandAdapter(textControl, new TextContentAdapter(),
new CommandVariableContentProposalProvider(proposals), null,
autoActivationCharacters, true);
adapter.setPropagateKeys(false);
adapter.setFilterStyle(ContentProposalAdapter.FILTER_NONE);
}

private void createVariablesOverview(Composite pageComponent) {
Expand All @@ -182,6 +225,29 @@ private void createVariablesOverview(Composite pageComponent) {
}
}

private void createConvertersOverview(Composite pageComponent) {
// define group3
Group pageGroup3 = new Group(pageComponent, SWT.SHADOW_ETCHED_IN);
pageGroup3.setText(Activator.getResourceString("easyshell.command.editor.dialog.title.group3"));
pageGroup3.setToolTipText(Activator.getResourceString("easyshell.command.editor.dialog.tooltip.group3"));
GridLayout layout3 = new GridLayout();
layout3.numColumns = 2;
layout3.makeColumnsEqualWidth = false;
layout3.marginWidth = 5;
layout3.marginHeight = 4;
pageGroup3.setLayout(layout3);
GridData data3 = new GridData(GridData.FILL_HORIZONTAL);
pageGroup3.setLayoutData(data3);
pageGroup3.setFont(pageComponent.getFont());
// create converters labels
for(int i=Converter.getFirstIndex();i<Converter.values().length;i++) {
Converter conv = Converter.values()[i];
if (conv.isVisible()) {
createVariableLabel(pageGroup3, conv.getName(), ": " + conv.getDescription());
}
}
}

private void createLabel(Composite parent, String name) {
Label label = new Label(parent, SWT.LEFT);
label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
Expand Down Expand Up @@ -230,12 +296,10 @@ private void createVariableLabel(Composite parent, String varText, String labelT
@Override
public void mouseUp(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mouseDown(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mouseDoubleClick(MouseEvent e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*******************************************************************************
* Copyright (c) 2014 - 2016 Andre Bossert.
* 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:
* Andre Bossert - initial API and implementation and/or initial documentation
*******************************************************************************/

package de.anbos.eclipse.easyshell.plugin.preferences;

import java.util.Map;

import org.eclipse.jface.fieldassist.ContentProposal;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalProvider;

public class CommandVariableContentProposalProvider implements IContentProposalProvider {

private ContentProposal[] contentProposals;

public CommandVariableContentProposalProvider(Map<String, String> proposals) {
setProposals(proposals);
}

@Override
public IContentProposal[] getProposals(String contents, int position) {
return contentProposals;
}

private void setProposals(Map<String, String> proposals) {
contentProposals = new ContentProposal[proposals.size()];
int i = 0;
for (Map.Entry<String, String> entry : proposals.entrySet())
{
ContentProposal proposal = new ContentProposal(entry.getKey(), entry.getValue());
contentProposals[i++] = proposal;
}
}

}
80 changes: 72 additions & 8 deletions plugin/src/de/anbos/eclipse/easyshell/plugin/types/Variable.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,20 @@
package de.anbos.eclipse.easyshell.plugin.types;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.core.variables.IDynamicVariable;
import org.eclipse.core.variables.IStringVariableManager;
import org.eclipse.core.variables.IValueVariable;
import org.eclipse.core.variables.VariablesPlugin;

import de.anbos.eclipse.easyshell.plugin.Resource;

public enum Variable {
// ${easyshell:resource_loc} == {2}
varUnknown( -1, false, "unknown", "unknown", new IVariableResolver() {
varUnknown( -1, false, "unknown", "unknown", new IVariableResolver() {
public String resolve(Resource resource) {
return "unknown";
};
Expand Down Expand Up @@ -137,18 +144,26 @@ public String resolve(Resource resource) {
// attributes
private final int id;
private final boolean visible;
private final String name;
private final String description;
private final boolean eclipse;
private String name;
private String description;
private final IVariableResolver resolver;
private final String prefix = "easyshell";
static private final String varBegin = "${";
static private final String varEnd = "}";
static private final String varParamDelimiter = ":";
static private final String varEasyShell = "easyshell";
// construct
Variable(int id, boolean visible, String name, String description, IVariableResolver resolver) {
Variable(int id, boolean visible, boolean eclipse, String name, String description, IVariableResolver resolver) {
this.id = id;
this.visible = visible;
this.eclipse=eclipse;
this.name = name;
this.description = description;
this.resolver = resolver;
}
Variable(int id, boolean visible, String name, String description, IVariableResolver resolver) {
this(id, visible, false, name, description, resolver);
}
Variable(int id, String name, String description, IVariableResolver resolver) {
this(id, true, name, description, resolver);
}
Expand All @@ -158,22 +173,36 @@ public int getId() {
public boolean isVisible() {
return visible;
}
public boolean isEclipse() {
return eclipse;
}
public String getName() {
return name;
}
public String getFullVariableName() {
return "${" + prefix + ":" + name + "}";

if (eclipse) {
return getEclipseVariableName();
} else {
return varBegin + varEasyShell + varParamDelimiter + name + varEnd;
}
}
public String getEclipseVariableName() {
return "${" + name + "}";
return varBegin + name + varEnd;
}
public String getDescription() {
return description;
}
public IVariableResolver getResolver() {
return resolver;
}
public Variable setName(String name) {
this.name = name;
return this;
}
public Variable setDescription(String description) {
this.description = description;
return this;
}
public static Variable getFromId(int id) {
Variable ret = null;
for(int i = 0; i < Variable.values().length; i++) {
Expand Down Expand Up @@ -204,6 +233,41 @@ public static List<String> getNamesAsList() {
}
return list;
}
public static List<Variable> getVariables(boolean visibleOnly) {
List<Variable> list = new ArrayList<>();
for(int i = 0; i < Variable.values().length; i++) {
if (!visibleOnly || (visibleOnly && Variable.values()[i].isVisible())) {
list.add(Variable.values()[i]);
}
}
return list;
}
public static List<Variable> getVisibleVariables() {
return getVariables(true);
}
public static Map<String, String> getVariableInfoMap(boolean visibleOnly) {
Map<String, String> map = new LinkedHashMap<String, String>();
for(Variable variable : getVariables(visibleOnly)) {
map.put(variable.getFullVariableName(), variable.getDescription());
}
return map;
}
public static Map<String, String> getVariableInfoMap() {
return getVariableInfoMap(true);
}
public static Map<String, String> getEclipseVariableInfoMap() {
Map<String, String> map = new LinkedHashMap<String, String>();
IStringVariableManager variableManager = VariablesPlugin.getDefault().getStringVariableManager();
IValueVariable[] valueVariables = variableManager.getValueVariables();
for (IValueVariable variable : valueVariables) {
map.put(varBegin + variable.getName() + varEnd, variable.getDescription());
}
IDynamicVariable[] dynamicVariables = variableManager.getDynamicVariables();
for (IDynamicVariable variable : dynamicVariables) {
map.put(varBegin + variable.getName() + varEnd, variable.getDescription());
}
return map;
}
public static int getFirstIndex() {
return 0;
}
Expand Down

0 comments on commit 7298756

Please sign in to comment.