use of org.eclipse.swt.events.ControlEvent in project hale by halestudio.
the class TypeCellSelectionDialog method setupViewer.
/**
* @see eu.esdihumboldt.hale.ui.util.selector.AbstractViewerSelectionDialog#setupViewer(org.eclipse.jface.viewers.StructuredViewer,
* java.lang.Object)
*/
@Override
protected void setupViewer(final GraphViewer viewer, Cell initialSelection) {
// content and label provider
viewer.setContentProvider(new ReverseCellGraphContentProvider());
viewer.setLabelProvider(new GraphLabelProvider(viewer, HaleUI.getServiceProvider()));
// layout
final TreeLayoutAlgorithm layout = new TreeLayoutAlgorithm(TreeLayoutAlgorithm.RIGHT_LEFT);
viewer.getControl().addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent e) {
int width = viewer.getControl().getSize().x;
layout.setNodeSpace(new Dimension((width - 10) / 3, 30));
}
});
viewer.setLayoutAlgorithm(layout, true);
viewer.applyLayout();
// input and selection
AlignmentService as = PlatformUI.getWorkbench().getService(AlignmentService.class);
viewer.setInput(as.getAlignment().getTypeCells());
if (initialSelection != null)
viewer.setSelection(new StructuredSelection(initialSelection));
}
use of org.eclipse.swt.events.ControlEvent in project hale by halestudio.
the class GenericParameterPage method createField.
/**
* Creates a text field for the given function parameter and given initial
* value. Does not call updateState!
*
* @param parent the composite in which to place the text field
* @param fp the function parameter
* @param initialValue initial value or <code>null</code>
* @param fixed whether the field may never be removed under any
* circumstances (-> no remove button)
* @return the created text field
*/
private Pair<AttributeEditor<?>, Button> createField(Composite parent, final FunctionParameterDefinition fp, ParameterValue initialValue, boolean fixed) {
// create editor, button and pair
final AttributeEditor<?> editor = ParameterEditorExtension.getInstance().createEditor(parent, getWizard().getFunctionId(), fp, initialValue);
// listen to valid changes
editor.setPropertyChangeListener(new IPropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
if (AttributeEditor.IS_VALID.equals(event.getProperty()))
updateState();
}
});
// listen for resizes of the editor
// needed for the editor chooser editor
editor.getControl().addControlListener(new ControlListener() {
@Override
public void controlResized(ControlEvent e) {
/*
* call layoutAndPack() later as a call now breaks the wizard
* dialog sizing (at least on Linux) and makes the button bar
* disappear.
*/
Display.getCurrent().asyncExec(new Runnable() {
@Override
public void run() {
layoutAndPack();
}
});
}
@Override
public void controlMoved(ControlEvent e) {
// ignore
}
});
final Pair<AttributeEditor<?>, Button> pair;
final Button removeButton;
if (fixed)
removeButton = null;
else
removeButton = new Button(parent, SWT.NONE);
pair = new Pair<AttributeEditor<?>, Button>(editor, removeButton);
// configure text
editor.getControl().setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
// configure button
if (removeButton != null) {
removeButton.setImage(removeImage);
removeButton.setEnabled(false);
removeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// remove last text field
List<Pair<AttributeEditor<?>, Button>> texts = inputFields.get(fp);
texts.remove(pair);
updateState();
removeButton.dispose();
editor.getControl().dispose();
addButtons.get(fp).setEnabled(true);
if (texts.size() == fp.getMinOccurrence())
for (Pair<AttributeEditor<?>, Button> otherPair : texts) otherPair.getSecond().setEnabled(false);
layoutAndPack();
}
});
}
// add field to map
inputFields.put(fp, pair);
return pair;
}
use of org.eclipse.swt.events.ControlEvent in project hale by halestudio.
the class AlignmentView method createViewControl.
/**
* @see eu.esdihumboldt.hale.ui.views.mapping.AbstractMappingView#createViewControl(org.eclipse.swt.widgets.Composite)
*/
@Override
public void createViewControl(Composite parent) {
Composite page = new Composite(parent, SWT.NONE);
page.setLayout(GridLayoutFactory.fillDefaults().create());
// create type relation selection control
sourceTargetSelector = new SourceTargetTypeSelector(page);
sourceTargetSelector.getControl().setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).create());
sourceTargetSelector.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
getViewer().setInput(sourceTargetSelector.getSelectedCell());
if (deactivatedCellFilterAction != null) {
deactivatedCellFilterAction.setEnabled(sourceTargetSelector.isCellSelected());
if (!sourceTargetSelector.isCellSelected())
deactivatedCellFilterAction.setChecked(true);
}
refreshGraph();
}
});
// typeRelations = new ComboViewer(page, SWT.DROP_DOWN | SWT.READ_ONLY);
// typeRelations.setContentProvider(ArrayContentProvider.getInstance());
// typeRelations.setLabelProvider(new LabelProvider() {
//
// @Override
// public Image getImage(Object element) {
// if (element instanceof Cell) {
// // use function image if possible
// Cell cell = (Cell) element;
// String functionId = cell.getTransformationIdentifier();
// AbstractFunction<?> function = FunctionUtil.getFunction(functionId);
// if (function != null) {
// return functionLabels.getImage(function);
// }
// return null;
// }
//
// return super.getImage(element);
// }
//
// @Override
// public String getText(Object element) {
// if (element instanceof Cell) {
// Cell cell = (Cell) element;
//
// return CellUtil.getCellDescription(cell);
// }
//
// return super.getText(element);
// }
//
// });
// typeRelations.addSelectionChangedListener(new ISelectionChangedListener() {
//
// @Override
// public void selectionChanged(SelectionChangedEvent event) {
// updateGraph();
// }
// });
// typeRelations.getControl().setLayoutData(
// GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false)
// .create());
// create viewer
Composite viewerContainer = new Composite(page, SWT.NONE);
viewerContainer.setLayout(new FillLayout());
viewerContainer.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
super.createViewControl(viewerContainer);
updateLayout(false);
AlignmentService as = PlatformUI.getWorkbench().getService(AlignmentService.class);
// update();
as.addListener(alignmentListener = new AlignmentServiceAdapter() {
@Override
public void alignmentCleared() {
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
@Override
public void run() {
sourceTargetSelector.setSelection(StructuredSelection.EMPTY);
}
});
}
@Override
public void cellsRemoved(Iterable<Cell> cells) {
if (sourceTargetSelector.isCellSelected() && Iterables.contains(cells, sourceTargetSelector.getSelectedCell()))
sourceTargetSelector.setSelection(StructuredSelection.EMPTY);
refreshGraph();
}
@Override
public void cellsReplaced(Map<? extends Cell, ? extends Cell> cells) {
if (sourceTargetSelector.isCellSelected() && cells.keySet().contains(sourceTargetSelector.getSelectedCell()))
sourceTargetSelector.setSelection(StructuredSelection.EMPTY);
refreshGraph();
}
@Override
public void cellsAdded(Iterable<Cell> cells) {
refreshGraph();
}
@Override
public void alignmentChanged() {
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
@Override
public void run() {
sourceTargetSelector.setSelection(StructuredSelection.EMPTY);
}
});
}
@Override
public void cellsPropertyChanged(Iterable<Cell> cells, String propertyName) {
refreshGraph();
}
@Override
public void customFunctionsChanged() {
refreshGraph();
}
});
TaskService taskService = PlatformUI.getWorkbench().getService(TaskService.class);
taskService.addListener(tasksListener = new TaskServiceListener() {
@Override
public void tasksRemoved(Iterable<Task<?>> tasks) {
refreshGraph();
}
@Override
public void tasksAdded(Iterable<Task<?>> tasks) {
refreshGraph();
}
@Override
public void taskUserDataChanged(ResolvedTask<?> task) {
refreshGraph();
}
});
// initialize compatibility checkup and display
CompatibilityService cs = PlatformUI.getWorkbench().getService(CompatibilityService.class);
cs.addListener(compListener = new ExclusiveExtensionListener<CompatibilityMode, CompatibilityModeFactory>() {
@Override
public void currentObjectChanged(final CompatibilityMode arg0, final CompatibilityModeFactory arg1) {
refreshGraph();
}
});
// listen on SchemaSelections
getSite().getWorkbenchWindow().getSelectionService().addPostSelectionListener(selectionListener = new ISelectionListener() {
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if (!(selection instanceof SchemaSelection)) {
// only react on schema selections
return;
}
if (part != AlignmentView.this) {
updateRelation((SchemaSelection) selection);
}
}
});
// select type cell, if it is double clicked
getViewer().addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
if (selection.size() == 1) {
Object selected = selection.getFirstElement();
if (selected instanceof Cell && AlignmentUtil.isTypeCell((Cell) selected))
sourceTargetSelector.setSelection(selection);
}
}
});
// listen on size changes
getViewer().getControl().addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent e) {
updateLayout(true);
}
});
getViewer().setInput(new DefaultCell());
}
use of org.eclipse.swt.events.ControlEvent in project hale by halestudio.
the class MappingView method createViewControl.
@Override
public void createViewControl(Composite parent) {
super.createViewControl(parent);
updateLayout(false);
getSite().getWorkbenchWindow().getSelectionService().addPostSelectionListener(selectionListener = new ISelectionListener() {
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if (!(selection instanceof SchemaSelection)) {
// only react on schema selections
return;
}
if (part != MappingView.this) {
update((SchemaSelection) selection);
}
}
});
AlignmentService as = PlatformUI.getWorkbench().getService(AlignmentService.class);
// update();
as.addListener(alignmentListener = new AlignmentServiceAdapter() {
@Override
public void cellsRemoved(Iterable<Cell> cells) {
updateViewWithCurrentSelection(cells);
}
@Override
public void cellsReplaced(Map<? extends Cell, ? extends Cell> cells) {
List<Cell> changedCells = new ArrayList<Cell>(2);
changedCells.addAll(cells.keySet());
changedCells.addAll(cells.values());
updateViewWithCurrentSelection(changedCells);
}
@Override
public void customFunctionsChanged() {
SchemaSelection current = SchemaSelectionHelper.getSchemaSelection();
if (current != null) {
update(current);
}
}
@Override
public void cellsAdded(Iterable<Cell> cells) {
updateViewWithCurrentSelection(cells);
}
@Override
public void cellsPropertyChanged(Iterable<Cell> cells, String propertyName) {
updateViewWithCurrentSelection(cells);
}
});
TaskService taskService = PlatformUI.getWorkbench().getService(TaskService.class);
taskService.addListener(new TaskServiceListener() {
@Override
public void tasksRemoved(Iterable<Task<?>> tasks) {
updateViewWithCurrentSelection(getAffectedCells(tasks));
}
@Override
public void tasksAdded(Iterable<Task<?>> tasks) {
updateViewWithCurrentSelection(getAffectedCells(tasks));
}
@Override
public void taskUserDataChanged(ResolvedTask<?> task) {
updateViewWithCurrentSelection(getAffectedCells(Collections.singleton(task)));
}
private List<Cell> getAffectedCells(Iterable<Task<?>> tasks) {
List<Cell> affectedCells = new ArrayList<>();
tasks.forEach(t -> {
if (t.getMainContext() instanceof Cell) {
affectedCells.add((Cell) t.getMainContext());
}
});
return affectedCells;
}
});
SchemaSelection current = SchemaSelectionHelper.getSchemaSelection();
if (current != null) {
update(current);
}
// listen on size changes
getViewer().getControl().addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent e) {
updateLayout(true);
}
});
}
use of org.eclipse.swt.events.ControlEvent in project yamcs-studio by yamcs.
the class ContentProposalPopup method createDialogArea.
/*
* Creates the content area for the proposal popup. This creates a table and places it inside the composite. The
* table will contain a list of all the proposals.
*
* @param parent The parent composite to contain the dialog area; must not be <code>null</code>.
*/
@Override
protected final Control createDialogArea(Composite parent) {
var wrapper = (Composite) super.createDialogArea(parent);
wrapper.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
wrapper.setLayout(new GridLayout());
// Use virtual where appropriate (see flag definition).
if (USE_VIRTUAL) {
proposalTable = new Table(wrapper, SWT.H_SCROLL | SWT.V_SCROLL | SWT.VIRTUAL | SWT.NO_FOCUS);
proposalTable.addListener(SWT.SetData, this::handleSetData);
proposalTable.addListener(SWTPaintItem, event -> {
var item = (TableItem) event.item;
var index = proposalTable.indexOf(item);
if (textLayouts != null && index < textLayouts.length && textLayouts[index] != null) {
textLayouts[index].handlePaintItemEvent(event, 20, 2);
}
var p = (Proposal) item.getData();
var image = getImage(p, index == proposalTable.getSelectionIndex());
if (image != null) {
event.gc.drawImage(image, event.x, event.y + 2);
}
});
proposalTable.addListener(SWTMeasureItem, event -> {
var item = (TableItem) event.item;
var index = proposalTable.indexOf(item);
if (textLayouts != null && index < textLayouts.length && textLayouts[index] != null) {
textLayouts[index].handleMeasureItemEvent(event);
}
});
} else {
proposalTable = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.NO_FOCUS);
}
footer = new Text(wrapper, SWT.READ_ONLY | SWT.WRAP | SWT.NO_FOCUS);
var textGridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
textGridData.heightHint = FOOTER_MINIMUM_HEIGHT;
textGridData.widthHint = 100;
footer.setLayoutData(textGridData);
// set the proposals to force population of the table.
setProposals(proposalList);
proposalTable.setHeaderVisible(false);
proposalTable.addListener(SWT.KeyDown, e -> getTargetControlListener().handleEvent(e));
proposalTable.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
// popup. Otherwise close the popup.
if (e.item == null) {
if (infoPopup != null) {
infoPopup.close();
}
} else {
var proposal = (Proposal) e.item.getData();
if (proposal != null) {
showProposalDescription();
adapter.proposalSelected(proposal);
} else {
if (infoPopup != null) {
infoPopup.close();
}
proposalTable.deselectAll();
}
}
}
// Default selection was made. Accept the current proposal.
@Override
public void widgetDefaultSelected(SelectionEvent e) {
var proposal = (Proposal) e.item.getData();
if (proposal != null) {
acceptCurrentProposal(true);
} else {
proposalTable.deselectAll();
}
}
});
// Added to solve a item resize bug on windows:
new TableColumn(proposalTable, SWT.NONE | SWT.NO_FOCUS);
proposalTable.addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent event) {
if (proposalTable.getColumnCount() > 0) {
if (proposalTable.getClientArea().width > maxItemWidth) {
proposalTable.getColumn(0).setWidth(proposalTable.getClientArea().width);
} else {
proposalTable.getColumn(0).setWidth(maxItemWidth);
}
}
}
});
return proposalTable;
}
Aggregations