/[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 1127 by persson, Sun Mar 25 07:16:01 2007 UTC revision 1156 by schoenebeck, Wed Apr 11 21:36:30 2007 UTC
# Line 29  Line 29 
29  #include <gtkmm/label.h>  #include <gtkmm/label.h>
30  #include <gtkmm/scale.h>  #include <gtkmm/scale.h>
31  #include <gtkmm/spinbutton.h>  #include <gtkmm/spinbutton.h>
32    #include <gtkmm/tooltips.h>
33    
34  extern bool update_gui;  extern bool update_gui;
35    
# Line 39  public: Line 40  public:
40    
41      LabelWidget(char* labelText, Gtk::Widget& widget);      LabelWidget(char* labelText, Gtk::Widget& widget);
42      void set_sensitive(bool sensitive = true);      void set_sensitive(bool sensitive = true);
43    protected:
44        Gtk::Tooltips tooltips;
45  };  };
46    
 template<typename T2>  
47  class NumEntry : public LabelWidget {  class NumEntry : public LabelWidget {
48  protected:  protected:
49      Gtk::Adjustment adjust;      Gtk::Adjustment adjust;
50      Gtk::HScale scale;      Gtk::HScale scale;
51      Gtk::SpinButton spinbutton;      Gtk::SpinButton spinbutton;
52      Gtk::HBox box;      Gtk::HBox box;
     T2* dimreg;  
53  public:  public:
54      NumEntry(char* labelText, double lower = 0, double upper = 127,      NumEntry(char* labelText, double lower = 0, double upper = 127,
55               int decimals = 0);               int decimals = 0);
# Line 61  public: Line 62  public:
62      double get_value() const {      double get_value() const {
63          return spinbutton.get_value();          return spinbutton.get_value();
64      }      }
65        void set_tip(const Glib::ustring& tip_text) {
66            tooltips.set_tip(spinbutton, tip_text);
67        }
68        void set_upper(double upper) {
69            adjust.set_upper(upper);
70        }
71  };  };
72    
73  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> {  
74  private:  private:
75      void value_changed();      void value_changed();
76        int32_t* ptr;
77        double coeff;
78  public:  public:
79      NumEntryGain(char* labelText,      NumEntryGain(char* labelText,
80                   double lower, double upper, int decimals);                   double lower, double upper, int decimals, double coeff);
81      void set_dimreg(gig::DimensionRegion* dimreg);      void set_ptr(int32_t* ptr);
82  };  };
83    
84  template<typename T, typename T2 = gig::DimensionRegion>  template<typename T>
85  class NumEntryX : public NumEntry<T2> {  class NumEntryTemp : public NumEntry {
 protected:  
     using NumEntry<T2>::spinbutton;  
     using NumEntry<T2>::dimreg;  
86  private:  private:
87      T& (*access)(T2*);      T* ptr;
88      void value_changed();      void value_changed();
89  public:  public:
90      NumEntryX(char* labelText, T& (*access)(T2*),      NumEntryTemp(char* labelText,
91                double lower = 0, double upper = 127, int decimals = 0);                   double lower = 0, double upper = 127, int decimals = 0);
92      void set_dimreg(T2* dimreg);      void set_ptr(T* ptr);
93  };  };
94    
95  template<typename T, typename T2>  template<typename T>
96  NumEntryX<T, T2>::NumEntryX(char* labelText, T& (*access)(T2*),  NumEntryTemp<T>::NumEntryTemp(char* labelText,
97                              double lower, double upper, int decimals) :                                double lower, double upper, int decimals) :
98      NumEntry<T2>(labelText, lower, upper, decimals),      NumEntry(labelText, lower, upper, decimals)
     access(access)  
