======State Diagram======
To be able to generate those diagram, you must have Graphviz_software installed
on your machine in the default directory c:\Program Files\GraphvizX.XX or /usr/
bin/dot.
You can have_a_look_here_if_you_have_installed_Graphviz_somewhere_else.
======Simple State======
You can use **%%[*]%%** for the starting point and ending point of the state diagram.
Use **%%-->%%** for arrows.
[*] --> State1
State1 --> [*]
State1 : this is a string
State1 : this is another string
State1 -> State2
State2 --> [*]
======Composite state======
A state can also be composite. You have to define it using the state keywords and brackets.
scale 350 width
[*] --> NotShooting
state NotShooting {
[*] --> Idle
Idle --> Configuring : EvConfig
Configuring --> Idle : EvConfig
}
state Configuring {
[*] --> NewValueSelection
NewValueSelection --> NewValuePreview : EvNewValue
NewValuePreview --> NewValueSelection : EvNewValueRejected
NewValuePreview --> NewValueSelection : EvNewValueSaved
state NewValuePreview {
State1 -> State2
}
}
======Long name======
You can also use the state keyword to use long description for states.
scale 600 width
[*] -> State1
State1 --> State2 : Succeeded
State1 --> [*] : Aborted
State2 --> State3 : Succeeded
State2 --> [*] : Aborted
state State3 {
state "Accumulate Enough Data\nLong State Name" as long1
long1 : Just a test
[*] --> long1
long1 --> long1 : New Data
long1 --> ProcessData : Enough Data
}
State3 --> State3 : Failed
State3 --> [*] : Succeeded / Save Result
State3 --> [*] : Aborted
[imgp/state_002.png]
======Concurrent state======
You can define concurrent state into a composite state using the -- symbol as
separator.
scale 800 width
[*] --> Active
state Active {
[*] -> NumLockOff
NumLockOff --> NumLockOn : EvNumLockPressed
NumLockOn --> NumLockOff : EvNumLockPressed
--
[*] -> CapsLockOff
CapsLockOff --> CapsLockOn : EvCapsLockPressed
CapsLockOn --> CapsLockOff : EvCapsLockPressed
--
[*] -> ScrollLockOff
ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
}
[imgp/state_003.png]
======Arrow direction======
You can use -> for horizontal arrows. It is possible to force arrow's direction
using the following syntax:
* -down-> (default arrow)
* -right-> or ->
* -left->
* -up->
[*] -up-> First
First -right-> Second
Second --> Third
Third -left-> Last
You can shorten the arrow by using only the first character of the direction
(for example, -d- instead of -down-) or the two first characters (-do-).
Please note that you should not abuse this functionality : Graphviz gives
usually good results without tweaking.
======Note======
You can also define notes using note left of, note right of, note top of, note
bottom of keywords.
You can also define notes on several lines.
[*] --> Active
Active --> Inactive
note left of Active : this is a short\nnote
note right of Inactive
A note can also
be defined on
several lines
end note
[imgp/state_005.png]
You can also have floating notes.
state foo
note "This is a floating note" as N1
======More in notes======
You can put notes on composite states.
[*] --> NotShooting
state "Not Shooting State" as NotShooting {
state "Idle mode" as Idle
state "Configuring mode" as Configuring
[*] --> Idle
Idle --> Configuring : EvConfig
Configuring --> Idle : EvConfig
}
note right of NotShooting : This is a note on a composite state
======Skinparam======
You can use the skinparam command to change colors and fonts for the drawing.
You can use this command :
* In the diagram definition, like any other commands,
* In an included_file,
* In a configuration file, provided in the command_line or the ANT_task.
You can define specific color and fonts for stereotyped states.
skinparam backgroundColor LightYellow
skinparam state {
StartColor MediumBlue
EndColor Red
BackgroundColor Peru
BackgroundColor<> Olive
BorderColor Gray
FontName Impact
}
[*] --> NotShooting
state "Not Shooting State" as NotShooting {
state "Idle mode" as Idle <>
state "Configuring mode" as Configuring
[*] --> Idle
Idle --> Configuring : EvConfig
Configuring --> Idle : EvConfig
}
NotShooting --> [*]