efl/src/lib/elementary/efl_ui_spotlight_container.eo

153 lines
7.3 KiB
Plaintext

struct @beta Efl.Ui.Spotlight.Transition_Event {
[[Information regarding transition events.]]
from : int; [[The index from where the transition started, -1 if not known.]]
to : int; [[The index to where the transition is headed, -1 if not known.]]
}
class Efl.Ui.Spotlight.Container extends Efl.Ui.Widget implements Efl.Pack_Linear
{
[[The Spotlight widget is a container for other sub-widgets, where only one sub-widget is active at any given time.
Sub-widgets are added using the @Efl.Pack_Linear interface and the active one (the one in the "spotlight") is
selected using @.active_element.
The way the different sub-widgets are rendered can be customized through the @.spotlight_manager object.
For example, only the active sub-widget might be shown, or it might be shown in a central position whereas the
other sub-widgets are displayed on the sides, or grayed-out.
All sub-widgets are displayed with the same size, selected with @.spotlight_size.
Additionally, the transition from one sub-widget to another can be animated.
This animation is also controlled by the @.spotlight_manager object.
Also, an indicator widget can be used to show a visual cue of how many sub-widgets are there and which one is the
active one.
This class can be used to create other widgets like Pagers, Tabbed pagers or Stacks, where each sub-widget
represents a "page" full of other widgets. All these cases can be implemented with a different
@.spotlight_manager and use the same @Efl.Ui.Spotlight.Container.
@since 1.24
]]
c_prefix: efl_ui_spotlight;
methods {
@property spotlight_manager @beta {
[[This object defines how sub-widgets are rendered and animated.
If it is not set, only the active sub-widget is shown and transitions are instantaneous (not animated).
]]
get {
values {
spotlight_manager : Efl.Ui.Spotlight.Manager; [[The Spotlight Manager object or $NULL.]]
}
}
set { }
values {
spotlight_manager : Efl.Ui.Spotlight.Manager @move; [[The Spotlight Manager object or $NULL.]]
}
}
@property indicator @beta {
[[An indicator object to use, which will display the current state of the spotlight (number of sub-widgets
and active one).
When this object is set, it is immediately updated to reflect the current state of the widget.
Its location inside the container is controlled by the @.spotlight_manager.
]]
get {
values {
indicator : Efl.Ui.Spotlight.Indicator; [[The Indicator object or $NULL.]]
}
}
set { }
values {
indicator : Efl.Ui.Spotlight.Indicator @move; [[The Indicator object or $NULL.]]
}
}
@property active_element {
[[Currently active sub-widget (the one with the spotlight) among all the sub-widgets added to this widget
Changing this value might trigger an animation.
]]
values {
element : Efl.Ui.Widget; [[Sub-widget that has the spotlight.
The element has to be added prior to this call via the @Efl.Pack_Linear interface.]]
}
}
@property spotlight_size {
[[The size to use when displaying the Sub-Widget which has the spotlight.
This is used by the @.spotlight_manager to perform the rendering.
Sub-Widgets other than the Active one may or may not use this size.]]
values {
size: Eina.Size2D; [[Render size for the spotlight.
(-1, -1) means that all available space inside the container can be used.]]
}
}
@property animated_transition {
[[When this flag is $true the transitions caused by @.push, @.pop or @.active_element are animated (if the @.spotlight_manager supports that). $false means immidiate displaying at the final position.]]
values {
enable : bool; [[$true to enable animated transitions. If $false, then any transition is displayed at the final position immidiatly]]
}
}
push @beta {
[[Packs a new sub-widget after @.active_element, and move the spotlight there.
This is the same behavior as a push operation on a stack.
When sub-widgets are added using only @.push and @.pop you don't have to worry about @.active_element
since only the last sub-widget is manipulated, and this container behaves like a traditional stack.
An animation might be triggered to give the new sub-widget the spotlight and come into position.
]]
params {
widget : Efl.Gfx.Entity; [[Sub-Widget to add and set to be the spotlight sub-widget.]]
}
}
pop @beta {
[[Removes the sub-widget that has the spotlight from the widget.
The spotlight is moved to the previous sub-widget.
This is the same behavior as a pop operation on a stack.
When sub-widgets are added using only @.push and @.pop you don't have to worry about @.active_element
since only the last sub-widget is manipulated, and this container behaves like a traditional stack.
An animation might be triggered to give the new sub-widget the spotlight, come into position and the old
one disappear.
The removed sub-widget can be returned to the caller or deleted (depending on $delete_on_transition_end).
]]
params {
deletion_on_transition_end : bool; [[If $true, then the object will be deleted before resolving the future,
and a $NULL pointer is the value of the future.
$false if no operation should be applied to it.]]
}
return : future<Efl.Gfx.Entity>; [[This Future gets resolved when any transition animation finishes and the
popped sub-widget is ready for collection.
If there is no animation, the Future resolves immediately.
If $deletion_on_transition_end is $true then this widget will destroy the
popped sub-widget and the Future will contain no Value.
Otherwise, the caller becomes the owner of the sub-widget contained in the
Future and must dispose of it appropriately. ]]
}
}
events {
transition,start @beta : Efl.Ui.Spotlight.Transition_Event; [[A transition animation has started.]]
transition,end @beta : Efl.Ui.Spotlight.Transition_Event; [[A transition animation has ended.]]
}
implements {
Efl.Object.constructor;
Efl.Object.finalize;
Efl.Object.invalidate;
Efl.Container.content_count;
Efl.Container.content_iterate;
Efl.Pack.pack_clear;
Efl.Pack.unpack_all;
Efl.Pack.unpack;
Efl.Pack.pack;
Efl.Pack_Linear.pack_begin;
Efl.Pack_Linear.pack_end;
Efl.Pack_Linear.pack_before;
Efl.Pack_Linear.pack_after;
Efl.Pack_Linear.pack_at;
Efl.Pack_Linear.pack_content_get;
Efl.Pack_Linear.pack_index_get;
Efl.Pack_Linear.pack_unpack_at;
Efl.Canvas.Group.group_calculate;
}
}