[471110] Indicate why the compartment buttons are disabled
Customize the tooltip of the group regarding the capability to configure the
current mapping as a RegionContainer mapping.
The disabled button tooltips cannot be used are they will not be
displayed when the button is disabled.
Bug: 471110
Change-Id: I6ff6b3fb32f27f4f900686b16735c03a8d0bdaac
Signed-off-by: Maxime Porhel <maxime.porhel@obeo.fr>
diff --git a/plugins/org.eclipse.sirius.editor.diagram/src/org/eclipse/sirius/diagram/editor/properties/section/description/containermapping/ContainerMappingChildrenPresentationPropertySectionSpec.java b/plugins/org.eclipse.sirius.editor.diagram/src/org/eclipse/sirius/diagram/editor/properties/section/description/containermapping/ContainerMappingChildrenPresentationPropertySectionSpec.java
index 279705e..08656bc 100644
--- a/plugins/org.eclipse.sirius.editor.diagram/src/org/eclipse/sirius/diagram/editor/properties/section/description/containermapping/ContainerMappingChildrenPresentationPropertySectionSpec.java
+++ b/plugins/org.eclipse.sirius.editor.diagram/src/org/eclipse/sirius/diagram/editor/properties/section/description/containermapping/ContainerMappingChildrenPresentationPropertySectionSpec.java
@@ -15,6 +15,8 @@
import org.eclipse.sirius.diagram.description.ContainerMapping;
import org.eclipse.sirius.diagram.editor.properties.sections.description.containermapping.ContainerMappingChildrenPresentationPropertySection;
import org.eclipse.sirius.editor.editorPlugin.SiriusEditor;
+import org.eclipse.sirius.ext.base.Option;
+import org.eclipse.sirius.ext.base.Options;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Button;
@@ -55,31 +57,41 @@
super.makeWrittable();
if (button != null && eObject instanceof ContainerMapping) {
- boolean stackButtonEnabled = shouldEnableCompartiments((ContainerMapping) eObject);
+ Option<String> stackButtonDisabled = shouldDisableCompartiments((ContainerMapping) eObject);
String hStackButtonText = getText(ContainerLayout.HORIZONTAL_STACK);
String vStackButtonText = getText(ContainerLayout.VERTICAL_STACK);
for (Button b : button) {
if (hStackButtonText.equals(b.getText()) || vStackButtonText.equals(b.getText())) {
- b.setEnabled(stackButtonEnabled);
+ b.setEnabled(!stackButtonDisabled.some());
+ }
+ }
+
+ if (group != null) {
+ if (stackButtonDisabled.some()) {
+ group.setToolTipText(stackButtonDisabled.get());
+ } else {
+ group.setToolTipText(null);
}
}
}
}
- private boolean shouldEnableCompartiments(ContainerMapping containerMapping) {
+ private Option<String> shouldDisableCompartiments(ContainerMapping containerMapping) {
ContainerMappingQuery query = new ContainerMappingQuery(containerMapping);
- boolean enableCompartiments = !query.isRegion();
- if (enableCompartiments) {
+ String message = query.isRegion() ? "A Region mapping cannot be a RegionContainer mapping.": null;
+ if (message == null) {
for (ContainerMapping subContainer : containerMapping.getAllContainerMappings()) {
ContainerMappingQuery subQuery = new ContainerMappingQuery(subContainer);
- enableCompartiments = enableCompartiments && !subQuery.isRegionContainer();
+ if (message == null && subQuery.isRegionContainer()) {
+ message = "The mapping contains RegionContainer sub mappings, they cannot be Region and RegionContainer.";
+ }
}
}
- if (enableCompartiments) {
- enableCompartiments = enableCompartiments && containerMapping.getAllNodeMappings().isEmpty();
+ if (message == null && !containerMapping.getAllNodeMappings().isEmpty()) {
+ message = "The mapping contains node mappings, it cannot be a RegionContainer mapping.";
}
- return enableCompartiments;
+ return Options.newSome(message);
}
}