99  {  {
100      spinbutton.signal_value_changed().connect(      spinbutton.signal_value_changed().connect(
101          sigc::mem_fun(*this, &NumEntryX::value_changed));          sigc::mem_fun(*this, &NumEntryTemp::value_changed));
102  }  }
103    
104  template<typename T, typename T2>  template<typename T>
105  void NumEntryX<T, T2>::value_changed()  void NumEntryTemp<T>::value_changed()
106  {  {
107      if (dimreg && update_gui) {      if (ptr && update_gui) {
108          access(dimreg) = T(spinbutton.get_value());          *ptr = T(spinbutton.get_value());
109      }      }
110  }  }
111    
112  template<typename T, typename T2>  template<typename T>
113  void NumEntryX<T, T2>::set_dimreg(T2* dimreg)  void NumEntryTemp<T>::set_ptr(T* ptr)
114  {  {
115      this->dimreg = 0;      this->ptr = 0;
116      set_value(access(dimreg));      if (ptr) set_value(*ptr);
117      this->dimreg = dimreg;      this->ptr = ptr;
118  }  }
119    
120    
121  class NoteEntry : public NumEntryX<uint8_t> {  class NoteEntry : public NumEntryTemp<uint8_t> {
122  public:  public:
123      NoteEntry(char* labelText, uint8_t& (*access)(gig::DimensionRegion*));      NoteEntry(char* labelText);
124  private:  private:
125      int on_input(double* new_value);      int on_input(double* new_value);
126      bool on_output();      bool on_output();
127  };  };
128    
129    
130  template<typename T, typename T2 = gig::DimensionRegion>  class NumEntryPermille : public NumEntry {
 class NumEntryTemp : public NumEntry<T2> {  
     using NumEntry<T2>::spinbutton;  
     using NumEntry<T2>::dimreg;  
131  private:  private:
132      T T2::* param;      uint16_t* ptr;
133      void value_changed();      void value_changed();
134  public:  public:
135      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,  
136                       double lower = 0, double upper = 127, int decimals = 0);                       double lower = 0, double upper = 127, int decimals = 0);
137      void set_dimreg(gig::DimensionRegion* dimreg);      void set_ptr(uint16_t* ptr);
138  };  };
139    
140    
# Line 193  class ChoiceEntry : public LabelWidget { Line 143  class ChoiceEntry : public LabelWidget {
143  private:  private:
144      Gtk::ComboBoxText combobox;      Gtk::ComboBoxText combobox;
145      Gtk::Alignment align;      Gtk::Alignment align;
146      T gig::DimensionRegion::* param;      T* ptr;
     gig::DimensionRegion* dimreg;  
147      void value_changed();      void value_changed();
148      const T* values;      const T* values;
149  public:  public:
150      ChoiceEntry(char* labelText,      ChoiceEntry(char* labelText);
                 T gig::DimensionRegion::* param);  
151      void set_choices(char** texts, const T* values);      void set_choices(char** texts, const T* values);
152      void set_dimreg(gig::DimensionRegion* dimreg);      void set_ptr(T* ptr);
153      int get_active_row_number() { return combobox.get_active_row_number(); }      int get_active_row_number() { return combobox.get_active_row_number(); }
154      Glib::SignalProxy0<void> signal_changed() {      Glib::SignalProxy0<void> signal_changed() {
155          return combobox.signal_changed();          return combobox.signal_changed();
156      }      }
157        void set_tip(const Glib::ustring& tip_text) {
158            tooltips.set_tip(combobox, tip_text); //FIXME: don't Gtk::ComboBoxes support tooltips ???
159        }
160  };  };
161    
162  template<typename T>  template<typename T>
163  ChoiceEntry<T>::ChoiceEntry(char* labelText,  ChoiceEntry<T>::ChoiceEntry(char* labelText) :
                             T gig::DimensionRegion::* param) :  
164      align(0, 0, 0, 0),      align(0, 0, 0, 0),
165      LabelWidget(labelText, align),      LabelWidget(labelText, align)
     param(param)  
