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

Diff of /gigedit/trunk/src/gigedit/dimregionedit.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 1623 by persson, Fri Jan 4 19:42:45 2008 UTC
# Line 1  Line 1 
1  /*                                                         -*- c++ -*-  /*                                                         -*- c++ -*-
2   * Copyright (C) 2006, 2007 Andreas Persson   * Copyright (C) 2006-2008 Andreas Persson
3   *   *
4   * This program is free software; you can redistribute it and/or   * This program is free software; you can redistribute it and/or
5   * modify it under the terms of the GNU General Public License as   * modify it under the terms of the GNU General Public License as
# Line 28  Line 28 
28  #include <gtkmm/table.h>  #include <gtkmm/table.h>
29  #include <gtkmm/tooltips.h>  #include <gtkmm/tooltips.h>
30    
31    #include <set>
32    
33  #include "paramedit.h"  #include "paramedit.h"
34    
35  class DimRegionEdit : public Gtk::Notebook  class DimRegionEdit : public Gtk::Notebook
# Line 36  public: Line 38  public:
38      DimRegionEdit();      DimRegionEdit();
39      virtual ~DimRegionEdit();      virtual ~DimRegionEdit();
40      void set_dim_region(gig::DimensionRegion* d);      void set_dim_region(gig::DimensionRegion* d);
41        bool set_sample(gig::Sample* sample);
42      Gtk::Entry* wSample;      Gtk::Entry* wSample;
43        sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_to_be_changed();
44        sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_changed();
45        sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/>& signal_sample_ref_changed();
46    
47        std::set<gig::DimensionRegion*> dimregs;
48    
49  protected:  protected:
50        sigc::signal<void, gig::DimensionRegion*> dimreg_to_be_changed_signal;
51        sigc::signal<void, gig::DimensionRegion*> dimreg_changed_signal;
52        sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/> sample_ref_changed_signal;
53        sigc::signal<void> instrument_changed;
54    
55      gig::DimensionRegion* dimregion;      gig::DimensionRegion* dimregion;
56    
57      Gtk::Tooltips tooltips;      Gtk::Tooltips tooltips;
# Line 135  protected: Line 148  protected:
148      ChoiceEntry<uint32_t> eSampleLoopType;      ChoiceEntry<uint32_t> eSampleLoopType;
149      BoolEntry eSampleLoopInfinite;      BoolEntry eSampleLoopInfinite;
150      NumEntryTemp<uint32_t> eSampleLoopPlayCount;      NumEntryTemp<uint32_t> eSampleLoopPlayCount;
151        Gtk::Label* lEG2;
152        Gtk::Label* lLFO2;
153    
154      int rowno;      int rowno;
155      int pageno;      int pageno;
# Line 142  protected: Line 157  protected:
157    
158    
159      void addProp(BoolEntry& boolentry);      void addProp(BoolEntry& boolentry);
160        void addProp(BoolEntryPlus6& boolentry);
161      void addProp(LabelWidget& labelwidget);      void addProp(LabelWidget& labelwidget);
162      void addString(const char* labelText, Gtk::Label*& label,      void addString(const char* labelText, Gtk::Label*& label,
163                     Gtk::Entry*& widget);                     Gtk::Entry*& widget);
164      void addHeader(const char* text);      Gtk::Label* addHeader(const char* text);
165      void nextPage();      void nextPage();
166    
167      void VCFEnabled_toggled();      void VCFEnabled_toggled();
# Line 163  protected: Line 179  protected:
179      void crossfade2_changed();      void crossfade2_changed();
180      void crossfade3_changed();      void crossfade3_changed();
181      void crossfade4_changed();      void crossfade4_changed();
182      void loop_enabled_toggled();      void update_loop_elements();
183        void loop_start_changed();
184        void loop_length_changed();
185      void loop_infinite_toggled();      void loop_infinite_toggled();
186    
187      void updateLoopElements();      int update_model;
188    
189        // connect a widget to a setter function in DimRegionEdit
190        template<typename C, typename T>
191        void connect(C& widget,
192                     void (DimRegionEdit::*setter)(gig::DimensionRegion*, T)) {
193            connect<C, T>(widget,
194                          sigc::mem_fun(setter));
195        }
196    
197        // connect a widget to a member variable in gig::DimensionRegion
198        template<typename C, typename T>
199        void connect(C& widget, T gig::DimensionRegion::* member) {
200            connect<C, T>(widget,
201                          sigc::bind(sigc::mem_fun(&DimRegionEdit::set_member<T>), member));
202        }
203    
204        // connect a widget to a setter function in gig::DimensionRegion
205        template<typename C, typename T>
206        void connect(C& widget,
207                     void (gig::DimensionRegion::*setter)(T)) {
208            connect<C, T>(widget,
209                          sigc::hide<0>(sigc::mem_fun(setter)));
210        }
211    
212        // helper function for the connect functions above
213        template<typename C, typename T>
214        void connect(C& widget,
215                     sigc::slot<void, DimRegionEdit*, gig::DimensionRegion*, T> setter) {
216            widget.signal_value_changed().connect(
217                sigc::compose(sigc::bind(sigc::mem_fun(*this, &DimRegionEdit::set_many<T>), setter),
218                              sigc::mem_fun(widget, &C::get_value)));
219        }
220    
221        // loop through all dimregions being edited ant set a value in
222        // each of them
223        template<typename T>
224        void set_many(T value,
225                      sigc::slot<void, DimRegionEdit*, gig::DimensionRegion*, T> setter) {
226            if (update_model == 0) {
227                for (std::set<gig::DimensionRegion*>::iterator i = dimregs.begin() ;
228                     i != dimregs.end() ; i++)
229                {
230                    dimreg_changed_signal(*i);
231                    setter(this, *i, value);
232                }
233            }
234        }
235    
236        // set a value of a member variable in the given dimregion
237        template<typename T>
238        void set_member(gig::DimensionRegion* d, T value,
239                        T gig::DimensionRegion::* member) {
240            d->*member = value;
241        }
242    
243        // setters for specific dimregion parameters
244    
245        void set_UnityNote(gig::DimensionRegion* d, uint8_t value);
246        void set_FineTune(gig::DimensionRegion* d, int16_t value);
247        void set_Crossfade_in_start(gig::DimensionRegion* d, uint8_t value);
248        void set_Crossfade_in_end(gig::DimensionRegion* d, uint8_t value);
249        void set_Crossfade_out_start(gig::DimensionRegion* d, uint8_t value);
250        void set_Crossfade_out_end(gig::DimensionRegion* d, uint8_t value);
251        void set_Gain(gig::DimensionRegion* d, int32_t value);
252        void set_LoopEnabled(gig::DimensionRegion* d, bool value);
253        void set_LoopType(gig::DimensionRegion* d, uint32_t value);
254        void set_LoopStart(gig::DimensionRegion* d, uint32_t value);
255        void set_LoopLength(gig::DimensionRegion* d, uint32_t value);
256        void set_LoopInfinite(gig::DimensionRegion* d, bool value);
257        void set_LoopPlayCount(gig::DimensionRegion* d, uint32_t value);
258  };  };
259    
260  #endif  #endif

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

  ViewVC Help
Powered by ViewVC