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

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

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

revision 1225 by schoenebeck, Sun Jun 10 10:56:11 2007 UTC revision 1714 by persson, Thu Mar 6 20:50:04 2008 UTC
# Line 17  Line 17 
17   * 02110-1301 USA.   * 02110-1301 USA.
18   */   */
19    
20  #include "paramedit.h"  #include <cstring>
21    
22  bool update_gui;  #include "paramedit.h"
23    
24  namespace {  namespace {
25      const char* const controlChangeTexts[] = {      const char* const controlChangeTexts[] = {
# Line 80  NumEntry::NumEntry(const char* labelText Line 80  NumEntry::NumEntry(const char* labelText
80      LabelWidget(labelText, box)      LabelWidget(labelText, box)
81  {  {
82      spinbutton.set_digits(decimals);      spinbutton.set_digits(decimals);
83        spinbutton.set_value(0);
84      scale.set_draw_value(false);      scale.set_draw_value(false);
85      box.pack_start(spinbutton, Gtk::PACK_SHRINK);      box.pack_start(spinbutton, Gtk::PACK_SHRINK);
86      box.add(scale);      box.add(scale);
# Line 89  NumEntryGain::NumEntryGain(const char* l Line 90  NumEntryGain::NumEntryGain(const char* l
90                             double lower, double upper,                             double lower, double upper,
91                             int decimals, double coeff) :                             int decimals, double coeff) :
92      NumEntry(labelText, lower, upper, decimals),      NumEntry(labelText, lower, upper, decimals),
93      coeff(coeff)      coeff(coeff),
94        value(0),
95        connected(true)
96  {  {
97      spinbutton.signal_value_changed().connect(      spinbutton.signal_value_changed().connect(
98          sigc::mem_fun(*this, &NumEntryGain::value_changed));          sigc::mem_fun(*this, &NumEntryGain::value_changed));
# Line 97  NumEntryGain::NumEntryGain(const char* l Line 100  NumEntryGain::NumEntryGain(const char* l
100    
101  void NumEntryGain::value_changed()  void NumEntryGain::value_changed()
102  {  {
103      if (ptr && update_gui) {      if (!connected) return;
104          *ptr = int32_t(spinbutton.get_value() * coeff);  
105        const double f = pow(10, spinbutton.get_digits());
106        int new_value = round_to_int(spinbutton.get_value() * f);
107        if (new_value != round_to_int(value / coeff * f)) {
108            value = round_to_int(new_value / f * coeff);
109            sig_changed();
110      }      }
111  }  }
112    
113  void NumEntryGain::set_ptr(int32_t* ptr)  void NumEntryGain::set_value(int32_t value)
114  {  {
115      this->ptr = 0;      if (value != this->value) {
116      bool plus6 = *ptr < 0;          this->value = value;
117      set_value(plus6 ? 0 : *ptr / coeff);  
118      set_sensitive(!plus6);          connected = false;
119      this->ptr = ptr;          bool plus6 = value < 0;
120            spinbutton.set_value(plus6 ? 0 : value / coeff);
121            set_sensitive(!plus6);
122            connected = true;
123    
124            sig_changed();
125        }
126  }  }
127    
128    
129  BoolEntryPlus6::BoolEntryPlus6(const char* labelText, NumEntryGain& eGain, int32_t plus6value) :  BoolEntryPlus6::BoolEntryPlus6(const char* labelText, NumEntryGain& eGain, int32_t plus6value) :
130      LabelWidget(labelText, checkbutton),      LabelWidget(labelText, checkbutton),
131        checkbutton(labelText),
132      eGain(eGain),      eGain(eGain),
133      plus6value(plus6value)      plus6value(plus6value)
134  {  {
# Line 123  BoolEntryPlus6::BoolEntryPlus6(const cha Line 138  BoolEntryPlus6::BoolEntryPlus6(const cha
138    
139  void BoolEntryPlus6::value_changed()  void BoolEntryPlus6::value_changed()
140  {  {
141      if (ptr && update_gui) {      if (checkbutton.get_active()) eGain.set_value(plus6value);
142          bool plus6 = checkbutton.get_active();      else if (eGain.get_value() < 0) eGain.set_value(0);
         if (plus6) {  
             eGain.set_value(0);  
             *ptr = plus6value;  
         } else {  
             if (*ptr < 0) {  
                 *ptr = 0;  
             }  
         }  
         eGain.set_sensitive(!plus6);  
     }  
143  }  }
144    
145  void BoolEntryPlus6::set_ptr(int32_t* ptr)  int32_t BoolEntryPlus6::get_value() const
146  {  {
147      this->ptr = 0;      return eGain.get_value();
148      checkbutton.set_active(*ptr < 0);  }
149      this->ptr = ptr;  
150    void BoolEntryPlus6::set_value(int32_t value)
151    {
152        checkbutton.set_active(value < 0);
153  }  }
154    
155  NumEntryPermille::NumEntryPermille(const char* labelText,  NumEntryPermille::NumEntryPermille(const char* labelText,
156                                     double lower, double upper, int decimals) :                                     double lower, double upper, int decimals) :
157      NumEntry(labelText, lower, upper, decimals)      NumEntry(labelText, lower, upper, decimals),
158        value(0)
159  {  {
160      spinbutton.signal_value_changed().connect(      spinbutton.signal_value_changed().connect(
161          sigc::mem_fun(*this, &NumEntryPermille::value_changed));          sigc::mem_fun(*this, &NumEntryPermille::value_changed));
# Line 154  NumEntryPermille::NumEntryPermille(const Line 163  NumEntryPermille::NumEntryPermille(const
163    
164  void NumEntryPermille::value_changed()  void NumEntryPermille::value_changed()
165  {  {
166      if (ptr && update_gui) {      uint16_t new_value = uint16_t(spinbutton.get_value() * 10 + 0.5);
167          *ptr = uint16_t(spinbutton.get_value() * 10 + 0.5);      if (new_value != value) {
168            value = uint16_t(spinbutton.get_value() * 10 + 0.5);
169            sig_changed();
170      }      }
171  }  }
172    
173  void NumEntryPermille::set_ptr(uint16_t* ptr)  void NumEntryPermille::set_value(uint16_t value)
174  {  {
175      this->ptr = 0;      if (value != this->value) {
176      set_value(*ptr / 10.0);          spinbutton.set_value(value / 10.0);
177      this->ptr = ptr;      }
178  }  }
179    
180    
# Line 204  int NoteEntry::on_input(double* new_valu Line 215  int NoteEntry::on_input(double* new_valu
215  // Convert the Adjustment position to text  // Convert the Adjustment position to text
216  bool NoteEntry::on_output()  bool NoteEntry::on_output()
217  {  {
218      int x = int(spinbutton.get_adjustment()->get_value());      int x = int(spinbutton.get_adjustment()->get_value() + 0.5);
219      char buf[10];      char buf[10];
220      sprintf(buf, "%s%d", notes[x % 12], x / 12 - 1);      sprintf(buf, "%s%d", notes[x % 12], x / 12 - 1);
221      spinbutton.set_text(buf);      spinbutton.set_text(buf);
# Line 223  ChoiceEntryLeverageCtrl::ChoiceEntryLeve Line 234  ChoiceEntryLeverageCtrl::ChoiceEntryLeve
234      combobox.signal_changed().connect(      combobox.signal_changed().connect(
235          sigc::mem_fun(*this, &ChoiceEntryLeverageCtrl::value_changed));          sigc::mem_fun(*this, &ChoiceEntryLeverageCtrl::value_changed));
236      align.add(combobox);      align.add(combobox);
237        value.type = gig::leverage_ctrl_t::type_none;
238        value.controller_number = 0;
239  }  }
240    
241  void ChoiceEntryLeverageCtrl::value_changed()  void ChoiceEntryLeverageCtrl::value_changed()
242  {  {
243      if (ptr && update_gui) {      int rowno = combobox.get_active_row_number();
244          int rowno = combobox.get_active_row_number();      switch (rowno)
245          switch (rowno)      {
246          {      case -1:
247          case -1:          break;
248              break;      case 0:
249          case 0:          value.type = gig::leverage_ctrl_t::type_none;
250              ptr->type = gig::leverage_ctrl_t::type_none;          break;
251              break;      case 1:
252          case 1:          value.type = gig::leverage_ctrl_t::type_channelaftertouch;
253              ptr->type = gig::leverage_ctrl_t::type_channelaftertouch;          break;
254              break;      case 2:
255          case 2:          value.type = gig::leverage_ctrl_t::type_velocity;
256              ptr->type = gig::leverage_ctrl_t::type_velocity;          break;
257              break;      default:
258          default:          value.type = gig::leverage_ctrl_t::type_controlchange;
259              ptr->type = gig::leverage_ctrl_t::type_controlchange;          int x = 3;
260              int x = 3;          for (int cc = 0 ; cc < 96 ; cc++) {
261              for (int cc = 0 ; cc < 96 ; cc++) {              if (controlChangeTexts[cc + 3]) {
262                  if (controlChangeTexts[cc + 3]) {                  if (rowno == x) {
263                      if (rowno == x) {                      value.controller_number = cc;
264                          ptr->controller_number = cc;                      break;
                         break;  
                     }  
                     x++;  
265                  }                  }
266                    x++;
267              }              }
             break;  
268          }          }
269            break;
270      }      }
271        if (rowno >= 0) sig_changed();
272  }  }
273    
274  void ChoiceEntryLeverageCtrl::set_ptr(gig::leverage_ctrl_t* ptr)  void ChoiceEntryLeverageCtrl::set_value(gig::leverage_ctrl_t value)
275  {  {
     this->ptr = 0;  
276      int x;      int x;
277      switch (ptr->type)      switch (value.type)
278      {      {
279      case gig::leverage_ctrl_t::type_none:      case gig::leverage_ctrl_t::type_none:
280          x = 0;          x = 0;
# Line 279  void ChoiceEntryLeverageCtrl::set_ptr(gi Line 290  void ChoiceEntryLeverageCtrl::set_ptr(gi
290          for (int cc = 0 ; cc < 96 ; cc++) {          for (int cc = 0 ; cc < 96 ; cc++) {
291              if (controlChangeTexts[cc + 3]) {              if (controlChangeTexts[cc + 3]) {
292                  x++;                  x++;
293                  if (ptr->controller_number == cc) {                  if (value.controller_number == cc) {
294                      x += 3;                      x += 3;
295                      break;                      break;
296                  }                  }
# Line 291  void ChoiceEntryLeverageCtrl::set_ptr(gi Line 302  void ChoiceEntryLeverageCtrl::set_ptr(gi
302          break;          break;
303      }      }
304      combobox.set_active(x);      combobox.set_active(x);
     this->ptr = ptr;  
305  }  }
306    
307    
308  BoolEntry::BoolEntry(const char* labelText) :  BoolEntry::BoolEntry(const char* labelText) :
309      LabelWidget(labelText, checkbutton),      LabelWidget(labelText, checkbutton),
310      checkbutton(labelText),      checkbutton(labelText)
     ptr(0)  
311  {  {
312      checkbutton.signal_toggled().connect(      checkbutton.signal_toggled().connect(sig_changed.make_slot());
         sigc::mem_fun(*this, &BoolEntry::value_changed));  
313  }  }
314    
 void BoolEntry::value_changed()  
 {  
     if (ptr && update_gui) {  
         *ptr = checkbutton.get_active();  
     }  
 }  
315    
316  void BoolEntry::set_ptr(bool* ptr)  StringEntry::StringEntry(const char* labelText) :
317        LabelWidget(labelText, entry)
318  {  {
319      this->ptr = 0;      entry.signal_changed().connect(sig_changed.make_slot());
     checkbutton.set_active(*ptr);  
     this->ptr = ptr;  
320  }  }
321    
322    StringEntryMultiLine::StringEntryMultiLine(const char* labelText) :
323  StringEntry::StringEntry(const char* labelText) :      LabelWidget(labelText, frame)
     LabelWidget(labelText, entry)  
324  {  {
325      entry.signal_changed().connect(      text_buffer = text_view.get_buffer();
326          sigc::mem_fun(*this, &StringEntry::value_changed));      frame.set_shadow_type(Gtk::SHADOW_IN);
327        frame.add(text_view);
328        text_buffer->signal_changed().connect(sig_changed.make_slot());
329  }  }
330    
331  void StringEntry::value_changed()  gig::String StringEntryMultiLine::get_value() const
332  {  {
333      if (ptr && update_gui) {      Glib::ustring value = text_buffer->get_text();
334          *ptr = entry.get_text();      for (int i = 0 ; (i = value.find("\x0a", i)) >= 0 ; i += 2)
335      }          value.replace(i, 1, "\x0d\x0a");
336        return value;
337  }  }
338    
339  void StringEntry::set_ptr(gig::String* ptr)  void StringEntryMultiLine::set_value(gig::String value)
340  {  {
341      this->ptr = 0;      for (int i = 0 ; (i = value.find("\x0d\x0a", i, 2)) >= 0 ; i++)
342      entry.set_text(*ptr);          value.replace(i, 2, "\x0a");
343      this->ptr = ptr;      text_buffer->set_text(value);
344  }  }

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

  ViewVC Help
Powered by ViewVC