X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fpanner_interface.cc;h=e0dfb359196974ad784642ffd3cd15b53985387e;hb=69194df4d9a2f985423eca7d44c3d3292cc8baad;hp=95e1e4e7ffcec653312779424447971f6149e963;hpb=6e79521e8b7709458b8ee093e2d0dc6440ffea2c;p=ardour.git diff --git a/gtk2_ardour/panner_interface.cc b/gtk2_ardour/panner_interface.cc index 95e1e4e7ff..e0dfb35919 100644 --- a/gtk2_ardour/panner_interface.cc +++ b/gtk2_ardour/panner_interface.cc @@ -19,64 +19,39 @@ #include #include "gtkmm2ext/keyboard.h" +#include "gtkmm2ext/persistent_tooltip.h" + +#include "pbd/controllable.h" + #include "panner_interface.h" -#include "global_signals.h" +#include "panner_editor.h" -#include "i18n.h" +#include "pbd/i18n.h" +using namespace std; using namespace Gtk; using namespace ARDOUR; using namespace Gtkmm2ext; PannerInterface::PannerInterface (boost::shared_ptr p) : _panner (p) - , _drag_data_window (0) - , _drag_data_label (0) + , _tooltip (this) + , _send_mode (false) + , _editor (0) { - set_flags (Gtk::CAN_FOCUS); + set_flags (Gtk::CAN_FOCUS); - add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK| - Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK| - Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK| - Gdk::SCROLL_MASK| - Gdk::POINTER_MOTION_MASK); + add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK| + Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK| + Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK| + Gdk::SCROLL_MASK| + Gdk::POINTER_MOTION_MASK); } PannerInterface::~PannerInterface () { - delete _drag_data_window; -} - -void -PannerInterface::show_drag_data_window () -{ - if (!_drag_data_window) { - _drag_data_window = new Window (WINDOW_POPUP); - _drag_data_window->set_name (X_("ContrastingPopup")); - _drag_data_window->set_position (WIN_POS_MOUSE); - _drag_data_window->set_decorated (false); - - _drag_data_label = manage (new Label); - _drag_data_label->set_use_markup (true); - - _drag_data_window->set_border_width (6); - _drag_data_window->add (*_drag_data_label); - _drag_data_label->show (); - - Window* toplevel = dynamic_cast (get_toplevel()); - if (toplevel) { - _drag_data_window->set_transient_for (*toplevel); - } - } - - if (!_drag_data_window->is_visible ()) { - /* move the window a little away from the mouse */ - int rx, ry; - get_window()->get_origin (rx, ry); - _drag_data_window->move (rx, ry + get_height()); - _drag_data_window->present (); - } + delete _editor; } bool @@ -84,6 +59,10 @@ PannerInterface::on_enter_notify_event (GdkEventCrossing *) { grab_focus (); Keyboard::magic_widget_grab_focus (); + + if (!proxy_controllable ().expired ()) { + PBD::Controllable::GUIFocusChanged (proxy_controllable ()); + } return false; } @@ -91,6 +70,9 @@ bool PannerInterface::on_leave_notify_event (GdkEventCrossing *) { Keyboard::magic_widget_drop_focus (); + if (!proxy_controllable ().expired ()) { + PBD::Controllable::GUIFocusChanged (boost::weak_ptr ()); + } return false; } @@ -103,7 +85,69 @@ PannerInterface::on_key_release_event (GdkEventKey*) void PannerInterface::value_change () { - set_drag_data (); + set_tooltip (); queue_draw (); } +bool +PannerInterface::on_button_press_event (GdkEventButton* ev) +{ + if (Gtkmm2ext::Keyboard::is_edit_event (ev)) { + edit (); + return true; + } + + return false; +} + +bool +PannerInterface::on_button_release_event (GdkEventButton* ev) +{ + if (Gtkmm2ext::Keyboard::is_edit_event (ev)) { + /* We edited on the press, so claim the release */ + return true; + } + + return false; +} + +void +PannerInterface::edit () +{ + delete _editor; + _editor = editor (); + _editor->show (); +} + +void +PannerInterface::set_send_drawing_mode(bool onoff) { + if (_send_mode != onoff) { + _send_mode = onoff; + queue_draw (); + } +} + +PannerPersistentTooltip::PannerPersistentTooltip (Gtk::Widget* w) + : PersistentTooltip (w, true) + , _dragging (false) +{ + +} + +void +PannerPersistentTooltip::target_start_drag () +{ + _dragging = true; +} + +void +PannerPersistentTooltip::target_stop_drag () +{ + _dragging = false; +} + +bool +PannerPersistentTooltip::dragging () const +{ + return _dragging; +}