/[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 1623 by persson, Fri Jan 4 19:42:45 2008 UTC revision 3177 by schoenebeck, Thu May 11 20:59:46 2017 UTC
# Line 1  Line 1 
1  /*                                                         -*- c++ -*-  /*                                                         -*- c++ -*-
2   * Copyright (C) 2006-2008 Andreas Persson   * Copyright (C) 2006-2017 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 20  Line 20 
20  #ifndef GIGEDIT_DIMREGIONEDIT_H  #ifndef GIGEDIT_DIMREGIONEDIT_H
21  #define GIGEDIT_DIMREGIONEDIT_H  #define GIGEDIT_DIMREGIONEDIT_H
22    
23  #include <gig.h>  #ifdef LIBGIG_HEADER_FILE
24    # include LIBGIG_HEADER_FILE(gig.h)
25    #else
26    # include <gig.h>
27    #endif
28    
29    #include <cairomm/context.h>
30    #include <gtkmm/box.h>
31    #include <gtkmm/drawingarea.h>
32  #include <gtkmm/entry.h>  #include <gtkmm/entry.h>
33  #include <gtkmm/label.h>  #include <gtkmm/label.h>
34  #include <gtkmm/notebook.h>  #include <gtkmm/notebook.h>
35  #include <gtkmm/table.h>  #include <gtkmm/table.h>
 #include <gtkmm/tooltips.h>  
36    
37  #include <set>  #include <set>
38    
39  #include "paramedit.h"  #include "paramedit.h"
40    #include "global.h"
41    
42    class VelocityCurve : public Gtk::DrawingArea {
43    public:
44        VelocityCurve(double (gig::DimensionRegion::*getter)(uint8_t));
45        void set_dim_region(gig::DimensionRegion* d) { dimreg = d; }
46    
47    protected:
48    #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
49        bool on_expose_event(GdkEventExpose* e);
50    #else
51        bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
52    #endif
53    
54    private:
55        double (gig::DimensionRegion::* const getter)(uint8_t);
56        gig::DimensionRegion* dimreg;
57    };
58    
59    class CrossfadeCurve : public Gtk::DrawingArea {
60    public:
61        CrossfadeCurve();
62        void set_dim_region(gig::DimensionRegion* d) { dimreg = d; }
63    
64    protected:
65    #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
66        bool on_expose_event(GdkEventExpose* e);
67    #else
68        bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
69    #endif
70    
71    private:
72        gig::DimensionRegion* dimreg;
73        void draw_one_curve(const Cairo::RefPtr<Cairo::Context>& cr,
74                            const gig::DimensionRegion* d,
75                            bool sensitive);
76    };
77    
78  class DimRegionEdit : public Gtk::Notebook  class DimRegionEdit : public Gtk::Notebook
79  {  {
# Line 38  public: Line 81  public:
81      DimRegionEdit();      DimRegionEdit();
82      virtual ~DimRegionEdit();      virtual ~DimRegionEdit();
83      void set_dim_region(gig::DimensionRegion* d);      void set_dim_region(gig::DimensionRegion* d);
84      bool set_sample(gig::Sample* sample);      bool set_sample(gig::Sample* sample, bool copy_sample_unity, bool copy_sample_tune, bool copy_sample_loop);
85        bool set_sample(gig::DimensionRegion* dimreg, gig::Sample* sample, bool copy_sample_unity, bool copy_sample_tune, bool copy_sample_loop);
86      Gtk::Entry* wSample;      Gtk::Entry* wSample;
87        Gtk::Button* buttonNullSampleReference;
88      sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_to_be_changed();      sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_to_be_changed();
89      sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_changed();      sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_changed();
90      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();
91        sigc::signal<void, gig::Sample*>& signal_select_sample();
92    
93      std::set<gig::DimensionRegion*> dimregs;      std::set<gig::DimensionRegion*> dimregs;
94    
# Line 51  protected: Line 97  protected:
97      sigc::signal<void, gig::DimensionRegion*> dimreg_changed_signal;      sigc::signal<void, gig::DimensionRegion*> dimreg_changed_signal;
98      sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/> sample_ref_changed_signal;      sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/> sample_ref_changed_signal;
99      sigc::signal<void> instrument_changed;      sigc::signal<void> instrument_changed;
100        sigc::signal<void, gig::Sample*> select_sample_signal;
101    
102        /**
103         * Ensures that the 2 signals DimRegionEdit::dimreg_to_be_changed_signal and
104         * DimRegionEdit::dimreg_changed_signal are always triggered correctly as a
105         * pair. It behaves similar to a "mutex lock guard" design pattern.
106         */
107        class DimRegionChangeGuard : public SignalGuard<gig::DimensionRegion*> {
108        public:
109            DimRegionChangeGuard(DimRegionEdit* edit, gig::DimensionRegion* pDimReg) :
110                SignalGuard<gig::DimensionRegion*>(edit->dimreg_to_be_changed_signal, edit->dimreg_changed_signal, pDimReg)
111            {
112            }
113        };
114    
115      gig::DimensionRegion* dimregion;      gig::DimensionRegion* dimregion;
116    
117    #ifdef OLD_TOOLTIPS
118      Gtk::Tooltips tooltips;      Gtk::Tooltips tooltips;
119    #endif
120    
121      Gtk::Table* table[7];      Gtk::Table* table[7];
122    
123      Gtk::Label* lSample;      Gtk::Label* lSample;
124    
125        VelocityCurve velocity_curve;
126        VelocityCurve release_curve;
127        VelocityCurve cutoff_curve;
128        CrossfadeCurve crossfade_curve;
129    
130      NumEntryPermille eEG1PreAttack;      NumEntryPermille eEG1PreAttack;
131      NumEntryTemp<double> eEG1Attack;      NumEntryTemp<double> eEG1Attack;
132      NumEntryTemp<double> eEG1Decay1;      NumEntryTemp<double> eEG1Decay1;
# Line 139  protected: Line 206  protected:
206      BoolEntry eMSDecode;      BoolEntry eMSDecode;
207      NumEntryTemp<uint16_t> eSampleStartOffset;      NumEntryTemp<uint16_t> eSampleStartOffset;
208      NoteEntry eUnityNote;      NoteEntry eUnityNote;
209        ReadOnlyLabelWidget eSampleGroup;
210        ReadOnlyLabelWidget eSampleFormatInfo;
211        ReadOnlyLabelWidget eSampleID;
212        ReadOnlyLabelWidget eChecksum;
213      NumEntryTemp<int16_t> eFineTune;      NumEntryTemp<int16_t> eFineTune;
214      NumEntryGain eGain;      NumEntryGain eGain;
215      BoolEntryPlus6 eGainPlus6;      BoolEntryPlus6 eGainPlus6;
# Line 151  protected: Line 222  protected:
222      Gtk::Label* lEG2;      Gtk::Label* lEG2;
223      Gtk::Label* lLFO2;      Gtk::Label* lLFO2;
224    
225        Gtk::Button buttonSelectSample;
226    
227      int rowno;      int rowno;
228      int pageno;      int pageno;
229      int firstRowInBlock;      int firstRowInBlock;
# Line 161  protected: Line 234  protected:
234      void addProp(LabelWidget& labelwidget);      void addProp(LabelWidget& labelwidget);
235      void addString(const char* labelText, Gtk::Label*& label,      void addString(const char* labelText, Gtk::Label*& label,
236                     Gtk::Entry*& widget);                     Gtk::Entry*& widget);
237        void addString(const char* labelText, Gtk::Label*& label,
238                       Gtk::Entry*& widget, Gtk::Button*& button);
239      Gtk::Label* addHeader(const char* text);      Gtk::Label* addHeader(const char* text);
240        void addRightHandSide(Gtk::Widget& widget);
241      void nextPage();      void nextPage();
242    
243      void VCFEnabled_toggled();      void VCFEnabled_toggled();
# Line 183  protected: Line 259  protected:
259      void loop_start_changed();      void loop_start_changed();
260      void loop_length_changed();      void loop_length_changed();
261      void loop_infinite_toggled();      void loop_infinite_toggled();
262        void nullOutSampleReference();
263    
264      int update_model;      int update_model;
265    
# Line 218  protected: Line 295  protected:
295                            sigc::mem_fun(widget, &C::get_value)));                            sigc::mem_fun(widget, &C::get_value)));
296      }      }
297    
298      // loop through all dimregions being edited ant set a value in      // loop through all dimregions being edited and set a value in
299      // each of them      // each of them
300      template<typename T>      template<typename T>
301      void set_many(T value,      void set_many(T value,
302                    sigc::slot<void, DimRegionEdit*, gig::DimensionRegion*, T> setter) {                    sigc::slot<void, DimRegionEdit*, gig::DimensionRegion*, T> setter) {
303          if (update_model == 0) {          if (update_model == 0) {
304              for (std::set<gig::DimensionRegion*>::iterator i = dimregs.begin() ;              for (std::set<gig::DimensionRegion*>::iterator i = dimregs.begin() ;
305                   i != dimregs.end() ; i++)                   i != dimregs.end() ; ++i)
306              {              {
307                  dimreg_changed_signal(*i);                  DimRegionChangeGuard(this, *i);
308                  setter(this, *i, value);                  setter(this, *i, value);
309              }              }
310          }          }
# Line 255  protected: Line 332  protected:
332      void set_LoopLength(gig::DimensionRegion* d, uint32_t value);      void set_LoopLength(gig::DimensionRegion* d, uint32_t value);
333      void set_LoopInfinite(gig::DimensionRegion* d, bool value);      void set_LoopInfinite(gig::DimensionRegion* d, bool value);
334      void set_LoopPlayCount(gig::DimensionRegion* d, uint32_t value);      void set_LoopPlayCount(gig::DimensionRegion* d, uint32_t value);
335    
336        void onButtonSelectSamplePressed();
337  };  };
338    
339  #endif  #endif

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

  ViewVC Help
Powered by ViewVC