import org.simantics.g2d.layers.IEditableLayer;
import org.simantics.g2d.layers.ILayer;
import org.simantics.g2d.layers.ILayers;
+import org.simantics.g2d.layers.ILayers.ILayersListener;
import org.simantics.g2d.layers.ILayersEditor;
import org.simantics.g2d.layers.SimpleLayer;
-import org.simantics.g2d.layers.ILayersEditor.ILayersEditorListener;
import org.simantics.utils.datastructures.Arrays;
+import org.simantics.utils.datastructures.disposable.IDisposable;
+import org.simantics.utils.datastructures.disposable.IDisposeListener;
import org.simantics.utils.datastructures.hints.HintListenerAdapter;
+import org.simantics.utils.datastructures.hints.IHintContext.Key;
import org.simantics.utils.datastructures.hints.IHintListener;
import org.simantics.utils.datastructures.hints.IHintObservable;
-import org.simantics.utils.datastructures.hints.IHintContext.Key;
import org.simantics.utils.ui.ISelectionUtils;
public class DiagramLayersPage extends Page implements ILayersViewPage {
- private static final String TEXT_APPLY_FOCUS_SETTINGS = Messages.DiagramLayersPage_FocusActive;
- private static final String TOOLTIP_APPLY_FOCUS_SETTINGS = Messages.DiagramLayersPage_FocusActiveTT;
private static final String TEXT_IGNORE_FOCUS_SETTINGS = Messages.DiagramLayersPage_FocusAll;
private static final String TOOLTIP_IGNORE_FOCUS_SETTINGS = Messages.DiagramLayersPage_FocusAllTT;
- private static final String TEXT_APPLY_VISIBILITY_SETTINGS = Messages.DiagramLayersPage_ShowActive;
- private static final String TOOLTIP_APPLY_VISIBILITY_SETTINGS = Messages.DiagramLayersPage_ShowActiveTT;
private static final String TEXT_IGNORE_VISIBILITY_SETTINGS = Messages.DiagramLayersPage_ShowAll;
private static final String TOOLTIP_IGNORE_VISIBILITY_SETTINGS = Messages.DiagramLayersPage_ShowAllTT;
final private ICanvasContext context;
- final private IDiagram diagram;
private CheckboxTreeViewer viewer;
+ private Button ignoreVisibilityButton;
+ private Button ignoreFocusButton;
private Composite composite;
private TreeEditor editor;
private Collection<IElement> elements = Collections.emptySet();
-
+ private ILayersEditor layers;
+
enum Attribute {
Visible,
Focusable
}
private void redraw() {
- viewer.getControl().getDisplay().asyncExec(new Runnable() {
+ if (viewer != null) {
+ viewer.getControl().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ if (viewer.getControl().isDisposed())
+ return;
+ viewer.getControl().redraw();
+ }
+ });
+ }
+ }
+ };
+
+ final private IDisposeListener contextDisposeListener = new IDisposeListener() {
+
+ @Override
+ public void onDisposed(IDisposable sender) {
+ if (getControl() != null) getControl().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
- if (viewer.getControl().isDisposed())
- return;
- viewer.getControl().redraw();
+ dispose();
}
});
}
};
- public DiagramLayersPage(IDiagram diagram, ICanvasContext context) {
-
- assert(diagram != null);
-
- this.diagram = diagram;
+ public DiagramLayersPage(ICanvasContext context) {
this.context = context;
context.getDefaultHintContext().addKeyHintListener(Selection.SELECTION0, selectionListener);
+ context.addDisposeListener(contextDisposeListener);
}
@Override
public void dispose() {
context.getDefaultHintContext().removeKeyHintListener(Selection.SELECTION0, selectionListener);
-
+ context.removeDisposeListener(contextDisposeListener);
+ if (layers != null && layersListener != null) {
+ layers.removeLayersListener(layersListener);
+ layersListener = null;
+ }
super.dispose();
}
@Override
public void createControl(Composite parent) {
-
- final ILayersEditor layers = diagram.getHint(DiagramHints.KEY_LAYERS_EDITOR);
- layers.addListener(new ILayersEditorListener() {
-
+ composite = new Composite(parent, SWT.NONE);
+ GridLayoutFactory.fillDefaults().numColumns(4).applyTo(composite);
+
+ IDiagram diagram = context.getDefaultHintContext().getHint(DiagramHints.KEY_DIAGRAM);
+ if (diagram != null) onDiagramSet(diagram);
+ context.getDefaultHintContext().addKeyHintListener(DiagramHints.KEY_DIAGRAM, new IHintListener() {
@Override
- public void layerRemoved(ILayer layer) {
- scheduleRefresh();
+ public void hintChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) {
+ IDiagram diagram = (IDiagram)newValue;
+ onDiagramSet(diagram);
}
@Override
- public void layerAdded(ILayer layer) {
- scheduleRefresh();
+ public void hintRemoved(IHintObservable sender, Key key, Object oldValue) {
}
- @Override
- public void layerActivated(ILayer layer) {
- scheduleRefresh();
- }
+ });
+ }
+
+ private void onDiagramSet(IDiagram diagram) {
+ if (diagram != null) {
+ layers = diagram.getHint(DiagramHints.KEY_LAYERS_EDITOR);
+ if (layers != null) initialize(layers, diagram);
+ diagram.addKeyHintListener(DiagramHints.KEY_LAYERS_EDITOR, new IHintListener() {
+
+
+ @Override
+ public void hintChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) {
+ if (newValue != null) {
+ initialize(layers, diagram);
+ }
+ }
+ @Override
+ public void hintRemoved(IHintObservable sender, Key key, Object oldValue) {
+ // TODO Auto-generated method stub
+ System.out.println("REM");
+ }
- @Override
- public void layerDeactivated(ILayer layer) {
- scheduleRefresh();
- }
+ });
+ }
+ }
- @Override
- public void ignoreFocusChanged(boolean value) {
- }
+ private void initialize(ILayersEditor layers, IDiagram diagram) {
+ composite.getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ initialize2(layers, diagram);
+ }
+ });
+ }
- @Override
- public void ignoreVisibilityChanged(boolean value) {
- }
+ private ILayersListener layersListener = new ILayersListener() {
- void scheduleRefresh() {
- viewer.getControl().getDisplay().asyncExec(new Runnable() {
- @Override
- public void run() {
- viewer.refresh();
- }
- });
- }
- });
+ @Override
+ public void changed() {
+ scheduleRefresh();
+ }
- composite = new Composite(parent, SWT.NONE);
- GridLayoutFactory.fillDefaults().numColumns(4).applyTo(composite);
+ void scheduleRefresh() {
+ viewer.getControl().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ viewer.refresh();
+ ignoreVisibilityButton.setSelection(layers.getIgnoreVisibilitySettings());
+ ignoreFocusButton.setSelection(layers.getIgnoreFocusSettings());
+ if (!context.isDisposed())
+ context.getContentContext().setDirty();
+ }
+ });
+ }
+ };
+
+ private void initialize2(ILayersEditor layers, IDiagram diagram) {
+ layers.addLayersListener(layersListener);
Button addButton = new Button(composite, SWT.NONE);
addButton.setText(Messages.DiagramLayersPage_New);
if (selectIndex >= 0) {
viewer.getTree().select(all[selectIndex]);
}
+ context.getThreadAccess().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ if(context.isDisposed()) return;
+ context.getContentContext().setDirty();
+ }
+
+ });
}
@Override
}
});
- String ignoreVisibilityText = TEXT_IGNORE_VISIBILITY_SETTINGS;
- String ignoreVisibilityTooltip = TOOLTIP_IGNORE_VISIBILITY_SETTINGS;
- boolean ignoreVisibility = layers.getIgnoreVisibilitySettings();
- if (ignoreVisibility) {
- ignoreVisibilityText = TEXT_APPLY_VISIBILITY_SETTINGS;
- ignoreVisibilityTooltip = TOOLTIP_APPLY_VISIBILITY_SETTINGS;
- }
-
- final Button ignoreVisibilityButton = new Button(composite, SWT.NONE);
- ignoreVisibilityButton.setText(ignoreVisibilityText);
- ignoreVisibilityButton.setToolTipText(ignoreVisibilityTooltip);
+ ignoreVisibilityButton = new Button(composite, SWT.CHECK);
+ ignoreVisibilityButton.setText(TEXT_IGNORE_VISIBILITY_SETTINGS);
+ ignoreVisibilityButton.setToolTipText(TOOLTIP_IGNORE_VISIBILITY_SETTINGS);
+ ignoreVisibilityButton.setSelection(layers.getIgnoreVisibilitySettings());
ignoreVisibilityButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
- String ignoreText = TEXT_IGNORE_VISIBILITY_SETTINGS;
- String ignoreTooltip= TOOLTIP_IGNORE_VISIBILITY_SETTINGS;
- boolean ignore = layers.getIgnoreVisibilitySettings();
- if(!ignore) {
- ignoreText = TEXT_APPLY_VISIBILITY_SETTINGS;
- ignoreTooltip = TOOLTIP_APPLY_VISIBILITY_SETTINGS;
- layers.setIgnoreVisibilitySettings(true);
- } else {
- layers.setIgnoreVisibilitySettings(false);
- }
- ignoreVisibilityButton.setText(ignoreText);
- ignoreVisibilityButton.setToolTipText(ignoreTooltip);
- composite.layout();
+ layers.setIgnoreVisibilitySettings(!layers.getIgnoreVisibilitySettings());
context.getThreadAccess().asyncExec(new Runnable() {
@Override
});
- String ignoreFocusText = TEXT_IGNORE_FOCUS_SETTINGS;
- String ignoreFocusTooltip = TOOLTIP_IGNORE_FOCUS_SETTINGS;
- boolean ignoreFocus = layers.getIgnoreFocusSettings();
- if(ignoreFocus) {
- ignoreFocusText = TEXT_APPLY_FOCUS_SETTINGS;
- ignoreFocusTooltip = TOOLTIP_APPLY_FOCUS_SETTINGS;
- }
-
- final Button ignoreFocusButton = new Button(composite, SWT.NONE);
- ignoreFocusButton.setText(ignoreFocusText);
- ignoreFocusButton.setToolTipText(ignoreFocusTooltip);
+ ignoreFocusButton = new Button(composite, SWT.CHECK);
+ ignoreFocusButton.setText(TEXT_IGNORE_FOCUS_SETTINGS);
+ ignoreFocusButton.setToolTipText(TOOLTIP_IGNORE_FOCUS_SETTINGS);
+ ignoreFocusButton.setSelection(layers.getIgnoreFocusSettings());
ignoreFocusButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
- String ignoreText = TEXT_IGNORE_FOCUS_SETTINGS;
- String ignoreTooltip = TOOLTIP_IGNORE_FOCUS_SETTINGS;
- boolean ignore = layers.getIgnoreFocusSettings();
- if(!ignore) {
- ignoreText = TEXT_APPLY_FOCUS_SETTINGS;
- ignoreTooltip = TOOLTIP_APPLY_FOCUS_SETTINGS;
- layers.setIgnoreFocusSettings(true);
- } else {
- layers.setIgnoreFocusSettings(false);
- }
- ignoreFocusButton.setText(ignoreText);
- ignoreFocusButton.setToolTipText(ignoreTooltip);
- composite.layout();
+ layers.setIgnoreFocusSettings(!layers.getIgnoreFocusSettings());
context.getThreadAccess().asyncExec(new Runnable() {
@Override
Tristate state = getJointAttribute(elements, lz[index], attribute);
Color color = null;
- switch (state) {
- case False:
- color = viewer.getTree().getDisplay().getSystemColor(SWT.COLOR_RED);
- break;
- case True:
- color = viewer.getTree().getDisplay().getSystemColor(SWT.COLOR_GREEN);
- break;
- case Both:
- color = viewer.getTree().getDisplay().getSystemColor(SWT.COLOR_GRAY);
- break;
+ if (state == null) {
+ color = viewer.getTree().getDisplay().getSystemColor(SWT.COLOR_GRAY);
+ } else {
+ switch (state) {
+ case False:
+ color = viewer.getTree().getDisplay().getSystemColor(SWT.COLOR_RED);
+ break;
+ case True:
+ color = viewer.getTree().getDisplay().getSystemColor(SWT.COLOR_GREEN);
+ break;
+ case Both:
+ color = viewer.getTree().getDisplay().getSystemColor(SWT.COLOR_GRAY);
+ break;
+ }
}
GC gc = event.gc;
for(ILayer layer : layers.getVisibleLayers()) {
viewer.setSubtreeChecked(layer, true);
}
+
+ composite.layout();
}
@Override
IEditableLayer l = (IEditableLayer)layer;
l.setName(text.getText());
System.out.println("renamed layer to " + text.getText()); //$NON-NLS-1$
- viewer.refresh();
+ //viewer.refresh();
}
// // Item may be disposed if the tree gets reset after a previous editing.
IEditableLayer l = (IEditableLayer)layer;
l.setName(text.getText());
//System.out.println("renamed layer to " + text.getText());
- viewer.refresh();
+ //viewer.refresh();
}
// error = modifier.isValid(text.getText());
// if (error == null) {