/*
* Copyright 2016 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.tableeditor.variables;
import org.eclipse.nebula.widgets.nattable.NatTable;
import org.eclipse.nebula.widgets.nattable.config.AbstractUiBindingConfiguration;
import org.eclipse.nebula.widgets.nattable.grid.GridRegion;
import org.eclipse.nebula.widgets.nattable.ui.action.IMouseAction;
import org.eclipse.nebula.widgets.nattable.ui.binding.UiBindingRegistry;
import org.eclipse.nebula.widgets.nattable.ui.matcher.CellPainterMouseEventMatcher;
import org.eclipse.nebula.widgets.nattable.ui.matcher.MouseEventMatcher;
import org.eclipse.swt.events.MouseEvent;
import org.rf.ide.core.testdata.model.table.variables.AVariable.VariableType;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.AddingToken.TokenState;
import org.robotframework.red.nattable.configs.AddingElementStyleConfiguration.DropdownImagePainter;
/**
* @author Michal Anglart
*
*/
class VariablesTableAdderStatesConfiguration extends AbstractUiBindingConfiguration {
private final VariablesDataProvider variablesDataProvider;
VariablesTableAdderStatesConfiguration(final VariablesDataProvider variablesDataProvider) {
this.variablesDataProvider = variablesDataProvider;
}
@Override
public void configureUiBindings(final UiBindingRegistry uiBindingRegistry) {
uiBindingRegistry.registerFirstMouseDownBinding(new CellPainterMouseEventMatcher(GridRegion.BODY,
MouseEventMatcher.LEFT_BUTTON, DropdownImagePainter.class),
new ChangeAdderStateAction(variablesDataProvider));
}
public enum VariablesAdderState implements TokenState {
SCALAR("scalar", VariableType.SCALAR),
LIST("list", VariableType.LIST),
DICTIONARY("dictionary", VariableType.DICTIONARY);
private String name;
private final VariableType type;
private VariablesAdderState(final String name, final VariableType type) {
this.name = name;
this.type = type;
}
@Override
public String getNewObjectTypeName() {
return name;
}
public VariableType getVariableType() {
return type;
}
}
private static class ChangeAdderStateAction implements IMouseAction {
private final VariablesDataProvider variablesDataProvider;
ChangeAdderStateAction(final VariablesDataProvider variablesDataProvider) {
this.variablesDataProvider = variablesDataProvider;
}
@Override
public void run(final NatTable natTable, final MouseEvent event) {
variablesDataProvider.switchAddderToNextState();
natTable.refresh();
}
}
}