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

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

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

revision 1137 by persson, Sun Mar 25 07:16:01 2007 UTC revision 1138 by persson, Sat Mar 31 09:33:40 2007 UTC
# Line 41  public: Line 41  public:
41      void set_sensitive(bool sensitive = true);      void set_sensitive(bool sensitive = true);
42  };  };
43    
 template<typename T2>  
44  class NumEntry : public LabelWidget {  class NumEntry : public LabelWidget {
45  protected:  protected:
46      Gtk::Adjustment adjust;      Gtk::Adjustment adjust;
47      Gtk::HScale scale;      Gtk::HScale scale;
48      Gtk::SpinButton spinbutton;      Gtk::SpinButton spinbutton;
49      Gtk::HBox box;      Gtk::HBox box;
     T2* dimreg;  
50  public:  public:
51      NumEntry(char* labelText, double lower = 0, double upper = 127,      NumEntry(char* labelText, double lower = 0, double upper = 127,
52               int decimals = 0);               int decimals = 0);
# Line 63  public: Line 61  public:
61      }      }
62  };  };
63    
64  template<typename T2>  class NumEntryGain : public NumEntry {
 NumEntry<T2>::NumEntry(char* labelText, double lower, double upper,  
                        int decimals) :  
     adjust(lower, lower, upper, 1, 10),  
     scale(adjust),  
     spinbutton(adjust),  
     LabelWidget(labelText, box)  
 {  
     spinbutton.set_digits(decimals);  
     scale.set_draw_value(false);  
     box.pack_start(spinbutton, Gtk::PACK_SHRINK);  
     box.add(scale);  
 }  
   
 class NumEntryGain : public NumEntry<gig::DimensionRegion> {  
65  private:  private:
66      void value_changed();      void value_changed();
67        int32_t* ptr;
68        double coeff;
69  public:  public:
70      NumEntryGain(char* labelText,      NumEntryGain(char* labelText,
71                   double lower, double upper, int decimals);                   double lower, double upper, int decimals, double coeff);
72      void set_dimreg(gig::DimensionRegion* dimreg);      void set_ptr(int32_t* ptr);
73  };  };
74    
75  template<typename T, typename T2 = gig::DimensionRegion>  template<typename T>
76  class NumEntryX : public NumEntry<T2> {  class NumEntryTemp : public NumEntry {
 protected:  
     using NumEntry<T2>::spinbutton;  
     using NumEntry<T2>::dimreg;  
77  private:  private:
78      T& (*access)(T2*);      T* ptr;
79      void value_changed();      void value_changed();
80  public:  public:
81      NumEntryX(char* labelText, T& (*access)(T2*),      NumEntryTemp(char* labelText,
82                double lower = 0, double upper = 127, int decimals = 0);                   double lower = 0, double upper = 127, int decimals = 0);
83      void set_dimreg(T2* dimreg);      void set_ptr(T* ptr);
84  };  };
85    
86  template<typename T, typename T2>  template<typename T>
87  NumEntryX<T, T2>::NumEntryX(char* labelText, T& (*access)(T2*),  NumEntryTemp<T>::NumEntryTemp(char* labelText,
88                              double lower, double upper, int decimals) :                                double lower, double upper, int decimals) :
89      NumEntry<T2>(labelText, lower, upper, decimals),      NumEntry(labelText, lower, upper, decimals)
     access(access)  
