]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/ButtonPolicies.h
use anon namespace, somewhat better comp. handling of minipages, not quite there yet
[lyx.git] / src / frontends / ButtonPolicies.h
index 40aed42457d76d385449936517159a9405052e4f..a3603b67b3557fa81497b28104e32ec400908ba5 100644 (file)
@@ -21,8 +21,9 @@
 
 
 #include <vector>
-#include "support/utility.hpp"
+#include <boost/utility.hpp>
 
+#include "support/LOstream.h"
 
 /** An abstract base class for button policies.
     A state machine implementation of the various button policies used by the
@@ -38,6 +39,7 @@
     NoRepeatedApply            |       N  |    Y         |     N
     NoRepeatedApplyReadOnly    |       Y  |    Y         |     N
     Preferences                        |       N  |    Y         | No (Ok-Close)
+    Ignorant                   |      N/A |    N/A       |    N/A
     ========================================================================
 
     Policy
        has its own special version of repeated apply handling because its Ok
        button is actually a Save button -- its always reasonable to Save the
        preferences if the dialog has changed since the last save.
+
+    The IgnorantPolicy is a special case that allows anything.
  */
-class ButtonPolicy : public noncopyable {
+class ButtonPolicy : public boost::noncopyable {
 public:
        ///
        virtual ~ButtonPolicy() {}
@@ -106,9 +110,9 @@ public:
                UNDO_ALL = 8
        };
        ///
-       static const Button AllButtons =
-       Button(OKAY | APPLY | CANCEL | UNDO_ALL);
-       
+       static const Button ALL_BUTTONS =
+               Button(OKAY | APPLY | CANCEL | UNDO_ALL);
+  
        /** State machine inputs.
            All the policies so far have both CANCEL and HIDE always going to
            INITIAL. This won't necessarily be true for all [future] policies
@@ -156,6 +160,22 @@ public:
 };
 
 
+inline
+std::ostream & operator<<(std::ostream & os, ButtonPolicy::State st)
+{
+       os << int(st);
+       return os;
+}
+
+
+inline
+std::ostream & operator<<(std::ostream & os, ButtonPolicy::SMInput smi)
+{
+       os << int(smi);
+       return os;
+}
+
+
 //--------------------- Actual Policy Classes -----------------------------
 
 /** Ok and Cancel buttons for dialogs with read-only operation.
@@ -169,7 +189,7 @@ public:
        ///
        OkCancelPolicy();
        ///
-       virtual ~OkCancelPolicy() {}
+       //virtual ~OkCancelPolicy() {}
        
        /// Trigger a transition with this input.
        virtual void input(SMInput);
@@ -196,13 +216,14 @@ private:
        StateMachine state_machine_;
 };
 
-
 /** Ok and Cancel buttons for dialogs where read-only operation is blocked.
     The state machine design for this policy allows changes to occur within
     the dialog while a file is read-only -- the okay button is disabled until
     a read-write input is given.  When the file is made read-write the dialog
-    will then be in the correct state (as if the file had always been read-write).
-    Note: This scheme supports the relabelling of Cancel to Close and vice versa.
+    will then be in the correct state (as if the file had always been
+    read-write).
+    Note: This scheme supports the relabelling of Cancel to Close
+    and vice versa.
     This is based on the value of the bool state of the Button::CANCEL.
     true == Cancel, false == Close
  */
@@ -211,7 +232,7 @@ public:
        ///
        OkCancelReadOnlyPolicy();
        ///
-       virtual ~OkCancelReadOnlyPolicy() {}
+       //virtual ~OkCancelReadOnlyPolicy() {}
        
        /// Trigger a transition with this input.
        virtual void input(SMInput);
@@ -236,16 +257,18 @@ private:
 };
 
 
-/** Ok, Apply and Cancel buttons for dialogs where read-only operation is blocked.
+/** Ok, Apply and Cancel buttons for dialogs where read-only operation
+    is blocked.
     Repeated Apply are not allowed.  Likewise,  Ok cannot follow Apply without
-    some valid input. That is, the dialog contents must change between each Apply
-    or Apply and Ok.
+    some valid input. That is, the dialog contents must change between
+    each Apply or Apply and Ok.
     The state machine design for this policy allows changes to occur within
     the dialog while a file is read-only -- the Ok+Apply buttons are disabled
     until a read-write input is given.  When the file is made read-write the
     dialog will then be in the correct state (as if the file had always been
     read-write).
-    Note: This scheme supports the relabelling of Cancel to Close and vice versa.
+    Note: This scheme supports the relabelling of Cancel to Close
+    and vice versa.
     This is based on the value of the bool state of the Button::CANCEL.
     true == Cancel, false == Close
  */
