return (double)SelectedIndex;
}
+ /// <summary>
+ /// Formatted current value.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ string IAtspiValue.AccessibilityGetValueText()
+ {
+ return $"{SelectedIndex}";
+ }
+
/// <summary>
/// Maximum value.
/// </summary>
}
}
+ /// <summary>
+ /// Formatted current value.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ string IAtspiValue.AccessibilityGetValueText()
+ {
+ return (this as IAtspiValue).AccessibilityGetCurrent().ToString();
+ }
+
[EditorBrowsable(EditorBrowsableState.Never)]
bool IAtspiValue.AccessibilitySetCurrent(double value)
{
return (double)CurrentValue;
}
+ /// <summary>
+ /// Formatted current value.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ string IAtspiValue.AccessibilityGetValueText()
+ {
+ return $"{CurrentValue}";
+ }
+
/// <summary>
/// Gets maximum value for Accessibility.
/// </summary>
public delegate void AccessibilityGetAttributes(IntPtr self, AccessibilityGetAttributesCallback callback, IntPtr userData);
[EditorBrowsable(EditorBrowsableState.Never)]
public AccessibilityGetAttributes GetAttributes; // 37
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate IntPtr AccessibilityGetValueText(IntPtr self);
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public AccessibilityGetValueText GetValueText; // 38
}
[DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_Accessibility_DuplicateString")]
[EditorBrowsable(EditorBrowsableState.Never)]
double AccessibilityGetMinimum();
+ /// <summary>
+ /// Gets the current numeric value.
+ /// </summary>
+ /// <remarks>
+ /// The application may set the "value_format" attribute to one of the
+ /// following values in order to customize what is read by the Screen Reader:
+ /// 1. "percent" (the default) - AccessibilityGetCurrent() normalized as
+ /// a percentage of the range [AccessibilityGetMinimum(), AccessibilityGetMaximum()],
+ /// 2. "number" - AccessibilityGetCurrent() verbatim,
+ /// 3. "text" - AccessibilityGetValueText() is used instead of AccessibilityGetCurrent()
+ /// </remarks>
[EditorBrowsable(EditorBrowsableState.Never)]
double AccessibilityGetCurrent();
+ /// <summary>
+ /// Gets the formatted current value.
+ /// </summary>
+ /// <remarks>
+ /// This does not have to be AccessibilityGetCurrent() formatted in any
+ /// particular way, i.e. it may be an arbitrary string, e.g. "small font size"
+ /// for the numeric value 10.0. The return value of this method is only
+ /// used if the "value_format" attribute is "text".
+ /// </remarks>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ string AccessibilityGetValueText();
+
[EditorBrowsable(EditorBrowsableState.Never)]
double AccessibilityGetMaximum();
/// Dictionary of accessibility attributes (key-value pairs of strings).
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- protected Dictionary<string, string> AccessibilityAttributes { get; } = new Dictionary<string, string>();
+ public Dictionary<string, string> AccessibilityAttributes { get; } = new Dictionary<string, string>();
///////////////////////////////////////////////////////////////////
// ************************** Highlight ************************ //
return ret;
}
+ // AccessibilityValueTextRequested
+
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public class AccessibilityValueTextRequestedEventArgs : EventArgs
+ {
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public string Text { get; set; }
+ }
+
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public event EventHandler<AccessibilityValueTextRequestedEventArgs> AccessibilityValueTextRequested;
+
///////////////////////////////////////////////////////////////////
// **************** AccessibilityActivatedSignal **************** //
///////////////////////////////////////////////////////////////////
ad.GetMaximum = AccessibilityGetMaximumWrapper;
ad.GetMinimum = AccessibilityGetMinimumWrapper;
ad.GetMinimumIncrement = AccessibilityGetMinimumIncrementWrapper;
+ ad.GetValueText = AccessibilityGetValueTextWrapper;
ad.SetCurrent = AccessibilitySetCurrentWrapper;
}
return GetInterfaceFromRefObject<IAtspiValue>(self).AccessibilityGetMinimumIncrement();
}
+ private static IntPtr AccessibilityGetValueTextWrapper(IntPtr self)
+ {
+ var view = GetViewFromRefObject(self);
+ var value = GetInterfaceFromRefObject<IAtspiValue>(self);
+ string text;
+
+ // Mimic the behaviour of the pairs AccessibilityNameRequested & AccessibilityGetName(),
+ // and AccessibilityDescriptionRequested & AccessibilityGetDescription(),
+ // i.e. a higher-priority Accessibility[…]Requested event for application developers,
+ // and a lower-priority AccessibilityGet[…]() virtual method for component developers.
+ // The difference is that event-or-virtual-method dispatching is done in C++ for
+ // Name and Description, and here in this wrapper method for ValueText (because there
+ // is no signal for ValueText in DALi.)
+ if (view.AccessibilityValueTextRequested?.GetInvocationList().Length > 0)
+ {
+ var args = new AccessibilityValueTextRequestedEventArgs();
+ view.AccessibilityValueTextRequested.Invoke(view, args);
+ text = args.Text;
+ }
+ else
+ {
+ text = value.AccessibilityGetValueText();
+ }
+
+ return DuplicateString(text);
+ }
+
private static bool AccessibilitySetCurrentWrapper(IntPtr self, double value)
{
return GetInterfaceFromRefObject<IAtspiValue>(self).AccessibilitySetCurrent(value);