/[svn]/gigedit/trunk/src/gigedit/paramedit.h
ViewVC logotype

Diff of /gigedit/trunk/src/gigedit/paramedit.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1225 by schoenebeck, Sun Jun 10 10:56:11 2007 UTC revision 1359 by schoenebeck, Sun Sep 30 18:30:52 2007 UTC
# Line 22  Line 22 
22    
23  #include <gig.h>  #include <gig.h>
24    
25    #include <math.h>
26    
27  #include <gtkmm/adjustment.h>  #include <gtkmm/adjustment.h>
28  #include <gtkmm/alignment.h>  #include <gtkmm/alignment.h>
29  #include <gtkmm/box.h>  #include <gtkmm/box.h>
# Line 31  Line 33 
33  #include <gtkmm/spinbutton.h>  #include <gtkmm/spinbutton.h>
34  #include <gtkmm/tooltips.h>  #include <gtkmm/tooltips.h>
35    
 extern bool update_gui;  
   
36  class LabelWidget {  class LabelWidget {
37  public:  public:
38      Gtk::Label label;      Gtk::Label label;
# Line 40  public: Line 40  public:
40    
41      LabelWidget(const char* labelText, Gtk::Widget& widget);      LabelWidget(const char* labelText, Gtk::Widget& widget);
42      void set_sensitive(bool sensitive = true);      void set_sensitive(bool sensitive = true);
43        sigc::signal<void>& signal_changed_by_user() {
44            return sig_changed;
45        }
46  protected:  protected:
47      Gtk::Tooltips tooltips;      Gtk::Tooltips tooltips;
48        sigc::signal<void> sig_changed;
49  };  };
50    
51  class NumEntry : public LabelWidget {  class NumEntry : public LabelWidget {
# Line 50  protected: Line 54  protected:
54      Gtk::HScale scale;      Gtk::HScale scale;
55      Gtk::SpinButton spinbutton;      Gtk::SpinButton spinbutton;
56      Gtk::HBox box;      Gtk::HBox box;
57    
58        int round_to_int(double x) {
59            return int(x < 0.0 ? x - 0.5 : x + 0.5);
60        }
61  public:  public:
62      NumEntry(const char* labelText, double lower = 0, double upper = 127,      NumEntry(const char* labelText, double lower = 0, double upper = 127,
63               int decimals = 0);               int decimals = 0);
64      void set_value(double value) {      void set_value(double value) {
65          spinbutton.set_value(value);          spinbutton.set_value(value);
66      }      }
     Glib::SignalProxy0<void> signal_value_changed() {  
         return spinbutton.signal_value_changed();  
     }  
67      double get_value() const {      double get_value() const {
68          return spinbutton.get_value();          return spinbutton.get_value();
69      }      }
# Line 75  private: Line 80  private:
80      void value_changed();      void value_changed();
81      int32_t* ptr;      int32_t* ptr;
82      double coeff;      double coeff;
83    protected:
84        sigc::signal<void> sig_to_be_changed;
85        sigc::signal<void, int32_t> sig_val_changed;
86  public:  public:
87      NumEntryGain(const char* labelText,      NumEntryGain(const char* labelText,
88                   double lower, double upper, int decimals, double coeff);                   double lower, double upper, int decimals, double coeff);
89      void set_ptr(int32_t* ptr);      void set_ptr(int32_t* ptr);
90        sigc::signal<void>& signal_to_be_changed() {
91            return sig_to_be_changed;
92        }
93        sigc::signal<void, int32_t>& signal_value_changed() {
94            return sig_val_changed;
95        }
96  };  };
97    
98  template<typename T>  template<typename T>
# Line 86  class NumEntryTemp : public NumEntry { Line 100  class NumEntryTemp : public NumEntry {
100  private:  private:
101      T* ptr;      T* ptr;
102      void value_changed();      void value_changed();
103    protected:
104        sigc::signal<void> sig_to_be_changed;
105        sigc::signal<void, T> sig_val_changed;
106  public:  public:
107      NumEntryTemp(const char* labelText,      NumEntryTemp(const char* labelText,
108                   double lower = 0, double upper = 127, int decimals = 0);                   double lower = 0, double upper = 127, int decimals = 0);
109      void set_ptr(T* ptr);      void set_ptr(T* ptr);
110        sigc::signal<void>& signal_to_be_changed() {
111            return sig_to_be_changed;
112        }
113        sigc::signal<void, T>& signal_value_changed() {
114            return sig_val_changed;
115        }
116  };  };
117    
118  template<typename T>  template<typename T>
# Line 104  NumEntryTemp<T>::NumEntryTemp(const char Line 127  NumEntryTemp<T>::NumEntryTemp(const char
127  template<typename T>  template<typename T>
128  void NumEntryTemp<T>::value_changed()  void NumEntryTemp<T>::value_changed()
129  {  {
130      if (ptr && update_gui) {      const double f = pow(10, spinbutton.get_digits());
131          *ptr = T(spinbutton.get_value());      int new_value = round_to_int(spinbutton.get_value() * f);
132        const T val = T(new_value / f);
133        if (ptr) {
134            if (new_value != round_to_int(*ptr * f)) {
135                sig_to_be_changed.emit();
136                *ptr = val;
137                sig_val_changed.emit(val);
138                sig_changed.emit();
139            }
140        } else {
141            sig_to_be_changed.emit();
142            sig_val_changed.emit(val);
143            sig_changed.emit();
144      }      }
145  }  }
146    
# Line 146  private: Line 181  private:
181      T* ptr;      T* ptr;
182      void value_changed();      void value_changed();
183      const T* values;      const T* values;
184    protected:
185        sigc::signal<void> sig_to_be_changed;
186        sigc::signal<void, T> sig_val_changed;
187  public:  public:
188      ChoiceEntry(const char* labelText);      ChoiceEntry(const char* labelText);
189      void set_choices(const char** texts, const T* values);      void set_choices(const char** texts, const T* values);
190      void set_ptr(T* ptr);      void set_ptr(T* ptr);
191      int get_active_row_number() { return combobox.get_active_row_number(); }      int get_active_row_number() { return combobox.get_active_row_number(); }
192        sigc::signal<void>& signal_to_be_changed() {
193            return sig_to_be_changed;
194        }
195        sigc::signal<void, T>& signal_value_changed() {
196            return sig_val_changed;
197        }
198      Glib::SignalProxy0<void> signal_changed() {      Glib::SignalProxy0<void> signal_changed() {
199          return combobox.signal_changed();          return combobox.signal_changed();
200      }      }
# Line 181  void ChoiceEntry<T>::set_choices(const c Line 225  void ChoiceEntry<T>::set_choices(const c
225  template<typename T>  template<typename T>
226  void ChoiceEntry<T>::value_changed()  void ChoiceEntry<T>::value_changed()
227  {  {
228      if (ptr && update_gui) {      int rowno = combobox.get_active_row_number();
229          int rowno = combobox.get_active_row_number();      if (rowno == -1) return;
230          if (rowno != -1) *ptr = values[rowno];      const T val = values[rowno];
231      }      sig_to_be_changed.emit();
232        if (ptr) *ptr = val;
233        sig_val_changed.emit(val);
234        sig_changed.emit();
235  }  }
236    
237  template<typename T>  template<typename T>

Legend:
Removed from v.1225  
changed lines
  Added in v.1359

  ViewVC Help
Powered by ViewVC