/[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 1322 by schoenebeck, Tue Sep 4 11:04:56 2007 UTC revision 2392 by persson, Mon Jan 7 20:41:16 2013 UTC
# Line 1  Line 1 
1  /*                                                         -*- c++ -*-  /*                                                         -*- c++ -*-
2   * Copyright (C) 2006, 2007 Andreas Persson   * Copyright (C) 2006-2013 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 22  Line 22 
22    
23  #include <gig.h>  #include <gig.h>
24    
25    #include <gtkmm/drawingarea.h>
26  #include <gtkmm/entry.h>  #include <gtkmm/entry.h>
27  #include <gtkmm/label.h>  #include <gtkmm/label.h>
28  #include <gtkmm/notebook.h>  #include <gtkmm/notebook.h>
29  #include <gtkmm/table.h>  #include <gtkmm/table.h>
30  #include <gtkmm/tooltips.h>  
31    #include <set>
32    
33  #include "paramedit.h"  #include "paramedit.h"
34    
35    class VelocityCurve : public Gtk::DrawingArea {
36    public:
37        VelocityCurve(double (gig::DimensionRegion::*getter)(uint8_t));
38        void set_dim_region(gig::DimensionRegion* d) { dimreg = d; }
39    
40    protected:
41    #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
42        bool on_expose_event(GdkEventExpose* e);
43    #else
44        bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
45    #endif
46    
47    private:
48        double (gig::DimensionRegion::* const getter)(uint8_t);
49        gig::DimensionRegion* dimreg;
50    };
51    
52    class CrossfadeCurve : public Gtk::DrawingArea {
53    public:
54        CrossfadeCurve();
55        void set_dim_region(gig::DimensionRegion* d) { dimreg = d; }
56    
57    protected:
58    #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
59        bool on_expose_event(GdkEventExpose* e);
60    #else
61        bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
62    #endif
63    
64    private:
65        gig::DimensionRegion* dimreg;
66    };
67    
68  class DimRegionEdit : public Gtk::Notebook  class DimRegionEdit : public Gtk::Notebook
69  {  {
70  public:  public:
# Line 38  public: Line 73  public:
73      void set_dim_region(gig::DimensionRegion* d);      void set_dim_region(gig::DimensionRegion* d);
74      bool set_sample(gig::Sample* sample);      bool set_sample(gig::Sample* sample);
75      Gtk::Entry* wSample;      Gtk::Entry* wSample;
76      sigc::signal<void, gig::DimensionRegion*> signal_dimreg_to_be_changed();      sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_to_be_changed();
77      sigc::signal<void, gig::DimensionRegion*> signal_dimreg_changed();      sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_changed();
78      sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/> signal_sample_ref_changed();      sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/>& signal_sample_ref_changed();
79    
80        std::set<gig::DimensionRegion*> dimregs;
81    
82  protected:  protected:
83      sigc::signal<void, gig::DimensionRegion*> dimreg_to_be_changed_signal;      sigc::signal<void, gig::DimensionRegion*> dimreg_to_be_changed_signal;
# Line 50  protected: Line 87  protected:
87    
88      gig::DimensionRegion* dimregion;      gig::DimensionRegion* dimregion;
89    
90    #ifdef OLD_TOOLTIPS
91      Gtk::Tooltips tooltips;      Gtk::Tooltips tooltips;
92    #endif
93    
94      Gtk::Table* table[7];      Gtk::Table* table[7];
95    
96      Gtk::Label* lSample;      Gtk::Label* lSample;
97    
98        VelocityCurve velocity_curve;
99        VelocityCurve release_curve;
100        VelocityCurve cutoff_curve;
101        CrossfadeCurve crossfade_curve;
102    
103      NumEntryPermille eEG1PreAttack;      NumEntryPermille eEG1PreAttack;
104      NumEntryTemp<double> eEG1Attack;      NumEntryTemp<double> eEG1Attack;
105      NumEntryTemp<double> eEG1Decay1;      NumEntryTemp<double> eEG1Decay1;
# Line 144  protected: Line 188  protected:
188      ChoiceEntry<uint32_t> eSampleLoopType;      ChoiceEntry<uint32_t> eSampleLoopType;
189      BoolEntry eSampleLoopInfinite;      BoolEntry eSampleLoopInfinite;
190      NumEntryTemp<uint32_t> eSampleLoopPlayCount;      NumEntryTemp<uint32_t> eSampleLoopPlayCount;
191        Gtk::Label* lEG2;
192        Gtk::Label* lLFO2;
193    
194      int rowno;      int rowno;
195      int pageno;      int pageno;
# Line 155  protected: Line 201  protected:
201      void addProp(LabelWidget& labelwidget);      void addProp(LabelWidget& labelwidget);
202      void addString(const char* labelText, Gtk::Label*& label,      void addString(const char* labelText, Gtk::Label*& label,
203                     Gtk::Entry*& widget);                     Gtk::Entry*& widget);
204      void addHeader(const char* text);      Gtk::Label* addHeader(const char* text);
205      void nextPage();      void nextPage();
206    
207      void VCFEnabled_toggled();      void VCFEnabled_toggled();
# Line 173  protected: Line 219  protected:
219      void crossfade2_changed();      void crossfade2_changed();
220      void crossfade3_changed();      void crossfade3_changed();
221      void crossfade4_changed();      void crossfade4_changed();
222      void loop_enabled_toggled();      void update_loop_elements();
223        void loop_start_changed();
224        void loop_length_changed();
225      void loop_infinite_toggled();      void loop_infinite_toggled();
226    
227      void updateLoopElements();      int update_model;
228    
229        // connect a widget to a setter function in DimRegionEdit
230        template<typename C, typename T>
231        void connect(C& widget,
232                     void (DimRegionEdit::*setter)(gig::DimensionRegion*, T)) {
233            connect<C, T>(widget,
234                          sigc::mem_fun(setter));
235        }
236    
237        // connect a widget to a member variable in gig::DimensionRegion
238        template<typename C, typename T>
239        void connect(C& widget, T gig::DimensionRegion::* member) {
240            connect<C, T>(widget,
241                          sigc::bind(sigc::mem_fun(&DimRegionEdit::set_member<T>), member));
242        }
243    
244        // connect a widget to a setter function in gig::DimensionRegion
245        template<typename C, typename T>
246        void connect(C& widget,
247                     void (gig::DimensionRegion::*setter)(T)) {
248            connect<C, T>(widget,
249                          sigc::hide<0>(sigc::mem_fun(setter)));
250        }
251    
252        // helper function for the connect functions above
253        template<typename C, typename T>
254        void connect(C& widget,
255                     sigc::slot<void, DimRegionEdit*, gig::DimensionRegion*, T> setter) {
256            widget.signal_value_changed().connect(
257                sigc::compose(sigc::bind(sigc::mem_fun(*this, &DimRegionEdit::set_many<T>), setter),
258                              sigc::mem_fun(widget, &C::get_value)));
259        }
260    
261        // loop through all dimregions being edited ant set a value in
262        // each of them
263        template<typename T>
264        void set_many(T value,
265                      sigc::slot<void, DimRegionEdit*, gig::DimensionRegion*, T> setter) {
266            if (update_model == 0) {
267                for (std::set<gig::DimensionRegion*>::iterator i = dimregs.begin() ;
268                     i != dimregs.end() ; i++)
269                {
270                    dimreg_changed_signal(*i);
271                    setter(this, *i, value);
272                }
273            }
274        }
275    
276        // set a value of a member variable in the given dimregion
277        template<typename T>
278        void set_member(gig::DimensionRegion* d, T value,
279                        T gig::DimensionRegion::* member) {
280            d->*member = value;
281        }
282    
283        // setters for specific dimregion parameters
284    
285        void set_UnityNote(gig::DimensionRegion* d, uint8_t value);
286        void set_FineTune(gig::DimensionRegion* d, int16_t value);
287        void set_Crossfade_in_start(gig::DimensionRegion* d, uint8_t value);
288        void set_Crossfade_in_end(gig::DimensionRegion* d, uint8_t value);
289        void set_Crossfade_out_start(gig::DimensionRegion* d, uint8_t value);
290        void set_Crossfade_out_end(gig::DimensionRegion* d, uint8_t value);
291        void set_Gain(gig::DimensionRegion* d, int32_t value);
292        void set_LoopEnabled(gig::DimensionRegion* d, bool value);
293        void set_LoopType(gig::DimensionRegion* d, uint32_t value);
294        void set_LoopStart(gig::DimensionRegion* d, uint32_t value);
295        void set_LoopLength(gig::DimensionRegion* d, uint32_t value);
296        void set_LoopInfinite(gig::DimensionRegion* d, bool value);
297        void set_LoopPlayCount(gig::DimensionRegion* d, uint32_t value);
298  };  };
299    
300  #endif  #endif

Legend:
Removed from v.1322  
changed lines
  Added in v.2392

  ViewVC Help
Powered by ViewVC