--- gigedit/trunk/src/gigedit/paramedit.h 2007/07/03 09:00:55 1260 +++ gigedit/trunk/src/gigedit/paramedit.h 2007/07/05 17:12:20 1261 @@ -31,8 +31,6 @@ #include #include -extern bool update_gui; - class LabelWidget { public: Gtk::Label label; @@ -40,8 +38,12 @@ LabelWidget(const char* labelText, Gtk::Widget& widget); void set_sensitive(bool sensitive = true); + sigc::signal signal_changed_by_user() { + return sig_changed; + } protected: Gtk::Tooltips tooltips; + sigc::signal sig_changed; }; class NumEntry : public LabelWidget { @@ -50,15 +52,16 @@ Gtk::HScale scale; Gtk::SpinButton spinbutton; Gtk::HBox box; + + int round_to_int(double x) { + return int(x < 0.0 ? x - 0.5 : x + 0.5); + } public: NumEntry(const char* labelText, double lower = 0, double upper = 127, int decimals = 0); void set_value(double value) { spinbutton.set_value(value); } - Glib::SignalProxy0 signal_value_changed() { - return spinbutton.signal_value_changed(); - } double get_value() const { return spinbutton.get_value(); } @@ -104,8 +107,13 @@ template void NumEntryTemp::value_changed() { - if (ptr && update_gui) { - *ptr = T(spinbutton.get_value()); + if (ptr) { + const double f = pow(10, spinbutton.get_digits()); + int new_value = round_to_int(spinbutton.get_value() * f); + if (new_value != round_to_int(*ptr * f)) { + *ptr = T(new_value / f); + sig_changed(); + } } } @@ -181,9 +189,12 @@ template void ChoiceEntry::value_changed() { - if (ptr && update_gui) { + if (ptr) { int rowno = combobox.get_active_row_number(); - if (rowno != -1) *ptr = values[rowno]; + if (rowno != -1) { + *ptr = values[rowno]; + sig_changed(); + } } }