90  {  {
91      spinbutton.signal_value_changed().connect(      spinbutton.signal_value_changed().connect(
92          sigc::mem_fun(*this, &NumEntryX::value_changed));          sigc::mem_fun(*this, &NumEntryTemp::value_changed));
93  }  }
94    
95  template<typename T, typename T2>  template<typename T>
96  void NumEntryX<T, T2>::value_changed()  void NumEntryTemp<T>::value_changed()
97  {  {
98      if (dimreg && update_gui) {      if (ptr && update_gui) {
99          access(dimreg) = T(spinbutton.get_value());          *ptr = T(spinbutton.get_value());
100      }      }
101  }  }
102    
103  template<typename T, typename T2>  template<typename T>
104  void NumEntryX<T, T2>::set_dimreg(T2* dimreg)  void NumEntryTemp<T>::set_ptr(T* ptr)
105  {  {
106      this->dimreg = 0;      this->ptr = 0;
107      set_value(access(dimreg));      set_value(*ptr);
108      this->dimreg = dimreg;      this->ptr = ptr;
109  }  }
110    
111    
112  class NoteEntry : public NumEntryX<uint8_t> {  class NoteEntry : public NumEntryTemp<uint8_t> {
113  public:  public:
114      NoteEntry(char* labelText, uint8_t& (*access)(gig::DimensionRegion*));      NoteEntry(char* labelText);
115  private:  private:
116      int on_input(double* new_value);      int on_input(double* new_value);
117      bool on_output();      bool on_output();
118  };  };
119    
120    
121  template<typename T, typename T2 = gig::DimensionRegion>  class NumEntryPermille : public NumEntry {
 class NumEntryTemp : public NumEntry<T2> {  
     using NumEntry<T2>::spinbutton;  
     using NumEntry<T2>::dimreg;  
122  private:  private:
123      T T2::* param;      uint16_t* ptr;
124      void value_changed();      void value_changed();
125  public:  public:
126      NumEntryTemp(char* labelText, T T2::* param,      NumEntryPermille(char* labelText,
                  double lower = 0, double upper = 127, int decimals = 0);  
     void set_dimreg(T2* dimreg);  
 };  
   
 template<typename T, typename T2>  
 NumEntryTemp<T, T2>::NumEntryTemp(char* labelText, T T2::* param,  
                                   double lower, double upper, int decimals) :  
     NumEntry<T2>(labelText, lower, upper, decimals),  
     param(param)  
 {  
     spinbutton.signal_value_changed().connect(  
         sigc::mem_fun(*this, &NumEntryTemp::value_changed));  
 }  
   
 template<typename T, typename T2>  
 void NumEntryTemp<T, T2>::value_changed()  
 {  
     if (dimreg && update_gui) {  
         dimreg->*param = T(spinbutton.get_value());  
     }  
 }  
   
 template<typename T, typename T2>  
 void NumEntryTemp<T, T2>::set_dimreg(T2* dimreg)  
 {  
     this->dimreg = 0;  
     set_value(dimreg->*param);  
     this->dimreg = dimreg;  
 }  
   
   
   
 class NumEntryPermille : public NumEntry<gig::DimensionRegion> {  
 private:  
     uint16_t gig::DimensionRegion::* param;  
     void value_changed();  
 public:  
     NumEntryPermille(char* labelText, uint16_t gig::DimensionRegion::* param,  
127                       double lower = 0, double upper = 127, int decimals = 0);                       double lower = 0, double upper = 127, int decimals = 0);
128      void set_dimreg(gig::DimensionRegion* dimreg);      void set_ptr(uint16_t* ptr);
129  };  };
130    
131    
# Line 193  class ChoiceEntry : public LabelWidget { Line 134  class ChoiceEntry : public LabelWidget {
134  private:  private:
135      Gtk::ComboBoxText combobox;      Gtk::ComboBoxText combobox;
136      Gtk::Alignment align;      Gtk::Alignment align;
137      T gig::DimensionRegion::* param;      T* ptr;
     gig::DimensionRegion* dimreg;  
138      void value_changed();      void value_changed();
139      const T* values;      const T* values;
140  public:  public:
141      ChoiceEntry(char* labelText,      ChoiceEntry(char* labelText);
                 T gig::DimensionRegion::* param);  
142      void set_choices(char** texts, const T* values);      void set_choices(char** texts, const T* values);
143      void set_dimreg(gig::DimensionRegion* dimreg);      void set_ptr(T* ptr);
144      int get_active_row_number() { return combobox.get_active_row_number(); }      int get_active_row_number() { return combobox.get_active_row_number(); }
145      Glib::SignalProxy0<void> signal_changed() {      Glib::SignalProxy0<void> signal_changed() {
146          return combobox.signal_changed();          return combobox.signal_changed();
# Line 209  public: Line 148  public:
148  };  };
149    
150  template<typename T>  template<typename T>
151  ChoiceEntry<T>::ChoiceEntry(char* labelText,  ChoiceEntry<T>::ChoiceEntry(char* labelText) :
                             T gig::DimensionRegion::* param) :  
152      align(0, 0, 0, 0),      align(0, 0, 0, 0),
153      LabelWidget(labelText, align),      LabelWidget(labelText, align)
     param(param)  