166  {  {
167      combobox.signal_changed().connect(      combobox.signal_changed().connect(
168          sigc::mem_fun(*this, &ChoiceEntry::value_changed));          sigc::mem_fun(*this, &ChoiceEntry::value_changed));
# Line 232  void ChoiceEntry<T>::set_choices(char** Line 181  void ChoiceEntry<T>::set_choices(char**
181  template<typename T>  template<typename T>
182  void ChoiceEntry<T>::value_changed()  void ChoiceEntry<T>::value_changed()
183  {  {
184      if (dimreg && update_gui) {      if (ptr && update_gui) {
185          int rowno = combobox.get_active_row_number();          int rowno = combobox.get_active_row_number();
186          if (rowno != -1) dimreg->*param = values[rowno];          if (rowno != -1) *ptr = values[rowno];
187      }      }
188  }  }
189    
190  template<typename T>  template<typename T>
191  void ChoiceEntry<T>::set_dimreg(gig::DimensionRegion* dimreg)  void ChoiceEntry<T>::set_ptr(T* ptr)
192  {  {
193      this->dimreg = 0;      this->ptr = 0;
194      T value = dimreg->*param;      if (ptr) {
195      int row = 0;          T value = *ptr;
196      int nb_rows = combobox.get_model()->children().size();          int row = 0;
197      for (; row < nb_rows ; row++) {          int nb_rows = combobox.get_model()->children().size();
198          if (value == values[row]) break;          for (; row < nb_rows ; row++) {
199      }              if (value == values[row]) break;
200      combobox.set_active(row == nb_rows ? -1 : row);          }
201      this->dimreg = dimreg;          combobox.set_active(row == nb_rows ? -1 : row);
202        } else combobox.set_active(-1);
203        this->ptr = ptr;
204  }  }
205    
206    
# Line 257  class ChoiceEntryLeverageCtrl : public L Line 208  class ChoiceEntryLeverageCtrl : public L
208  private:  private:
209      Gtk::ComboBoxText combobox;      Gtk::ComboBoxText combobox;
210      Gtk::Alignment align;      Gtk::Alignment align;
211      gig::leverage_ctrl_t gig::DimensionRegion::* param;      gig::leverage_ctrl_t* ptr;
     gig::DimensionRegion* dimreg;  
212      void value_changed();      void value_changed();
213  public:  public:
214      ChoiceEntryLeverageCtrl(char* labelText,      ChoiceEntryLeverageCtrl(char* labelText);
215                              gig::leverage_ctrl_t gig::DimensionRegion::* param);      void set_ptr(gig::leverage_ctrl_t* ptr);
     void set_dimreg(gig::DimensionRegion* dimreg);  
216      int get_active_row_number() { return combobox.get_active_row_number(); }      int get_active_row_number() { return combobox.get_active_row_number(); }
217      Glib::SignalProxy0<void> signal_changed() {      Glib::SignalProxy0<void> signal_changed() {
218          return combobox.signal_changed();          return combobox.signal_changed();
# Line 271  public: Line 220  public:
220  };  };
221    
222    
 template<typename T2>  
223  class BoolEntry : public LabelWidget {  class BoolEntry : public LabelWidget {
224  private:  private:
225      Gtk::CheckButton checkbutton;      Gtk::CheckButton checkbutton;
226      bool T2::* param;      bool* ptr;
     T2* dimreg;  
227      void value_changed();      void value_changed();
228  public:  public:
229      BoolEntry(char* labelText, bool T2::* param);      BoolEntry(char* labelText);
     void set_dimreg(T2* dimreg);  
230      bool get_active() { return checkbutton.get_active(); }      bool get_active() { return checkbutton.get_active(); }
231        bool set_active(bool b) { checkbutton.set_active(b); }
232      Glib::SignalProxy0<void> signal_toggled() {      Glib::SignalProxy0<void> signal_toggled() {
233          return checkbutton.signal_toggled();          return checkbutton.signal_toggled();
234      }      }
235  };      void set_ptr(bool* ptr);
236        void set_tip(const Glib::ustring& tip_text) {
237  template<typename T2>          tooltips.set_tip(checkbutton, tip_text);
 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();  
238      }      }
239  }  };
240    
 template<typename T2>  
 void BoolEntry<T2>::set_dimreg(T2* dimreg)  
 {  
     this->dimreg = 0;  
     checkbutton.set_active(dimreg->*param);  
     this->dimreg = dimreg;  
 }  
241    
242  class BoolEntryPlus6 : public LabelWidget {  class BoolEntryPlus6 : public LabelWidget {
243  private:  private:
244      Gtk::CheckButton checkbutton;      Gtk::CheckButton checkbutton;
245      gig::DimensionRegion* dimreg;      int32_t* ptr;
246      void value_changed();      void value_changed();
247      NumEntryGain& eGain;      NumEntryGain& eGain;
248        int32_t plus6value;
249  public:  public:
250      BoolEntryPlus6(char* labelText, NumEntryGain& eGain);      BoolEntryPlus6(char* labelText, NumEntryGain& eGain, int32_t plus6value);
251      void set_dimreg(gig::DimensionRegion* dimreg);      void set_ptr(int32_t* ptr);
252      bool get_active() { return checkbutton.get_active(); }      bool get_active() { return checkbutton.get_active(); }
253      Glib::SignalProxy0<void> signal_toggled() {      Glib::SignalProxy0<void> signal_toggled() {
254          return checkbutton.signal_toggled();          return checkbutton.signal_toggled();
255      }      }
256  };  };
257    
258    class StringEntry : public LabelWidget {
259    private:
260        Gtk::Entry entry;
261        gig::String* ptr;
262        void value_changed();
263    public:
264        StringEntry(char* labelText);
265        void set_ptr(gig::String* ptr);
266    };
267    
268    
269  #endif  #endif

Legend:
Removed from v.1127  
changed lines
  Added in v.1156

  ViewVC Help
Powered by ViewVC