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

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

  ViewVC Help
Powered by ViewVC