My application manages a few types of entities, each of them has its own workflow. For example - a task entity workflow will look something like this:
(this is a functional/logical drawing, this is not the UI).
In each state the user can change the status of the task to a different state (in some cases, there will be more than one states available - for example if the task is in "in progress" state, the user can change the state to pending, done or canceled.) In many of those situations I assume there is a primary path, most commonly used (for example in progress -> Done).
The workflow can be often more complex (not to say pretty scary to look at...) and include 10+ possible states. In some cases, a change in state will require more input (for example, setting a task to "Canceled" will require the user to add an explanation)
I'm looking for a good design for the action of changing the entity state. Currently in many applications I see the use of drop-downs (Outlook tasks/MS Project action items etc,). However I feel it doesn't reflect the process mental model nor the available stages from the current status.