2 /* This file is part of
3 * =================================================
5 * LyX, The Document Processor
6 * Copyright 1995 Matthias Ettrich.
7 * Copyright 1995-2000 The LyX Team.
9 * This file Copyright 2000 Baruch Even
10 * ================================================= */
14 #pragma implementation
18 #include "RadioButtonGroup.h"
20 #include "debug.h" // for lyxerr
29 void RadioButtonGroup::registerRadioButton(FL_OBJECT *button, int value)
31 map.push_back( ButtonValuePair(button, value) );
35 void RadioButtonGroup::reset()
40 // Functor to help us in our work, we should try to find how to achieve
41 // this with only STL predicates, but its easier to write this than to
42 // dig. If you can find the equivalent STL predicate combination, let me
45 // The idea is to take a pair and a value and return true when the second
46 // element in the pair equals the value.
48 struct equal_to_second_in_pair {
49 typedef bool result_type;
50 typedef T first_argument_type;
51 typedef typename T::second_type second_argument_type;
54 pair<typename T::first_type, typename T::second_type> const & left,
55 typename T::second_type const & right) const
57 return left.second == right;
61 void RadioButtonGroup::setButton(int value)
63 ButtonValueMap::const_iterator it =
64 find_if(map.begin(), map.end(),
65 bind2nd(equal_to_second_in_pair<ButtonValuePair>(),
68 // If we found nothing, report it and return
69 if (it == map.end()) {
70 lyxerr << "BUG: Requested value in RadioButtonGroup doesn't exists"
73 fl_set_button((*it).first, 1);
79 struct is_set_button {
80 bool operator() (T const & item) const
82 return fl_get_button( (item).first );
86 int RadioButtonGroup::getButton()
88 // Find the first button that is active
89 ButtonValueMap::iterator it =
90 find_if(map.begin(), map.end(),
91 is_set_button<ButtonValuePair>() );
93 // If such a button was found, return its value.
94 if (it != map.end()) {
98 lyxerr << "BUG: No radio button found to be active." << endl;