]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/ButtonPolicies.C
try this for distinguishing inner and outer tabs
[lyx.git] / src / frontends / ButtonPolicies.C
index 418df35b5660cf2db094cc5d33271dd55277365d..bde5f93816bed603e4c7823877f18bcb2c5e0b90 100644 (file)
  */
 
 #include <config.h>
+
 #include "ButtonPolicies.h"
 #include "debug.h"
 
+using std::endl;
 
-// 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];
@@ -36,7 +39,7 @@ inline void nextState(ButtonPolicy::State & state,
                       << in
                       << " from state "
                       << state
-                      << std::endl;
+                      << endl;
        }
 }
 
@@ -46,8 +49,9 @@ inline void nextState(ButtonPolicy::State & state,
 
 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(int(SMI_TOTAL), ButtonPolicy::BOGUS))
 {
        // Build the state output map
        outputs_[INITIAL] = CLOSE;
@@ -95,6 +99,7 @@ PreferencesPolicy::PreferencesPolicy()
 
 void PreferencesPolicy::input(SMInput input)
 {
+       //lyxerr << "PreferencesPolicy::input" << endl;
        // CANCEL and HIDE always take us to INITIAL for all cases.
        // Note that I didn't put that special case in the helper function
        // because it doesn't belong there.  Some other 
@@ -118,13 +123,14 @@ void PreferencesPolicy::input(SMInput input)
 
 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(int(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
@@ -142,17 +148,21 @@ OkCancelPolicy::OkCancelPolicy()
        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;
 }
 
 
 
 void OkCancelPolicy::input(SMInput input)
 {
+       //lyxerr << "OkCancelPolicy::input" << endl;
+       
        // CANCEL and HIDE always take us to INITIAL for all cases
        if (SMI_CANCEL == input
            || SMI_HIDE == input) {
@@ -168,16 +178,17 @@ void OkCancelPolicy::input(SMInput input)
 
 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(int(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
@@ -194,11 +205,13 @@ OkCancelReadOnlyPolicy::OkCancelReadOnlyPolicy()
        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;
@@ -210,16 +223,20 @@ OkCancelReadOnlyPolicy::OkCancelReadOnlyPolicy()
        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;
 }
 
 
 void OkCancelReadOnlyPolicy::input(SMInput input)
 {
+       //lyxerr << "OkCancelReadOnlyPolicy::input" << endl;
+       
        // CANCEL and HIDE always take us to INITIAL for all cases
        if (SMI_CANCEL == input
            || SMI_HIDE == input) {
@@ -238,16 +255,17 @@ void OkCancelReadOnlyPolicy::input(SMInput input)
 
 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(int(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
@@ -265,11 +283,13 @@ NoRepeatedApplyReadOnlyPolicy::NoRepeatedApplyReadOnlyPolicy()
        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;
@@ -281,16 +301,20 @@ NoRepeatedApplyReadOnlyPolicy::NoRepeatedApplyReadOnlyPolicy()
        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;
 }
 
 
 void NoRepeatedApplyReadOnlyPolicy::input(SMInput input)
 {
+       //lyxerr << "NoReapeatedApplyReadOnlyPolicy::input" << endl;
+       
        // CANCEL and HIDE always take us to INITIAL for all cases
        if (SMI_CANCEL == input
            || SMI_HIDE == input) {
@@ -309,18 +333,19 @@ void NoRepeatedApplyReadOnlyPolicy::input(SMInput input)
 
 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(int(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
@@ -337,12 +362,14 @@ OkApplyCancelReadOnlyPolicy::OkApplyCancelReadOnlyPolicy()
        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;
@@ -361,11 +388,13 @@ OkApplyCancelReadOnlyPolicy::OkApplyCancelReadOnlyPolicy()
        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;
@@ -376,6 +405,8 @@ OkApplyCancelReadOnlyPolicy::OkApplyCancelReadOnlyPolicy()
 
 void OkApplyCancelReadOnlyPolicy::input(SMInput input)
 {
+       //lyxerr << "OkApplyCancelReadOnlyPolicy::input" << endl;
+       
        // CANCEL and HIDE always take us to INITIAL for all cases
        if (SMI_CANCEL == input
            || SMI_HIDE == input) {
@@ -394,13 +425,14 @@ void OkApplyCancelReadOnlyPolicy::input(SMInput input)
 
 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(int(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
@@ -419,12 +451,14 @@ OkApplyCancelPolicy::OkApplyCancelPolicy()
        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;
@@ -437,6 +471,8 @@ OkApplyCancelPolicy::OkApplyCancelPolicy()
 
 void OkApplyCancelPolicy::input(SMInput input)
 {
+       //lyxerr << "OkApplyCancelPolicy::input" << endl;
+       
        // CANCEL and HIDE always take us to INITIAL for all cases
        if (SMI_CANCEL == input
            || SMI_HIDE == input) {
@@ -455,13 +491,14 @@ void OkApplyCancelPolicy::input(SMInput input)
 
 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(int(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
@@ -480,16 +517,20 @@ NoRepeatedApplyPolicy::NoRepeatedApplyPolicy()
        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;
 }
 
 
 void NoRepeatedApplyPolicy::input(SMInput input)
 {
+       //lyxerr << "NoRepeatedApplyPolicy::input" << endl;
+       
        // CANCEL and HIDE always take us to INITIAL for all cases
        if (SMI_CANCEL == input
            || SMI_HIDE == input) {