1 /* 2 * Copyright (C) 2017 Hermann Meyer, Andreas Degert 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 */ 18 19 #pragma once 20 21 #ifndef SRC_HEADERS_GX_SEQUENCER_SETTINGS_H_ 22 #define SRC_HEADERS_GX_SEQUENCER_SETTINGS_H_ 23 24 25 #include <string> 26 27 namespace gx_seq { 28 29 class Drums { 30 public: 31 gx_engine::SeqParameter *p; 32 Gtk::Box* box; Drums(gx_engine::SeqParameter * pa)33 Drums(gx_engine::SeqParameter *pa) 34 : p(pa) {} ~Drums()35 ~Drums() {} 36 }; 37 38 class UPresetListStore: public Gtk::ListStore { 39 public: 40 class UPresetListColumns : public Gtk::TreeModel::ColumnRecord { 41 public: 42 Gtk::TreeModelColumn<Glib::ustring> name; UPresetListColumns()43 UPresetListColumns() { add(name); } 44 } col; 45 private: UPresetListStore()46 UPresetListStore(): Gtk::ListStore(), col() { 47 set_column_types(col); 48 } 49 public: create()50 static Glib::RefPtr<UPresetListStore> create() { 51 return Glib::RefPtr<UPresetListStore>(new UPresetListStore); 52 } 53 }; 54 55 /**************************************************************** 56 ** PluginPresetConnectWindow 57 */ 58 59 class PluginPresetConnectWindow: public Gtk::Window { 60 private: 61 Glib::RefPtr<UPresetListStore> upresetliststore; 62 gx_engine::GxMachineBase& machine; 63 Gtk::TreeView *treeview; 64 Gtk::Button *connectbutton; 65 void on_connect(); 66 void on_selection_changed(); 67 virtual bool on_key_press_event(GdkEventKey *event); 68 static PluginPresetConnectWindow* create_from_builder( 69 BaseObjectType* cobject, Glib::RefPtr<gx_gui::GxBuilder> bld, 70 gx_engine::GxMachineBase& machine); 71 PluginPresetConnectWindow(BaseObjectType* cobject, 72 Glib::RefPtr<gx_gui::GxBuilder> bld, gx_engine::GxMachineBase& machine); 73 public: 74 ~PluginPresetConnectWindow(); 75 static PluginPresetConnectWindow *create(gx_engine::GxMachineBase& machine); 76 void run(); 77 }; 78 79 /**************************************************************** 80 ** Sequencer Parameter Window 81 */ 82 83 class SEQWindow: public sigc::trackable { 84 private: 85 gx_engine::GxMachineBase& machine; 86 Glib::RefPtr<gx_gui::GxBuilder> builder; 87 std::vector<Drums> drums; 88 Drums tom; 89 Drums tom1; 90 Drums tom2; 91 Drums kick; 92 Drums snare; 93 Drums hat; 94 bool is_active; 95 96 // widget pointers 97 Gtk::Window* gtk_window; 98 Gtk::Viewport *vp; 99 Gtk::Label *preset_label; 100 Gtk::Box *preset_button; 101 Gxw::Switch *add_button; 102 Gxw::Regler *seq_pos; 103 Gxw::Regler *seq_count; 104 Gxw::Regler *seq_tact; 105 Gxw::Switch *next_preset; 106 Gxw::Switch *previus_preset; 107 Gxw::Switch *set_step; 108 Gxw::Switch *set_fstep; 109 Gxw::Switch *set_sync; 110 Gxw::Switch *reset_step; 111 Gtk::Label *step_label; 112 Gxw::ValueDisplay *step_value; 113 114 // signal functions 115 void on_window_hide(); 116 void on_preset_popup_clicked(); 117 void on_selection_done(Gtk::Menu *presetMenu); 118 bool get_sequencer_pos(Gxw::Regler * regler, const std::string id); 119 bool on_key_press_event(GdkEventKey *event); 120 void check_preset_label(); 121 void seq_changed(const gx_engine::GxSeqSettings* seqc, Gtk::Box *box); 122 void make_state(gx_engine::GxSeqSettings& seqc, std::vector<int> seq); 123 void on_seq_button_clicked(Gtk::Box *box, gx_engine::SeqParameter *p); 124 void on_seq_button_clicked_set(Gtk::Box *box, gx_engine::SeqParameter *p); 125 void on_sec_length_changed(bool update); 126 void on_sec_tact_changed(); 127 void append_seq_block(Gtk::Box * box, gx_engine::SeqParameter *p, int r, int r_save); 128 void remove_seq_block(Gtk::Box * box, int r); 129 void reset_control(Glib::ustring id, float value); 130 int append_sequence(const gx_engine::GxSeqSettings* seqc, gx_engine::SeqParameter *p, std::vector<int> *sequence); 131 void make_preset_button(Gtk::Box *box); 132 void scroll_playhead(float value); 133 void append_plugin_preset(Glib::ustring name); 134 void append_plugin_preset_set(Glib::ustring name); 135 void on_preset_add_clicked(); 136 void on_next_preset(); 137 void on_next_preset_set(); 138 void on_previus_preset(); 139 void on_previus_preset_set(); 140 void connect_midi(); 141 void on_set_step(); 142 void on_set_fstep(); 143 void on_sync_stepper(); 144 void on_reset_stepper(); 145 void init_connect(); 146 void init_sequences(gx_engine::SeqParameter *p, Gtk::Box* _box); 147 SEQWindow(const Glib::RefPtr<gx_gui::GxBuilder>& builder, gx_engine::SeqParameter *tomp_, 148 gx_engine::SeqParameter *tomp1_, gx_engine::SeqParameter *tomp2_, 149 gx_engine::SeqParameter *kickp_, gx_engine::SeqParameter *snarep_, 150 gx_engine::SeqParameter *hatp_, gx_engine::GxMachineBase& machine_); 151 152 public: 153 void reload_and_show(); 154 static SEQWindow *create(const std::string& unit_id, gx_engine::GxMachineBase& machine); 155 ~SEQWindow(); 156 }; 157 158 } /* end of gx_seq namespace*/ 159 #endif // SRC_HEADERS_GX_SEQUENCER_SETTINGS_H_ 160