*/
#include <config.h>
+
#include "ButtonPolicies.h"
#include "debug.h"
-// Helper function
-inline void nextState(ButtonPolicy::State & state,
+/// Helper function
+static inline
+void nextState(ButtonPolicy::State & state,
ButtonPolicy::SMInput in,
- ButtonPolicy::StateMachine s_m,
+ ButtonPolicy::StateMachine const & s_m,
char const * function_name = "nextState")
{
ButtonPolicy::State tmp = s_m[state][in];
PreferencesPolicy::PreferencesPolicy()
: state_(INITIAL),
- outputs_(APPLIED+1, OKAY | APPLY | CANCEL | UNDO_ALL),
- state_machine_(APPLIED+1, StateArray(SMI_TOTAL, BOGUS))
+ outputs_(APPLIED + 1, ButtonPolicy::ALL_BUTTONS),
+ state_machine_(APPLIED + 1,
+ StateArray(SMI_TOTAL, ButtonPolicy::BOGUS))
{
// Build the state output map
outputs_[INITIAL] = CLOSE;
OkCancelPolicy::OkCancelPolicy()
: state_(INITIAL),
- outputs_(INVALID+1, OKAY | APPLY | CANCEL | UNDO_ALL),
- state_machine_(INVALID+1, StateArray(SMI_TOTAL, BOGUS))
+ outputs_(INVALID + 1, ButtonPolicy::ALL_BUTTONS),
+ state_machine_(INVALID + 1,
+ StateArray(SMI_TOTAL, ButtonPolicy::BOGUS))
{
// Build the state output map
outputs_[INITIAL] = CLOSE;
- outputs_[VALID] = OKAY | CANCEL;
- outputs_[INVALID] = CANCEL;
+ outputs_[VALID] = UNDO_ALL | OKAY | CANCEL;
+ outputs_[INVALID] = UNDO_ALL | CANCEL;
// Build the state machine one state at a time
// NOTE: Since CANCEL and HIDE always go to INITIAL they are
state_machine_[VALID][SMI_READ_WRITE] = VALID;
state_machine_[VALID][SMI_INVALID] = INVALID;
state_machine_[VALID][SMI_OKAY] = INITIAL;
+ state_machine_[VALID][SMI_UNDO_ALL] = INITIAL;
// State::INVALID
state_machine_[INVALID][SMI_VALID] = VALID;
state_machine_[INVALID][SMI_INVALID] = INVALID;
state_machine_[INVALID][SMI_READ_ONLY] = INVALID;
state_machine_[INVALID][SMI_READ_WRITE] = INVALID;
+ state_machine_[INVALID][SMI_UNDO_ALL] = INITIAL;
}
OkCancelReadOnlyPolicy::OkCancelReadOnlyPolicy()
: state_(INITIAL),
- outputs_(RO_INVALID+1, OKAY | APPLY | CANCEL | UNDO_ALL),
- state_machine_(RO_INVALID+1, StateArray(SMI_TOTAL, BOGUS))
+ outputs_(RO_INVALID + 1, ButtonPolicy::ALL_BUTTONS),
+ state_machine_(RO_INVALID + 1,
+ StateArray(SMI_TOTAL, ButtonPolicy::BOGUS))
{
// Build the state output map
outputs_[INITIAL] = CLOSE;
- outputs_[VALID] = OKAY | CANCEL;
- outputs_[INVALID] = CANCEL;
+ outputs_[VALID] = UNDO_ALL | OKAY | CANCEL;
+ outputs_[INVALID] = UNDO_ALL | CANCEL;
outputs_[RO_INITIAL] = CLOSE;
- outputs_[RO_VALID] = CANCEL;
- outputs_[RO_INVALID] = CANCEL;
+ outputs_[RO_VALID] = UNDO_ALL | CANCEL;
+ outputs_[RO_INVALID] = UNDO_ALL | CANCEL;
// Build the state machine one state at a time
// NOTE: Since CANCEL and HIDE always go to INITIAL they are
state_machine_[VALID][SMI_READ_WRITE] = VALID;
state_machine_[VALID][SMI_INVALID] = INVALID;
state_machine_[VALID][SMI_OKAY] = INITIAL;
+ state_machine_[VALID][SMI_UNDO_ALL] = INITIAL;
state_machine_[VALID][SMI_READ_ONLY] = RO_VALID;
// State::INVALID
state_machine_[INVALID][SMI_INVALID] = INVALID;
state_machine_[INVALID][SMI_READ_WRITE] = INVALID;
state_machine_[INVALID][SMI_VALID] = VALID;
+ state_machine_[INVALID][SMI_UNDO_ALL] = INITIAL;
state_machine_[INVALID][SMI_READ_ONLY] = RO_INVALID;
// State::RO_INITIAL
state_machine_[RO_INITIAL][SMI_READ_ONLY] = RO_INITIAL;
state_machine_[RO_VALID][SMI_READ_ONLY] = RO_VALID;
state_machine_[RO_VALID][SMI_INVALID] = RO_INVALID;
state_machine_[RO_VALID][SMI_READ_WRITE] = VALID;
+ state_machine_[RO_VALID][SMI_UNDO_ALL] = RO_INITIAL;
// State::RO_INVALID
state_machine_[RO_INVALID][SMI_READ_ONLY] = RO_INVALID;
state_machine_[RO_INVALID][SMI_INVALID] = RO_INVALID;
state_machine_[RO_INVALID][SMI_VALID] = RO_VALID;
state_machine_[RO_INVALID][SMI_READ_WRITE] = INVALID;
+ state_machine_[RO_INVALID][SMI_UNDO_ALL] = RO_INITIAL;
}
NoRepeatedApplyReadOnlyPolicy::NoRepeatedApplyReadOnlyPolicy()
: state_(INITIAL),
- outputs_(RO_INVALID+1, OKAY | APPLY | CANCEL | UNDO_ALL),
- state_machine_(RO_INVALID+1, StateArray(SMI_TOTAL, BOGUS))
+ outputs_(RO_INVALID + 1, ButtonPolicy::ALL_BUTTONS),
+ state_machine_(RO_INVALID + 1,
+ StateArray(SMI_TOTAL, ButtonPolicy::BOGUS))
{
// Build the state output map
outputs_[INITIAL] = CLOSE;
- outputs_[VALID] = OKAY | APPLY | CANCEL;
- outputs_[INVALID] = CANCEL;
+ outputs_[VALID] = UNDO_ALL | OKAY | APPLY | CANCEL;
+ outputs_[INVALID] = UNDO_ALL | CANCEL;
outputs_[RO_INITIAL] = CLOSE;
- outputs_[RO_VALID] = CANCEL;
- outputs_[RO_INVALID] = CANCEL;
+ outputs_[RO_VALID] = UNDO_ALL | CANCEL;
+ outputs_[RO_INVALID] = UNDO_ALL | CANCEL;
// Build the state machine one state at a time
// NOTE: Since CANCEL and HIDE always go to INITIAL they are
state_machine_[VALID][SMI_INVALID] = INVALID;
state_machine_[VALID][SMI_OKAY] = INITIAL;
state_machine_[VALID][SMI_APPLY] = INITIAL;
+ state_machine_[VALID][SMI_UNDO_ALL] = INITIAL;
state_machine_[VALID][SMI_READ_ONLY] = RO_VALID;
// State::INVALID
state_machine_[INVALID][SMI_INVALID] = INVALID;
state_machine_[INVALID][SMI_READ_WRITE] = INVALID;
state_machine_[INVALID][SMI_VALID] = VALID;
+ state_machine_[INVALID][SMI_UNDO_ALL] = INITIAL;
state_machine_[INVALID][SMI_READ_ONLY] = RO_INVALID;
// State::RO_INITIAL
state_machine_[RO_INITIAL][SMI_READ_ONLY] = RO_INITIAL;
state_machine_[RO_VALID][SMI_READ_ONLY] = RO_VALID;
state_machine_[RO_VALID][SMI_INVALID] = RO_INVALID;
state_machine_[RO_VALID][SMI_READ_WRITE] = VALID;
+ state_machine_[RO_VALID][SMI_UNDO_ALL] = RO_INITIAL;
// State::RO_INVALID
state_machine_[RO_INVALID][SMI_INVALID] = RO_INVALID;
state_machine_[RO_INVALID][SMI_READ_ONLY] = RO_INVALID;
state_machine_[RO_INVALID][SMI_VALID] = RO_VALID;
state_machine_[RO_INVALID][SMI_READ_WRITE] = INVALID;
+ state_machine_[RO_INVALID][SMI_UNDO_ALL] = RO_INITIAL;
}
OkApplyCancelReadOnlyPolicy::OkApplyCancelReadOnlyPolicy()
: state_(INITIAL),
- outputs_(RO_APPLIED+1, OKAY | APPLY | CANCEL | UNDO_ALL),
- state_machine_(RO_APPLIED+1, StateArray(SMI_TOTAL, BOGUS))
+ outputs_(RO_APPLIED + 1, ButtonPolicy::ALL_BUTTONS),
+ state_machine_(RO_APPLIED + 1,
+ StateArray(SMI_TOTAL, ButtonPolicy::BOGUS))
{
// Build the state output map
outputs_[INITIAL] = CLOSE;
- outputs_[VALID] = OKAY | APPLY | CANCEL;
- outputs_[INVALID] = CANCEL;
+ outputs_[VALID] = UNDO_ALL | OKAY | APPLY | CANCEL;
+ outputs_[INVALID] = UNDO_ALL | CANCEL;
outputs_[APPLIED] = OKAY | APPLY | CLOSE;
outputs_[RO_INITIAL] = CLOSE;
- outputs_[RO_VALID] = CANCEL;
- outputs_[RO_INVALID] = CANCEL;
- outputs_[RO_APPLIED] = CANCEL;
+ outputs_[RO_VALID] = UNDO_ALL | CANCEL;
+ outputs_[RO_INVALID] = UNDO_ALL | CANCEL;
+ outputs_[RO_APPLIED] = CLOSE;
// Build the state machine one state at a time
// NOTE: Since CANCEL and HIDE always go to INITIAL they are
state_machine_[VALID][SMI_READ_WRITE] = VALID;
state_machine_[VALID][SMI_INVALID] = INVALID;
state_machine_[VALID][SMI_OKAY] = INITIAL;
+ state_machine_[VALID][SMI_UNDO_ALL] = INITIAL;
state_machine_[VALID][SMI_APPLY] = APPLIED;
state_machine_[VALID][SMI_READ_ONLY] = RO_VALID;
// State::INVALID
state_machine_[INVALID][SMI_INVALID] = INVALID;
state_machine_[INVALID][SMI_READ_WRITE] = INVALID;
state_machine_[INVALID][SMI_VALID] = VALID;
+ state_machine_[INVALID][SMI_UNDO_ALL] = INITIAL;
state_machine_[INVALID][SMI_READ_ONLY] = RO_INVALID;
// State::APPLIED
state_machine_[APPLIED][SMI_APPLY] = APPLIED;
state_machine_[RO_VALID][SMI_READ_ONLY] = RO_VALID;
state_machine_[RO_VALID][SMI_INVALID] = RO_INVALID;
state_machine_[RO_VALID][SMI_READ_WRITE] = VALID;
+ state_machine_[RO_VALID][SMI_UNDO_ALL] = RO_INITIAL;
// State::RO_INVALID
state_machine_[RO_INVALID][SMI_INVALID] = RO_INVALID;
state_machine_[RO_INVALID][SMI_READ_ONLY] = RO_INVALID;
state_machine_[RO_INVALID][SMI_VALID] = RO_VALID;
state_machine_[RO_INVALID][SMI_READ_WRITE] = INVALID;
+ state_machine_[RO_INVALID][SMI_UNDO_ALL] = RO_INITIAL;
// State::RO_APPLIED
state_machine_[RO_APPLIED][SMI_READ_ONLY] = RO_APPLIED;
state_machine_[RO_APPLIED][SMI_INVALID] = RO_INVALID;
OkApplyCancelPolicy::OkApplyCancelPolicy()
: state_(INITIAL),
- outputs_(APPLIED+1, OKAY | APPLY | CANCEL | UNDO_ALL),
- state_machine_(APPLIED+1, StateArray(SMI_TOTAL, BOGUS))
+ outputs_(APPLIED + 1, ButtonPolicy::ALL_BUTTONS),
+ state_machine_(APPLIED + 1,
+ StateArray(SMI_TOTAL, ButtonPolicy::BOGUS))
{
// Build the state output map
outputs_[INITIAL] = CLOSE;
- outputs_[VALID] = OKAY | APPLY | CANCEL;
- outputs_[INVALID] = CANCEL;
+ outputs_[VALID] = UNDO_ALL | OKAY | APPLY | CANCEL;
+ outputs_[INVALID] = UNDO_ALL | CANCEL;
outputs_[APPLIED] = OKAY | APPLY | CLOSE;
// Build the state machine one state at a time
state_machine_[VALID][SMI_READ_WRITE] = VALID;
state_machine_[VALID][SMI_INVALID] = INVALID;
state_machine_[VALID][SMI_OKAY] = INITIAL;
+ state_machine_[VALID][SMI_UNDO_ALL] = INITIAL;
state_machine_[VALID][SMI_APPLY] = APPLIED;
// State::INVALID
state_machine_[INVALID][SMI_INVALID] = INVALID;
state_machine_[INVALID][SMI_READ_ONLY] = INVALID;
state_machine_[INVALID][SMI_READ_WRITE] = INVALID;
state_machine_[INVALID][SMI_VALID] = VALID;
+ state_machine_[INVALID][SMI_UNDO_ALL] = INITIAL;
// State::APPLIED
state_machine_[APPLIED][SMI_APPLY] = APPLIED;
state_machine_[APPLIED][SMI_READ_ONLY] = APPLIED;
NoRepeatedApplyPolicy::NoRepeatedApplyPolicy()
: state_(INITIAL),
- outputs_(INVALID+1, OKAY | APPLY | CANCEL | UNDO_ALL),
- state_machine_(INVALID+1, StateArray(SMI_TOTAL, BOGUS))
+ outputs_(INVALID + 1, ButtonPolicy::ALL_BUTTONS),
+ state_machine_(INVALID + 1,
+ StateArray(SMI_TOTAL, ButtonPolicy::BOGUS))
{
// Build the state output map
outputs_[INITIAL] = CLOSE;
- outputs_[VALID] = OKAY | APPLY | CANCEL;
- outputs_[INVALID] = CANCEL;
+ outputs_[VALID] = UNDO_ALL | OKAY | APPLY | CANCEL;
+ outputs_[INVALID] = UNDO_ALL | CANCEL;
// Build the state machine one state at a time
// NOTE: Since CANCEL and HIDE always go to INITIAL they are
state_machine_[VALID][SMI_INVALID] = INVALID;
state_machine_[VALID][SMI_OKAY] = INITIAL;
state_machine_[VALID][SMI_APPLY] = INITIAL;
+ state_machine_[VALID][SMI_UNDO_ALL] = INITIAL;
// State::INVALID
state_machine_[INVALID][SMI_INVALID] = INVALID;
state_machine_[INVALID][SMI_READ_ONLY] = INVALID;
state_machine_[INVALID][SMI_READ_WRITE] = INVALID;
state_machine_[INVALID][SMI_VALID] = VALID;
+ state_machine_[INVALID][SMI_UNDO_ALL] = INITIAL;
}