@@ -255,7 +278,7 @@ public:
        ///
        NoRepeatedApplyReadOnlyPolicy();
        ///
-       virtual ~NoRepeatedApplyReadOnlyPolicy() {}
+       //virtual ~NoRepeatedApplyReadOnlyPolicy() {}
        
        /// Trigger a transition with this input.
        virtual void input(SMInput);
@@ -280,14 +303,16 @@ private:
 };
 
 
-/** Ok, Apply and Cancel buttons for dialogs where read-only operation is blocked.
+/** Ok, Apply and Cancel buttons for dialogs where read-only
+    operation is blocked.
     Repeated Apply is allowed.  Likewise,  Ok can follow Apply.
     The state machine design for this policy allows changes to occur within
     the dialog while a file is read-only -- the Ok+Apply buttons are disabled
     until a read-write input is given.  When the file is made read-write the
     dialog will then be in the correct state (as if the file had always been
     read-write).
-    Note: This scheme supports the relabelling of Cancel to Close and vice versa.
+    Note: This scheme supports the relabelling of Cancel to Close
+    and vice versa.
     This is based on the value of the bool state of the Button::CANCEL.
     true == Cancel, false == Close
  */
@@ -296,7 +321,7 @@ public:
        ///
        OkApplyCancelReadOnlyPolicy();
        ///
-       virtual ~OkApplyCancelReadOnlyPolicy() {}
+       //virtual ~OkApplyCancelReadOnlyPolicy() {}
        
        /// Trigger a transition with this input.
        virtual void input(SMInput);
@@ -322,7 +347,8 @@ private:
 
 
 /** Ok, Apply and Cancel buttons for dialogs where repeated Apply is allowed.
-    Note: This scheme supports the relabelling of Cancel to Close and vice versa.
+    Note: This scheme supports the relabelling of Cancel to Close
+    and vice versa.
     This is based on the value of the bool state of the Button::CANCEL.
     true == Cancel, false == Close
  */
@@ -331,7 +357,7 @@ public:
        ///
        OkApplyCancelPolicy();
        ///
-       virtual ~OkApplyCancelPolicy() {}
+       //virtual ~OkApplyCancelPolicy() {}
        
        /// Trigger a transition with this input.
        virtual void input(SMInput);
@@ -354,7 +380,8 @@ private:
 
 
 /** Ok, Apply and Cancel buttons for dialogs with no repeated Apply.
-    Note: This scheme supports the relabelling of Cancel to Close and vice versa.
+    Note: This scheme supports the relabelling of Cancel to Close
+    and vice versa.
     This is based on the value of the bool state of the Button::CANCEL.
     true == Cancel, false == Close
  */
@@ -363,7 +390,7 @@ public:
        ///
        NoRepeatedApplyPolicy();
        ///
-       virtual ~NoRepeatedApplyPolicy() {}
+       //virtual ~NoRepeatedApplyPolicy() {}
        
        /// Trigger a transition with this input.
        virtual void input(SMInput);
@@ -387,7 +414,8 @@ private:
 
 /** Defines the policy used by the Preferences dialog.
     Four buttons: Ok (Save), Apply, Cancel/Close, Restore.
-    Note: This scheme supports the relabelling of Cancel to Close and vice versa.
+    Note: This scheme supports the relabelling of Cancel to Close
+    and vice versa.
     This is based on the value of the bool state of the Button::CANCEL.
     true == Cancel, false == Close
  */
@@ -396,7 +424,7 @@ public:
        ///
        PreferencesPolicy();
        ///
-       virtual ~PreferencesPolicy() {}
+       //virtual ~PreferencesPolicy() {}
        
        /// Trigger a transition with this input.
        virtual void input(SMInput);
@@ -417,4 +445,27 @@ private:
        StateMachine state_machine_;
 };
 
+
+/** Defines the policy used by dialogs that are forced to support a button
+    controller when they either don't have a use for one or are not ready to
+    use one.  This may be useful when testing a new button policy but wishing
+    to minimise problems to users by supplying an anything-goes policy via a
+    preprocessor directive.
+ */
+class IgnorantPolicy : public ButtonPolicy {
+public:
+       //virtual ~IgnorantPolicy() {}
+       
+       /// Trigger a transition with this input.
+       virtual void input(SMInput) {}
+       /// Activation status of a button.
+       virtual bool buttonStatus(Button) const {
+               return true;
+       }
+       /// Are we in a read-only state?
+       virtual bool isReadOnly() const {
+               return false;
+       }
+};
+
 #endif