Skip to content
Snippets Groups Projects
Commit ac4a6573 authored by Daniel Ratiu's avatar Daniel Ratiu
Browse files

some base classes were migrated

refs 217
parent 987d3389
No related branches found
No related tags found
No related merge requests found
......@@ -20,6 +20,7 @@ Export-Package: org.fortiss.tooling.kernel.ui,
org.fortiss.tooling.kernel.ui.extension,
org.fortiss.tooling.kernel.ui.extension.base,
org.fortiss.tooling.kernel.ui.extension.data,
org.fortiss.tooling.kernel.ui.extension.editingsupport,
org.fortiss.tooling.kernel.ui.listener,
org.fortiss.tooling.kernel.ui.service,
org.fortiss.tooling.kernel.ui.util
......@@ -56,8 +56,7 @@ public abstract class EditorBase<T extends EObject> extends EditorPart
protected final EMFDataBindingContext dbc = new EMFDataBindingContext();
/** Returns the edited object. */
// TODO: shouldn't we return T here?
public EObject getEditedObject() {
public T getEditedObject() {
return editedObject;
}
......
/*--------------------------------------------------------------------------+
$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
| |
| Copyright 2011 ForTISS GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.extension.base;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.ColumnLayout;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
/**
* Basic GEF editor based on forms.
*
* @author ratiu
* @author $Author: hoelzl $
* @version $Rev: 18709 $
* @ConQAT.Rating RED Hash:
*/
public abstract class FormsEditorBase<T extends EObject> extends EditorBase<T> {
/** Our toolkit. */
protected FormToolkit toolkit;
/** The main form. */
private ScrolledForm form;
/** Grid data factory used. */
protected final GridDataFactory gridDataFactory = GridDataFactory
.fillDefaults();
/** {@inheritDoc} */
@Override
public final void createPartControl(Composite parent) {
toolkit = new FormToolkit(parent.getDisplay());
form = toolkit.createScrolledForm(parent);
form.setText("Overview");
// + T
// .getElementTypeName(getEditedObject()));
// form.setImage(getModelElementManager().getImage(getEditedObject()));
toolkit.decorateFormHeading(form.getForm());
form.getBody().setLayout(new ColumnLayout());
createSections();
}
/** {@inheritDoc} */
@Override
public void setFocus() {
form.setFocus();
}
/** {@inheritDoc} */
@Override
public void dispose() {
toolkit.dispose();
dbc.dispose();
super.dispose();
}
/** Creates the sections for this editor. */
protected abstract void createSections();
/**
* Creates a new section and returns the client which is used to add
* controls to. The client is assigned a 3 column grid layout, but this can
* be changed.
*/
protected Composite createNewSection(String title, String description) {
final Section section = toolkit.createSection(form.getForm().getBody(),
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE
| ExpandableComposite.TITLE_BAR | Section.DESCRIPTION);
section.setText(title);
section.setDescription(description);
final Composite client = toolkit.createComposite(section);
section.setClient(client);
toolkit.paintBordersFor(client);
client.setLayout(new GridLayout(3, false));
return client;
}
}
/*--------------------------------------------------------------------------+
$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
| |
| Copyright 2011 ForTISS GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.extension.base;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
/**
* Base class configuring default table viewer.
*
* @author ratiu
* @author $Author: hoelzl $
* @version $Rev: 18709 $
* @ConQAT.Rating RED Hash:
*/
public abstract class TableViewerBase implements IStructuredContentProvider {
/** Compares content objects. */
protected abstract int compare(Viewer viewer, Object o1, Object o2);
/** Returns the content object. */
protected abstract Object getContentObject();
/** Creates the viewer columns. */
protected abstract void createColumns(TableViewer viewer);
/**
* Returns the the table widget. May be overridden by sub-classes to
* customize the widget.
*/
protected Table getTableWidget(Composite parent) {
Table table = new Table(parent, SWT.SINGLE | SWT.H_SCROLL
| SWT.V_SCROLL | SWT.FULL_SELECTION);
GridDataFactory.fillDefaults().hint(485, 250).span(1, 5).applyTo(table);
table.setLinesVisible(true);
table.setHeaderVisible(true);
return table;
}
/** Creates the table viewer on the given table. */
public TableViewer createTableViewer(Composite parent) {
TableViewer viewer = new TableViewer(getTableWidget(parent));
createColumns(viewer);
viewer.setSorter(new TableViewerSorter());
viewer.setContentProvider(this);
viewer.setInput(getContentObject());
return viewer;
}
/** Creates a simple column. */
public TableViewerColumn makeColumn(TableViewer viewer, int width,
String title, String tooltip, ColumnLabelProvider labelProvider,
EditingSupport editingSupport) {
TableViewerColumn column = new TableViewerColumn(viewer, SWT.LEFT);
column.getColumn().setWidth(width);
column.getColumn().setText(title);
column.getColumn().setToolTipText(tooltip);
column.setLabelProvider(labelProvider);
column.setEditingSupport(editingSupport);
return column;
}
/**
* ViewerSorter using {@link TableViewerBase#compare}
*
* @author hoelzlf
* @author $Author: hoelzlf $
* @version $Rev: 955 $
* @levd.rating RED Rev:
*/
private class TableViewerSorter extends ViewerSorter {
/** {@inheritDoc} */
@Override
public int compare(Viewer viewer, Object o1, Object o2) {
return TableViewerBase.this.compare(viewer, o1, o2);
}
}
}
/*--------------------------------------------------------------------------+
$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
| |
| Copyright 2011 ForTISS GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.extension.editingsupport;
import org.eclipse.core.databinding.Binding;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.conversion.IConverter;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.fortiss.tooling.kernel.ui.util.DataBindingUtils;
/**
* Abstract class implementing text cell editing support with decorated cell
* editor. The binding is created using {@link DataBindingUtils} and the
* information provided by sub-classes in the abstract methods.
* <P>
* Decoration is in effect if either {@link #getTextValidator()} or
* {@link #getTextPostConvertValidator()} returns a non-null {@link IValidator}.
*
* @author hoelzlf
* @author $Author: hoelzlf $
* @version $Rev: 1670 $
* @levd.rating RED Rev:
*/
public abstract class AbstractDecoratedTextCellDatabindingEditingSupport extends
AbstractTextCellDatabindingEditingSupport {
/** Constructor. */
public AbstractDecoratedTextCellDatabindingEditingSupport(
ColumnViewer viewer, DataBindingContext bindingContext) {
super(viewer, bindingContext);
cellEditor.getControl().setData(
DataBindingUtils.DECORATION_KEY,
new ControlDecoration(cellEditor.getControl(), SWT.LEFT
| SWT.TOP));
}
/** {@inheritDoc} */
@Override
protected Binding[] createBinding(CellEditor cellEditor, ViewerCell cell,
CellEditor editor, DataBindingContext context) {
return DataBindingUtils.performComplexTextBinding(dbc,
cellEditor.getControl(),
getModelObservableValue(cell.getElement()),
getModelToTextConverter(), getTextToModelConverter(),
getTextValidator(), getTextPostConvertValidator());
}
/** Sub-classes need to provide an {@link IObservableValue} for the model. */
protected abstract IObservableValue getModelObservableValue(Object model);
/**
* Sub-classes need to provide an {@link IConverter} that converts the model
* into its textual representation.
*/
protected abstract IConverter getModelToTextConverter();
/**
* Sub-classes need to provide an {@link IConverter} that converts a text
* into the model representation.
*/
protected abstract IConverter getTextToModelConverter();
/**
* Sub-classes should overwrite to provide a text {@link IValidator}.
*
* @return <code>null</code>, by default
*/
protected IValidator getTextValidator() {
return null;
}
/**
* Sub-classes should overwrite to provide a {@link IValidator} for the
* conversion result.
*
* @return <code>null</code>, by default
*/
protected IValidator getTextPostConvertValidator() {
return null;
}
}
\ No newline at end of file
/*--------------------------------------------------------------------------+
$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
| |
| Copyright 2011 ForTISS GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.extension.editingsupport;
import org.conqat.lib.commons.assertion.CCSMPre;
import org.eclipse.core.databinding.Binding;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationListener;
import org.eclipse.jface.viewers.ColumnViewerEditorDeactivationEvent;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.widgets.Composite;
import org.fortiss.tooling.kernel.ui.util.DataBindingUtils;
/**
* Abstract base class for inline text cell editors using data binding.
*
* @author hoelzlf
* @author $Author: hoelzlf $
* @version $Rev: 5848 $
* @levd.rating RED Rev:
*/
public abstract class AbstractTextCellDatabindingEditingSupport extends
EditingSupport {
/** Cell editor. */
protected final CellEditor cellEditor;
/** Data binding context. */
protected final DataBindingContext dbc;
/**
* Complex data bindings.
*
* @see DataBindingUtils#performComplexTextBinding(DataBindingContext,
* org.eclipse.swt.widgets.Control, IObservableValue,
* org.eclipse.core.databinding.conversion.IConverter,
* org.eclipse.core.databinding.conversion.IConverter,
* org.eclipse.core.databinding.validation.IValidator,
* org.eclipse.core.databinding.validation.IValidator)
*/
private Binding[] bindings;
/**
* Listener that destroys {@link Binding}s when the inline editor
* disappears.
*/
private final ColumnViewerEditorActivationListenerHelper activationListener = new ColumnViewerEditorActivationListenerHelper();
/** Constructor. */
public AbstractTextCellDatabindingEditingSupport(ColumnViewer viewer,
DataBindingContext bindingContext) {
super(viewer);
this.cellEditor = createCellEditor(viewer);
this.dbc = bindingContext;
}
/** Override this method to create another cell editor. */
protected CellEditor createCellEditor(ColumnViewer viewer) {
return new TextCellEditor((Composite) viewer.getControl());
}
/** {@inheritDoc} */
@Override
public final CellEditor getCellEditor(Object model) {
return cellEditor;
}
/** {@inheritDoc} */
@Override
protected boolean canEdit(Object element) {
return true;
}
/** {@inheritDoc} */
@Override
protected final Object getValue(Object element) {
// not needed
return null;
}
/** {@inheritDoc} */
@Override
protected final void setValue(Object element, Object value) {
// not needed
}
/** {@inheritDoc} */
@Override
protected void initializeCellEditorValue(CellEditor cellEditor,
ViewerCell cell) {
// reset cell editor, because null is not interpreted as empty string
// the value will be set afterwards if it is not null
this.cellEditor.setValue("");
bindings = createBinding(cellEditor, cell, this.cellEditor, dbc);
CCSMPre.isTrue(bindings != null && bindings.length > 0
&& bindings[0] != null,
"Illegal implementation: no binding returned.");
getViewer().getColumnViewerEditor().addEditorActivationListener(
activationListener);
}
/**
* Creates the current bindings. Sub-classes need to return at least one
* binding. Furthermore, the first binding needs to be the binding that
* effectively stores the value to the model. This binding's
* {@link Binding#updateTargetToModel()} is called when the inline editor is
* closed. After that all the bindings returned here are disposed.
*/
protected abstract Binding[] createBinding(CellEditor cellEditor,
ViewerCell cell, CellEditor editor, DataBindingContext context);
/** {@inheritDoc} */
@Override
protected void saveCellEditorValue(CellEditor cellEditor, ViewerCell cell) {
if (bindings != null && bindings.length > 0 && bindings[0] != null) {
bindings[0].updateTargetToModel();
}
}
/**
* This listener disposes the bindings as soon as the inline editor is
* deactivated. This assures that no binding created by
* {@link #createBinding(CellEditor, ViewerCell, CellEditor, DataBindingContext)}
* is left behind in the {@link DataBindingContext}.
*
* @author hoelzlf
* @author $Author: hoelzlf $
* @version $Rev: 5848 $
* @levd.rating RED Rev:
*/
private class ColumnViewerEditorActivationListenerHelper extends
ColumnViewerEditorActivationListener {
/** {@inheritDoc} */
@Override
public void afterEditorActivated(ColumnViewerEditorActivationEvent event) {
// do nothing
}
/** {@inheritDoc} */
@Override
public void afterEditorDeactivated(
ColumnViewerEditorDeactivationEvent event) {
if (bindings != null) {
for (final Binding binding : bindings) {
if (binding != null) {
binding.dispose();
}
}
bindings = null;
}
getViewer().getColumnViewerEditor().removeEditorActivationListener(
this);
}
/** {@inheritDoc} */
@Override
public void beforeEditorActivated(
ColumnViewerEditorActivationEvent event) {
// do nothing
}
/** {@inheritDoc} */
@Override
public void beforeEditorDeactivated(
ColumnViewerEditorDeactivationEvent event) {
// do nothing
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment