]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/ButtonController.C
try this for distinguishing inner and outer tabs
[lyx.git] / src / frontends / xforms / ButtonController.C
index e79abaa47e1bf43174b7a6c9cf5cf011fe1e77f5..9e497995c696114b4c67983614481b5ea208383c 100644 (file)
@@ -1,5 +1,7 @@
 #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);
 }
@@ -52,10 +59,10 @@ void ButtonController::refresh()
        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()) {
@@ -88,6 +95,7 @@ void ButtonController::refresh()
 
 void ButtonController::input(ButtonPolicy::SMInput in)
 {
+       //lyxerr << "ButtonController::input: bp_[" << bp_ << "]" << endl;
        bp_->input(in);
        refresh();
 }
@@ -140,13 +148,30 @@ void ButtonController::readWrite()
 }
 
 
-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;
 }