--- gigedit/trunk/src/gigedit/paramedit.h 2007/10/26 10:58:41 1459 +++ gigedit/trunk/src/gigedit/paramedit.h 2007/10/27 12:28:33 1460 @@ -40,7 +40,7 @@ LabelWidget(const char* labelText, Gtk::Widget& widget); void set_sensitive(bool sensitive = true); - sigc::signal& signal_changed_by_user() { + sigc::signal& signal_value_changed() { return sig_changed; } protected: @@ -61,12 +61,6 @@ public: NumEntry(const char* labelText, double lower = 0, double upper = 127, int decimals = 0); - void set_value(double value) { - spinbutton.set_value(value); - } - double get_value() const { - return spinbutton.get_value(); - } void set_tip(const Glib::ustring& tip_text) { tooltips.set_tip(spinbutton, tip_text); } @@ -77,48 +71,34 @@ class NumEntryGain : public NumEntry { private: + int32_t value; void value_changed(); - int32_t* ptr; double coeff; -protected: - sigc::signal sig_to_be_changed; - sigc::signal sig_val_changed; + bool connected; public: NumEntryGain(const char* labelText, double lower, double upper, int decimals, double coeff); - void set_ptr(int32_t* ptr); - sigc::signal& signal_to_be_changed() { - return sig_to_be_changed; - } - sigc::signal& signal_value_changed() { - return sig_val_changed; - } + int32_t get_value() const { return value; } + void set_value(int32_t value); }; template class NumEntryTemp : public NumEntry { private: - T* ptr; + T value; void value_changed(); -protected: - sigc::signal sig_to_be_changed; - sigc::signal sig_val_changed; public: NumEntryTemp(const char* labelText, double lower = 0, double upper = 127, int decimals = 0); - void set_ptr(T* ptr); - sigc::signal& signal_to_be_changed() { - return sig_to_be_changed; - } - sigc::signal& signal_value_changed() { - return sig_val_changed; - } + T get_value() const { return value; } + void set_value(T value); }; template NumEntryTemp::NumEntryTemp(const char* labelText, double lower, double upper, int decimals) : - NumEntry(labelText, lower, upper, decimals) + NumEntry(labelText, lower, upper, decimals), + value(0) { spinbutton.signal_value_changed().connect( sigc::mem_fun(*this, &NumEntryTemp::value_changed)); @@ -129,27 +109,24 @@ { const double f = pow(10, spinbutton.get_digits()); int new_value = round_to_int(spinbutton.get_value() * f); - const T val = T(new_value / f); - if (ptr) { - if (new_value != round_to_int(*ptr * f)) { - sig_to_be_changed.emit(); - *ptr = val; - sig_val_changed.emit(val); - sig_changed.emit(); - } - } else { - sig_to_be_changed.emit(); - sig_val_changed.emit(val); - sig_changed.emit(); + if (new_value != round_to_int(value * f)) { + value = T(new_value / f); + sig_changed(); } } template -void NumEntryTemp::set_ptr(T* ptr) +void NumEntryTemp::set_value(T value) { - this->ptr = 0; - if (ptr) set_value(*ptr); - this->ptr = ptr; + if (value > adjust.get_upper()) value = T(adjust.get_upper()); + if (this->value != value) { + this->value = value; + const double f = pow(10, spinbutton.get_digits()); + if (round_to_int(spinbutton.get_value() * f) != round_to_int(value * f)) { + spinbutton.set_value(value); + } + sig_changed(); + } } @@ -164,12 +141,13 @@ class NumEntryPermille : public NumEntry { private: - uint16_t* ptr; + uint16_t value; void value_changed(); public: NumEntryPermille(const char* labelText, double lower = 0, double upper = 127, int decimals = 0); - void set_ptr(uint16_t* ptr); + uint16_t get_value() const { return value; } + void set_value(uint16_t value); }; @@ -178,26 +156,13 @@ private: Gtk::ComboBoxText combobox; Gtk::Alignment align; - T* ptr; - void value_changed(); const T* values; -protected: - sigc::signal sig_to_be_changed; - sigc::signal sig_val_changed; public: ChoiceEntry(const char* labelText); + T get_value() const; + void set_value(T value); void set_choices(const char** texts, const T* values); - void set_ptr(T* ptr); - int get_active_row_number() { return combobox.get_active_row_number(); } - sigc::signal& signal_to_be_changed() { - return sig_to_be_changed; - } - sigc::signal& signal_value_changed() { - return sig_val_changed; - } - Glib::SignalProxy0 signal_changed() { - return combobox.signal_changed(); - } + void set_tip(const Glib::ustring& tip_text) { tooltips.set_tip(combobox, tip_text); //FIXME: don't Gtk::ComboBoxes support tooltips ??? } @@ -208,8 +173,7 @@ align(0, 0, 0, 0), LabelWidget(labelText, align) { - combobox.signal_changed().connect( - sigc::mem_fun(*this, &ChoiceEntry::value_changed)); + combobox.signal_changed().connect(sig_changed.make_slot()); align.add(combobox); } @@ -223,63 +187,45 @@ } template -void ChoiceEntry::value_changed() +T ChoiceEntry::get_value() const { int rowno = combobox.get_active_row_number(); - if (rowno == -1) return; - const T val = values[rowno]; - sig_to_be_changed.emit(); - if (ptr) *ptr = val; - sig_val_changed.emit(val); - sig_changed.emit(); + return values[rowno]; } template -void ChoiceEntry::set_ptr(T* ptr) +void ChoiceEntry::set_value(T value) { - this->ptr = 0; - if (ptr) { - T value = *ptr; - int row = 0; - int nb_rows = combobox.get_model()->children().size(); - for (; row < nb_rows ; row++) { - if (value == values[row]) break; - } - combobox.set_active(row == nb_rows ? -1 : row); - } else combobox.set_active(-1); - this->ptr = ptr; + int row = 0; + int nb_rows = combobox.get_model()->children().size(); + for (; row < nb_rows ; row++) { + if (value == values[row]) break; + } + combobox.set_active(row == nb_rows ? -1 : row); } class ChoiceEntryLeverageCtrl : public LabelWidget { private: + gig::leverage_ctrl_t value; Gtk::ComboBoxText combobox; Gtk::Alignment align; - gig::leverage_ctrl_t* ptr; void value_changed(); public: ChoiceEntryLeverageCtrl(const char* labelText); - void set_ptr(gig::leverage_ctrl_t* ptr); - int get_active_row_number() { return combobox.get_active_row_number(); } - Glib::SignalProxy0 signal_changed() { - return combobox.signal_changed(); - } + gig::leverage_ctrl_t get_value() const { return value; } + void set_value(gig::leverage_ctrl_t value); }; class BoolEntry : public LabelWidget { private: Gtk::CheckButton checkbutton; - bool* ptr; - void value_changed(); public: BoolEntry(const char* labelText); - bool get_active() { return checkbutton.get_active(); } - bool set_active(bool b) { checkbutton.set_active(b); } - Glib::SignalProxy0 signal_toggled() { - return checkbutton.signal_toggled(); - } - void set_ptr(bool* ptr); + bool get_value() const { return checkbutton.get_active(); } + void set_value(bool value) { checkbutton.set_active(value); } + void set_tip(const Glib::ustring& tip_text) { tooltips.set_tip(checkbutton, tip_text); } @@ -289,17 +235,13 @@ class BoolEntryPlus6 : public LabelWidget { private: Gtk::CheckButton checkbutton; - int32_t* ptr; void value_changed(); NumEntryGain& eGain; int32_t plus6value; public: BoolEntryPlus6(const char* labelText, NumEntryGain& eGain, int32_t plus6value); - void set_ptr(int32_t* ptr); - bool get_active() { return checkbutton.get_active(); } - Glib::SignalProxy0 signal_toggled() { - return checkbutton.signal_toggled(); - } + int32_t get_value() const; + void set_value(int32_t value); }; class StringEntry : public LabelWidget {