/[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 2844 by persson, Sun Sep 20 08:49:40 2015 UTC
# Line 1  Line 1 
1  /*                                                         -*- c++ -*-  /*                                                         -*- c++ -*-
2   * Copyright (C) 2006, 2007 Andreas Persson   * Copyright (C) 2006-2015 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 <cairomm/context.h>
26    #include <gtkmm/box.h>
27    #include <gtkmm/drawingarea.h>
28  #include <gtkmm/entry.h>  #include <gtkmm/entry.h>
29  #include <gtkmm/label.h>  #include <gtkmm/label.h>
30  #include <gtkmm/notebook.h>  #include <gtkmm/notebook.h>
31  #include <gtkmm/table.h>  #include <gtkmm/table.h>
32  #include <gtkmm/tooltips.h>  
33    #include <set>
34    
35  #include "paramedit.h"  #include "paramedit.h"
36    
37    class VelocityCurve : public Gtk::DrawingArea {
38    public:
39        VelocityCurve(double (gig::DimensionRegion::*getter)(uint8_t));
40        void set_dim_region(gig::DimensionRegion* d) { dimreg = d; }
41    
42    protected:
43    #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
44        bool on_expose_event(GdkEventExpose* e);
45    #else
46        bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
47    #endif
48    
49    private:
50        double (gig::DimensionRegion::* const getter)(uint8_t);
51        gig::DimensionRegion* dimreg;
52    };
53    
54    class CrossfadeCurve : public Gtk::DrawingArea {
55    public:
56        CrossfadeCurve();
57        void set_dim_region(gig::DimensionRegion* d) { dimreg = d; }
58    
59    protected:
60    #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
61        bool on_expose_event(GdkEventExpose* e);
62    #else
63        bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
64    #endif
65    
66    private:
67        gig::DimensionRegion* dimreg;
68        void draw_one_curve(const Cairo::RefPtr<Cairo::Context>& cr,
69                            const gig::DimensionRegion* d,
70                            bool sensitive);
71    };
72    
73  class DimRegionEdit : public Gtk::Notebook  class DimRegionEdit : public Gtk::Notebook
74  {  {
75  public:  public:
76      DimRegionEdit();      DimRegionEdit();
77      virtual ~DimRegionEdit();      virtual ~DimRegionEdit();
78      void set_dim_region(gig::DimensionRegion* d);      void set_dim_region(gig::DimensionRegion* d);
79        bool set_sample(gig::Sample* sample, bool copy_sample_unity, bool copy_sample_tune, bool copy_sample_loop);
80      Gtk::Entry* wSample;      Gtk::Entry* wSample;
81        Gtk::Button* buttonNullSampleReference;
82        sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_to_be_changed();
83        sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_changed();
84        sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/>& signal_sample_ref_changed();
85        sigc::signal<void, gig::Sample*>& signal_select_sample();
86    
87        std::set<gig::DimensionRegion*> dimregs;
88    
89  protected:  protected:
90        sigc::signal<void, gig::DimensionRegion*> dimreg_to_be_changed_signal;
91        sigc::signal<void, gig::DimensionRegion*> dimreg_changed_signal;
92        sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/> sample_ref_changed_signal;
93        sigc::signal<void> instrument_changed;
94        sigc::signal<void, gig::Sample*> select_sample_signal;
95    
96      gig::DimensionRegion* dimregion;      gig::DimensionRegion* dimregion;
97    
98    #ifdef OLD_TOOLTIPS
99      Gtk::Tooltips tooltips;      Gtk::Tooltips tooltips;
100    #endif
101    
102      Gtk::Table* table[7];      Gtk::Table* table[7];
103    
104      Gtk::Label* lSample;      Gtk::Label* lSample;
105    
106        VelocityCurve velocity_curve;
107        VelocityCurve release_curve;
108        VelocityCurve cutoff_curve;
109        CrossfadeCurve crossfade_curve;
110    
111      NumEntryPermille eEG1PreAttack;      NumEntryPermille eEG1PreAttack;
112      NumEntryTemp<double> eEG1Attack;      NumEntryTemp<double> eEG1Attack;
113      NumEntryTemp<double> eEG1Decay1;      NumEntryTemp<double> eEG1Decay1;
# Line 126  protected: Line 187  protected:
187      BoolEntry eMSDecode;      BoolEntry eMSDecode;
188      NumEntryTemp<uint16_t> eSampleStartOffset;      NumEntryTemp<uint16_t> eSampleStartOffset;
189      NoteEntry eUnityNote;      NoteEntry eUnityNote;
190        ReadOnlyLabelWidget eSampleFormatInfo;
191        ReadOnlyLabelWidget eSampleID;
192      NumEntryTemp<int16_t> eFineTune;      NumEntryTemp<int16_t> eFineTune;
193      NumEntryGain eGain;      NumEntryGain eGain;
194      BoolEntryPlus6 eGainPlus6;      BoolEntryPlus6 eGainPlus6;
# Line 135  protected: Line 198  protected:
198      ChoiceEntry<uint32_t> eSampleLoopType;      ChoiceEntry<uint32_t> eSampleLoopType;
199      BoolEntry eSampleLoopInfinite;      BoolEntry eSampleLoopInfinite;
200      NumEntryTemp<uint32_t> eSampleLoopPlayCount;      NumEntryTemp<uint32_t> eSampleLoopPlayCount;
201        Gtk::Label* lEG2;
202        Gtk::Label* lLFO2;
203    
204        Gtk::Button buttonSelectSample;
205    
206      int rowno;      int rowno;
207      int pageno;      int pageno;
# Line 142  protected: Line 209  protected:
209    
210    
211      void addProp(BoolEntry& boolentry);      void addProp(BoolEntry& boolentry);
212        void addProp(BoolEntryPlus6& boolentry);
213      void addProp(LabelWidget& labelwidget);      void addProp(LabelWidget& labelwidget);
214      void addString(const char* labelText, Gtk::Label*& label,      void addString(const char* labelText, Gtk::Label*& label,
215                     Gtk::Entry*& widget);                     Gtk::Entry*& widget);
216      void addHeader(const char* text);      void addString(const char* labelText, Gtk::Label*& label,
217                       Gtk::Entry*& widget, Gtk::Button*& button);
218        Gtk::Label* addHeader(const char* text);
219        void addRightHandSide(Gtk::Widget& widget);
220      void nextPage();      void nextPage();
221    
222      void VCFEnabled_toggled();      void VCFEnabled_toggled();
# Line 163  protected: Line 234  protected:
234      void crossfade2_changed();      void crossfade2_changed();
235      void crossfade3_changed();      void crossfade3_changed();
236      void crossfade4_changed();      void crossfade4_changed();
237      void loop_enabled_toggled();      void update_loop_elements();
238        void loop_start_changed();
239        void loop_length_changed();
240      void loop_infinite_toggled();      void loop_infinite_toggled();
241        void nullOutSampleReference();
242    
243        int update_model;
244    
245        // connect a widget to a setter function in DimRegionEdit
246        template<typename C, typename T>
247        void connect(C& widget,
248                     void (DimRegionEdit::*setter)(gig::DimensionRegion*, T)) {
249            connect<C, T>(widget,
250                          sigc::mem_fun(setter));
251        }
252    
253        // connect a widget to a member variable in gig::DimensionRegion
254        template<typename C, typename T>
255        void connect(C& widget, T gig::DimensionRegion::* member) {
256            connect<C, T>(widget,
257                          sigc::bind(sigc::mem_fun(&DimRegionEdit::set_member<T>), member));
258        }
259    
260        // connect a widget to a setter function in gig::DimensionRegion
261        template<typename C, typename T>
262        void connect(C& widget,
263                     void (gig::DimensionRegion::*setter)(T)) {
264            connect<C, T>(widget,
265                          sigc::hide<0>(sigc::mem_fun(setter)));
266        }
267    
268        // helper function for the connect functions above
269        template<typename C, typename T>
270        void connect(C& widget,
271                     sigc::slot<void, DimRegionEdit*, gig::DimensionRegion*, T> setter) {
272            widget.signal_value_changed().connect(
273                sigc::compose(sigc::bind(sigc::mem_fun(*this, &DimRegionEdit::set_many<T>), setter),
274                              sigc::mem_fun(widget, &C::get_value)));
275        }
276    
277        // loop through all dimregions being edited ant set a value in
278        // each of them
279        template<typename T>
280        void set_many(T value,
281                      sigc::slot<void, DimRegionEdit*, gig::DimensionRegion*, T> setter) {
282            if (update_model == 0) {
283                for (std::set<gig::DimensionRegion*>::iterator i = dimregs.begin() ;
284                     i != dimregs.end() ; ++i)
285                {
286                    dimreg_changed_signal(*i);
287                    setter(this, *i, value);
288                }
289            }
290        }
291    
292        // set a value of a member variable in the given dimregion
293        template<typename T>
294        void set_member(gig::DimensionRegion* d, T value,
295                        T gig::DimensionRegion::* member) {
296            d->*member = value;
297        }
298    
299        // setters for specific dimregion parameters
300    
301        void set_UnityNote(gig::DimensionRegion* d, uint8_t value);
302        void set_FineTune(gig::DimensionRegion* d, int16_t value);
303        void set_Crossfade_in_start(gig::DimensionRegion* d, uint8_t value);
304        void set_Crossfade_in_end(gig::DimensionRegion* d, uint8_t value);
305        void set_Crossfade_out_start(gig::DimensionRegion* d, uint8_t value);
306        void set_Crossfade_out_end(gig::DimensionRegion* d, uint8_t value);
307        void set_Gain(gig::DimensionRegion* d, int32_t value);
308        void set_LoopEnabled(gig::DimensionRegion* d, bool value);
309        void set_LoopType(gig::DimensionRegion* d, uint32_t value);
310        void set_LoopStart(gig::DimensionRegion* d, uint32_t value);
311        void set_LoopLength(gig::DimensionRegion* d, uint32_t value);
312        void set_LoopInfinite(gig::DimensionRegion* d, bool value);
313        void set_LoopPlayCount(gig::DimensionRegion* d, uint32_t value);
314    
315      void updateLoopElements();      void onButtonSelectSamplePressed();
316  };  };
317    
318  #endif  #endif

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

  ViewVC Help
Powered by ViewVC