diff --git a/gtk2_ardour/waves_dropdown.cc b/gtk2_ardour/waves_dropdown.cc new file mode 100644 index 0000000000..751986eb81 --- /dev/null +++ b/gtk2_ardour/waves_dropdown.cc @@ -0,0 +1,67 @@ +/* + Copyright (C) 2014 Waves Audio Ltd. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "waves_dropdown.h" + +WavesDropdown::WavesDropdown () +{ + signal_button_press_event().connect (sigc::mem_fun(*this, &WavesDropdown::on_mouse_pressed)); +} + +WavesDropdown::~WavesDropdown () +{ +} + +bool +WavesDropdown::on_mouse_pressed (GdkEventButton*) +{ + _menu.popup (sigc::mem_fun(this, &WavesDropdown::_on_popup_menu_position), 1, gtk_get_current_event_time()); + return true; +} + +void +WavesDropdown::AddMenuElem (const std::string& item, void* cookie) +{ + Gtk::Menu_Helpers::MenuList& items = _menu.items (); + + items.push_back (Gtk::Menu_Helpers::MenuElem (item, sigc::bind (sigc::mem_fun(*this, &WavesDropdown::_on_menu_item), cookie))); +} + +void +WavesDropdown::_on_menu_item (void* cookie) +{ + signal_menu_item_clicked (this, cookie); +} + +void +WavesDropdown::_on_popup_menu_position (int& x, int& y, bool& push_in) +{ + Gtk::Container *toplevel = get_toplevel (); + if (toplevel) { + translate_coordinates (*toplevel, 0, 0, x, y); + Gtk::Allocation a = get_allocation (); + x += a.get_x (); + y += a.get_y (); + int xo; + int yo; + get_window ()->get_origin (xo, yo); + x += xo; + y += yo; + } +} diff --git a/gtk2_ardour/waves_dropdown.h b/gtk2_ardour/waves_dropdown.h new file mode 100644 index 0000000000..e9abd982bc --- /dev/null +++ b/gtk2_ardour/waves_dropdown.h @@ -0,0 +1,44 @@ +/* + Copyright (C) 2014 Waves Audio Ltd. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef __gtk2_ardour_waves_dropdown_h__ +#define __gtk2_ardour_waves_dropdown_h__ + +#include "waves_icon_button.h" + +class WavesDropdown : public WavesIconButton +{ + public: + + WavesDropdown (); + virtual ~WavesDropdown (); + Gtk::Menu& get_menu () { return _menu; } + + bool on_mouse_pressed (GdkEventButton*); + + void AddMenuElem (const std::string& item, void* coockie); + + sigc::signal2 signal_menu_item_clicked; + + private: + Gtk::Menu _menu; + void _on_menu_item (void* cookie); + void _on_popup_menu_position (int& x, int& y, bool& push_in); +}; + +#endif /* __gtk2_ardour_waves_dropdown_h__ */