22 #include <boost/algorithm/string.hpp>
24 #include <glibmm/regex.h>
29 #include "midi++/midnam_patch.h"
31 #include "canvas/debug.h"
46 ArdourCanvas::Container* parent,
56 , _popup_initialized(false)
58 _flag =
new ArdourCanvas::Flag (
62 ARDOUR_UI::config()->color_mod (
"midi patch change fill",
"midi patch change fill"),
63 ArdourCanvas::Duple (x, y),
66 CANVAS_DEBUG_NAME (_flag, text);
70 _flag->set_text(text);
85 if (!channel_name_set) {
89 const ChannelNameSet::PatchBanks& patch_banks = channel_name_set->patch_banks();
91 if (patch_banks.size() > 1) {
94 Gtk::Menu::MenuList& patch_bank_menus =
_popup.items();
96 for (ChannelNameSet::PatchBanks::const_iterator bank = patch_banks.begin();
97 bank != patch_banks.end();
99 Glib::RefPtr<Glib::Regex> underscores = Glib::Regex::create(
"_");
100 std::string replacement(
" ");
102 Gtk::Menu& patch_bank_menu = *manage(
new Gtk::Menu());
105 Gtk::Menu::MenuList& patch_menus = patch_bank_menu.items();
107 for (PatchNameList::const_iterator patch = patches.begin();
108 patch != patches.end();
110 std::string
name = underscores->replace((*patch)->name().c_str(), -1, 0, replacement);
112 patch_menus.push_back(
113 Gtk::Menu_Helpers::MenuElem(
117 (*patch)->patch_primary_key())) );
121 std::string
name = underscores->replace((*bank)->name().c_str(), -1, 0, replacement);
123 patch_bank_menus.push_back(
124 Gtk::Menu_Helpers::MenuElem(
132 const PatchNameList& patches = patch_banks.front()->patch_name_list();
133 Gtk::Menu::MenuList& patch_menus =
_popup.items();
135 for (PatchNameList::const_iterator patch = patches.begin();
136 patch != patches.end();
138 std::string
name = (*patch)->name();
141 patch_menus.push_back (
142 Gtk::Menu_Helpers::MenuElem (
145 (*patch)->patch_primary_key())));
167 case GDK_BUTTON_PRESS:
180 }
else if (ev->button.button == 1) {
186 if (ev->button.button == 3) {
191 _popup.popup(ev->button.button, ev->button.time);
197 switch (ev->key.keyval) {
202 *
this, Keyboard::modifier_state_contains(ev->key.state, Keyboard::TertiaryModifier), 1);
208 *
this, Keyboard::modifier_state_contains(ev->key.state, Keyboard::TertiaryModifier), -1);
215 case GDK_KEY_RELEASE:
216 switch (ev->key.keyval) {
226 if (ev->scroll.direction == GDK_SCROLL_UP) {
228 *
this, Keyboard::modifier_state_contains(ev->scroll.state, Keyboard::TertiaryModifier), 1);
230 }
else if (ev->scroll.direction == GDK_SCROLL_DOWN) {
232 *
this, Keyboard::modifier_state_contains(ev->scroll.state, Keyboard::TertiaryModifier), -1);
237 case GDK_ENTER_NOTIFY:
241 case GDK_LEAVE_NOTIFY:
261 _flag->set_height (height);
void patch_left(PatchChange *)
void delete_patch_change(PatchChange *)
TimeAxisView & get_time_axis_view() const
PublicEditor & editor() const
boost::shared_ptr< MIDI::Name::ChannelNameSet > get_patches(uint8_t channel)
ARDOUR::InstrumentInfo & _info
LIBPBD_API int replace_all(std::string &str, const std::string &target, const std::string &replacement)
void on_patch_menu_selected(const MIDI::Name::PatchPrimaryKey &key)
ArdourCanvas::Flag * _flag
void change_patch_change(PatchChange &old_patch, const MIDI::Name::PatchPrimaryKey &new_patch)
void move(ArdourCanvas::Duple)
LIBGTKMM2EXT_API uint64_t Keyboard
Editing::MouseMode current_mouse_mode() const
bool internal_editing() const
void set(Drag *, GdkEvent *, Gdk::Cursor *c=MouseCursors::invalid_cursor())
ARDOUR::MidiModel::PatchChangePtr patch() const
void step_patch(PatchChange &patch, bool bank, int delta)
PatchChange(MidiRegionView ®ion, ArdourCanvas::Container *parent, const std::string &text, double height, double x, double y, ARDOUR::InstrumentInfo &info, ARDOUR::MidiModel::PatchChangePtr patch)
void set_height(ArdourCanvas::Distance)
void patch_entered(PatchChange *)
LIBPBD_API Transmitter info
DragManager * drags() const
static bool is_delete_event(GdkEventButton *)
static bool is_edit_event(GdkEventButton *)
std::list< boost::shared_ptr< Patch > > PatchNameList
static UIConfiguration * config()
ARDOUR::MidiModel::PatchChangePtr _patch
void initialize_popup_menus()
void edit_patch_change(PatchChange *)
bool event_handler(GdkEvent *)
LIBARDOUR_API PBD::PropertyDescriptor< bool > color