@startuml !theme plain hide empty description top to bottom direction title Placed audio player - public state model skinparam backgroundColor transparent skinparam shadowing false skinparam roundcorner 14 skinparam ArrowThickness 1.2 skinparam DefaultFontName "DejaVu Sans" skinparam DefaultFontSize 13 skinparam state { BackgroundColor #F8F8F8 BorderColor #555555 FontColor #222222 StartColor #555555 EndColor #555555 BackgroundColor<> #DCEEFF BorderColor<> #3A7FC4 FontColor<> #123A63 BackgroundColor<> #E3F6E3 BorderColor<> #3C9D40 FontColor<> #1E5C22 BackgroundColor<> #F0E6FF BorderColor<> #8A5CC2 FontColor<> #4B2A73 BackgroundColor<> #FFE8CC BorderColor<> #D8842A FontColor<> #7A4A12 BackgroundColor<> #FFE5E5 BorderColor<> #CC3333 FontColor<> #7A1F1F } state NotInitialized <> state FatalError <> state Terminated <> [*] -[#8A5CC2]-> NotInitialized NotInitialized -[#3A7FC4]-> Initialized : init NotInitialized -[#CC3333]-> FatalError : command before init state Initialized { [*] -[#3A7FC4]-> Stopped state Stopped <> { Stopped : volume(p) / set volume Stopped : stop / ignore } state Playing <> { Playing : seek(p) / seek decoder Playing : volume(p) / set volume } state Paused <> { Paused : seek(p) / seek decoder Paused : volume(p) / set volume } Stopped -[#D8842A]-> Playing : open(file) Playing -[#3C9D40]-> Paused : pause #t Paused -[#D8842A]-> Playing : pause #f Playing -[#3A7FC4]-> Stopped : audio done Playing -[#3A7FC4]-> Stopped : stop Paused -[#3A7FC4]-> Stopped : stop Playing -[#D8842A]-> Playing : open(new-file) Playing -[#3A7FC4]-> Stopped : worker exception Paused -[#3A7FC4]-> Stopped : worker exception } Initialized -[#8A5CC2]-> Terminated : quit / cleanup FatalError -[#555555]-> [*] Terminated -[#555555]-> [*] @enduml