#include <config.h>
+#include <algorithm>
+
#include FORMS_H_LOCATION
#ifdef __GNUG__
#include "ButtonController.h"
#include "support/LAssert.h"
+#include "gettext.h" // _()
+//#include "debug.h"
+using std::find;
+using std::vector;
ButtonController::ButtonController(ButtonPolicy * bp,
char const * cancel, char const * close)
: bp_(bp), okay_(0), apply_(0), cancel_(0), undo_all_(0),
- read_only_(), cancel_label(cancel), close_label(close)
+ read_only_(), dont_trigger_change_(),
+ cancel_label(cancel), close_label(close)
{
Assert(bp);
}
if (cancel_) {
if (bp_->buttonStatus(ButtonPolicy::CANCEL)) {
fl_set_object_label(cancel_,
- cancel_label);
+ _(cancel_label));
} else {
fl_set_object_label(cancel_,
- close_label);
+ _(close_label));
}
}
if (!read_only_.empty()) {
void ButtonController::input(ButtonPolicy::SMInput in)
{
+ //lyxerr << "ButtonController::input: bp_[" << bp_ << "]" << endl;
bp_->input(in);
refresh();
}
}
-bool ButtonController::valid(bool v)
+bool ButtonController::valid(bool v, FL_OBJECT * obj)
{
- if (v) {
- input(ButtonPolicy::SMI_VALID);
+ if (obj && !dont_trigger_change_.empty()) {
+ vector<FL_OBJECT *>::const_iterator cit =
+ find(dont_trigger_change_.begin(),
+ dont_trigger_change_.end(),
+ obj);
+
+ // Only trigger a change if the obj is not in the list
+ if (cit == dont_trigger_change_.end()) {
+ if (v) {
+ input(ButtonPolicy::SMI_VALID);
+ } else {
+ input(ButtonPolicy::SMI_INVALID);
+ }
+ }
} else {
- input(ButtonPolicy::SMI_INVALID);
+ if (v) {
+ input(ButtonPolicy::SMI_VALID);
+ } else {
+ input(ButtonPolicy::SMI_INVALID);
+ }
}
+
return v;
}