154  {  {
155      combobox.signal_changed().connect(      combobox.signal_changed().connect(
156          sigc::mem_fun(*this, &ChoiceEntry::value_changed));          sigc::mem_fun(*this, &ChoiceEntry::value_changed));
# Line 232  void ChoiceEntry<T>::set_choices(char** Line 169  void ChoiceEntry<T>::set_choices(char**
169  template<typename T>  template<typename T>
170  void ChoiceEntry<T>::value_changed()  void ChoiceEntry<T>::value_changed()
171  {  {
172      if (dimreg && update_gui) {      if (ptr && update_gui) {
173          int rowno = combobox.get_active_row_number();          int rowno = combobox.get_active_row_number();
174          if (rowno != -1) dimreg->*param = values[rowno];          if (rowno != -1) *ptr = values[rowno];
175      }      }
176  }  }
177    
178  template<typename T>  template<typename T>
179  void ChoiceEntry<T>::set_dimreg(gig::DimensionRegion* dimreg)  void ChoiceEntry<T>::set_ptr(T* ptr)
180  {  {
181      this->dimreg = 0;      this->ptr = 0;
182      T value = dimreg->*param;      T value = *ptr;
183      int row = 0;      int row = 0;
184      int nb_rows = combobox.get_model()->children().size();      int nb_rows = combobox.get_model()->children().size();
185      for (; row < nb_rows ; row++) {      for (; row < nb_rows ; row++) {
186          if (value == values[row]) break;          if (value == values[row]) break;
187      }      }
188      combobox.set_active(row == nb_rows ? -1 : row);      combobox.set_active(row == nb_rows ? -1 : row);
189      this->dimreg = dimreg;      this->ptr = ptr;
190  }  }
191    
192    
# Line 257  class ChoiceEntryLeverageCtrl : public L Line 194  class ChoiceEntryLeverageCtrl : public L
194  private:  private:
195      Gtk::ComboBoxText combobox;      Gtk::ComboBoxText combobox;
196      Gtk::Alignment align;      Gtk::Alignment align;
197      gig::leverage_ctrl_t gig::DimensionRegion::* param;      gig::leverage_ctrl_t* ptr;
     gig::DimensionRegion* dimreg;  
198      void value_changed();      void value_changed();
199  public:  public:
200      ChoiceEntryLeverageCtrl(char* labelText,      ChoiceEntryLeverageCtrl(char* labelText);
201                              gig::leverage_ctrl_t gig::DimensionRegion::* param);      void set_ptr(gig::leverage_ctrl_t* ptr);
     void set_dimreg(gig::DimensionRegion* dimreg);  
202      int get_active_row_number() { return combobox.get_active_row_number(); }      int get_active_row_number() { return combobox.get_active_row_number(); }
203      Glib::SignalProxy0<void> signal_changed() {      Glib::SignalProxy0<void> signal_changed() {
204          return combobox.signal_changed();          return combobox.signal_changed();
# Line 271  public: Line 206  public:
206  };  };
207    
208    
 template<typename T2>  
209  class BoolEntry : public LabelWidget {  class BoolEntry : public LabelWidget {
210  private:  private:
211      Gtk::CheckButton checkbutton;      Gtk::CheckButton checkbutton;
212      bool T2::* param;      bool* ptr;
     T2* dimreg;  
213      void value_changed();      void value_changed();
214  public:  public:
215      BoolEntry(char* labelText, bool T2::* param);      BoolEntry(char* labelText);
     void set_dimreg(T2* dimreg);  
216      bool get_active() { return checkbutton.get_active(); }      bool get_active() { return checkbutton.get_active(); }
217      Glib::SignalProxy0<void> signal_toggled() {      Glib::SignalProxy0<void> signal_toggled() {
218          return checkbutton.signal_toggled();          return checkbutton.signal_toggled();
219      }      }
220        void set_ptr(bool* ptr);
221  };  };
222    
 template<typename T2>  
 BoolEntry<T2>::BoolEntry(char* labelText, bool T2::* param) :  
     LabelWidget(labelText, checkbutton),  
     param(param)  
 {  
     checkbutton.signal_toggled().connect(  
         sigc::mem_fun(*this, &BoolEntry::value_changed));  
 }  
   
 template<typename T2>  
 void BoolEntry<T2>::value_changed()  
 {  
     if (dimreg && update_gui) {  
         dimreg->*param = checkbutton.get_active();  
     }  
 }  
   
 template<typename T2>  
 void BoolEntry<T2>::set_dimreg(T2* dimreg)  
 {  
     this->dimreg = 0;  
     checkbutton.set_active(dimreg->*param);  
     this->dimreg = dimreg;  
 }  
223    
224  class BoolEntryPlus6 : public LabelWidget {  class BoolEntryPlus6 : public LabelWidget {
225  private:  private:
226      Gtk::CheckButton checkbutton;      Gtk::CheckButton checkbutton;
227      gig::DimensionRegion* dimreg;      int32_t* ptr;
228      void value_changed();      void value_changed();
229      NumEntryGain& eGain;      NumEntryGain& eGain;
230        int32_t plus6value;
231  public:  public:
232      BoolEntryPlus6(char* labelText, NumEntryGain& eGain);      BoolEntryPlus6(char* labelText, NumEntryGain& eGain, int32_t plus6value);
233      void set_dimreg(gig::DimensionRegion* dimreg);      void set_ptr(int32_t* ptr);
234      bool get_active() { return checkbutton.get_active(); }      bool get_active() { return checkbutton.get_active(); }
235      Glib::SignalProxy0<void> signal_toggled() {      Glib::SignalProxy0<void> signal_toggled() {
236          return checkbutton.signal_toggled();          return checkbutton.signal_toggled();
237      }      }
238  };  };
239    
240    class StringEntry : public LabelWidget {
241    private:
242        Gtk::Entry entry;
243        gig::String* ptr;
244        void value_changed();
245    public:
246        StringEntry(char* labelText);
247        void set_ptr(gig::String* ptr);
248    };
249    
250    
251  #endif  #endif

Legend:
Removed from v.1137  
changed lines
  Added in v.1138

  ViewVC Help
Powered by ViewVC