#ifndef BUTTONPOLICY_H
#define BUTTONPOLICY_H
-#include <vector>
-#include <iosfwd>
-
namespace lyx {
namespace frontend {
dialogs. Only the policy is implemented here. Separate ButtonController
classes are needed for each GUI implementation.
- Policy | ReadOnly | Apply Button | Repeated Apply
+ Policy | ReadOnly | Apply Button | Repeated Apply
========================================================================
OkCancel | N | N | -
OkCancelReadOnly | Y | N | -
OkApplyCancelReadOnly | Y | Y | Y
NoRepeatedApply | N | Y | N
NoRepeatedApplyReadOnly | Y | Y | N
+ OkApplyCancelAutoReadOnly | Y | Y | Y
Preferences | N | Y | No (Ok-Close)
Ignorant | N/A | N/A | N/A
========================================================================
The IgnorantPolicy is a special case that allows anything.
*/
-class ButtonPolicy {
+class ButtonPolicy
+{
public:
// The various poicies
This is based on the value of the bool state of the Button::CANCEL.
true == Cancel, false == Close
*/
- OkCancelPolicy,
+ OkCancelPolicy,
/** Ok and Cancel buttons for dialogs where read-only operation is blocked.
OkApplyCancelReadOnlyPolicy,
/** Ok, Apply and Cancel buttons for dialogs where repeated
- * Apply is allowed.
+ Apply is allowed.
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.
*/
NoRepeatedApplyPolicy,
+ /** Ok, Apply and Cancel buttons and an AutoApply checkbox.
+ 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
+ */
+ OkApplyCancelAutoReadOnlyPolicy,
+
/** 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
to minimise problems to users by supplying an anything-goes policy via a
preprocessor directive.
*/
- IgnorantPolicy,
+ IgnorantPolicy
};
/// Constructor
explicit ButtonPolicy(Policy policy);
+ /// Destructor
+ ~ButtonPolicy();
+ ///
+ void setPolicy(Policy policy);
/** The various possible state names.
Not all state-machines have this many states. However, we need
///
APPLIED,
///
+ AUTOAPPLY_INITIAL,
+ ///
+ AUTOAPPLY_CHANGED,
+ ///
RO_INITIAL,
///
RO_VALID,
///
RO_APPLIED,
///
+ RO_AUTOAPPLY,
+ ///
BOGUS = 55
};
/// The various button types.
enum Button {
///
- CLOSE = 0, // Not a real button, but effectively !CANCEL
+ CLOSE = 0, // Not a real button, but effectively !CANCEL
///
- OKAY = 1,
+ OKAY = 1,
///
- APPLY = 2,
+ APPLY = 2,
///
- CANCEL = 4,
+ CANCEL = 4,
///
- RESTORE = 8
+ RESTORE = 8,
+ ///
+ AUTOAPPLY = 16 // This is usually a checkbox
};
///
static const Button ALL_BUTTONS =
- Button(OKAY | APPLY | CANCEL | RESTORE);
+ Button(OKAY | APPLY | CANCEL | RESTORE | AUTOAPPLY);
/** State machine inputs.
All the policies so far have both CANCEL and HIDE always going to
SMI_CANCEL,
/// a restore action has happened
SMI_RESTORE,
+ /// apply auto-apply
+ SMI_AUTOAPPLY,
/// the dialog has been hidden
SMI_HIDE,
/// the dialog contents are read-only
bool isReadOnly() const;
private:
- ///
- Policy policy_;
-
- /// Transition map of the state machine.
- typedef std::vector<State> StateArray;
- ///
- typedef std::vector<StateArray> StateMachine;
- /// The state outputs are the status of the buttons.
- typedef std::vector<int> StateOutputs;
-
- /// Current state.
- State state_;
- /// Which buttons are active for a given state.
- StateOutputs outputs_;
- ///
- StateMachine state_machine_;
-
-private:
- // Helpers
- void nextState(SMInput input);
-
- void initOkCancel();
- void initOkCancelReadOnly();
- void initNoRepeatedApplyReadOnly();
- void initOkApplyCancelReadOnly();
- void initOkApplyCancel();
- void initNoRepeatedApply();
- void initPreferences();
+ /// noncopyable
+ ButtonPolicy(ButtonPolicy const &);
+ void operator=(ButtonPolicy const &);
+
+ /// pimpl
+ class Private;
+ Private * d;
};
-std::ostream & operator<<(std::ostream & os, ButtonPolicy::State st);
-std::ostream & operator<<(std::ostream & os, ButtonPolicy::SMInput smi);
-
} // namespace frontend
} // namespace lyx