add plural forms for pt to gtk2_ardour/po/pt.po
[ardour.git] / gtk2_ardour / rhythm_ferret.h
1 /*
2     Copyright (C) 2012 Paul Davis
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 #ifndef __gtk2_ardour_rhythm_ferret_h__
21 #define __gtk2_ardour_rhythm_ferret_h__
22
23 #include <gtkmm/box.h>
24 #include <gtkmm/scale.h>
25 #include <gtkmm/spinbutton.h>
26 #include <gtkmm/radiobutton.h>
27 #include <gtkmm/radiobuttongroup.h>
28 #include <gtkmm/frame.h>
29 #include <gtkmm/image.h>
30 #include <gtkmm/comboboxtext.h>
31 #include <gtkmm/button.h>
32
33 #include "ardour_dialog.h"
34 #include "region_selection.h"
35
36 namespace ARDOUR {
37         class Readable;
38 }
39
40 class Editor;
41 class RegionView;
42
43 class RhythmFerret : public ArdourDialog {
44   public:
45         /* order of these enums must match the _analyse_mode_strings
46            in rhythm_ferret.cc
47         */
48         enum AnalysisMode {
49                 PercussionOnset,
50                 NoteOnset
51         };
52
53         enum Action {
54                 SplitRegion,
55                 SnapRegionsToGrid,
56                 ConformRegion
57         };
58
59         RhythmFerret (Editor&);
60
61         void set_session (ARDOUR::Session*);
62
63   protected:
64         void on_hide ();
65
66   private:
67         Editor& editor;
68
69         Gtk::ComboBoxText operation_selector;
70
71         Gtk::ComboBoxText analysis_mode_selector;
72
73         /* transient detection widgets */
74
75         Gtk::Adjustment detection_threshold_adjustment;
76         Gtk::HScale detection_threshold_scale;
77         Gtk::Adjustment sensitivity_adjustment;
78         Gtk::HScale sensitivity_scale;
79         Gtk::Button analyze_button;
80
81         /* onset detection widgets */
82
83         Gtk::ComboBoxText onset_detection_function_selector;
84         Gtk::Adjustment peak_picker_threshold_adjustment;
85         Gtk::HScale peak_picker_threshold_scale;
86         Gtk::Adjustment silence_threshold_adjustment;
87         Gtk::HScale silence_threshold_scale;
88 #ifdef HAVE_AUBIO4
89         Gtk::Adjustment minioi_adjustment;
90         Gtk::HScale minioi_scale;
91 #endif
92
93         /* generic stuff */
94
95         Gtk::Adjustment trigger_gap_adjustment;
96         Gtk::SpinButton trigger_gap_spinner;
97
98         Gtk::Button action_button;
99
100         std::vector<std::string> analysis_mode_strings;
101         std::vector<std::string> onset_function_strings;
102         std::vector<std::string> operation_strings;
103
104         ARDOUR::AnalysisFeatureList current_results;
105
106         void clear_transients ();
107         /** Regions that we have added transient marks to */
108         RegionSelection regions_with_transients;
109
110         AnalysisMode get_analysis_mode () const;
111         Action get_action() const;
112         void analysis_mode_changed ();
113         int get_note_onset_function ();
114
115         void run_analysis ();
116         int run_percussion_onset_analysis (boost::shared_ptr<ARDOUR::Readable> region, ARDOUR::frameoffset_t offset, ARDOUR::AnalysisFeatureList& results);
117         int run_note_onset_analysis (boost::shared_ptr<ARDOUR::Readable> region, ARDOUR::frameoffset_t offset, ARDOUR::AnalysisFeatureList& results);
118
119         void do_action ();
120         void do_split_action ();
121         void do_region_split (RegionView* rv, const ARDOUR::AnalysisFeatureList&);
122 };
123
124 #endif /* __gtk2_ardour_rhythm_ferret_h__ */