X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fspeaker_dialog.h;h=95217003802168da9626e5326f64872fd2787378;hb=a2c0b10d8a6cf4ab5a0fdcdfe157c35c0ed9a709;hp=0ce99ac8d7f320b55bb51005bcdaed9ce56f18f9;hpb=da144ab5edb5bb629a8300c2cbf93c7f87947a83;p=ardour.git diff --git a/gtk2_ardour/speaker_dialog.h b/gtk2_ardour/speaker_dialog.h index 0ce99ac8d7..9521700380 100644 --- a/gtk2_ardour/speaker_dialog.h +++ b/gtk2_ardour/speaker_dialog.h @@ -28,44 +28,58 @@ #include "ardour/speakers.h" -#include "ardour_dialog.h" +#include "ardour_window.h" -class SpeakerDialog : public ArdourDialog +class SpeakerDialog : public ArdourWindow { - public: - SpeakerDialog (); - - ARDOUR::Speakers get_speakers() const; - void set_speakers (boost::shared_ptr); +public: + SpeakerDialog (); - private: - ARDOUR::Speakers speakers; - Gtk::HBox hbox; - Gtk::VBox side_vbox; - Gtk::AspectFrame aspect_frame; - Gtk::DrawingArea darea; - Gtk::Adjustment azimuth_adjustment; - Gtk::SpinButton azimuth_spinner; - Gtk::Button add_speaker_button; - Gtk::Button use_system_button; - int32_t selected_speaker; - int width; - int height; - int drag_x; - int drag_y; - int drag_index; + boost::shared_ptr get_speakers() const; + void set_speakers (boost::shared_ptr); - bool darea_expose_event (GdkEventExpose*); - void darea_size_allocate (Gtk::Allocation& alloc); - bool darea_motion_notify_event (GdkEventMotion *ev); - bool handle_motion (gint evx, gint evy, GdkModifierType state); - bool darea_button_press_event (GdkEventButton *ev); - bool darea_button_release_event (GdkEventButton *ev); +private: + boost::weak_ptr _speakers; + Gtk::HBox hbox; + Gtk::VBox side_vbox; + Gtk::AspectFrame aspect_frame; + Gtk::DrawingArea darea; + Gtk::Adjustment azimuth_adjustment; + Gtk::SpinButton azimuth_spinner; + Gtk::Button add_speaker_button; + Gtk::Button remove_speaker_button; + int width; ///< width of the circle + int height; ///< height of the circle + int x_origin; ///< x origin of our stuff within the drawing area + int y_origin; ///< y origin of our stuff within the drawing area + /** distance from the centre of the object being dragged to the mouse pointer + * when the drag was started (ie start_pointer - object_position). + */ + double drag_offset_x; + double drag_offset_y; + int drag_index; + int selected_index; ///< index of any selected speaker, or -1 + PBD::ScopedConnection selected_speaker_connection; + bool ignore_speaker_position_change; + bool ignore_azimuth_change; - void clamp_to_circle (double& x, double& y); - void gtk_to_cart (PBD::CartesianVector& c) const; - void cart_to_gtk (PBD::CartesianVector& c) const; - int find_closest_object (gdouble x, gdouble y); + bool darea_expose_event (GdkEventExpose*); + void darea_size_allocate (Gtk::Allocation& alloc); + bool darea_motion_notify_event (GdkEventMotion *ev); + bool handle_motion (gint evx, gint evy, GdkModifierType state); + bool darea_button_press_event (GdkEventButton *ev); + bool darea_button_release_event (GdkEventButton *ev); + + void clamp_to_circle (double& x, double& y); + void gtk_to_cart (PBD::CartesianVector& c) const; + void cart_to_gtk (PBD::CartesianVector& c) const; + int find_closest_object (gdouble x, gdouble y); + + void add_speaker (); + void remove_speaker (); + void azimuth_changed (); + void set_selected (int); + void speaker_position_changed (); }; #endif /* __ardour_gtk_speaker_dialog_h__ */