[[tui-views-progress]]
= ProgressView
:page-section-summary-toc: 1

ifndef::snippets[:snippets: ../../../../../src/test/java/org/springframework/shell/docs]

_ProgressView_ is a base implementation providing functionality to draw a progress info.
Inherits xref:tui/views/box.adoc[].

_ProgressView_ draws its content using concepts described below

* _ProgressState_ contains various info about a runtime state
** _tickStart_ Lower bound of tick value
** _tickEnd_ Upper bound of tick value
** _tickValue_ Current tick value
** _running_ Running state, either true or false
** _startTime_ Start time in millis when progress was started
** _updateTime_ Last known time in millis when progress has updated
* _ProgressContext_ is a context used with _ProgressViewItem_
** _description_ The description given to progress
** _state_ The _ProgressState_
** _view_ The owning _ProgressView_
** _spinner_ The _Spinner_ representation used with _ProgressView_
** Other methods to help with item drawing
* _ProgressViewItem_ is a representation of a cell used in _ProgressView_

There are few build-in items namely `text`, `spinner` and `percent`.

Default _ProgressView_ gives you `text`, `spinner` and `percent`.

[source, java, indent=0]
----
include::{snippets}/ProgressViewSnippets.java[tag=default]
----

And looks like:

[asciinema,rows=1]
----
include::example$tui-progress-1.cast[]
----

== Customisation

Here's some examples for various customisations:

[source, java, indent=0]
----
include::{snippets}/ProgressViewSnippets.java[tag=allmixedalignandsize]
----

Align `text` and `spinner` to left and give them less space. Align `percent` to right
and give it remaining space.

[asciinema,rows=1]
----
include::example$tui-progress-2.cast[]
----

== Default Bindings
Does not have any default bindings.

== Events

Events are sent depending on a state of a progress.

.ProgressView Events
|===
|Event |Description

|ProgressViewStartEvent
|Progress tracking has started

|ProgressViewEndEvent
|Progress tracking has stopped

|ProgressViewStateChangeEvent
|Progress tracking state has changed


|===
