ValueProtocol
public protocol ValueProtocol
AtkValue
should be implemented for components which either display
a value from a bounded range, or which allow the user to specify a
value from a bounded range, or both. For instance, most sliders and
range controls, as well as dials, should have AtkObject
representations which implement AtkValue
on the component’s
behalf. AtKValues
may be read-only, in which case attempts to
alter the value return would fail.
<refsect1 id=“current-value-text”> <title>On the subject of current value text</title> <para> In addition to providing the current value, implementors can optionally provide an end-user-consumable textual description associated with this value. This description should be included when the numeric value fails to convey the full, on-screen representation seen by users. </para>
<example> <title>Password strength</title> A password strength meter whose value changes as the user types their new password. Red is used for values less than 4.0, yellow for values between 4.0 and 7.0, and green for values greater than 7.0. In this instance, value text should be provided by the implementor. Appropriate value text would be “weak”, “acceptable,” and “strong” respectively. </example>
A level bar whose value changes to reflect the battery charge. The color remains the same regardless of the charge and there is no on-screen text reflecting the fullness of the battery. In this case, because the position within the bar is the only indication the user has of the current charge, value text should not be provided by the implementor.
<refsect2 id=“implementor-notes”> <title>Implementor Notes</title> <para> Implementors should bear in mind that assistive technologies will likely prefer the value text provided over the numeric value when presenting a widget’s value. As a result, strings not intended for end users should not be exposed in the value text, and strings which are exposed should be localized. In the case of widgets which display value text on screen, for instance through a separate label in close proximity to the value-displaying widget, it is still expected that implementors will expose the value text using the above API. </para>
<para>
AtkValue
should NOT be implemented for widgets whose displayed
value is not reflective of a meaningful amount. For instance, a
progress pulse indicator whose value alternates between 0.0 and 1.0
to indicate that some process is still taking place should not
implement AtkValue
because the current value does not reflect
progress towards completion.
</para>
</refsect2>
</refsect1>
<refsect1 id=“ranges”> <title>On the subject of ranges</title> <para> In addition to providing the minimum and maximum values, implementors can optionally provide details about subranges associated with the widget. These details should be provided by the implementor when both of the following are communicated visually to the end user: </para> <itemizedlist> <listitem>The existence of distinct ranges such as “weak”, “acceptable”, and “strong” indicated by color, bar tick marks, and/or on-screen text.</listitem> <listitem>Where the current value stands within a given subrange, for instance illustrating progression from very “weak” towards nearly “acceptable” through changes in shade and/or position on the bar within the “weak” subrange.</listitem> </itemizedlist> <para> If both of the above do not apply to the widget, it should be sufficient to expose the numeric value, along with the value text if appropriate, to make the widget accessible. </para>
<refsect2 id=“ranges-implementor-notes”> <title>Implementor Notes</title> <para> If providing subrange details is deemed necessary, all possible values of the widget are expected to fall within one of the subranges defined by the implementor. </para> </refsect2> </refsect1>
<refsect1 id=“localization”>
<title>On the subject of localization of end-user-consumable text
values</title>
<para>
Because value text and subrange descriptors are human-consumable,
implementors are expected to provide localized strings which can be
directly presented to end users via their assistive technology. In
order to simplify this for implementors, implementors can use
atk_value_type_get_localized_name()
with the following
already-localized constants for commonly-needed values can be used:
</para>
<itemizedlist> <listitem>ATK_VALUE_VERY_WEAK</listitem> <listitem>ATK_VALUE_WEAK</listitem> <listitem>ATK_VALUE_ACCEPTABLE</listitem> <listitem>ATK_VALUE_STRONG</listitem> <listitem>ATK_VALUE_VERY_STRONG</listitem> <listitem>ATK_VALUE_VERY_LOW</listitem> <listitem>ATK_VALUE_LOW</listitem> <listitem>ATK_VALUE_MEDIUM</listitem> <listitem>ATK_VALUE_HIGH</listitem> <listitem>ATK_VALUE_VERY_HIGH</listitem> <listitem>ATK_VALUE_VERY_BAD</listitem> <listitem>ATK_VALUE_BAD</listitem> <listitem>ATK_VALUE_GOOD</listitem> <listitem>ATK_VALUE_VERY_GOOD</listitem> <listitem>ATK_VALUE_BEST</listitem> <listitem>ATK_VALUE_SUBSUBOPTIMAL</listitem> <listitem>ATK_VALUE_SUBOPTIMAL</listitem> <listitem>ATK_VALUE_OPTIMAL</listitem> </itemizedlist> <para> Proposals for additional constants, along with their use cases, should be submitted to the GNOME Accessibility Team. </para> </refsect1>
<refsect1 id=“changes”> <title>On the subject of changes</title> <para> Note that if there is a textual description associated with the new numeric value, that description should be included regardless of whether or not it has also changed. </para> </refsect1>
The ValueProtocol
protocol exposes the methods and properties of an underlying AtkValue
instance.
The default implementation of these can be found in the protocol extension below.
For a concrete class that implements these methods and properties, see Value
.
Alternatively, use ValueRef
as a lighweight, unowned
reference if you already have an instance you just want to use.
-
Untyped pointer to the underlying
AtkValue
instance.Declaration
Swift
var ptr: UnsafeMutableRawPointer! { get }
-
value_ptr
Default implementationTyped pointer to the underlying
AtkValue
instance.Default Implementation
Return the stored, untyped pointer as a typed pointer to the
AtkValue
instance.Declaration
Swift
var value_ptr: UnsafeMutablePointer<AtkValue>! { get }
-
Required Initialiser for types conforming to
ValueProtocol
Declaration
Swift
init(raw: UnsafeMutableRawPointer)
-
connect(signal:
Extension methodflags: handler: ) Connect a Swift signal handler to the given, typed
ValueSignalName
signalDeclaration
Swift
@discardableResult @inlinable func connect(signal s: ValueSignalName, flags f: ConnectFlags = ConnectFlags(0), handler h: @escaping SignalHandler) -> Int
Parameters
signal
The signal to connect
flags
The connection flags to use
data
A pointer to user data to provide to the callback
destroyData
A
GClosureNotify
C function to destroy the data pointed to byuserData
handler
The Swift signal handler (function or callback) to invoke on the given signal
Return Value
The signal handler ID (always greater than 0 for successful connections)
-
connect(signal:
Extension methodflags: data: destroyData: signalHandler: ) Connect a C signal handler to the given, typed
ValueSignalName
signalDeclaration
Swift
@discardableResult @inlinable func connect(signal s: ValueSignalName, flags f: ConnectFlags = ConnectFlags(0), data userData: gpointer!, destroyData destructor: GClosureNotify? = nil, signalHandler h: @escaping GCallback) -> Int
Parameters
signal
The signal to connect
flags
The connection flags to use
data
A pointer to user data to provide to the callback
destroyData
A
GClosureNotify
C function to destroy the data pointed to byuserData
signalHandler
The C function to be called on the given signal
Return Value
The signal handler ID (always greater than 0 for successful connections)
-
onValueChanged(flags:
Extension methodhandler: ) The ‘value-changed’ signal is emitted when the current value that represent the object changes.
value
is the numerical representation of this new value.text
is the human readable text alternative ofvalue
, and can be NULL if it is not available. Note that if there is a textual description associated with the new numeric value, that description should be included regardless of whether or not it has also changed.Example: a password meter whose value changes as the user types their new password. Appropiate value text would be “weak”, “acceptable” and “strong”.
Note
This represents the underlyingvalue-changed
signalDeclaration
Swift
@discardableResult @inlinable func onValueChanged(flags: ConnectFlags = ConnectFlags(0), handler: @escaping (_ unownedSelf: ValueRef, _ value: Double, _ text: String) -> Void) -> Int
Parameters
flags
Flags
unownedSelf
Reference to instance of self
value
the new value in a numerical form.
text
human readable text alternative (also called description) of this object. NULL if not available.
handler
The signal handler to call Run the given callback whenever the
valueChanged
signal is emitted -
valueChangedSignal
Extension methodTyped
value-changed
signal for using theconnect(signal:)
methodsDeclaration
Swift
static var valueChangedSignal: ValueSignalName { get }
-
getCurrent(value:
Extension method) Gets the value of this object.
get_current_value is deprecated: Since 2.12. Use atk_value_get_value_and_text() instead.
Declaration
Swift
@available(*, deprecated) @inlinable func getCurrent<GObjectValueT>(value: GObjectValueT) where GObjectValueT : ValueProtocol
-
getIncrement()
Extension methodGets the minimum increment by which the value of this object may be changed. If zero, the minimum increment is undefined, which may mean that it is limited only by the floating point precision of the platform.
Declaration
Swift
@inlinable func getIncrement() -> Double
-
getMaximum(value:
Extension method) Gets the maximum value of this object.
get_maximum_value is deprecated: Since 2.12. Use atk_value_get_range() instead.
Declaration
Swift
@available(*, deprecated) @inlinable func getMaximum<GObjectValueT>(value: GObjectValueT) where GObjectValueT : ValueProtocol
-
getMinimumIncrement(value:
Extension method) Gets the minimum increment by which the value of this object may be changed. If zero, the minimum increment is undefined, which may mean that it is limited only by the floating point precision of the platform.
get_minimum_increment is deprecated: Since 2.12. Use atk_value_get_increment() instead.
Declaration
Swift
@available(*, deprecated) @inlinable func getMinimumIncrement<GObjectValueT>(value: GObjectValueT) where GObjectValueT : ValueProtocol
-
getMinimum(value:
Extension method) Gets the minimum value of this object.
get_minimum_value is deprecated: Since 2.12. Use atk_value_get_range() instead.
Declaration
Swift
@available(*, deprecated) @inlinable func getMinimum<GObjectValueT>(value: GObjectValueT) where GObjectValueT : ValueProtocol
-
getRange()
Extension methodGets the range of this object.
Declaration
Swift
@inlinable func getRange() -> Atk.RangeRef!
-
getSubRanges()
Extension methodGets the list of subranges defined for this object. See
AtkValue
introduction for examples of subranges and when to expose them.Declaration
Swift
@inlinable func getSubRanges() -> GLib.SListRef!
-
getValueAndText(value:
Extension methodtext: ) Gets the current value and the human readable text alternative of
obj
.text
is a newly created string, that must be freed by the caller. Can be NULL if no descriptor is available.Declaration
Swift
@inlinable func getValueAndText(value: UnsafeMutablePointer<gdouble>!, text: UnsafeMutablePointer<UnsafeMutablePointer<gchar>?>! = nil)
-
setCurrent(value:
Extension method) Sets the value of this object.
set_current_value is deprecated: Since 2.12. Use atk_value_set_value() instead.
Declaration
Swift
@available(*, deprecated) @inlinable func setCurrent<GObjectValueT>(value: GObjectValueT) -> Bool where GObjectValueT : ValueProtocol
-
setValue(newValue:
Extension method) Sets the value of this object.
This method is intended to provide a way to change the value of the object. In any case, it is possible that the value can’t be modified (ie: a read-only component). If the value changes due this call, it is possible that the text could change, and will trigger an
AtkValue::value-changed
signal emission.Note for implementors: the deprecated
atk_value_set_current_value()
method returned TRUE or FALSE depending if the value was assigned or not. In the practice several implementors were not able to decide it, and returned TRUE in any case. For that reason it is not required anymore to return if the value was properly assigned or not.Declaration
Swift
@inlinable func setValue(newValue: gdouble)
-
increment
Extension methodGets the minimum increment by which the value of this object may be changed. If zero, the minimum increment is undefined, which may mean that it is limited only by the floating point precision of the platform.
Declaration
Swift
@inlinable var increment: Double { get }
-
range
Extension methodGets the range of this object.
Declaration
Swift
@inlinable var range: Atk.RangeRef! { get }
-
subRanges
Extension methodGets the list of subranges defined for this object. See
AtkValue
introduction for examples of subranges and when to expose them.Declaration
Swift
@inlinable var subRanges: GLib.SListRef! { get }