You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2019/05/02 07:21:05 UTC
[isis] 01/02: ISIS-2001: adds 'title' attribute if disabled
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch ISIS-2001
in repository https://gitbox.apache.org/repos/asf/isis.git
commit f154378adc9a28cf830bc684e8b282ac45031ecd
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu May 2 06:15:17 2019 +0100
ISIS-2001: adds 'title' attribute if disabled
for parameters.
Also adds support for Blob panel (as well as text previously; still
need to check others).
However, exception if hit 'cancel' on a blob panel
---
.../isis/core/metamodel/facetapi/FacetUtil.java | 2 +-
.../facets/members/disabled/DisabledFacet.java | 5 ++
.../disabled/DisabledFacetAbstractImpl.java | 2 +-
.../actionprompt/ActionPromptModalWindow.java | 1 -
.../actionpromptsb/ActionPromptSidebar.java | 10 ++-
.../components/actions/ActionParametersForm.java | 2 +-
.../components/scalars/ScalarPanelAbstract2.java | 42 ++++++++--
.../scalars/ScalarPanelSelect2Abstract.java | 19 ++++-
.../scalars/ScalarPanelTextFieldAbstract.java | 15 ++++
.../isisapplib/IsisBlobOrClobPanelAbstract.java | 95 ++++++++++++++++++----
.../components/scalars/primitive/BooleanPanel.java | 10 +++
.../scalars/reference/ReferencePanel.java | 19 ++++-
.../valuechoices/ValueChoicesSelect2Panel.java | 22 ++++-
.../wicket/ui/panels/PromptFormAbstract.java | 1 +
14 files changed, 210 insertions(+), 35 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
index 0c8b6d3..267aceb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
@@ -165,7 +165,7 @@ public final class FacetUtil {
}
public static void copyFacets(final FacetHolder source, final FacetHolder target) {
- final Class<? extends Facet>[] facetTypes = source.getFacetTypes();
+ final ArrayList<Class<? extends Facet>> facetTypes = Lists.newArrayList(source.getFacetTypes());
for (Class<? extends Facet> facetType : facetTypes) {
final Facet facet = source.getFacet(facetType);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacet.java
index d1f3988..cd1edbe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacet.java
@@ -35,6 +35,11 @@ import org.apache.isis.core.metamodel.interactions.DisablingInteractionAdvisor;
public interface DisabledFacet extends WhenAndWhereValueFacet, DisablingInteractionAdvisor {
/**
+ * "Special" phrase returned for facets which are always disabled.
+ */
+ String ALWAYS_DISABLED_REASON = "Always disabled";
+
+ /**
* The reason why the (feature of the) target object is currently disabled,
* or <tt>null</tt> if enabled.
*/
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractImpl.java
index fdf7349..14d1300 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractImpl.java
@@ -53,7 +53,7 @@ public abstract class DisabledFacetAbstractImpl extends DisabledFacetAbstract {
@Override
public String disabledReason(final ObjectAdapter targetAdapter) {
if (when() == When.ALWAYS) {
- return disabledReasonElse("Always disabled");
+ return disabledReasonElse(ALWAYS_DISABLED_REASON);
} else if (when() == When.NEVER) {
return null;
}
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
index b3880c9..f228e44 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
@@ -16,7 +16,6 @@
*/
package org.apache.isis.viewer.wicket.ui.components.actionprompt;
-import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionpromptsb/ActionPromptSidebar.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionpromptsb/ActionPromptSidebar.java
index 289ad64..5c13972 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionpromptsb/ActionPromptSidebar.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionpromptsb/ActionPromptSidebar.java
@@ -97,7 +97,15 @@ public class ActionPromptSidebar
setVisible(false);
- addOrReplace(new WebMarkupContainer(getContentId()));
+ // we no longer remove the panel, because hitting 'Esc' seems to cause the
+ // cancelButton callback to be fired twice, resulting in a stack trace:
+ //
+ // org.apache.wicket.core.request.handler.ComponentNotFoundException: Component
+ // 'theme:actionPromptSidebar:actionPrompt:parameters:inputForm:cancelButton' has been removed from page.)
+
+ // addOrReplace(new WebMarkupContainer(getContentId()));
+
+
addOrReplace(new WebMarkupContainer(getExtraContentId()));
if (target != null) {
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
index f3f1d85..586abdc 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
@@ -171,7 +171,7 @@ class ActionParametersForm extends PromptFormAbstract<ActionModel> {
for (int paramNumToUpdate = paramNumberUpdated + 1; paramNumToUpdate < numParams; paramNumToUpdate++) {
final ScalarPanelAbstract2 paramPanel = paramPanels.get(paramNumToUpdate);
final ScalarPanelAbstract2.Repaint repaint = paramPanel
- .updateIfNecessary(actionModel, paramNumberUpdated, paramNumToUpdate);
+ .updateIfNecessary(actionModel, paramNumberUpdated, paramNumToUpdate, target);
switch (repaint) {
case ENTIRE_FORM:
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
index 1b67a7b..7c86750 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
@@ -51,6 +51,7 @@ import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -125,12 +126,15 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im
* @param paramNumUpdated - the # of the param that has just been updated by the user
* @param paramNumToPossiblyUpdate - the # of the param to be updated if necessary (will be > paramNumUpdated)
*
+ * @param target - in case there's more to be repainted...
+ *
* @return - true if changed as a result of these pending arguments.
*/
public Repaint updateIfNecessary(
final ActionModel actionModel,
final int paramNumUpdated,
- final int paramNumToPossiblyUpdate) {
+ final int paramNumToPossiblyUpdate,
+ final AjaxRequestTarget target) {
final ObjectAction action = actionModel.getActionMemento().getAction(getSpecificationLoader());
final ObjectAdapter[] pendingArguments = actionModel.getArgumentsAsArray();
@@ -154,8 +158,11 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im
final boolean usabilityBefore = isEnabled();
final boolean usabilityAfter = usabilityConsent.isAllowed();
- setEnabled(usabilityAfter);
-
+ if(usabilityAfter) {
+ onEnabled(target);
+ } else {
+ onDisabled(usabilityConsent.getReason(), target);
+ }
// even if now invisible or unusable, we recalculate args and ensure compatible
@@ -291,16 +298,21 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im
final ScalarModel scalarModel = getModel();
- if (scalarModel.isViewMode()) {
- onInitializeWhenViewMode();
- } else {
- final String disableReasonIfAny = scalarModel.whetherDisabled();
- if (disableReasonIfAny != null) {
+ final String disableReasonIfAny = scalarModel.whetherDisabled();
+ if (disableReasonIfAny != null) {
+ if(disableReasonIfAny.contains(DisabledFacet.ALWAYS_DISABLED_REASON)) {
+ onInitializeWhenViewMode();
+ } else {
onInitializeWhenDisabled(disableReasonIfAny);
+ }
+ } else {
+ if (scalarModel.isViewMode()) {
+ onInitializeWhenViewMode();
} else {
onInitializeWhenEnabled();
}
}
+
}
/**
@@ -465,6 +477,20 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im
protected void onInitializeWhenEnabled() {
}
+ /**
+ * Optional hook.
+ */
+ protected void onDisabled(final String disableReason, final AjaxRequestTarget target) {
+ }
+
+ /**
+ * Optional hook.
+ * @param target
+ */
+ protected void onEnabled(final AjaxRequestTarget target) {
+ }
+
+
private void addCssFromMetaModel() {
final String cssForMetaModel = getModel().getCssClass();
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
index eec4336..0f513c5 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -158,6 +158,18 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
}
+ @Override
+ protected void onDisabled(final String disableReason, final AjaxRequestTarget target) {
+ setEnabled(false);
+ }
+
+ @Override
+ protected void onEnabled(final AjaxRequestTarget target) {
+ setEnabled(true);
+
+ }
+
+
// //////////////////////////////////////
/**
@@ -168,12 +180,15 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
*/
@Override
public Repaint updateIfNecessary(
- final ActionModel actionModel, final int paramNumUpdated, final int paramNumToPossiblyUpdate) {
+ final ActionModel actionModel,
+ final int paramNumUpdated,
+ final int paramNumToPossiblyUpdate,
+ final AjaxRequestTarget target) {
final ObjectAdapter[] argumentsAsArray = actionModel.getArgumentsAsArray();
final Repaint repaint =
- super.updateIfNecessary(actionModel, paramNumUpdated, paramNumToPossiblyUpdate);
+ super.updateIfNecessary(actionModel, paramNumUpdated, paramNumToPossiblyUpdate, target);
final boolean choicesUpdated = updateChoices(argumentsAsArray);
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 31361c9..a16a2c2 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -24,6 +24,7 @@ import java.io.Serializable;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.basic.Label;
@@ -337,6 +338,20 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
inlinePromptLink.add(title);
}
+ @Override
+ protected void onDisabled(final String disableReason, final AjaxRequestTarget target) {
+ textField.setEnabled(false);
+ inlinePromptLink.setEnabled(false);
+ setTitleAttribute(disableReason);
+ }
+
+ @Override
+ protected void onEnabled(final AjaxRequestTarget target) {
+ textField.setEnabled(true);
+ inlinePromptLink.setEnabled(true);
+ setTitleAttribute("");
+ }
+
// //////////////////////////////////////
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index fc8d527..d61dc50 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -81,8 +81,11 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
private Label fileNameLabel;
protected enum InputFieldVisibility {
- VISIBLE, NOT_VISIBLE
- }
+ VISIBLE, NOT_VISIBLE
+ }
+ protected enum InputFieldEditability{
+ EDITABLE, NOT_EDITABLE
+ }
@Override
protected FormGroup createComponentForRegular() {
@@ -191,15 +194,15 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
// //////////////////////////////////////
protected void onInitializeWhenViewMode() {
- updateRegularFormComponents(InputFieldVisibility.NOT_VISIBLE);
+ updateRegularFormComponents(InputFieldVisibility.NOT_VISIBLE, null, null, null);
}
protected void onInitializeWhenDisabled(final String disableReason) {
- updateRegularFormComponents(InputFieldVisibility.NOT_VISIBLE);
+ updateRegularFormComponents(InputFieldVisibility.NOT_VISIBLE, null, null, null);
}
protected void onInitializeWhenEnabled() {
- updateRegularFormComponents(InputFieldVisibility.VISIBLE);
+ updateRegularFormComponents(InputFieldVisibility.VISIBLE, null, null, null);
}
private FileUploadField createFileUploadField(String componentId) {
@@ -233,6 +236,16 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
return fileUploadField;
}
+ @Override
+ protected void onDisabled(final String disableReason, final AjaxRequestTarget target) {
+ updateRegularFormComponents(null, InputFieldEditability.NOT_EDITABLE, disableReason, target);
+ }
+
+ @Override
+ protected void onEnabled(final AjaxRequestTarget target) {
+ updateRegularFormComponents(null, InputFieldEditability.EDITABLE, null, target);
+ }
+
protected abstract T getBlobOrClobFrom(final List<FileUpload> fileUploads);
@SuppressWarnings("unchecked")
@@ -245,25 +258,61 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
super(id, scalarModel);
}
- private void updateRegularFormComponents(final InputFieldVisibility visibility) {
+ private void updateRegularFormComponents(
+ final InputFieldVisibility visibility,
+ final InputFieldEditability editability,
+ final String disabledReason,
+ final AjaxRequestTarget target) {
+
MarkupContainer formComponent = (MarkupContainer) getComponentForRegular();
- formComponent.get(ID_SCALAR_VALUE).setVisible(visibility == InputFieldVisibility.VISIBLE);
-
- addAcceptFilterTo(formComponent.get(ID_SCALAR_VALUE));
+ sync(formComponent, visibility, editability, disabledReason, target);
+
+ final Component component = formComponent.get(ID_SCALAR_VALUE);
+ sync(component, visibility, editability, disabledReason, target);
+
+ addAcceptFilterTo(component);
fileNameLabel = updateFileNameLabel(ID_FILE_NAME, formComponent);
- updateClearLink(visibility);
+ updateClearLink(visibility, editability, target);
// the visibility of download link is intentionally 'backwards';
// if in edit mode then do NOT show
final MarkupContainer downloadLink = updateDownloadLink(ID_SCALAR_IF_REGULAR_DOWNLOAD, formComponent);
- if (downloadLink != null) {
- downloadLink.setVisible(visibility == InputFieldVisibility.NOT_VISIBLE);
- }
+ sync(downloadLink, visibility, editability, disabledReason, target);
// ditto any image
- if(wicketImage != null) {
- wicketImage.setVisible(visibility == InputFieldVisibility.NOT_VISIBLE);
+ sync(wicketImage, visibility, editability, disabledReason, target);
+ }
+
+ private void sync(
+ final Component component,
+ final InputFieldVisibility visibility,
+ final InputFieldEditability editability,
+ final String disabledReason,
+ final AjaxRequestTarget target) {
+
+ if(component == null) {
+ return;
+ }
+ component.setOutputMarkupId(true); // enable ajax link
+
+ if(visibility != null) {
+ component.setVisible(visibility == InputFieldVisibility.VISIBLE);
+ if (target != null) {
+ target.add(component);
+ }
+ }
+ if(editability != null) {
+ component.setEnabled(editability == InputFieldEditability.EDITABLE);
+
+ final AttributeModifier title = new AttributeModifier("title", Model.of(disabledReason != null ? disabledReason : ""));
+ component.add(title);
+
+ if (target != null) {
+ target.add(component);
+ }
}
+
+
}
private String getAcceptFilter(){
@@ -301,7 +350,11 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
return fileNameLabel;
}
- private void updateClearLink(InputFieldVisibility visibility) {
+ private void updateClearLink(
+ final InputFieldVisibility visibility,
+ final InputFieldEditability editability,
+ final AjaxRequestTarget target) {
+
final MarkupContainer formComponent = (MarkupContainer) getComponentForRegular();
formComponent.setOutputMarkupId(true); // enable ajax link
@@ -321,7 +374,15 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
formComponent.addOrReplace(ajaxLink);
final T blobOrClob = getBlobOrClobFromModel();
- formComponent.get(ID_SCALAR_IF_REGULAR_CLEAR).setVisible(blobOrClob != null && visibility == InputFieldVisibility.VISIBLE);
+ final Component component = formComponent.get(ID_SCALAR_IF_REGULAR_CLEAR);
+ component.setVisible(blobOrClob != null && visibility == InputFieldVisibility.VISIBLE);
+ component.setEnabled(blobOrClob != null && editability == InputFieldEditability.EDITABLE);
+
+ if(target != null) {
+ target.add(formComponent);
+ target.add(component);
+ target.add(ajaxLink);
+ }
}
private MarkupContainer updateDownloadLink(String downloadId, MarkupContainer container) {
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index 4e1b9ba..9b9438e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -22,6 +22,7 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
@@ -214,6 +215,15 @@ public class BooleanPanel extends ScalarPanelAbstract2 {
checkBox.setEnabled(false);
}
+ @Override
+ protected void onDisabled(final String disableReason, final AjaxRequestTarget target) {
+ checkBox.setEnabled(false);
+ }
+
+ @Override
+ protected void onEnabled(final AjaxRequestTarget target) {
+ checkBox.setEnabled(true);
+ }
@Override
public String getVariation() {
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 3b1688a..32ed670 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -226,7 +226,24 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
entityLink.add(new AttributeModifier("title", Model.of(disableReason)));
}
-
+ @Override
+ protected void onDisabled(final String disableReason, final AjaxRequestTarget target) {
+ super.onDisabled(disableReason, target);
+
+ entityLink.setEnabled(false);
+ entityLink.add(new AttributeModifier("title", Model.of(disableReason)));
+ }
+
+ @Override
+ protected void onEnabled(final AjaxRequestTarget target) {
+ super.onEnabled(target);
+
+ entityLink.setEnabled(true);
+ entityLink.add(new AttributeModifier("title", Model.of("")));
+ }
+
+
+
// //////////////////////////////////////
// syncWithInput
// //////////////////////////////////////
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index ec60511..6f72989 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -23,6 +23,7 @@ import com.google.common.collect.Lists;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IModel;
@@ -109,7 +110,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
// Edit: read/write
select2.setEnabled(true);
- // TODO: should the title AttributeModifier installed in onBeforeWhenDisabled be removed here?
+ setTitleAttribute("");
}
@Override
@@ -123,7 +124,24 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
getComponentForRegular().add(new AttributeModifier("title", Model.of(titleAttribute)));
}
-
+ @Override
+ protected void onDisabled(final String disableReason, final AjaxRequestTarget target) {
+ super.onDisabled(disableReason, target);
+
+ setTitleAttribute(disableReason);
+ select2.setEnabled(false);
+ }
+
+ @Override
+ protected void onEnabled(final AjaxRequestTarget target) {
+ super.onEnabled(target);
+
+ setTitleAttribute("");
+ select2.setEnabled(true);
+ }
+
+
+
// //////////////////////////////////////
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
index b89b978..8cf8168 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
@@ -164,6 +164,7 @@ public abstract class PromptFormAbstract<T extends BookmarkableModel<ObjectAdapt
@Override
public void onSubmit(final AjaxRequestTarget target, Form<?> form) {
+ //form.setMultiPart(true);
closePromptIfAny(target);
onCancelSubmitted(target);